@dinachi/cli 0.5.1 → 0.6.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 (53) hide show
  1. package/dist/index.js +315 -0
  2. package/package.json +12 -5
  3. package/templates/accordion/accordion.tsx +8 -3
  4. package/templates/alert-dialog/alert-dialog.tsx +24 -25
  5. package/templates/alert-dialog/index.ts +1 -1
  6. package/templates/autocomplete/autocomplete.tsx +0 -1
  7. package/templates/avatar/avatar.tsx +1 -3
  8. package/templates/badge/badge.tsx +167 -0
  9. package/templates/badge/index.ts +2 -0
  10. package/templates/button/button.tsx +6 -6
  11. package/templates/button/index.ts +2 -2
  12. package/templates/card/card.tsx +78 -0
  13. package/templates/card/index.ts +1 -0
  14. package/templates/checkbox/checkbox.tsx +2 -3
  15. package/templates/checkbox-group/checkbox-group.tsx +1 -3
  16. package/templates/collapsible/collapsible.tsx +1 -2
  17. package/templates/combobox/combobox.tsx +0 -1
  18. package/templates/context-menu/context-menu.tsx +0 -1
  19. package/templates/dialog/dialog.tsx +1 -1
  20. package/templates/drawer/drawer.tsx +0 -1
  21. package/templates/field/field.tsx +69 -85
  22. package/templates/fieldset/fieldset.tsx +0 -1
  23. package/templates/form/form.tsx +36 -28
  24. package/templates/input/index.ts +1 -2
  25. package/templates/input/input.tsx +0 -1
  26. package/templates/menu/menu.tsx +0 -1
  27. package/templates/menubar/menubar.tsx +21 -22
  28. package/templates/meter/meter.tsx +0 -1
  29. package/templates/navigation-menu/index.ts +1 -13
  30. package/templates/navigation-menu/navigation-menu.tsx +1 -3
  31. package/templates/number-field/number-field.tsx +0 -1
  32. package/templates/popover/popover.tsx +0 -1
  33. package/templates/preview-card/preview-card.tsx +0 -1
  34. package/templates/progress/progress.tsx +0 -1
  35. package/templates/radio/radio.tsx +0 -1
  36. package/templates/scroll-area/scroll-area.tsx +0 -1
  37. package/templates/select/select.tsx +1 -4
  38. package/templates/separator/separator.tsx +0 -1
  39. package/templates/slider/index.ts +10 -0
  40. package/templates/slider/slider.tsx +1 -3
  41. package/templates/switch/switch.tsx +0 -1
  42. package/templates/tabs/index.ts +8 -0
  43. package/templates/tabs/tabs.tsx +8 -3
  44. package/templates/textarea/index.ts +2 -0
  45. package/templates/textarea/textarea.tsx +23 -0
  46. package/templates/toast/toast.tsx +3 -2
  47. package/templates/toggle/toggle.tsx +0 -1
  48. package/templates/toggle-group/toggle-group.tsx +0 -1
  49. package/templates/toolbar/toolbar.tsx +0 -1
  50. package/templates/tooltip/tooltip.tsx +0 -1
  51. package/templates/tsconfig.json +20 -0
  52. package/templates/utils/utils.ts +0 -1
  53. package/templates/utils/variants.ts +0 -1
package/dist/index.js CHANGED
@@ -102,6 +102,13 @@ function getComponentRegistry() {
102
102
  dependencies: ["@base-ui/react", "class-variance-authority"],
103
103
  utilityDependencies: ["cn"]
104
104
  },
105
+ badge: {
106
+ name: "badge",
107
+ description: "A small status indicator for highlighting information.",
108
+ files: [{ name: "badge.tsx" }, { name: "index.ts" }],
109
+ dependencies: ["@base-ui/react", "class-variance-authority"],
110
+ utilityDependencies: ["cn"]
111
+ },
105
112
  button: {
106
113
  name: "button",
107
114
  description: "A customizable button component with multiple variants.",
@@ -109,6 +116,13 @@ function getComponentRegistry() {
109
116
  dependencies: ["@base-ui/react", "class-variance-authority"],
110
117
  utilityDependencies: ["cn", "variants"]
111
118
  },
119
+ card: {
120
+ name: "card",
121
+ description: "A container for grouping related content with header, body, and footer sections.",
122
+ files: [{ name: "card.tsx" }, { name: "index.ts" }],
123
+ dependencies: [],
124
+ utilityDependencies: ["cn"]
125
+ },
112
126
  checkbox: {
113
127
  name: "checkbox",
114
128
  description: "A control that allows the user to select one or more options from a set.",
@@ -292,6 +306,13 @@ function getComponentRegistry() {
292
306
  dependencies: ["@base-ui/react"],
293
307
  utilityDependencies: ["cn"]
294
308
  },
309
+ textarea: {
310
+ name: "textarea",
311
+ description: "A multi-line text input for longer form content.",
312
+ files: [{ name: "textarea.tsx" }, { name: "index.ts" }],
313
+ dependencies: [],
314
+ utilityDependencies: ["cn"]
315
+ },
295
316
  toast: {
296
317
  name: "toast",
297
318
  description: "Generates toast notifications with support for different types, promises, actions, and global management.",
@@ -946,6 +967,275 @@ export function cn(...inputs: ClassValue[]) {
946
967
  }
947
968
  `;
948
969
  }
970
+ function detectTailwindMajorVersion(projectRoot) {
971
+ const packageJsonPath = path4.join(projectRoot, "package.json");
972
+ if (!fs4.existsSync(packageJsonPath)) return 4;
973
+ try {
974
+ const raw = fs4.readFileSync(packageJsonPath, "utf-8");
975
+ const packageJson = JSON.parse(raw);
976
+ const deps = { ...packageJson.dependencies ?? {}, ...packageJson.devDependencies ?? {} };
977
+ const twVersion = deps.tailwindcss;
978
+ if (!twVersion) return 4;
979
+ const match = twVersion.match(/(\d+)/);
980
+ return match ? parseInt(match[1], 10) : 4;
981
+ } catch {
982
+ return 4;
983
+ }
984
+ }
985
+ function getThemeCSS(tailwindMajor, mode) {
986
+ const lightVars = `:root {
987
+ --background: oklch(0.986 0.0034 145.5499);
988
+ --foreground: oklch(0.1459 0.0497 142.4953);
989
+ --card: oklch(0.9781 0.0017 145.5621);
990
+ --card-foreground: oklch(0.1459 0.0497 142.4953);
991
+ --popover: oklch(1 0 0);
992
+ --popover-foreground: oklch(0.1324 0.0033 145.3864);
993
+ --primary: oklch(0.1324 0.0033 145.3864);
994
+ --primary-foreground: oklch(0.9729 0.0101 145.4971);
995
+ --secondary: oklch(0.9248 0.0051 145.5339);
996
+ --secondary-foreground: oklch(0.1324 0.0033 145.3864);
997
+ --muted: oklch(0.9631 0.0017 145.5619);
998
+ --muted-foreground: oklch(0.1849 0.0629 142.4953);
999
+ --accent: oklch(0.9248 0.0051 145.5339);
1000
+ --accent-foreground: oklch(0.1459 0.0497 142.4953);
1001
+ --destructive: oklch(0.5248 0.1368 20.8317);
1002
+ --destructive-foreground: oklch(1 0 0);
1003
+ --border: oklch(0.9239 0.0017 145.5613);
1004
+ --input: oklch(0.8481 0.0105 145.4823);
1005
+ --ring: oklch(0.1459 0.0497 142.4953);
1006
+ --radius: 0.625rem;
1007
+ }`;
1008
+ const darkVars = `.dark {
1009
+ --background: oklch(0.1149 0 0);
1010
+ --foreground: oklch(0.7999 0.0218 134.1191);
1011
+ --card: oklch(0.133 0.0021 196.9098);
1012
+ --card-foreground: oklch(0.7996 0.023 132.5769);
1013
+ --popover: oklch(0.1663 0.0138 135.2766);
1014
+ --popover-foreground: oklch(0.9742 0.0101 131.3574);
1015
+ --primary: oklch(0.9729 0.0101 145.4971);
1016
+ --primary-foreground: oklch(0.1324 0.0033 145.3864);
1017
+ --secondary: oklch(0.1844 0.0062 122.0354);
1018
+ --secondary-foreground: oklch(0.8009 0.0399 133.2927);
1019
+ --muted: oklch(0.1579 0.0017 196.9874);
1020
+ --muted-foreground: oklch(0.7897 0.0171 133.8518);
1021
+ --accent: oklch(0.1391 0.0113 136.9894);
1022
+ --accent-foreground: oklch(0.9742 0.0101 131.3574);
1023
+ --destructive: oklch(0.2258 0.0524 12.6119);
1024
+ --destructive-foreground: oklch(1 0 0);
1025
+ --border: oklch(0.1811 0.0128 129.2819);
1026
+ --input: oklch(0.2213 0.0193 135.2915);
1027
+ --ring: oklch(0.9248 0.0051 145.5339);
1028
+ }`;
1029
+ const parts = [];
1030
+ if (tailwindMajor >= 4) {
1031
+ if (mode === "full") {
1032
+ parts.push('@import "tailwindcss";');
1033
+ }
1034
+ parts.push(lightVars, darkVars);
1035
+ parts.push(`@theme inline {
1036
+ --color-background: var(--background);
1037
+ --color-foreground: var(--foreground);
1038
+ --color-card: var(--card);
1039
+ --color-card-foreground: var(--card-foreground);
1040
+ --color-popover: var(--popover);
1041
+ --color-popover-foreground: var(--popover-foreground);
1042
+ --color-primary: var(--primary);
1043
+ --color-primary-foreground: var(--primary-foreground);
1044
+ --color-secondary: var(--secondary);
1045
+ --color-secondary-foreground: var(--secondary-foreground);
1046
+ --color-muted: var(--muted);
1047
+ --color-muted-foreground: var(--muted-foreground);
1048
+ --color-accent: var(--accent);
1049
+ --color-accent-foreground: var(--accent-foreground);
1050
+ --color-destructive: var(--destructive);
1051
+ --color-destructive-foreground: var(--destructive-foreground);
1052
+ --color-border: var(--border);
1053
+ --color-input: var(--input);
1054
+ --color-ring: var(--ring);
1055
+ --radius-sm: calc(var(--radius) - 4px);
1056
+ --radius-md: calc(var(--radius) - 2px);
1057
+ --radius-lg: var(--radius);
1058
+ --radius-xl: calc(var(--radius) + 4px);
1059
+ }`);
1060
+ parts.push(`@layer base {
1061
+ * {
1062
+ @apply border-border outline-ring/50;
1063
+ }
1064
+ body {
1065
+ @apply bg-background text-foreground;
1066
+ }
1067
+ }`);
1068
+ } else {
1069
+ if (mode === "full") {
1070
+ parts.push("@tailwind base;\n@tailwind components;\n@tailwind utilities;");
1071
+ }
1072
+ parts.push(lightVars, darkVars);
1073
+ parts.push(`@layer base {
1074
+ * {
1075
+ @apply border-border;
1076
+ }
1077
+ body {
1078
+ @apply bg-background text-foreground;
1079
+ }
1080
+ }`);
1081
+ }
1082
+ return parts.join("\n\n") + "\n";
1083
+ }
1084
+ async function injectThemeCSS(cssFilePath, tailwindMajor) {
1085
+ await fs4.ensureDir(path4.dirname(cssFilePath));
1086
+ if (fs4.existsSync(cssFilePath)) {
1087
+ const existing = await fs4.readFile(cssFilePath, "utf-8");
1088
+ if (existing.includes("--primary:")) {
1089
+ return { path: cssFilePath, skipped: true };
1090
+ }
1091
+ const theme2 = getThemeCSS(tailwindMajor, "append");
1092
+ await fs4.writeFile(cssFilePath, existing.trimEnd() + "\n\n" + theme2);
1093
+ return { path: cssFilePath, updated: true };
1094
+ }
1095
+ const theme = getThemeCSS(tailwindMajor, "full");
1096
+ await fs4.writeFile(cssFilePath, theme);
1097
+ return { path: cssFilePath, created: true };
1098
+ }
1099
+ function getTW3ColorExtend() {
1100
+ return `colors: {
1101
+ border: "var(--border)",
1102
+ input: "var(--input)",
1103
+ ring: "var(--ring)",
1104
+ background: "var(--background)",
1105
+ foreground: "var(--foreground)",
1106
+ primary: {
1107
+ DEFAULT: "var(--primary)",
1108
+ foreground: "var(--primary-foreground)",
1109
+ },
1110
+ secondary: {
1111
+ DEFAULT: "var(--secondary)",
1112
+ foreground: "var(--secondary-foreground)",
1113
+ },
1114
+ destructive: {
1115
+ DEFAULT: "var(--destructive)",
1116
+ foreground: "var(--destructive-foreground)",
1117
+ },
1118
+ muted: {
1119
+ DEFAULT: "var(--muted)",
1120
+ foreground: "var(--muted-foreground)",
1121
+ },
1122
+ accent: {
1123
+ DEFAULT: "var(--accent)",
1124
+ foreground: "var(--accent-foreground)",
1125
+ },
1126
+ popover: {
1127
+ DEFAULT: "var(--popover)",
1128
+ foreground: "var(--popover-foreground)",
1129
+ },
1130
+ card: {
1131
+ DEFAULT: "var(--card)",
1132
+ foreground: "var(--card-foreground)",
1133
+ },
1134
+ },
1135
+ borderRadius: {
1136
+ lg: "var(--radius)",
1137
+ md: "calc(var(--radius) - 2px)",
1138
+ sm: "calc(var(--radius) - 4px)",
1139
+ },`;
1140
+ }
1141
+ function createTW3Config(isCjs) {
1142
+ const colorExtend = getTW3ColorExtend();
1143
+ if (isCjs) {
1144
+ return `/** @type {import('tailwindcss').Config} */
1145
+ module.exports = {
1146
+ content: [
1147
+ "./src/**/*.{js,ts,jsx,tsx}",
1148
+ "./app/**/*.{js,ts,jsx,tsx}",
1149
+ "./components/**/*.{js,ts,jsx,tsx}",
1150
+ ],
1151
+ theme: {
1152
+ extend: {
1153
+ ${colorExtend}
1154
+ },
1155
+ },
1156
+ plugins: [],
1157
+ }
1158
+ `;
1159
+ }
1160
+ return `/** @type {import('tailwindcss').Config} */
1161
+ export default {
1162
+ content: [
1163
+ "./src/**/*.{js,ts,jsx,tsx}",
1164
+ "./app/**/*.{js,ts,jsx,tsx}",
1165
+ "./components/**/*.{js,ts,jsx,tsx}",
1166
+ ],
1167
+ theme: {
1168
+ extend: {
1169
+ ${colorExtend}
1170
+ },
1171
+ },
1172
+ plugins: [],
1173
+ }
1174
+ `;
1175
+ }
1176
+ async function ensureTW3ColorConfig(projectRoot, configFileName) {
1177
+ const candidates = [
1178
+ configFileName,
1179
+ "tailwind.config.ts",
1180
+ "tailwind.config.js",
1181
+ "tailwind.config.mjs",
1182
+ "tailwind.config.cjs"
1183
+ ];
1184
+ let configPath = null;
1185
+ for (const candidate of candidates) {
1186
+ const candidatePath = path4.join(projectRoot, candidate);
1187
+ if (fs4.existsSync(candidatePath)) {
1188
+ configPath = candidatePath;
1189
+ break;
1190
+ }
1191
+ }
1192
+ if (!configPath) {
1193
+ configPath = path4.join(projectRoot, configFileName);
1194
+ const ext = path4.extname(configPath);
1195
+ const isCjs = ext === ".cjs";
1196
+ await fs4.writeFile(configPath, createTW3Config(isCjs));
1197
+ return { path: configPath, created: true };
1198
+ }
1199
+ const content = await fs4.readFile(configPath, "utf-8");
1200
+ if (content.includes('"var(--primary)"') || content.includes("'var(--primary)'")) {
1201
+ return { path: configPath, skipped: true };
1202
+ }
1203
+ const colorExtend = getTW3ColorExtend();
1204
+ const extendMatch = content.match(/extend\s*:\s*\{/);
1205
+ if (extendMatch && extendMatch.index !== void 0) {
1206
+ const insertPos = extendMatch.index + extendMatch[0].length;
1207
+ const updated = content.slice(0, insertPos) + "\n " + colorExtend + content.slice(insertPos);
1208
+ await fs4.writeFile(configPath, updated);
1209
+ return { path: configPath, updated: true };
1210
+ }
1211
+ const themeMatch = content.match(/theme\s*:\s*\{/);
1212
+ if (themeMatch && themeMatch.index !== void 0) {
1213
+ const insertPos = themeMatch.index + themeMatch[0].length;
1214
+ const extendBlock = `
1215
+ extend: {
1216
+ ${colorExtend}
1217
+ },`;
1218
+ const updated = content.slice(0, insertPos) + extendBlock + content.slice(insertPos);
1219
+ await fs4.writeFile(configPath, updated);
1220
+ return { path: configPath, updated: true };
1221
+ }
1222
+ const closingBrace = content.lastIndexOf("}");
1223
+ if (closingBrace !== -1) {
1224
+ const before = content.slice(0, closingBrace).trimEnd();
1225
+ const needsComma = !before.endsWith(",") && !before.endsWith("{");
1226
+ const themeBlock = `${needsComma ? "," : ""}
1227
+ theme: {
1228
+ extend: {
1229
+ ${colorExtend}
1230
+ },
1231
+ },
1232
+ `;
1233
+ const updated = before + themeBlock + content.slice(closingBrace);
1234
+ await fs4.writeFile(configPath, updated);
1235
+ return { path: configPath, updated: true };
1236
+ }
1237
+ return { path: configPath, skipped: true };
1238
+ }
949
1239
  function readJsonConfig(filePath) {
950
1240
  try {
951
1241
  const content = fs4.readFileSync(filePath, "utf-8");
@@ -1041,6 +1331,15 @@ var initCommand = new Command2("init").description("Initialize Dinachi UI in you
1041
1331
  await fs4.ensureDir(utilsDirPath);
1042
1332
  const utilsContent = createUtilsFileContent();
1043
1333
  await fs4.writeFile(utilsFilePath, utilsContent);
1334
+ spinner.text = "Setting up color theme...";
1335
+ const tailwindMajor = detectTailwindMajorVersion(projectRoot);
1336
+ const cssFilePath = path4.resolve(projectRoot, projectConfig.cssPath);
1337
+ const themeCSSResult = await injectThemeCSS(cssFilePath, tailwindMajor);
1338
+ let twColorConfigResult = null;
1339
+ if (tailwindMajor < 4) {
1340
+ spinner.text = "Configuring Tailwind color mappings...";
1341
+ twColorConfigResult = await ensureTW3ColorConfig(projectRoot, projectConfig.tailwindConfig);
1342
+ }
1044
1343
  spinner.text = "Installing dependencies...";
1045
1344
  const deps = ["class-variance-authority", "clsx", "tailwind-merge"];
1046
1345
  if (!options.skipInstall) {
@@ -1091,6 +1390,22 @@ var initCommand = new Command2("init").description("Initialize Dinachi UI in you
1091
1390
  ` ${chalk2.yellow("!")} Could not update ${aliasConfigUpdate.path}. Configure @/* manually if you use alias imports.`
1092
1391
  );
1093
1392
  }
1393
+ if (themeCSSResult.created) {
1394
+ console.log(` ${chalk2.green("+")} Created ${projectConfig.cssPath} with color theme (light + dark)`);
1395
+ } else if (themeCSSResult.updated) {
1396
+ console.log(` ${chalk2.blue("~")} Updated ${projectConfig.cssPath} with color theme (light + dark)`);
1397
+ } else if (themeCSSResult.skipped) {
1398
+ console.log(` ${chalk2.gray("-")} Color theme already configured in ${projectConfig.cssPath}`);
1399
+ }
1400
+ if (twColorConfigResult) {
1401
+ if (twColorConfigResult.created) {
1402
+ console.log(` ${chalk2.green("+")} Created ${projectConfig.tailwindConfig} with color mappings`);
1403
+ } else if (twColorConfigResult.updated) {
1404
+ console.log(` ${chalk2.blue("~")} Updated ${projectConfig.tailwindConfig} with color mappings`);
1405
+ } else if (twColorConfigResult.skipped) {
1406
+ console.log(` ${chalk2.gray("-")} Color mappings already in ${projectConfig.tailwindConfig}`);
1407
+ }
1408
+ }
1094
1409
  if (!projectConfig.isTypeScript) {
1095
1410
  console.log();
1096
1411
  console.log(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dinachi/cli",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "CLI for adding Dinachi UI components to your project",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -27,18 +27,25 @@
27
27
  "templates"
28
28
  ],
29
29
  "dependencies": {
30
- "commander": "^14.0.2",
31
30
  "chalk": "^5.3.0",
32
- "ora": "^9.0.0",
33
- "prompts": "^2.4.2",
31
+ "commander": "^14.0.2",
32
+ "execa": "^9.6.1",
34
33
  "fs-extra": "^11.2.0",
35
34
  "node-fetch": "^3.3.2",
36
- "execa": "^9.6.1",
35
+ "ora": "^9.0.0",
36
+ "prompts": "^2.4.2",
37
37
  "ts-morph": "^27.0.2"
38
38
  },
39
39
  "devDependencies": {
40
+ "@base-ui/react": "1.2.0",
40
41
  "@types/fs-extra": "^11.0.4",
41
42
  "@types/prompts": "^2.4.9",
43
+ "@types/react": "^19.2.14",
44
+ "class-variance-authority": "^0.7.1",
45
+ "clsx": "^2.1.1",
46
+ "lucide-react": "0.552.0",
47
+ "react": "19.2.4",
48
+ "tailwind-merge": "^3.5.0",
42
49
  "tsup": "^8.0.1",
43
50
  "typescript": "^5.5.3"
44
51
  },
@@ -1,10 +1,15 @@
1
- // @ts-nocheck
2
1
  import * as React from "react";
3
2
  import { Accordion as BaseAccordion } from "@base-ui/react/accordion";
4
- import { cn } from "@/lib/utils"
3
+ import { cn } from "@/lib/utils";
5
4
  import { ChevronDown } from "lucide-react";
6
5
 
7
- const Accordion = BaseAccordion.Root;
6
+ const Accordion = React.forwardRef<
7
+ React.ComponentRef<typeof BaseAccordion.Root>,
8
+ React.ComponentProps<typeof BaseAccordion.Root>
9
+ >(({ className, ...props }, ref) => (
10
+ <BaseAccordion.Root ref={ref} className={cn(className)} {...props} />
11
+ ));
12
+ Accordion.displayName = "Accordion";
8
13
 
9
14
  const AccordionItem = React.forwardRef<
10
15
  HTMLDivElement,
@@ -1,9 +1,8 @@
1
- // @ts-nocheck
2
- import * as React from "react"
3
- import { AlertDialog as BaseAlertDialog } from "@base-ui/react"
4
- import { cn } from "@/lib/utils"
1
+ import * as React from "react";
2
+ import { AlertDialog as BaseAlertDialog } from "@base-ui/react";
3
+ import { cn } from "@/lib/utils";
5
4
 
6
- const AlertDialog = BaseAlertDialog.Root
5
+ const AlertDialog = BaseAlertDialog.Root;
7
6
 
8
7
  const AlertDialogTrigger = React.forwardRef<
9
8
  HTMLButtonElement,
@@ -21,10 +20,10 @@ const AlertDialogTrigger = React.forwardRef<
21
20
  )}
22
21
  {...props}
23
22
  />
24
- ))
25
- AlertDialogTrigger.displayName = "AlertDialogTrigger"
23
+ ));
24
+ AlertDialogTrigger.displayName = "AlertDialogTrigger";
26
25
 
27
- const AlertDialogPortal = BaseAlertDialog.Portal
26
+ const AlertDialogPortal = BaseAlertDialog.Portal;
28
27
 
29
28
  const AlertDialogBackdrop = React.forwardRef<
30
29
  HTMLDivElement,
@@ -40,8 +39,8 @@ const AlertDialogBackdrop = React.forwardRef<
40
39
  )}
41
40
  {...props}
42
41
  />
43
- ))
44
- AlertDialogBackdrop.displayName = "AlertDialogBackdrop"
42
+ ));
43
+ AlertDialogBackdrop.displayName = "AlertDialogBackdrop";
45
44
 
46
45
  const AlertDialogPopup = React.forwardRef<
47
46
  HTMLDivElement,
@@ -58,8 +57,8 @@ const AlertDialogPopup = React.forwardRef<
58
57
  )}
59
58
  {...props}
60
59
  />
61
- ))
62
- AlertDialogPopup.displayName = "AlertDialogPopup"
60
+ ));
61
+ AlertDialogPopup.displayName = "AlertDialogPopup";
63
62
 
64
63
  const AlertDialogTitle = React.forwardRef<
65
64
  HTMLHeadingElement,
@@ -70,8 +69,8 @@ const AlertDialogTitle = React.forwardRef<
70
69
  className={cn("text-lg font-semibold", className)}
71
70
  {...props}
72
71
  />
73
- ))
74
- AlertDialogTitle.displayName = "AlertDialogTitle"
72
+ ));
73
+ AlertDialogTitle.displayName = "AlertDialogTitle";
75
74
 
76
75
  const AlertDialogDescription = React.forwardRef<
77
76
  HTMLParagraphElement,
@@ -82,8 +81,8 @@ const AlertDialogDescription = React.forwardRef<
82
81
  className={cn("text-sm text-muted-foreground", className)}
83
82
  {...props}
84
83
  />
85
- ))
86
- AlertDialogDescription.displayName = "AlertDialogDescription"
84
+ ));
85
+ AlertDialogDescription.displayName = "AlertDialogDescription";
87
86
 
88
87
  const AlertDialogAction = React.forwardRef<
89
88
  HTMLButtonElement,
@@ -99,8 +98,8 @@ const AlertDialogAction = React.forwardRef<
99
98
  )}
100
99
  {...props}
101
100
  />
102
- ))
103
- AlertDialogAction.displayName = "AlertDialogAction"
101
+ ));
102
+ AlertDialogAction.displayName = "AlertDialogAction";
104
103
 
105
104
  const AlertDialogCancel = React.forwardRef<
106
105
  HTMLButtonElement,
@@ -116,8 +115,8 @@ const AlertDialogCancel = React.forwardRef<
116
115
  )}
117
116
  {...props}
118
117
  />
119
- ))
120
- AlertDialogCancel.displayName = "AlertDialogCancel"
118
+ ));
119
+ AlertDialogCancel.displayName = "AlertDialogCancel";
121
120
 
122
121
  const AlertDialogHeader = ({
123
122
  className,
@@ -130,8 +129,8 @@ const AlertDialogHeader = ({
130
129
  )}
131
130
  {...props}
132
131
  />
133
- )
134
- AlertDialogHeader.displayName = "AlertDialogHeader"
132
+ );
133
+ AlertDialogHeader.displayName = "AlertDialogHeader";
135
134
 
136
135
  const AlertDialogFooter = ({
137
136
  className,
@@ -144,8 +143,8 @@ const AlertDialogFooter = ({
144
143
  )}
145
144
  {...props}
146
145
  />
147
- )
148
- AlertDialogFooter.displayName = "AlertDialogFooter"
146
+ );
147
+ AlertDialogFooter.displayName = "AlertDialogFooter";
149
148
 
150
149
  export {
151
150
  AlertDialog,
@@ -159,4 +158,4 @@ export {
159
158
  AlertDialogCancel,
160
159
  AlertDialogHeader,
161
160
  AlertDialogFooter,
162
- }
161
+ };
@@ -10,4 +10,4 @@ export {
10
10
  AlertDialogCancel,
11
11
  AlertDialogHeader,
12
12
  AlertDialogFooter,
13
- } from "./alert-dialog"
13
+ } from "./alert-dialog";
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  "use client"
3
2
 
4
3
  import * as React from "react"
@@ -1,9 +1,7 @@
1
- // @ts-nocheck
2
1
  import * as React from "react";
3
2
  import { Avatar as BaseAvatar } from "@base-ui/react";
4
3
  import { cva, type VariantProps } from "class-variance-authority";
5
- import { cn } from "@/lib/utils"
6
-
4
+ import { cn } from "@/lib/utils";
7
5
 
8
6
  const avatarVariants = cva(
9
7
  "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",