@appcorp/shadcn 1.2.0 → 2.0.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 (231) hide show
  1. package/components/app-sidebar.js +16 -23
  2. package/components/audio.js +11 -19
  3. package/components/dashboard.js +27 -65
  4. package/components/drawer-generic.js +20 -28
  5. package/components/enhanced-checkbox.js +10 -57
  6. package/components/enhanced-combobox.js +99 -143
  7. package/components/enhanced-drawer-footer.js +22 -31
  8. package/components/enhanced-drawer-header.js +6 -14
  9. package/components/enhanced-dropzone-impl.d.ts +32 -0
  10. package/components/enhanced-dropzone-impl.js +218 -0
  11. package/components/enhanced-dropzone.d.ts +2 -63
  12. package/components/enhanced-dropzone.js +6 -294
  13. package/components/enhanced-input.js +10 -57
  14. package/components/enhanced-label.js +6 -52
  15. package/components/enhanced-radio.js +12 -20
  16. package/components/enhanced-select.js +13 -61
  17. package/components/enhanced-slider.js +11 -58
  18. package/components/enhanced-switch.js +11 -58
  19. package/components/enhanced-table-footer-action.js +11 -19
  20. package/components/enhanced-table-footer-page.js +16 -24
  21. package/components/enhanced-table-footer-pagination.js +11 -21
  22. package/components/enhanced-table-header-action.js +22 -30
  23. package/components/enhanced-table-header-search.js +9 -17
  24. package/components/enhanced-table.js +125 -153
  25. package/components/enhanced-textarea.js +10 -57
  26. package/components/field.d.ts +1 -1
  27. package/components/field.js +31 -88
  28. package/components/image-resize-dialog.js +61 -159
  29. package/components/nav-main.js +32 -78
  30. package/components/nav-projects.js +37 -48
  31. package/components/nav-user.js +41 -51
  32. package/components/show-toast.js +5 -9
  33. package/components/sidebar.d.ts +1 -1
  34. package/components/sidebar.js +115 -184
  35. package/components/team-switcher.js +36 -47
  36. package/components/theme-provider.js +36 -84
  37. package/components/timeline.js +12 -20
  38. package/components/tooltip.js +10 -59
  39. package/components/ui/accordion.js +17 -67
  40. package/components/ui/alert-dialog.js +32 -89
  41. package/components/ui/alert.d.ts +1 -1
  42. package/components/ui/alert.js +14 -63
  43. package/components/ui/area-chart-v1-impl.d.ts +19 -0
  44. package/components/ui/area-chart-v1-impl.js +75 -0
  45. package/components/ui/area-chart-v1.d.ts +2 -19
  46. package/components/ui/area-chart-v1.js +4 -113
  47. package/components/ui/aspect-ratio.js +3 -39
  48. package/components/ui/avatar.js +13 -62
  49. package/components/ui/badge.d.ts +2 -2
  50. package/components/ui/badge.js +7 -55
  51. package/components/ui/breadcrumb.js +27 -80
  52. package/components/ui/button.d.ts +2 -2
  53. package/components/ui/button.js +10 -58
  54. package/components/ui/calendar-impl.d.ts +8 -0
  55. package/components/ui/calendar-impl.js +55 -0
  56. package/components/ui/calendar.d.ts +2 -8
  57. package/components/ui/calendar.js +5 -108
  58. package/components/ui/card.js +21 -73
  59. package/components/ui/carousel-impl.d.ts +18 -0
  60. package/components/ui/carousel-impl.js +117 -0
  61. package/components/ui/carousel.d.ts +6 -18
  62. package/components/ui/carousel.js +8 -170
  63. package/components/ui/chart-impl.d.ts +62 -0
  64. package/components/ui/chart-impl.js +162 -0
  65. package/components/ui/chart.d.ts +7 -62
  66. package/components/ui/chart.js +9 -219
  67. package/components/ui/checkbox.js +10 -57
  68. package/components/ui/collapsible.js +5 -43
  69. package/components/ui/combobox.js +22 -58
  70. package/components/ui/command-impl.d.ts +80 -0
  71. package/components/ui/command-impl.js +63 -0
  72. package/components/ui/command.d.ts +9 -80
  73. package/components/ui/command.js +12 -117
  74. package/components/ui/context-menu.js +41 -102
  75. package/components/ui/dialog.js +28 -84
  76. package/components/ui/drawer-impl.d.ts +22 -0
  77. package/components/ui/drawer-impl.js +56 -0
  78. package/components/ui/drawer.d.ts +10 -22
  79. package/components/ui/drawer.js +13 -111
  80. package/components/ui/dropdown-menu.js +41 -102
  81. package/components/ui/form.d.ts +4 -2
  82. package/components/ui/form.js +41 -95
  83. package/components/ui/hover-card.js +9 -58
  84. package/components/ui/input-otp-impl.d.ts +34 -0
  85. package/components/ui/input-otp-impl.js +43 -0
  86. package/components/ui/input-otp.d.ts +4 -34
  87. package/components/ui/input-otp.js +7 -92
  88. package/components/ui/input.js +6 -53
  89. package/components/ui/label.d.ts +1 -1
  90. package/components/ui/label.js +9 -56
  91. package/components/ui/language-selector.js +17 -55
  92. package/components/ui/menubar.js +46 -108
  93. package/components/ui/navigation-menu.d.ts +1 -1
  94. package/components/ui/navigation-menu.js +29 -84
  95. package/components/ui/pagination.js +30 -83
  96. package/components/ui/popover.js +10 -60
  97. package/components/ui/progress.js +8 -55
  98. package/components/ui/radio-group.js +12 -60
  99. package/components/ui/resizable-impl.d.ts +24 -0
  100. package/components/ui/resizable-impl.js +27 -0
  101. package/components/ui/resizable.d.ts +3 -24
  102. package/components/ui/resizable.js +6 -78
  103. package/components/ui/scroll-area.js +10 -58
  104. package/components/ui/select.js +34 -90
  105. package/components/ui/separator.js +7 -54
  106. package/components/ui/sheet.d.ts +1 -1
  107. package/components/ui/sheet.js +30 -86
  108. package/components/ui/skeleton.js +5 -21
  109. package/components/ui/slider.js +10 -57
  110. package/components/ui/sonner.js +7 -24
  111. package/components/ui/switch.js +8 -55
  112. package/components/ui/table.js +27 -81
  113. package/components/ui/tabs.js +14 -64
  114. package/components/ui/textarea.js +6 -53
  115. package/components/ui/theme-switcher.js +41 -91
  116. package/components/ui/toggle.d.ts +2 -2
  117. package/components/ui/toggle.js +9 -57
  118. package/data/admin-dashboard.js +16 -19
  119. package/hooks/use-enhanced-combobox.js +47 -124
  120. package/hooks/use-mobile.js +8 -44
  121. package/hooks/use-outside-click.js +6 -10
  122. package/lib/themes.js +1 -4
  123. package/lib/toast-utils.js +78 -120
  124. package/lib/utils.js +4 -11
  125. package/package.json +9 -90
  126. package/utils/transform-breadcrumbs.js +4 -8
  127. package/utils/transform-navitems.js +7 -22
  128. package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
  129. package/components/aceternity-ui/apple-cards-carousel.js +0 -263
  130. package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
  131. package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
  132. package/components/shadcn-example/ai-chat/index.d.ts +0 -38
  133. package/components/shadcn-example/ai-chat/index.js +0 -66
  134. package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
  135. package/components/shadcn-example/ai-chat/sidebar.js +0 -68
  136. package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
  137. package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
  138. package/components/shadcn-example/authentication/index.d.ts +0 -24
  139. package/components/shadcn-example/authentication/index.js +0 -59
  140. package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
  141. package/components/shadcn-example/authentication/user-auth-form.js +0 -54
  142. package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
  143. package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
  144. package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
  145. package/components/shadcn-example/blog-detail-page/content.js +0 -15
  146. package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
  147. package/components/shadcn-example/blog-detail-page/header.js +0 -36
  148. package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
  149. package/components/shadcn-example/blog-detail-page/index.js +0 -74
  150. package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
  151. package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
  152. package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
  153. package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
  154. package/components/shadcn-example/blog-page/index.d.ts +0 -20
  155. package/components/shadcn-example/blog-page/index.js +0 -36
  156. package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
  157. package/components/shadcn-example/coming-soon/countdown.js +0 -82
  158. package/components/shadcn-example/coming-soon/index.d.ts +0 -10
  159. package/components/shadcn-example/coming-soon/index.js +0 -41
  160. package/components/shadcn-io/color-picker/index.d.ts +0 -43
  161. package/components/shadcn-io/color-picker/index.js +0 -304
  162. package/components/shadcn-io/copy-button/index.d.ts +0 -16
  163. package/components/shadcn-io/copy-button/index.js +0 -121
  164. package/components/shadcn-io/dropzone/index.d.ts +0 -19
  165. package/components/shadcn-io/dropzone/index.js +0 -131
  166. package/components/shadcn-io/gantt/index.d.ts +0 -145
  167. package/components/shadcn-io/gantt/index.js +0 -766
  168. package/components/shadcn-io/table/index.d.ts +0 -60
  169. package/components/shadcn-io/table/index.js +0 -138
  170. package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
  171. package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
  172. package/templates/appcorp-v1/footer/cta.d.ts +0 -6
  173. package/templates/appcorp-v1/footer/cta.js +0 -21
  174. package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
  175. package/templates/appcorp-v1/footer/footer-grid.js +0 -52
  176. package/templates/appcorp-v1/footer/index.d.ts +0 -3
  177. package/templates/appcorp-v1/footer/index.js +0 -28
  178. package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
  179. package/templates/appcorp-v1/footer/newsletter.js +0 -28
  180. package/templates/appcorp-v1/footer/stats.d.ts +0 -6
  181. package/templates/appcorp-v1/footer/stats.js +0 -15
  182. package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
  183. package/templates/appcorp-v1/header/announcement-bar.js +0 -15
  184. package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
  185. package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
  186. package/templates/appcorp-v1/header/index.d.ts +0 -12
  187. package/templates/appcorp-v1/header/index.js +0 -16
  188. package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
  189. package/templates/appcorp-v1/header/mobile-menu.js +0 -101
  190. package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
  191. package/templates/appcorp-v1/header/navigation-bar.js +0 -117
  192. package/templates/appcorp-v1/header/social-button.d.ts +0 -7
  193. package/templates/appcorp-v1/header/social-button.js +0 -48
  194. package/templates/appcorp-v1/home.d.ts +0 -3
  195. package/templates/appcorp-v1/home.js +0 -27
  196. package/templates/data/appcorp-v1.d.ts +0 -93
  197. package/templates/data/appcorp-v1.js +0 -348
  198. package/templates/data/edupilotpro-v1.d.ts +0 -33
  199. package/templates/data/edupilotpro-v1.js +0 -116
  200. package/templates/data/school-v1.d.ts +0 -328
  201. package/templates/data/school-v1.js +0 -1563
  202. package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
  203. package/templates/edupilotpro-v1/feature-card.js +0 -28
  204. package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
  205. package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
  206. package/templates/school-v1/footer.d.ts +0 -3
  207. package/templates/school-v1/footer.js +0 -75
  208. package/templates/school-v1/index.d.ts +0 -18
  209. package/templates/school-v1/index.js +0 -60
  210. package/templates/school-v1/navigation.d.ts +0 -3
  211. package/templates/school-v1/navigation.js +0 -123
  212. package/templates/school-v1/sections/about.d.ts +0 -3
  213. package/templates/school-v1/sections/about.js +0 -49
  214. package/templates/school-v1/sections/admissions.d.ts +0 -3
  215. package/templates/school-v1/sections/admissions.js +0 -77
  216. package/templates/school-v1/sections/contact.d.ts +0 -3
  217. package/templates/school-v1/sections/contact.js +0 -67
  218. package/templates/school-v1/sections/faqs.d.ts +0 -3
  219. package/templates/school-v1/sections/faqs.js +0 -50
  220. package/templates/school-v1/sections/hero.d.ts +0 -3
  221. package/templates/school-v1/sections/hero.js +0 -132
  222. package/templates/school-v1/sections/management.d.ts +0 -3
  223. package/templates/school-v1/sections/management.js +0 -34
  224. package/templates/school-v1/sections/policies.d.ts +0 -3
  225. package/templates/school-v1/sections/policies.js +0 -127
  226. package/templates/school-v1/sections/programs.d.ts +0 -3
  227. package/templates/school-v1/sections/programs.js +0 -107
  228. package/templates/school-v1/sections/testimonials.d.ts +0 -3
  229. package/templates/school-v1/sections/testimonials.js +0 -46
  230. package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
  231. package/templates/school-v1/sections/why-choose-us.js +0 -57
package/package.json CHANGED
@@ -1,46 +1,12 @@
1
1
  {
2
2
  "name": "@appcorp/shadcn",
3
- "version": "1.2.0",
4
- "scripts": {
5
- "build:next": "next build",
6
- "build:storybook": "mv ../.pnp.cjs ../.pnp.cjs.bak 2>/dev/null || true && storybook build -c .storybook -o .out && mv ../.pnp.cjs.bak ../.pnp.cjs 2>/dev/null || true",
7
- "build:ts": "tsc --project tsconfig.build.json",
8
- "build": "yarn clean && yarn build:ts && cp package.json lib && cp README.md lib && cp yarn.lock lib",
9
- "clean": "yarn rimraf ./lib",
10
- "copy:deploy:files": "cp favicon.ico ./.out/ && cp assets/react-pakistan.jpeg ./.out/",
11
- "deploy:storybook:ci": "concurrently \"yarn storybook:ghpages:ci\" \"sleep 15 && rm ./*out*/favicon.ico && yarn copy:deploy:files\"",
12
- "deploy:storybook": "concurrently \"yarn storybook:ghpages\" \"sleep 15 && rm ./*out*/favicon.ico && yarn copy:deploy:files\"",
13
- "dev": "next dev",
14
- "extract": "yarn build:storybook && npx sb extract ./.out && cp ./.out/stories.json . && rm -rf ./.out",
15
- "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
16
- "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
17
- "generate:sitemap": "scripts/generate-sitemap.sh",
18
- "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
19
- "major": "npm version major",
20
- "minor": "npm version minor",
21
- "patch": "npm version patch",
22
- "prepare": "husky",
23
- "publish:npm": "yarn build && cd lib/ && npm publish --access public && cd ..",
24
- "start": "next start",
25
- "storybook": "mv ../.pnp.cjs ../.pnp.cjs.bak 2>/dev/null || true && storybook dev -p 6006",
26
- "test:watch": "jest --watch",
27
- "test": "jest",
28
- "upgrade": "ncu -u"
29
- },
30
- "repository": "https://github.com/app-corp/shadcn",
31
- "author": "Taimoor Khan <taimoor.m.k@live.com>",
3
+ "version": "2.0.0",
32
4
  "license": "MIT",
33
- "devDependencies": {
34
- "@ai-sdk/react": "^3",
35
- "@base-ui/react": "^1.5.0",
36
- "@commitlint/cli": "^20",
37
- "@commitlint/config-conventional": "^20",
38
- "@dnd-kit/core": "^6",
39
- "@dnd-kit/modifiers": "^9",
40
- "@emotion/is-prop-valid": "^1",
41
- "@eslint/eslintrc": "^3",
42
- "@eslint/js": "^9",
43
- "@hookform/resolvers": "^5",
5
+ "author": "Taimoor Khan <taimoor.m.k@live.com>",
6
+ "repository": "https://github.com/app-corp/shadcn",
7
+ "type": "module",
8
+ "sideEffects": false,
9
+ "peerDependencies": {
44
10
  "@radix-ui/react-accordion": "^1",
45
11
  "@radix-ui/react-alert-dialog": "^1",
46
12
  "@radix-ui/react-aspect-ratio": "^1",
@@ -66,75 +32,28 @@
66
32
  "@radix-ui/react-switch": "^1",
67
33
  "@radix-ui/react-tabs": "^1",
68
34
  "@radix-ui/react-toggle": "^1",
69
- "@react-pakistan/util-functions": "^1.25.69",
70
- "@storybook/addon-docs": "^10.3.6",
71
- "@storybook/addon-onboarding": "^10.3.6",
72
- "@storybook/nextjs": "^10.3.6",
73
- "@tabler/icons-react": "^3",
74
- "@tailwindcss/postcss": "^4",
75
- "@tanstack/react-table": "^8",
76
- "@testing-library/dom": "^10",
77
- "@testing-library/jest-dom": "^6",
78
- "@testing-library/react": "^16",
79
- "@testing-library/user-event": "^14",
80
- "@types/color": "^4",
81
- "@types/jest": "^30",
82
- "@types/lodash.throttle": "^4",
83
- "@types/node": "^24",
84
- "@types/react": "^19",
85
- "@types/react-dom": "^19",
86
- "@types/react-is": "^19",
87
- "@uidotdev/usehooks": "^2",
88
- "autoprefixer": "^10",
35
+ "@radix-ui/react-tooltip": "^1",
36
+ "@react-pakistan/util-functions": "^2.0.2",
89
37
  "class-variance-authority": "^0",
90
38
  "clsx": "^2",
91
39
  "cmdk": "^1",
92
- "color": "^5",
93
- "date-fns": "^4",
94
- "dayjs": "^1",
95
40
  "embla-carousel-react": "^8",
96
- "eslint": "^9",
97
- "eslint-config-next": "^16",
98
- "eslint-config-prettier": "^10",
99
- "eslint-plugin-react-hooks": "^4",
100
- "eslint-plugin-storybook": "^10.3.5",
101
- "husky": "^9",
102
41
  "input-otp": "^1",
103
- "jest": "^30",
104
- "jest-environment-jsdom": "^30",
105
- "jotai": "^2",
106
- "libphonenumber-js": "^1",
107
- "lint-staged": "^16",
108
- "lodash.throttle": "^4",
109
42
  "lucide-react": "^0",
110
- "motion": "^12",
111
43
  "next": "^16",
112
44
  "next-themes": "^0",
113
- "postcss": "^8",
114
- "prettier": "^3",
115
- "radix-ui": "^1.4.3",
116
45
  "react": "^19",
117
46
  "react-day-picker": "^9",
118
47
  "react-dom": "^19",
119
48
  "react-dropzone": "^14",
120
49
  "react-easy-crop": "^5",
121
50
  "react-hook-form": "^7",
122
- "react-is": "^19",
123
51
  "react-resizable-panels": "^3",
124
52
  "recharts": "3",
125
- "rimraf": "^6",
126
53
  "sonner": "^2",
127
- "storybook": "^10.3.6",
128
54
  "tailwind-merge": "^3",
129
- "tailwindcss": "^4",
130
- "ts-node": "^10",
131
- "typescript": "^5",
132
- "uuid": "^13",
133
- "vaul": "^1",
134
- "webpack": "5",
135
- "zod": "^4"
55
+ "vaul": "^1"
136
56
  },
137
- "packageManager": "yarn@4.14.1",
138
57
  "engines": {
139
58
  "node": "^24.0.0",
140
59
  "yarn": "4.13.0"
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformBreadcrumbs = void 0;
4
- var transformBreadcrumbs = function (string) {
5
- var items = string.split("/").filter(Boolean);
6
- return items.map(function (item) { return ({
1
+ export const transformBreadcrumbs = (string) => {
2
+ const items = string.split("/").filter(Boolean);
3
+ return items.map((item) => ({
7
4
  label: item.charAt(0).toUpperCase() + item.slice(1).replace(/-/g, " "),
8
5
  href: "#",
9
- }); });
6
+ }));
10
7
  };
11
- exports.transformBreadcrumbs = transformBreadcrumbs;
@@ -1,33 +1,18 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.transformNavItems = void 0;
15
1
  /**
16
2
  * Updates navItems to set isActive based on current pathname
17
3
  * Checks both main nav URLs and subItem URLs for matches
18
4
  * Also marks individual subItems as active when their URL matches
19
5
  */
20
- var transformNavItems = function (navItems, pathname) {
21
- return navItems.map(function (navItem) {
6
+ export const transformNavItems = (navItems, pathname) => {
7
+ return navItems.map((navItem) => {
22
8
  // Check if main nav item URL matches
23
- var isMainActive = navItem.url !== "#" && pathname === navItem.url;
9
+ const isMainActive = navItem.url !== "#" && pathname === navItem.url;
24
10
  // Transform subItems to mark active ones
25
- var updatedSubItems = navItem.subItems.map(function (subItem) {
26
- return __assign(__assign({}, subItem), { isActive: subItem.url !== "#" && pathname === subItem.url });
11
+ const updatedSubItems = navItem.subItems.map((subItem) => {
12
+ return Object.assign(Object.assign({}, subItem), { isActive: subItem.url !== "#" && pathname === subItem.url });
27
13
  });
28
14
  // Check if any subItem is active
29
- var hasActiveSubItem = updatedSubItems.some(function (subItem) { return subItem.isActive; });
30
- return __assign(__assign({}, navItem), { isActive: isMainActive || hasActiveSubItem, subItems: updatedSubItems });
15
+ const hasActiveSubItem = updatedSubItems.some((subItem) => subItem.isActive);
16
+ return Object.assign(Object.assign({}, navItem), { isActive: isMainActive || hasActiveSubItem, subItems: updatedSubItems });
31
17
  });
32
18
  };
33
- exports.transformNavItems = transformNavItems;
@@ -1,35 +0,0 @@
1
- import React, { JSX } from "react";
2
- import { ImageProps } from "next/image";
3
- interface AppleCardsCarouselProps {
4
- items: JSX.Element[];
5
- initialScroll?: number;
6
- }
7
- type Card = {
8
- src: string;
9
- title: string;
10
- category: string;
11
- content: React.ReactNode;
12
- };
13
- export declare const CarouselContext: React.Context<{
14
- onCardClose: (index: number) => void;
15
- currentIndex: number;
16
- }>;
17
- export declare const AppleCardsCarousel: ({ items, initialScroll, }: AppleCardsCarouselProps) => JSX.Element;
18
- export declare const AppleCardsCarouselMobileControls: ({ canScrollLeft, canScrollRight, onLeft, onRight, mounted, coords, }: {
19
- canScrollLeft: boolean;
20
- canScrollRight: boolean;
21
- onLeft: () => void;
22
- onRight: () => void;
23
- mounted: boolean;
24
- coords?: {
25
- right: number;
26
- top: number;
27
- } | null;
28
- }) => React.ReactPortal | null;
29
- export declare const Card: ({ card, index, layout, }: {
30
- card: Card;
31
- index: number;
32
- layout?: boolean;
33
- }) => JSX.Element;
34
- export declare const BlurImage: ({ height, width, src, className, alt, ...rest }: ImageProps) => JSX.Element;
35
- export {};
@@ -1,263 +0,0 @@
1
- "use client";
2
- "use strict";
3
- var __assign = (this && this.__assign) || function () {
4
- __assign = Object.assign || function(t) {
5
- for (var s, i = 1, n = arguments.length; i < n; i++) {
6
- s = arguments[i];
7
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
- t[p] = s[p];
9
- }
10
- return t;
11
- };
12
- return __assign.apply(this, arguments);
13
- };
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- var __rest = (this && this.__rest) || function (s, e) {
48
- var t = {};
49
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
50
- t[p] = s[p];
51
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
52
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
53
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
54
- t[p[i]] = s[p[i]];
55
- }
56
- return t;
57
- };
58
- Object.defineProperty(exports, "__esModule", { value: true });
59
- exports.BlurImage = exports.Card = exports.AppleCardsCarouselMobileControls = exports.AppleCardsCarousel = exports.CarouselContext = void 0;
60
- var react_1 = __importStar(require("react"));
61
- var react_dom_1 = require("react-dom");
62
- var icons_react_1 = require("@tabler/icons-react");
63
- var utils_1 = require("@/lib/utils");
64
- var react_2 = require("motion/react");
65
- var use_outside_click_1 = require("@/hooks/use-outside-click");
66
- exports.CarouselContext = (0, react_1.createContext)({
67
- onCardClose: function () { },
68
- currentIndex: 0,
69
- });
70
- var AppleCardsCarousel = function (_a) {
71
- var items = _a.items, _b = _a.initialScroll, initialScroll = _b === void 0 ? 0 : _b;
72
- var carouselRef = react_1.default.useRef(null);
73
- var _c = react_1.default.useState(false), canScrollLeft = _c[0], setCanScrollLeft = _c[1];
74
- var _d = react_1.default.useState(true), canScrollRight = _d[0], setCanScrollRight = _d[1];
75
- var _e = (0, react_1.useState)(0), currentIndex = _e[0], setCurrentIndex = _e[1];
76
- (0, react_1.useEffect)(function () {
77
- if (carouselRef.current) {
78
- carouselRef.current.scrollLeft = initialScroll;
79
- checkScrollability();
80
- }
81
- }, [initialScroll]);
82
- (0, react_1.useEffect)(function () {
83
- // Ensure control enabled/disabled state is correct on mount and resize
84
- try {
85
- checkScrollability();
86
- }
87
- catch (_a) {
88
- /* ignore if DOM not yet ready */
89
- }
90
- var onResize = function () { return checkScrollability(); };
91
- window.addEventListener("resize", onResize);
92
- return function () { return window.removeEventListener("resize", onResize); };
93
- }, []);
94
- // mounted flag for portal rendering
95
- var _f = (0, react_1.useState)(false), isMounted = _f[0], setIsMounted = _f[1];
96
- (0, react_1.useEffect)(function () {
97
- setIsMounted(true);
98
- return function () { return setIsMounted(false); };
99
- }, []);
100
- // controls position (viewport-fixed coords) for mobile portal
101
- var _g = (0, react_1.useState)(null), controlsPos = _g[0], setControlsPos = _g[1];
102
- var updateControlsPosition = function () {
103
- var el = carouselRef.current;
104
- if (!el)
105
- return;
106
- var rect = el.getBoundingClientRect();
107
- // Compute viewport-based coords (use getBoundingClientRect directly)
108
- // Compute viewport-based coords so controls appear under the cards on the right
109
- var pad = 12;
110
- var offset = 8; // px below the carousel
111
- // Position fixed: distance from viewport right edge to align with carousel right
112
- var right = Math.max(pad, window.innerWidth - rect.right + pad);
113
- var top = rect.bottom + offset;
114
- top = Math.max(pad, Math.min(top, window.innerHeight - pad));
115
- setControlsPos({ right: right, top: top });
116
- };
117
- (0, react_1.useEffect)(function () {
118
- updateControlsPosition();
119
- var onResize = function () { return updateControlsPosition(); };
120
- var onScroll = function () { return updateControlsPosition(); };
121
- window.addEventListener("resize", onResize);
122
- window.addEventListener("scroll", onScroll, { passive: true });
123
- return function () {
124
- window.removeEventListener("resize", onResize);
125
- window.removeEventListener("scroll", onScroll);
126
- };
127
- }, [carouselRef.current]);
128
- var checkScrollability = function () {
129
- if (carouselRef.current) {
130
- var _a = carouselRef.current, scrollLeft_1 = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;
131
- setCanScrollLeft(scrollLeft_1 > 0);
132
- setCanScrollRight(scrollLeft_1 < scrollWidth - clientWidth);
133
- }
134
- };
135
- var scrollLeft = function () {
136
- if (carouselRef.current) {
137
- carouselRef.current.scrollBy({ left: -300, behavior: "smooth" });
138
- }
139
- };
140
- var scrollRight = function () {
141
- if (carouselRef.current) {
142
- carouselRef.current.scrollBy({ left: 300, behavior: "smooth" });
143
- }
144
- };
145
- var handleCardClose = function (index) {
146
- if (carouselRef.current) {
147
- var cardWidth = isMobile() ? 230 : 384; // (md:w-96)
148
- var gap = isMobile() ? 4 : 8;
149
- var scrollPosition = (cardWidth + gap) * (index + 1);
150
- carouselRef.current.scrollTo({
151
- left: scrollPosition,
152
- behavior: "smooth",
153
- });
154
- setCurrentIndex(index);
155
- }
156
- };
157
- var isMobile = function () {
158
- return window && window.innerWidth < 768;
159
- };
160
- return (react_1.default.createElement(exports.CarouselContext.Provider, { value: { onCardClose: handleCardClose, currentIndex: currentIndex } },
161
- react_1.default.createElement("div", { className: "relative w-full h-auto" },
162
- react_1.default.createElement("div", { className: "flex w-full overflow-x-scroll overscroll-x-auto scroll-smooth py-10 [scrollbar-width:none] md:py-20", ref: carouselRef, onScroll: checkScrollability },
163
- react_1.default.createElement("div", { className: (0, utils_1.cn)("absolute right-0 z-[1000] h-auto w-[5%] overflow-hidden bg-gradient-to-l") }),
164
- react_1.default.createElement("div", { className: (0, utils_1.cn)("flex flex-row justify-start gap-4 pl-4", "mx-auto max-w-7xl" // remove max-w-4xl if you want the carousel to span the full width of its container
165
- ) }, items.map(function (item, index) { return (react_1.default.createElement(react_2.motion.div, { initial: {
166
- opacity: 0,
167
- y: 20,
168
- }, animate: {
169
- opacity: 1,
170
- y: 0,
171
- transition: {
172
- duration: 0.5,
173
- delay: 0.2 * index,
174
- ease: "easeOut",
175
- },
176
- }, viewport: { once: true }, key: "card" + index, className: "rounded-3xl last:pr-[5%] md:last:pr-[33%]" }, item)); }))),
177
- react_1.default.createElement("div", { className: "hidden md:flex mr-10 justify-end gap-2" },
178
- react_1.default.createElement("button", { className: "relative z-40 flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 disabled:opacity-50", onClick: scrollLeft, disabled: !canScrollLeft, "aria-label": "Scroll left" },
179
- react_1.default.createElement(icons_react_1.IconArrowNarrowLeft, { className: "h-6 w-6 text-gray-500" })),
180
- react_1.default.createElement("button", { className: "relative z-40 flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 disabled:opacity-50", onClick: scrollRight, disabled: !canScrollRight, "aria-label": "Scroll right" },
181
- react_1.default.createElement(icons_react_1.IconArrowNarrowRight, { className: "h-6 w-6 text-gray-500" }))),
182
- isMounted && (react_1.default.createElement(exports.AppleCardsCarouselMobileControls, { canScrollLeft: canScrollLeft, canScrollRight: canScrollRight, onLeft: scrollLeft, onRight: scrollRight, mounted: isMounted, coords: controlsPos })))));
183
- };
184
- exports.AppleCardsCarousel = AppleCardsCarousel;
185
- // Render mobile controls via portal so fixed positioning isn't clipped
186
- // Portal is placed after component to avoid SSR issues (renders only on mount)
187
- var AppleCardsCarouselMobileControls = function (_a) {
188
- var canScrollLeft = _a.canScrollLeft, canScrollRight = _a.canScrollRight, onLeft = _a.onLeft, onRight = _a.onRight, mounted = _a.mounted, coords = _a.coords;
189
- if (!mounted || typeof document === "undefined")
190
- return null;
191
- var fallbackStyle = {
192
- position: "fixed",
193
- left: "50%",
194
- bottom: "calc(env(safe-area-inset-bottom, 0px) + 1rem)",
195
- transform: "translateX(-50%)",
196
- };
197
- var positionedStyle = coords
198
- ? {
199
- position: "fixed",
200
- right: coords.right,
201
- top: coords.top,
202
- }
203
- : undefined;
204
- return (0, react_dom_1.createPortal)(react_1.default.createElement("div", { className: "z-50 flex gap-2 md:hidden", style: positionedStyle !== null && positionedStyle !== void 0 ? positionedStyle : fallbackStyle },
205
- react_1.default.createElement("button", { className: "relative z-40 flex h-12 w-12 items-center justify-center rounded-full bg-gray-100 disabled:opacity-50", onClick: onLeft, disabled: !canScrollLeft, "aria-label": "Scroll left" },
206
- react_1.default.createElement(icons_react_1.IconArrowNarrowLeft, { className: "h-6 w-6 text-gray-500" })),
207
- react_1.default.createElement("button", { className: "relative z-40 flex h-12 w-12 items-center justify-center rounded-full bg-gray-100 disabled:opacity-50", onClick: onRight, disabled: !canScrollRight, "aria-label": "Scroll right" },
208
- react_1.default.createElement(icons_react_1.IconArrowNarrowRight, { className: "h-6 w-6 text-gray-500" }))), document.body);
209
- };
210
- exports.AppleCardsCarouselMobileControls = AppleCardsCarouselMobileControls;
211
- var Card = function (_a) {
212
- var card = _a.card, index = _a.index, _b = _a.layout, layout = _b === void 0 ? false : _b;
213
- var _c = (0, react_1.useState)(false), open = _c[0], setOpen = _c[1];
214
- var containerRef = (0, react_1.useRef)(null);
215
- var onCardClose = (0, react_1.useContext)(exports.CarouselContext).onCardClose;
216
- (0, react_1.useEffect)(function () {
217
- function onKeyDown(event) {
218
- if (event.key === "Escape") {
219
- handleClose();
220
- }
221
- }
222
- if (open) {
223
- document.body.style.overflow = "hidden";
224
- }
225
- else {
226
- document.body.style.overflow = "auto";
227
- }
228
- window.addEventListener("keydown", onKeyDown);
229
- return function () { return window.removeEventListener("keydown", onKeyDown); };
230
- }, [open]);
231
- (0, use_outside_click_1.useOutsideClick)(containerRef, function () {
232
- return handleClose();
233
- });
234
- var handleOpen = function () {
235
- setOpen(true);
236
- };
237
- var handleClose = function () {
238
- setOpen(false);
239
- onCardClose(index);
240
- };
241
- return (react_1.default.createElement(react_1.default.Fragment, null,
242
- react_1.default.createElement(react_2.AnimatePresence, null, open && (react_1.default.createElement("div", { className: "fixed inset-0 z-50 h-screen overflow-auto" },
243
- react_1.default.createElement(react_2.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, className: "fixed inset-0 h-full w-full bg-black/80 backdrop-blur-lg" }),
244
- react_1.default.createElement(react_2.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, ref: containerRef, layoutId: layout ? "card-".concat(card.title) : undefined, className: "relative z-[60] mx-auto my-10 h-fit max-w-5xl rounded-3xl bg-white p-4 font-sans md:p-10 dark:bg-neutral-900" },
245
- react_1.default.createElement("button", { className: "sticky top-4 right-0 ml-auto flex h-8 w-8 items-center justify-center rounded-full bg-black dark:bg-white", onClick: handleClose },
246
- react_1.default.createElement(icons_react_1.IconX, { className: "h-6 w-6 text-neutral-100 dark:text-neutral-900" })),
247
- react_1.default.createElement(react_2.motion.p, { layoutId: layout ? "category-".concat(card.title) : undefined, className: "text-base font-medium text-black dark:text-white" }, card.category),
248
- react_1.default.createElement(react_2.motion.p, { layoutId: layout ? "title-".concat(card.title) : undefined, className: "mt-4 text-2xl font-semibold text-neutral-700 md:text-5xl dark:text-white" }, card.title),
249
- react_1.default.createElement("div", { className: "py-10" }, card.content))))),
250
- react_1.default.createElement(react_2.motion.button, { layoutId: layout ? "card-".concat(card.title) : undefined, onClick: handleOpen, className: "relative z-10 flex h-80 w-56 flex-col items-start justify-start overflow-hidden rounded-3xl bg-gray-100 md:h-[40rem] md:w-96 dark:bg-neutral-900" },
251
- react_1.default.createElement("div", { className: "pointer-events-none absolute inset-x-0 top-0 z-30 h-full bg-gradient-to-b from-black/50 via-transparent to-transparent" }),
252
- react_1.default.createElement("div", { className: "relative z-40 p-8" },
253
- react_1.default.createElement(react_2.motion.p, { layoutId: layout ? "category-".concat(card.category) : undefined, className: "text-left font-sans text-sm font-medium text-white md:text-base" }, card.category),
254
- react_1.default.createElement(react_2.motion.p, { layoutId: layout ? "title-".concat(card.title) : undefined, className: "mt-2 max-w-xs text-left font-sans text-xl font-semibold [text-wrap:balance] text-white md:text-3xl" }, card.title)),
255
- react_1.default.createElement(exports.BlurImage, { src: card.src, alt: card.title, fill: true, className: "absolute inset-0 z-10 object-cover" }))));
256
- };
257
- exports.Card = Card;
258
- var BlurImage = function (_a) {
259
- var height = _a.height, width = _a.width, src = _a.src, className = _a.className, alt = _a.alt, rest = __rest(_a, ["height", "width", "src", "className", "alt"]);
260
- var _b = (0, react_1.useState)(true), isLoading = _b[0], setLoading = _b[1];
261
- return (react_1.default.createElement("img", __assign({ className: (0, utils_1.cn)("h-full w-full transition duration-300", isLoading ? "blur-sm" : "blur-0", className), onLoad: function () { return setLoading(false); }, src: src, width: width, height: height, loading: "lazy", decoding: "async", blurDataURL: typeof src === "string" ? src : undefined, alt: alt ? alt : "Background of a beautiful view" }, rest)));
262
- };
263
- exports.BlurImage = BlurImage;
@@ -1,11 +0,0 @@
1
- import type { ChangeEvent, FC, FormEvent } from "react";
2
- import type { UIMessage as Message } from "@ai-sdk/react";
3
- interface ChatInterfaceProps {
4
- messages: Message[];
5
- input: string;
6
- handleInputChange: (e: ChangeEvent<HTMLInputElement>) => void;
7
- handleSubmit: (e: FormEvent<HTMLFormElement>) => void;
8
- isLoading: boolean;
9
- }
10
- export declare const ChatInterface: FC<ChatInterfaceProps>;
11
- export {};
@@ -1,70 +0,0 @@
1
- "use client";
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ChatInterface = void 0;
8
- var react_1 = __importDefault(require("react"));
9
- var button_1 = require("../../../components/ui/button");
10
- var input_1 = require("../../../components/ui/input");
11
- var scroll_area_1 = require("../../../components/ui/scroll-area");
12
- var avatar_1 = require("../../../components/ui/avatar");
13
- var lucide_react_1 = require("lucide-react");
14
- function getMessageText(message) {
15
- // UIMessage uses `parts` with text parts having { type: 'text', text }
16
- var parts = message.parts || [];
17
- return parts
18
- .filter(function (p) { return (p === null || p === void 0 ? void 0 : p.type) === "text"; })
19
- .map(function (p) { return p.text; })
20
- .join("");
21
- }
22
- var ChatInterface = function (_a) {
23
- var messages = _a.messages, input = _a.input, handleInputChange = _a.handleInputChange, handleSubmit = _a.handleSubmit, isLoading = _a.isLoading;
24
- return (react_1.default.createElement("div", { className: "flex flex-1 flex-col min-h-0" },
25
- react_1.default.createElement(scroll_area_1.ScrollArea, { className: "flex-1 min-h-0 h-full p-4 block" },
26
- react_1.default.createElement("div", { className: "mx-auto max-w-6xl space-y-6 flex-1 min-h-0 flex flex-col justify-end h-full" },
27
- messages.map(function (message) { return (react_1.default.createElement("div", { key: message.id, className: "flex gap-4" }, message.role === "user" ? (react_1.default.createElement(react_1.default.Fragment, null,
28
- react_1.default.createElement("div", { className: "flex-1" },
29
- react_1.default.createElement("div", { className: "bg-muted rounded-lg p-4" },
30
- react_1.default.createElement("p", null, getMessageText(message)))),
31
- react_1.default.createElement(avatar_1.Avatar, null,
32
- react_1.default.createElement(avatar_1.AvatarImage, { src: "/placeholder.svg?height=32&width=32" }),
33
- react_1.default.createElement(avatar_1.AvatarFallback, null, "JD")))) : (react_1.default.createElement(react_1.default.Fragment, null,
34
- react_1.default.createElement(avatar_1.Avatar, null,
35
- react_1.default.createElement(avatar_1.AvatarFallback, { className: "bg-blue-500" }, "AI")),
36
- react_1.default.createElement("div", { className: "flex-1" },
37
- react_1.default.createElement("div", { className: "bg-muted rounded-lg border p-4" },
38
- react_1.default.createElement("p", { className: "mb-4" }, getMessageText(message)),
39
- react_1.default.createElement("div", { className: "flex items-center gap-2" },
40
- react_1.default.createElement(button_1.Button, { variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
41
- react_1.default.createElement(lucide_react_1.Copy, { className: "h-4 w-4" })),
42
- react_1.default.createElement(button_1.Button, { variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
43
- react_1.default.createElement(lucide_react_1.Share, { className: "h-4 w-4" })),
44
- react_1.default.createElement("div", { className: "ml-auto flex items-center gap-1" },
45
- react_1.default.createElement(button_1.Button, { variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
46
- react_1.default.createElement(lucide_react_1.ThumbsDown, { className: "h-4 w-4" })),
47
- react_1.default.createElement(button_1.Button, { variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
48
- react_1.default.createElement(lucide_react_1.ThumbsUp, { className: "h-4 w-4" })))))))))); }),
49
- isLoading && (react_1.default.createElement("div", { className: "flex gap-4" },
50
- react_1.default.createElement(avatar_1.Avatar, { className: "h-8 w-8" },
51
- react_1.default.createElement(avatar_1.AvatarFallback, { className: "bg-blue-500" }, "AI")),
52
- react_1.default.createElement("div", { className: "flex-1" },
53
- react_1.default.createElement("div", { className: "bg-muted rounded-lg border p-4" },
54
- react_1.default.createElement("div", { className: "flex items-center gap-2" },
55
- react_1.default.createElement("div", { className: "bg-muted h-2 w-2 animate-bounce rounded-full" }),
56
- react_1.default.createElement("div", { className: "bg-muted h-2 w-2 animate-bounce rounded-full", style: { animationDelay: "0.1s" } }),
57
- react_1.default.createElement("div", { className: "bg-muted h-2 w-2 animate-bounce rounded-full", style: { animationDelay: "0.2s" } })))))))),
58
- react_1.default.createElement("div", { className: "border-t px-4 py-2" },
59
- react_1.default.createElement("div", { className: "mx-auto max-w-6xl" },
60
- react_1.default.createElement("form", { onSubmit: handleSubmit, className: "relative" },
61
- react_1.default.createElement("div", { className: "bg-muted flex items-center gap-2 rounded-lg border p-2" },
62
- react_1.default.createElement(button_1.Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
63
- react_1.default.createElement(lucide_react_1.Paperclip, { className: "h-4 w-4" })),
64
- react_1.default.createElement(input_1.Input, { value: input, onChange: handleInputChange, placeholder: "Ask me anything...", className: "flex-1 border-0 bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0", disabled: isLoading }),
65
- react_1.default.createElement(button_1.Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 w-8 p-0" },
66
- react_1.default.createElement(lucide_react_1.Mic, { className: "h-4 w-4" })),
67
- react_1.default.createElement(button_1.Button, { type: "submit", size: "sm", disabled: !input.trim() || isLoading, className: "h-8 w-8 p-0" },
68
- react_1.default.createElement(lucide_react_1.Send, { className: "h-4 w-4" }))))))));
69
- };
70
- exports.ChatInterface = ChatInterface;
@@ -1,38 +0,0 @@
1
- import React from "react";
2
- import { Suggestion } from "./welcome-section";
3
- import { UIMessage, UseChatHelpers } from "@ai-sdk/react";
4
- export interface Message {
5
- id: string;
6
- role: "user" | "assistant";
7
- parts: {
8
- type: "text";
9
- text: string;
10
- }[];
11
- }
12
- export interface Chat {
13
- id: string;
14
- title: string;
15
- preview: string;
16
- timestamp: Date;
17
- messages: Message[];
18
- }
19
- type AiChatProps = {
20
- initialSelectedChatId?: string | null;
21
- username?: string;
22
- chats: Chat[];
23
- suggestions: Suggestion[];
24
- selectedChatId: string;
25
- onSelectedChatIdChange: (chatId: string) => void;
26
- chat: UseChatHelpers<UIMessage<unknown, Record<string, unknown>, Record<string, {
27
- input: unknown;
28
- output: unknown | undefined;
29
- }>>>;
30
- completion: {
31
- input: string;
32
- handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
33
- handleSubmit: (e: React.FormEvent<HTMLFormElement>) => void;
34
- isLoading: boolean;
35
- };
36
- };
37
- export declare const AiChat: ({ chat, chats, completion, onSelectedChatIdChange, selectedChatId, suggestions, username, }: AiChatProps) => React.JSX.Element;
38
- export {};