@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.
- package/components/app-sidebar.js +16 -23
- package/components/audio.js +11 -19
- package/components/dashboard.js +27 -65
- package/components/drawer-generic.js +20 -28
- package/components/enhanced-checkbox.js +10 -57
- package/components/enhanced-combobox.js +99 -143
- package/components/enhanced-drawer-footer.js +22 -31
- package/components/enhanced-drawer-header.js +6 -14
- package/components/enhanced-dropzone-impl.d.ts +32 -0
- package/components/enhanced-dropzone-impl.js +218 -0
- package/components/enhanced-dropzone.d.ts +2 -63
- package/components/enhanced-dropzone.js +6 -294
- package/components/enhanced-input.js +10 -57
- package/components/enhanced-label.js +6 -52
- package/components/enhanced-radio.js +12 -20
- package/components/enhanced-select.js +13 -61
- package/components/enhanced-slider.js +11 -58
- package/components/enhanced-switch.js +11 -58
- package/components/enhanced-table-footer-action.js +11 -19
- package/components/enhanced-table-footer-page.js +16 -24
- package/components/enhanced-table-footer-pagination.js +11 -21
- package/components/enhanced-table-header-action.js +22 -30
- package/components/enhanced-table-header-search.js +9 -17
- package/components/enhanced-table.js +125 -153
- package/components/enhanced-textarea.js +10 -57
- package/components/field.d.ts +1 -1
- package/components/field.js +31 -88
- package/components/image-resize-dialog.js +61 -159
- package/components/nav-main.js +32 -78
- package/components/nav-projects.js +37 -48
- package/components/nav-user.js +41 -51
- package/components/show-toast.js +5 -9
- package/components/sidebar.d.ts +1 -1
- package/components/sidebar.js +115 -184
- package/components/team-switcher.js +36 -47
- package/components/theme-provider.js +36 -84
- package/components/timeline.js +12 -20
- package/components/tooltip.js +10 -59
- package/components/ui/accordion.js +17 -67
- package/components/ui/alert-dialog.js +32 -89
- package/components/ui/alert.d.ts +1 -1
- package/components/ui/alert.js +14 -63
- package/components/ui/area-chart-v1-impl.d.ts +19 -0
- package/components/ui/area-chart-v1-impl.js +75 -0
- package/components/ui/area-chart-v1.d.ts +2 -19
- package/components/ui/area-chart-v1.js +4 -113
- package/components/ui/aspect-ratio.js +3 -39
- package/components/ui/avatar.js +13 -62
- package/components/ui/badge.d.ts +2 -2
- package/components/ui/badge.js +7 -55
- package/components/ui/breadcrumb.js +27 -80
- package/components/ui/button.d.ts +2 -2
- package/components/ui/button.js +10 -58
- package/components/ui/calendar-impl.d.ts +8 -0
- package/components/ui/calendar-impl.js +55 -0
- package/components/ui/calendar.d.ts +2 -8
- package/components/ui/calendar.js +5 -108
- package/components/ui/card.js +21 -73
- package/components/ui/carousel-impl.d.ts +18 -0
- package/components/ui/carousel-impl.js +117 -0
- package/components/ui/carousel.d.ts +6 -18
- package/components/ui/carousel.js +8 -170
- package/components/ui/chart-impl.d.ts +62 -0
- package/components/ui/chart-impl.js +162 -0
- package/components/ui/chart.d.ts +7 -62
- package/components/ui/chart.js +9 -219
- package/components/ui/checkbox.js +10 -57
- package/components/ui/collapsible.js +5 -43
- package/components/ui/combobox.js +22 -58
- package/components/ui/command-impl.d.ts +80 -0
- package/components/ui/command-impl.js +63 -0
- package/components/ui/command.d.ts +9 -80
- package/components/ui/command.js +12 -117
- package/components/ui/context-menu.js +41 -102
- package/components/ui/dialog.js +28 -84
- package/components/ui/drawer-impl.d.ts +22 -0
- package/components/ui/drawer-impl.js +56 -0
- package/components/ui/drawer.d.ts +10 -22
- package/components/ui/drawer.js +13 -111
- package/components/ui/dropdown-menu.js +41 -102
- package/components/ui/form.d.ts +4 -2
- package/components/ui/form.js +41 -95
- package/components/ui/hover-card.js +9 -58
- package/components/ui/input-otp-impl.d.ts +34 -0
- package/components/ui/input-otp-impl.js +43 -0
- package/components/ui/input-otp.d.ts +4 -34
- package/components/ui/input-otp.js +7 -92
- package/components/ui/input.js +6 -53
- package/components/ui/label.d.ts +1 -1
- package/components/ui/label.js +9 -56
- package/components/ui/language-selector.js +17 -55
- package/components/ui/menubar.js +46 -108
- package/components/ui/navigation-menu.d.ts +1 -1
- package/components/ui/navigation-menu.js +29 -84
- package/components/ui/pagination.js +30 -83
- package/components/ui/popover.js +10 -60
- package/components/ui/progress.js +8 -55
- package/components/ui/radio-group.js +12 -60
- package/components/ui/resizable-impl.d.ts +24 -0
- package/components/ui/resizable-impl.js +27 -0
- package/components/ui/resizable.d.ts +3 -24
- package/components/ui/resizable.js +6 -78
- package/components/ui/scroll-area.js +10 -58
- package/components/ui/select.js +34 -90
- package/components/ui/separator.js +7 -54
- package/components/ui/sheet.d.ts +1 -1
- package/components/ui/sheet.js +30 -86
- package/components/ui/skeleton.js +5 -21
- package/components/ui/slider.js +10 -57
- package/components/ui/sonner.js +7 -24
- package/components/ui/switch.js +8 -55
- package/components/ui/table.js +27 -81
- package/components/ui/tabs.js +14 -64
- package/components/ui/textarea.js +6 -53
- package/components/ui/theme-switcher.js +41 -91
- package/components/ui/toggle.d.ts +2 -2
- package/components/ui/toggle.js +9 -57
- package/data/admin-dashboard.js +16 -19
- package/hooks/use-enhanced-combobox.js +47 -124
- package/hooks/use-mobile.js +8 -44
- package/hooks/use-outside-click.js +6 -10
- package/lib/themes.js +1 -4
- package/lib/toast-utils.js +78 -120
- package/lib/utils.js +4 -11
- package/package.json +9 -90
- package/utils/transform-breadcrumbs.js +4 -8
- package/utils/transform-navitems.js +7 -22
- package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
- package/components/aceternity-ui/apple-cards-carousel.js +0 -263
- package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
- package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
- package/components/shadcn-example/ai-chat/index.d.ts +0 -38
- package/components/shadcn-example/ai-chat/index.js +0 -66
- package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
- package/components/shadcn-example/ai-chat/sidebar.js +0 -68
- package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
- package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
- package/components/shadcn-example/authentication/index.d.ts +0 -24
- package/components/shadcn-example/authentication/index.js +0 -59
- package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
- package/components/shadcn-example/authentication/user-auth-form.js +0 -54
- package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
- package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
- package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
- package/components/shadcn-example/blog-detail-page/content.js +0 -15
- package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
- package/components/shadcn-example/blog-detail-page/header.js +0 -36
- package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
- package/components/shadcn-example/blog-detail-page/index.js +0 -74
- package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
- package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
- package/components/shadcn-example/blog-page/index.d.ts +0 -20
- package/components/shadcn-example/blog-page/index.js +0 -36
- package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
- package/components/shadcn-example/coming-soon/countdown.js +0 -82
- package/components/shadcn-example/coming-soon/index.d.ts +0 -10
- package/components/shadcn-example/coming-soon/index.js +0 -41
- package/components/shadcn-io/color-picker/index.d.ts +0 -43
- package/components/shadcn-io/color-picker/index.js +0 -304
- package/components/shadcn-io/copy-button/index.d.ts +0 -16
- package/components/shadcn-io/copy-button/index.js +0 -121
- package/components/shadcn-io/dropzone/index.d.ts +0 -19
- package/components/shadcn-io/dropzone/index.js +0 -131
- package/components/shadcn-io/gantt/index.d.ts +0 -145
- package/components/shadcn-io/gantt/index.js +0 -766
- package/components/shadcn-io/table/index.d.ts +0 -60
- package/components/shadcn-io/table/index.js +0 -138
- package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
- package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
- package/templates/appcorp-v1/footer/cta.d.ts +0 -6
- package/templates/appcorp-v1/footer/cta.js +0 -21
- package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
- package/templates/appcorp-v1/footer/footer-grid.js +0 -52
- package/templates/appcorp-v1/footer/index.d.ts +0 -3
- package/templates/appcorp-v1/footer/index.js +0 -28
- package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
- package/templates/appcorp-v1/footer/newsletter.js +0 -28
- package/templates/appcorp-v1/footer/stats.d.ts +0 -6
- package/templates/appcorp-v1/footer/stats.js +0 -15
- package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/announcement-bar.js +0 -15
- package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
- package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
- package/templates/appcorp-v1/header/index.d.ts +0 -12
- package/templates/appcorp-v1/header/index.js +0 -16
- package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
- package/templates/appcorp-v1/header/mobile-menu.js +0 -101
- package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/navigation-bar.js +0 -117
- package/templates/appcorp-v1/header/social-button.d.ts +0 -7
- package/templates/appcorp-v1/header/social-button.js +0 -48
- package/templates/appcorp-v1/home.d.ts +0 -3
- package/templates/appcorp-v1/home.js +0 -27
- package/templates/data/appcorp-v1.d.ts +0 -93
- package/templates/data/appcorp-v1.js +0 -348
- package/templates/data/edupilotpro-v1.d.ts +0 -33
- package/templates/data/edupilotpro-v1.js +0 -116
- package/templates/data/school-v1.d.ts +0 -328
- package/templates/data/school-v1.js +0 -1563
- package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
- package/templates/edupilotpro-v1/feature-card.js +0 -28
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
- package/templates/school-v1/footer.d.ts +0 -3
- package/templates/school-v1/footer.js +0 -75
- package/templates/school-v1/index.d.ts +0 -18
- package/templates/school-v1/index.js +0 -60
- package/templates/school-v1/navigation.d.ts +0 -3
- package/templates/school-v1/navigation.js +0 -123
- package/templates/school-v1/sections/about.d.ts +0 -3
- package/templates/school-v1/sections/about.js +0 -49
- package/templates/school-v1/sections/admissions.d.ts +0 -3
- package/templates/school-v1/sections/admissions.js +0 -77
- package/templates/school-v1/sections/contact.d.ts +0 -3
- package/templates/school-v1/sections/contact.js +0 -67
- package/templates/school-v1/sections/faqs.d.ts +0 -3
- package/templates/school-v1/sections/faqs.js +0 -50
- package/templates/school-v1/sections/hero.d.ts +0 -3
- package/templates/school-v1/sections/hero.js +0 -132
- package/templates/school-v1/sections/management.d.ts +0 -3
- package/templates/school-v1/sections/management.js +0 -34
- package/templates/school-v1/sections/policies.d.ts +0 -3
- package/templates/school-v1/sections/policies.js +0 -127
- package/templates/school-v1/sections/programs.d.ts +0 -3
- package/templates/school-v1/sections/programs.js +0 -107
- package/templates/school-v1/sections/testimonials.d.ts +0 -3
- package/templates/school-v1/sections/testimonials.js +0 -46
- package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
- 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": "
|
|
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
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
"@
|
|
70
|
-
"@
|
|
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
|
-
"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
21
|
-
return navItems.map(
|
|
6
|
+
export const transformNavItems = (navItems, pathname) => {
|
|
7
|
+
return navItems.map((navItem) => {
|
|
22
8
|
// Check if main nav item URL matches
|
|
23
|
-
|
|
9
|
+
const isMainActive = navItem.url !== "#" && pathname === navItem.url;
|
|
24
10
|
// Transform subItems to mark active ones
|
|
25
|
-
|
|
26
|
-
return
|
|
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
|
-
|
|
30
|
-
return
|
|
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 {};
|