add alisurvey main page
This commit is contained in:
24
products/react-apps/alisurvey/.gitignore
vendored
Normal file
24
products/react-apps/alisurvey/.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
25
products/react-apps/alisurvey/README.md
Normal file
25
products/react-apps/alisurvey/README.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Alisurvey
|
||||||
|
|
||||||
|
https://www.alicorns.co.jp/alisurvey
|
||||||
|
|
||||||
|
## 本地开发
|
||||||
|
|
||||||
|
### 环境准备
|
||||||
|
|
||||||
|
- 安装 [Node.js](https://nodejs.org/en)
|
||||||
|
|
||||||
|
### 操作步骤
|
||||||
|
|
||||||
|
- 安装依赖
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
- 启动 Dev Server
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
- 在浏览器访问 http://localhost:3000
|
||||||
28
products/react-apps/alisurvey/index.html
Normal file
28
products/react-apps/alisurvey/index.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ja">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Alisurvey - 日本企業向けSaaSアンケートツール | アンケート作成・データ分析</title>
|
||||||
|
<meta name="description" content="Alisurveyは、日本企業のニーズに特化したSaaS型アンケートツールです。コード不要で直感的にアンケートを作成し、データを分析できます。無料で始める。" />
|
||||||
|
<meta name="keywords" content="アンケート, アンケート作成, アンケートツール, SaaS, データ分析, Alisurvey, 日本語アンケート" />
|
||||||
|
<meta property="og:title" content="Alisurvey - 日本企業向けSaaSアンケートツール" />
|
||||||
|
<meta property="og:description" content="コード不要で直感的にアンケートを作成し、データを分析できるSaaSツール" />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content="https://example.com" />
|
||||||
|
<meta property="og:image" content="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Survey%20software%20dashboard%20Japanese%20interface&sign=abf2fd53e3a93d90381b48ce9d773a33" />
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
<meta name="twitter:title" content="Alisurvey - 日本企業向けSaaSアンケートツール" />
|
||||||
|
<meta name="twitter:description" content="コード不要で直感的にアンケートを作成し、データを分析できます" />
|
||||||
|
<meta name="twitter:image" content="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Survey%20software%20dashboard%20Japanese%20interface&sign=abf2fd53e3a93d90381b48ce9d773a33" />
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
3794
products/react-apps/alisurvey/package-lock.json
generated
Normal file
3794
products/react-apps/alisurvey/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
34
products/react-apps/alisurvey/package.json
Normal file
34
products/react-apps/alisurvey/package.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "project_template_react",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev:client": "vite --host --port 3000",
|
||||||
|
"dev": "npm run dev:client",
|
||||||
|
"build:client": "vite build --outDir dist/static",
|
||||||
|
"build": "rm -rf dist && npm run build:client && cp package.json dist && touch dist/build.flag"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"clsx": "^2.1.1",
|
||||||
|
"framer-motion": "^12.9.2",
|
||||||
|
"react": "^18.3.1",
|
||||||
|
"react-dom": "^18.3.1",
|
||||||
|
"react-router-dom": "^7.3.0",
|
||||||
|
"recharts": "^2.15.1",
|
||||||
|
"sonner": "^2.0.2",
|
||||||
|
"tailwind-merge": "^3.0.2",
|
||||||
|
"zod": "^3.24.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "^18.3.12",
|
||||||
|
"@types/react-dom": "^18.3.1",
|
||||||
|
"@vitejs/plugin-react": "^4.3.4",
|
||||||
|
"autoprefixer": "^10.4.21",
|
||||||
|
"postcss": "^8.5.3",
|
||||||
|
"tailwindcss": "^3.4.17",
|
||||||
|
"typescript": "~5.7.2",
|
||||||
|
"vite": "^6.2.0",
|
||||||
|
"vite-tsconfig-paths": "^5.1.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
2322
products/react-apps/alisurvey/pnpm-lock.yaml
generated
Normal file
2322
products/react-apps/alisurvey/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
products/react-apps/alisurvey/postcss.config.js
Normal file
10
products/react-apps/alisurvey/postcss.config.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
|
||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
};
|
||||||
23
products/react-apps/alisurvey/src/App.tsx
Normal file
23
products/react-apps/alisurvey/src/App.tsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { Routes, Route } from "react-router-dom";
|
||||||
|
import Home from "@/pages/Home";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { AuthContext } from '@/contexts/authContext';
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
const [isAuthenticated, setIsAuthenticated] = useState(false);
|
||||||
|
|
||||||
|
const logout = () => {
|
||||||
|
setIsAuthenticated(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AuthContext.Provider
|
||||||
|
value={{ isAuthenticated, setIsAuthenticated, logout }}
|
||||||
|
>
|
||||||
|
<Routes>
|
||||||
|
<Route path="/" element={<Home />} />
|
||||||
|
<Route path="/other" element={<div className="text-center text-xl">Other Page - Coming Soon</div>} />
|
||||||
|
</Routes>
|
||||||
|
</AuthContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
66
products/react-apps/alisurvey/src/components/CTA.tsx
Normal file
66
products/react-apps/alisurvey/src/components/CTA.tsx
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
|
||||||
|
export default function CTA() {
|
||||||
|
return (
|
||||||
|
<section className="py-24 relative overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-r from-blue-600 to-indigo-700 z-0"></div>
|
||||||
|
<div
|
||||||
|
className="absolute inset-0 z-10 opacity-10"
|
||||||
|
style={{
|
||||||
|
backgroundImage: `radial-gradient(#416DE8 50%, transparent 50%)`,
|
||||||
|
backgroundSize: `60px 60px`,
|
||||||
|
}}
|
||||||
|
></div>
|
||||||
|
<div className="container mx-auto px-4 md:px-6 relative z-20">
|
||||||
|
<div className="max-w-3xl mx-auto text-center">
|
||||||
|
<motion.h2
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="text-4xl md:text-5xl font-bold text-white mb-6 leading-tight"
|
||||||
|
>
|
||||||
|
今日からアンケート作成を簡単に
|
||||||
|
</motion.h2>
|
||||||
|
|
||||||
|
<motion.p
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.1 }}
|
||||||
|
className="text-xl text-blue-100 mb-10"
|
||||||
|
>
|
||||||
|
無料で始められます。クレジットカードは不要です。
|
||||||
|
</motion.p>
|
||||||
|
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.2 }}
|
||||||
|
className="flex flex-col sm:flex-row gap-4 justify-center"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
href="#signup"
|
||||||
|
className="px-8 py-5 bg-white text-blue-600 font-bold rounded-xl shadow-xl hover:shadow-2xl transition-all text-center text-lg"
|
||||||
|
>
|
||||||
|
無料で始める <i className="fa-solid fa-arrow-right ml-2"></i>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#demo"
|
||||||
|
className="px-8 py-5 bg-transparent border-2 border-white text-white font-bold rounded-xl hover:bg-white/10 transition-all flex items-center justify-center gap-2 text-lg"
|
||||||
|
>
|
||||||
|
<i className="fa-solid fa-play-circle"></i> デモを見る
|
||||||
|
</a>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
<motion.p
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.3 }}
|
||||||
|
className="text-blue-100 text-sm mt-6"
|
||||||
|
>
|
||||||
|
アカウント作成することで、利用規約とプライバシーポリシーに同意したものとみなされます。
|
||||||
|
</motion.p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
83
products/react-apps/alisurvey/src/components/ChartDemo.tsx
Normal file
83
products/react-apps/alisurvey/src/components/ChartDemo.tsx
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, PieChart, Pie, Cell } from 'recharts';
|
||||||
|
|
||||||
|
// ダミーデータ
|
||||||
|
const satisfactionData = [
|
||||||
|
{ name: '非常に満足', value: 35 },
|
||||||
|
{ name: '満足', value: 40 },
|
||||||
|
{ name: '普通', value: 15 },
|
||||||
|
{ name: '不満', value: 7 },
|
||||||
|
{ name: '非常に不満', value: 3 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const monthlyData = [
|
||||||
|
{ month: '1月', 回答数: 120 },
|
||||||
|
{ month: '2月', 回答数: 190 },
|
||||||
|
{ month: '3月', 回答数: 150 },
|
||||||
|
{ month: '4月', 回答数: 280 },
|
||||||
|
{ month: '5月', 回答数: 320 },
|
||||||
|
{ month: '6月', 回答数: 250 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884d8'];
|
||||||
|
|
||||||
|
export default function ChartDemo() {
|
||||||
|
return (
|
||||||
|
<section className="py-20 bg-gray-50">
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
<h2 className="text-3xl font-bold text-center mb-16 text-gray-800">リアルタイムデータ分析</h2>
|
||||||
|
|
||||||
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||||
|
{/* 円グラフ */}
|
||||||
|
<div className="bg-white p-6 rounded-xl shadow-lg">
|
||||||
|
<h3 className="text-xl font-semibold mb-6 text-gray-700">顧客満足度分析</h3>
|
||||||
|
<div className="h-80">
|
||||||
|
<ResponsiveContainer width="100%" height="100%">
|
||||||
|
<PieChart>
|
||||||
|
<Pie
|
||||||
|
data={satisfactionData}
|
||||||
|
cx="50%"
|
||||||
|
cy="50%"
|
||||||
|
labelLine={false}
|
||||||
|
outerRadius={120}
|
||||||
|
fill="#8884d8"
|
||||||
|
dataKey="value"
|
||||||
|
label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`}
|
||||||
|
>
|
||||||
|
{satisfactionData.map((entry, index) => (
|
||||||
|
<Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
|
||||||
|
))}
|
||||||
|
</Pie>
|
||||||
|
<Tooltip />
|
||||||
|
</PieChart>
|
||||||
|
</ResponsiveContainer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 棒グラフ */}
|
||||||
|
<div className="bg-white p-6 rounded-xl shadow-lg">
|
||||||
|
<h3 className="text-xl font-semibold mb-6 text-gray-700">月間回答数推移</h3>
|
||||||
|
<div className="h-80">
|
||||||
|
<ResponsiveContainer width="100%" height="100%">
|
||||||
|
<BarChart data={monthlyData}>
|
||||||
|
<CartesianGrid strokeDasharray="3 3" />
|
||||||
|
<XAxis dataKey="month" />
|
||||||
|
<YAxis />
|
||||||
|
<Tooltip />
|
||||||
|
<Legend />
|
||||||
|
<Bar dataKey="回答数" fill="#8884d8" radius={[4, 4, 0, 0]} />
|
||||||
|
</BarChart>
|
||||||
|
</ResponsiveContainer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mt-12 text-center">
|
||||||
|
<p className="text-gray-700 max-w-2xl mx-auto">
|
||||||
|
収集したデータはリアルタイムで分析され、グラフ形式で視覚化されます。
|
||||||
|
PNG画像としてエクスポートすることも可能です。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
products/react-apps/alisurvey/src/components/Empty.tsx
Normal file
9
products/react-apps/alisurvey/src/components/Empty.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { toast } from "sonner";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
// Empty component
|
||||||
|
export function Empty() {
|
||||||
|
return (
|
||||||
|
<div className={cn("flex h-full items-center justify-center")} onClick={() => toast('Coming soon')}>Empty</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
29
products/react-apps/alisurvey/src/components/FeatureCard.tsx
Normal file
29
products/react-apps/alisurvey/src/components/FeatureCard.tsx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
|
interface FeatureCardProps {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
icon: string;
|
||||||
|
imageUrl: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function FeatureCard({ title, description, icon, imageUrl }: FeatureCardProps) {
|
||||||
|
return (
|
||||||
|
<div className="bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl transition-shadow duration-300">
|
||||||
|
<div className="h-48 overflow-hidden">
|
||||||
|
<img
|
||||||
|
src={imageUrl}
|
||||||
|
alt={title}
|
||||||
|
className="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="p-6">
|
||||||
|
<div className="w-12 h-12 bg-blue-100 dark:bg-blue-900/30 rounded-2xl flex items-center justify-center mb-4 text-blue-600 dark:text-blue-400 text-2xl">
|
||||||
|
<i className={cn("fa-solid", icon, "text-blue-600 text-xl")}></i>
|
||||||
|
</div>
|
||||||
|
<h3 className="text-xl font-bold text-gray-900 mb-2">{title}</h3>
|
||||||
|
<p className="text-gray-700">{description}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
128
products/react-apps/alisurvey/src/components/FeatureDetail.tsx
Normal file
128
products/react-apps/alisurvey/src/components/FeatureDetail.tsx
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
import FeatureCard from './FeatureCard';
|
||||||
|
|
||||||
|
export default function FeatureSection() {
|
||||||
|
return (
|
||||||
|
<section id="details" className="py-20 bg-gray-50">
|
||||||
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
|
<div className="text-center mb-16">
|
||||||
|
<h2 className="text-3xl md:text-4xl font-bold mb-4">豊富な機能で業務を効率化</h2>
|
||||||
|
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
|
||||||
|
多様な機能を通じて、あらゆるアンケートニーズにお応えします
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 機能詳細1 */}
|
||||||
|
<div className="flex flex-col md:flex-row items-center mb-20">
|
||||||
|
<div className="md:w-1/2 mb-10 md:mb-0 md:pr-12">
|
||||||
|
<h3 className="text-2xl font-bold mb-4 bg-gradient-to-r from-blue-600 to-indigo-600 bg-clip-text text-transparent">直感的なアンケート作成</h3>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>ドラッグ&ドロップ操作で簡単にアンケートを作成</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>事前設定されたテンプレートを使用して即座に開始</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>テキストを一括インポートしてクイック作成</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>20種類以上のコンポーネントで多様な質問形式に対応</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="md:w-1/2">
|
||||||
|
<div className="bg-white p-4 rounded-xl shadow-xl">
|
||||||
|
<img
|
||||||
|
src="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Drag%20and%20drop%20questionnaire%20builder%20interface%20with%20various%20components%20modern%20UI&sign=7476f5a0f4db10309b9e34d74bff863b"
|
||||||
|
alt="ドラッグ&ドロップアンケート作成"
|
||||||
|
className="rounded-lg w-full h-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 機能詳細2 */}
|
||||||
|
<div className="flex flex-col md:flex-row-reverse items-center mb-20">
|
||||||
|
<div className="md:w-1/2 mb-10 md:mb-0 md:pl-12">
|
||||||
|
<h3 className="text-2xl font-bold mb-4 bg-gradient-to-r from-blue-600 to-indigo-600 bg-clip-text text-transparent">多様なアクセス制限設定</h3>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>IPアドレスによるアクセス制限</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>デバイスごとの回答回数制限</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>時間帯によるアクセス許可設定</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>パスワードによるアンケート保護</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="md:w-1/2">
|
||||||
|
<div className="bg-white p-4 rounded-xl shadow-xl">
|
||||||
|
<img
|
||||||
|
src="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Access%20control%20settings%20interface%20for%20questionnaire%20security&sign=1bd9e6e769ebe1e36a8f9409e42a79de"
|
||||||
|
alt="アクセス制限設定"
|
||||||
|
className="rounded-lg w-full h-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 機能詳細3 */}
|
||||||
|
<div className="flex flex-col md:flex-row items-center">
|
||||||
|
<div className="md:w-1/2 mb-10 md:mb-0 md:pr-12">
|
||||||
|
<h3 className="text-2xl font-bold mb-4 bg-gradient-to-r from-blue-600 to-indigo-600 bg-clip-text text-transparent">充実したデータ分析機能</h3>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>リアルタイムでの回答データ集計とグラフ表示</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>データの追加、編集、エクスポート、印刷機能</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>回答データのエクセルやCSV形式でのエクスポート</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||||||
|
<span>統計グラフのPNG画像としてのエクスポート</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="md:w-1/2">
|
||||||
|
<div className="bg-white p-4 rounded-xl shadow-xl">
|
||||||
|
<img
|
||||||
|
src="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Questionnaire%20data%20analysis%20dashboard%20with%20charts%20and%20graphs&sign=bd395ab9ad3c4c07ce7a3c64af386389"
|
||||||
|
alt="データ分析ダッシュボード"
|
||||||
|
className="rounded-lg w-full h-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mt-20 text-center">
|
||||||
|
<p className="text-gray-600 mb-4">
|
||||||
|
上記以外のニーズがある場合は、カスタムプランもご用意しています。
|
||||||
|
</p>
|
||||||
|
<a href="#contact" className="text-blue-600 font-medium hover:underline">
|
||||||
|
カスタムプランについて <i className="fa-solid fa-arrow-right ml-1"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
119
products/react-apps/alisurvey/src/components/FeatureSection.tsx
Normal file
119
products/react-apps/alisurvey/src/components/FeatureSection.tsx
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
import FeatureCard from './FeatureCard';
|
||||||
|
|
||||||
|
export default function FeatureSection() {
|
||||||
|
// 製品機能データ
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
title: "直感的なアンケート作成",
|
||||||
|
description: "ドラッグ&ドロップ操作で簡単にアンケートを作成。20種類以上のコンポーネントであらゆるニーズに対応。",
|
||||||
|
icon: "fa-magic",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20builder%20interface%20with%20drag%20and%20drop%20functionality%2C%20Japanese%20UI%2C%20form%20components&sign=8e9d8de869467bedbdf2e76d42647619"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "豊富なテンプレート",
|
||||||
|
description: "業界別のプリセットテンプレートを提供。すぐに使えるだけでなく、独自のテンプレートも作成可能。",
|
||||||
|
icon: "fa-file-alt",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20templates%20gallery%20Japanese%20interface%20business%20style&sign=53407b72fa47fa4cf1f6375135dcc882"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "高度な条件表示設定",
|
||||||
|
description: "回答に応じて質問を動的に表示/非表示。複雑なロジックも直感的に設定可能。",
|
||||||
|
icon: "fa-sitemap",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20conditional%20logic%20settings%20Japanese%20interface&sign=8caac1c11078139b117d451993301122"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "多様なアクセス制限",
|
||||||
|
description: "IP、デバイス、回答回数、時間制限など、必要な制限を設定してデータの信頼性を確保。",
|
||||||
|
icon: "fa-shield-alt",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20access%20control%20settings%20Japanese%20security%20interface&sign=2c413aa7bedc4e37a48cf3fd6898582e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "リアルタイムデータ分析",
|
||||||
|
description: "回答をリアルタイムで集計し、グラフ(棒グラフ、折れ線グラフ、円グラフ)で視覚化。",
|
||||||
|
icon: "fa-chart-pie",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20data%20analysis%20dashboard%20charts%20Japanese%20interface&sign=ae43ebbb1096c076634ea4259267a835"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "柔軟なデータ管理",
|
||||||
|
description: "収集したデータの編集、エクスポート、印刷、添付ファイルの一括ダウンロードに対応。",
|
||||||
|
icon: "fa-database",
|
||||||
|
imageUrl: "https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20data%20management%20Japanese%20interface%20export%20functionality&sign=c49d55504f0bade0cfcec05fb3ac650c"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section id="features" className="py-20 bg-white dark:bg-gray-900">
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
{/* セクションヘッダー */}
|
||||||
|
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||||
|
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-6">
|
||||||
|
Alisurveyの特徴
|
||||||
|
</h2>
|
||||||
|
<p className="text-lg text-gray-700">
|
||||||
|
アンケート作成からデータ収集、分析まで、すべてのプロセスを簡単かつ効率的に行えます。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 機能カードグリッド */}
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||||
|
{features.map((feature, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={index}
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="group"
|
||||||
|
>
|
||||||
|
<FeatureCard {...feature} />
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 追加の機能強調 */}
|
||||||
|
<div className="mt-24">
|
||||||
|
<div className="bg-gradient-to-r from-blue-600 to-indigo-700 rounded-2xl overflow-hidden">
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2">
|
||||||
|
<div className="p-8 md:p-12 flex flex-col justify-center relative">
|
||||||
|
<div
|
||||||
|
className="absolute inset-0 z-10 opacity-10"
|
||||||
|
style={{
|
||||||
|
backgroundImage: `radial-gradient(#416DE8 50%, transparent 50%)`,
|
||||||
|
backgroundSize: `60px 60px`,
|
||||||
|
}}
|
||||||
|
></div>
|
||||||
|
<h3 className="text-2xl md:text-3xl font-bold text-white mb-4">
|
||||||
|
ブランドに合わせたアンケートカスタマイズ
|
||||||
|
</h3>
|
||||||
|
<p className="text-blue-100 mb-6">
|
||||||
|
ヘッダー画像、背景画像、色、ボタンテキストなどを自由にカスタマイズ。
|
||||||
|
企業のブランドイメージに合わせたアンケートを作成できます。
|
||||||
|
</p>
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{[
|
||||||
|
"企業ロゴやカラーテーマの適用",
|
||||||
|
"カスタム送信メッセージとリダイレクト設定",
|
||||||
|
"モバイルフレンドリーなレスポンシブデザイン",
|
||||||
|
"回収センターでアンケートを簡単に復元"
|
||||||
|
].map((item, i) => (
|
||||||
|
<li key={i} className="flex items-center text-white">
|
||||||
|
<i className="fa-solid fa-check-circle mr-2"></i>
|
||||||
|
<span>{item}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="bg-gray-100 p-4 md:p-8 flex items-center justify-center">
|
||||||
|
<img
|
||||||
|
src="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_4_3&prompt=Survey%20customization%20interface%20Japanese%20design%20tools%20brand%20colors&sign=9512c3b4c76e5a0413e8a1275d960909"
|
||||||
|
alt="アンケートカスタマイズ"
|
||||||
|
className="rounded-xl shadow-lg max-w-full h-auto"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
71
products/react-apps/alisurvey/src/components/Footer.tsx
Normal file
71
products/react-apps/alisurvey/src/components/Footer.tsx
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
|
export default function Footer() {
|
||||||
|
return (
|
||||||
|
<footer className="bg-gray-900 text-gray-300 pt-16 pb-8">
|
||||||
|
<div className="container mx-auto px-4 md:px-6">
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 mb-12">
|
||||||
|
<div className="lg:col-span-2">
|
||||||
|
<h3 className="text-2xl font-bold text-white mb-4">Alisurvey</h3>
|
||||||
|
<p className="text-gray-400 mb-6 max-w-md">
|
||||||
|
ドラッグ&ドロップで簡単にアンケートを作成。リアルタイムで結果を分析できるSaaSプラットフォームです。
|
||||||
|
</p>
|
||||||
|
<div className="flex space-x-4">
|
||||||
|
<a href="#" className="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-blue-600 transition-colors">
|
||||||
|
<i className="fa-brands fa-twitter"></i>
|
||||||
|
</a>
|
||||||
|
<a href="#" className="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-blue-700 transition-colors">
|
||||||
|
<i className="fa-brands fa-facebook"></i>
|
||||||
|
</a>
|
||||||
|
<a href="#" className="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-pink-600 transition-colors">
|
||||||
|
<i className="fa-brands fa-instagram"></i>
|
||||||
|
</a>
|
||||||
|
<a href="#" className="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-gray-700 transition-colors">
|
||||||
|
<i className="fa-brands fa-linkedin"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="text-lg font-semibold text-white mb-4">製品</h4>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">特徴</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">価格</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">更新履歴</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="text-lg font-semibold text-white mb-4">サポート</h4>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">ヘルプセンター</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">チュートリアル</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">お問い合わせ</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="text-lg font-semibold text-white mb-4">会社</h4>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">会社概要</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">プライバシーポリシー</a></li>
|
||||||
|
<li><a href="#" className="text-gray-400 hover:text-white transition-colors">利用規約</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="border-t border-gray-800 pt-8">
|
||||||
|
<div className="flex flex-col md:flex-row justify-between items-center">
|
||||||
|
<p className="text-gray-500 text-sm mb-4 md:mb-0">
|
||||||
|
© 2025 Alisurvey. 全著作権所有.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="flex gap-6">
|
||||||
|
<a href="#" className="text-gray-500 hover:text-gray-300 text-sm">利用規約</a>
|
||||||
|
<a href="#" className="text-gray-500 hover:text-gray-300 text-sm">プライバシーポリシー</a>
|
||||||
|
<a href="#" className="text-gray-500 hover:text-gray-300 text-sm">Cookie設定</a>
|
||||||
|
<a href="#" className="text-gray-500 hover:text-gray-300 text-sm">サポート</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
97
products/react-apps/alisurvey/src/components/Header.tsx
Normal file
97
products/react-apps/alisurvey/src/components/Header.tsx
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
|
interface HeaderProps {
|
||||||
|
isScrolled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Header({ isScrolled }: HeaderProps) {
|
||||||
|
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<header
|
||||||
|
className={cn(
|
||||||
|
"fixed w-full z-50 transition-all duration-300",
|
||||||
|
isScrolled
|
||||||
|
? "bg-white shadow-md py-3"
|
||||||
|
: "bg-transparent py-5"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
<div className="flex justify-between items-center">
|
||||||
|
{/* ロゴ */}
|
||||||
|
<div className="flex items-baseline">
|
||||||
|
<h1 className="text-2xl font-bold text-blue-600">Alisurvey</h1>
|
||||||
|
<span className="ml-2 text-gray-500 text-xs">アンケートシステム</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* デスクトップナビゲーション */}
|
||||||
|
<nav className="hidden md:flex items-center space-x-8">
|
||||||
|
<a href="#features" className="text-gray-700 hover:text-blue-600 transition-colors">特徴</a>
|
||||||
|
<a href="#details" className="text-gray-700 hover:text-blue-600 transition-colors">機能</a>
|
||||||
|
{/* <a href="#pricing" className="text-gray-700 hover:text-blue-600 transition-colors">価格</a>
|
||||||
|
<a href="#testimonials" className="text-gray-700 hover:text-blue-600 transition-colors">顧客の声</a> */}
|
||||||
|
<a href="#contact" className="text-gray-700 hover:text-blue-600 transition-colors">お問い合わせ</a>
|
||||||
|
<button className="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-lg transition-colors">
|
||||||
|
無料で始める
|
||||||
|
</button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{/* モバイルメニューボタン */}
|
||||||
|
<button
|
||||||
|
className="md:hidden text-gray-700"
|
||||||
|
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
|
||||||
|
>
|
||||||
|
<i className="fa-solid fa-bars text-xl"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* モバイルメニュー */}
|
||||||
|
{mobileMenuOpen && (
|
||||||
|
<div className="md:hidden bg-white shadow-lg absolute w-full">
|
||||||
|
<div className="container mx-auto px-4 py-4 flex flex-col space-y-4">
|
||||||
|
<a
|
||||||
|
href="#features"
|
||||||
|
className="text-gray-700 hover:text-blue-600 py-2 transition-colors"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
>
|
||||||
|
特徴
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#details"
|
||||||
|
className="text-gray-700 hover:text-blue-600 py-2 transition-colors"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
>
|
||||||
|
機能
|
||||||
|
</a>
|
||||||
|
{/* <a
|
||||||
|
href="#pricing"
|
||||||
|
className="text-gray-700 hover:text-blue-600 py-2 transition-colors"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
>
|
||||||
|
価格
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#testimonials"
|
||||||
|
className="text-gray-700 hover:text-blue-600 py-2 transition-colors"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
>
|
||||||
|
顧客の声
|
||||||
|
</a> */}
|
||||||
|
<a
|
||||||
|
href="#contact"
|
||||||
|
className="text-gray-700 hover:text-blue-600 py-2 transition-colors"
|
||||||
|
onClick={() => setMobileMenuOpen(false)}
|
||||||
|
>
|
||||||
|
お問い合わせ
|
||||||
|
</a>
|
||||||
|
<button className="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-lg transition-colors">
|
||||||
|
無料で始める
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
}
|
||||||
104
products/react-apps/alisurvey/src/components/Hero.tsx
Normal file
104
products/react-apps/alisurvey/src/components/Hero.tsx
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
|
export default function Hero() {
|
||||||
|
return (
|
||||||
|
<section
|
||||||
|
className="pt-32 pb-20 md:pt-40 md:pb-32 bg-gradient-to-br from-blue-50 to-indigo-50">
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
<div className="flex flex-col md:flex-row items-center">
|
||||||
|
{}
|
||||||
|
<div className="md:w-1/2 mb-12 md:mb-0">
|
||||||
|
<motion.div
|
||||||
|
initial={{
|
||||||
|
opacity: 0,
|
||||||
|
y: 20
|
||||||
|
}}
|
||||||
|
animate={{
|
||||||
|
opacity: 1,
|
||||||
|
y: 0
|
||||||
|
}}
|
||||||
|
transition={{
|
||||||
|
duration: 0.6
|
||||||
|
}}>
|
||||||
|
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 mb-6" style={{ lineHeight: '1.1em' }}>
|
||||||
|
フォームは簡単に<br />
|
||||||
|
共有は一瞬で<br />
|
||||||
|
<span className="bg-gradient-to-r from-blue-600 to-indigo-600 bg-clip-text text-transparent">あとは分析に力を注ごう</span>
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg md:text-xl text-gray-700 mb-8 max-w-lg">ドラッグ&ドロップで直感的にアンケート作成。<br />QRコードで即時共有、効率的な運用を実現します。</p>
|
||||||
|
<div className="flex flex-col sm:flex-row gap-4">
|
||||||
|
<button
|
||||||
|
className="bg-blue-600 hover:bg-blue-700 text-white px-8 py-4 rounded-lg text-lg font-medium transition-all shadow-lg hover:shadow-xl transform hover:-translate-y-1">無料で始める <i className="fa-solid fa-arrow-right ml-2"></i>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
className="bg-white hover:bg-gray-50 text-blue-600 border border-blue-600 px-8 py-4 rounded-lg text-lg font-medium transition-all">
|
||||||
|
<i className="fa-solid fa-play-circle mr-2"></i>デモを見る
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/* <div className="mt-10 flex items-center">
|
||||||
|
<div className="flex -space-x-2">
|
||||||
|
{[1, 2, 3, 4].map(i => <img
|
||||||
|
key={i}
|
||||||
|
src={`https://space.coze.cn/api/coze_space/gen_image?image_size=square&prompt=Japanese%20business%20person%20avatar&sign=c0224456042d7467b42e4fe01b6bb356`}
|
||||||
|
alt="顧客"
|
||||||
|
className="w-10 h-10 rounded-full border-2 border-white" />)}
|
||||||
|
</div>
|
||||||
|
<div className="ml-4">
|
||||||
|
<div className="flex items-center">
|
||||||
|
{[1, 2, 3, 4, 5].map(i => <i key={i} className="fa-solid fa-star text-yellow-400 text-sm"></i>)}
|
||||||
|
</div>
|
||||||
|
<p className="text-sm text-gray-600">500社以上の企業が信頼</p>
|
||||||
|
</div>
|
||||||
|
</div> */}
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
{}
|
||||||
|
<div className="md:w-1/2">
|
||||||
|
<motion.div
|
||||||
|
initial={{
|
||||||
|
opacity: 0,
|
||||||
|
x: 20
|
||||||
|
}}
|
||||||
|
animate={{
|
||||||
|
opacity: 1,
|
||||||
|
x: 0
|
||||||
|
}}
|
||||||
|
transition={{
|
||||||
|
duration: 0.6,
|
||||||
|
delay: 0.2
|
||||||
|
}}>
|
||||||
|
<div className="relative">
|
||||||
|
<img
|
||||||
|
src="https://space.coze.cn/api/coze_space/gen_image?image_size=landscape_16_9&prompt=Survey%20software%20dashboard%20interface%20with%20Japanese%20language%20UI%2C%20clean%20design%2C%20data%20visualization%2C%20professional%20business%20software&sign=5519ee83ef20788c1286f1e6b97baab3"
|
||||||
|
alt="Alisurveyダッシュボード"
|
||||||
|
className="relative rounded-2xl overflow-hidden shadow-2xl transform rotate-1 hover:rotate-0 transition-transform duration-500" />
|
||||||
|
<div className="absolute -bottom-6 -left-6 bg-white p-4 rounded-xl shadow-lg transform hover:scale-105 transition-transform">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<div className="bg-green-100 p-2 rounded-lg">
|
||||||
|
<i className="fa-solid fa-chart-line text-green-600 text-xl"></i>
|
||||||
|
</div>
|
||||||
|
<div className="ml-3">
|
||||||
|
<p className="text-sm font-medium text-gray-900">データ分析</p>
|
||||||
|
<p className="text-2xl font-bold text-gray-900">リアルタイム</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="absolute -top-6 -right-6 bg-white p-4 rounded-xl shadow-lg transform hover:scale-105 transition-transform">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<div className="bg-blue-100 p-2 rounded-lg">
|
||||||
|
<i className="fa-solid fa-magic text-blue-600 text-xl"></i>
|
||||||
|
</div>
|
||||||
|
<div className="ml-3">
|
||||||
|
<p className="text-sm font-medium text-gray-900">作成時間</p>
|
||||||
|
<p className="text-2xl font-bold text-gray-900">90%削減</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
164
products/react-apps/alisurvey/src/components/PricingSection.tsx
Normal file
164
products/react-apps/alisurvey/src/components/PricingSection.tsx
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
|
||||||
|
export default function PricingSection() {
|
||||||
|
return (
|
||||||
|
<section id="pricing" className="py-20 bg-white">
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||||
|
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-4">
|
||||||
|
プランを選択
|
||||||
|
</h2>
|
||||||
|
<p className="text-gray-700 mb-8">
|
||||||
|
ご自身のニーズに合ったプランをお選びください。
|
||||||
|
全てのプランで14日間無料トライアルが利用可能です。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="inline-flex bg-gray-100 p-1 rounded-lg">
|
||||||
|
<button className="px-6 py-2 rounded-lg bg-white shadow-sm text-gray-900 font-medium">
|
||||||
|
月額
|
||||||
|
</button>
|
||||||
|
<button className="px-6 py-2 rounded-lg text-gray-600">
|
||||||
|
年額 <span className="text-xs bg-red-100 text-red-600 px-2 py-0.5 rounded ml-1">2ヶ月無料</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 max-w-5xl mx-auto">
|
||||||
|
{/* スタータープラン */}
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5 }}
|
||||||
|
className="bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition-shadow"
|
||||||
|
>
|
||||||
|
<div className="p-8">
|
||||||
|
<h3 className="text-xl font-bold text-gray-900 mb-2">スターター</h3>
|
||||||
|
<p className="text-gray-600 mb-6">小規模ビジネスや個人向け</p>
|
||||||
|
|
||||||
|
<div className="mb-6">
|
||||||
|
<span className="text-4xl font-bold text-gray-900">¥2,980</span>
|
||||||
|
<span className="text-gray-500">/月</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button className="w-full py-3 border border-blue-600 text-blue-600 font-medium rounded-lg hover:bg-blue-50 transition-colors mb-8">
|
||||||
|
無料で始める
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{[
|
||||||
|
"月間5アンケート作成",
|
||||||
|
"最大100件/月回答収集",
|
||||||
|
"基本テンプレート(20種類)",
|
||||||
|
"基本フォームコンポーネント(10種類)",
|
||||||
|
"基本データ分析",
|
||||||
|
"CSVエクスポート",
|
||||||
|
"メールサポート"
|
||||||
|
].map((feature, i) => (
|
||||||
|
<li key={i} className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check text-green-500 mt-1 mr-2"></i>
|
||||||
|
<span className="text-gray-700">{feature}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
{/* ビジネスプラン */}
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.2 }}
|
||||||
|
className="bg-gradient-to-b from-blue-50 to-white border-2 border-blue-600 rounded-2xl overflow-hidden shadow-lg transform scale-105 z-10"
|
||||||
|
>
|
||||||
|
<div className="bg-blue-600 text-white text-center py-2 text-sm font-medium">
|
||||||
|
人気の選択
|
||||||
|
</div>
|
||||||
|
<div className="p-8">
|
||||||
|
<h3 className="text-xl font-bold text-gray-900 mb-2">ビジネス</h3>
|
||||||
|
<p className="text-gray-600 mb-6">中小企業向け</p>
|
||||||
|
|
||||||
|
<div className="mb-6">
|
||||||
|
<span className="text-4xl font-bold text-gray-900">¥7,980</span>
|
||||||
|
<span className="text-gray-500">/月</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button className="w-full py-3 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors mb-8">
|
||||||
|
無料で始める
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{[
|
||||||
|
"月間20アンケート作成",
|
||||||
|
"最大1,000件/月回答収集",
|
||||||
|
"全テンプレート(50種類)",
|
||||||
|
"全フォームコンポーネント(20種類)",
|
||||||
|
"詳細データ分析とグラフ",
|
||||||
|
"Excel/PDF/CSVエクスポート",
|
||||||
|
"優先メールサポート",
|
||||||
|
"条件表示設定",
|
||||||
|
"基本アクセス制限",
|
||||||
|
"ブランドカスタマイズ"
|
||||||
|
].map((feature, i) => (
|
||||||
|
<li key={i} className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check text-green-500 mt-1 mr-2"></i>
|
||||||
|
<span className="text-gray-700">{feature}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
{/* エンタープライズプラン */}
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.4 }}
|
||||||
|
className="bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition-shadow"
|
||||||
|
>
|
||||||
|
<div className="p-8">
|
||||||
|
<h3 className="text-xl font-bold text-gray-900 mb-2">エンタープライズ</h3>
|
||||||
|
<p className="text-gray-600 mb-6">大企業や高度なニーズ向け</p>
|
||||||
|
|
||||||
|
<div className="mb-6">
|
||||||
|
<span className="text-4xl font-bold text-gray-900">お問い合わせ</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button className="w-full py-3 border border-blue-600 text-blue-600 font-medium rounded-lg hover:bg-blue-50 transition-colors mb-8">
|
||||||
|
資料請求
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul className="space-y-3">
|
||||||
|
{[
|
||||||
|
"無制限アンケート作成",
|
||||||
|
"無制限回答収集",
|
||||||
|
"カスタムテンプレート作成",
|
||||||
|
"全フォームコンポーネント(20+種類)",
|
||||||
|
"高度なデータ分析レポート",
|
||||||
|
"APIアクセス",
|
||||||
|
"専属アカウントマネージャー",
|
||||||
|
"すべてのアクセス制限機能",
|
||||||
|
"詳細なブランドカスタマイズ",
|
||||||
|
"SSO統合"
|
||||||
|
].map((feature, i) => (
|
||||||
|
<li key={i} className="flex items-start">
|
||||||
|
<i className="fa-solid fa-check text-green-500 mt-1 mr-2"></i>
|
||||||
|
<span className="text-gray-700">{feature}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mt-12 text-center">
|
||||||
|
<p className="text-gray-600 mb-4">
|
||||||
|
上記以外のニーズがある場合は、カスタムプランもご用意しています。
|
||||||
|
</p>
|
||||||
|
<a href="#contact" className="text-blue-600 font-medium hover:underline">
|
||||||
|
カスタムプランについて <i className="fa-solid fa-arrow-right ml-1"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
|
||||||
|
const testimonials = [
|
||||||
|
{
|
||||||
|
name: "田中 健太",
|
||||||
|
company: "株式会社ABC",
|
||||||
|
position: "マーケティング部長",
|
||||||
|
content: "Alisurveyの直感的な操作感に驚きました。これまでIT部門に依頼していたアンケート作成を、マーケティングチーム内で完結できるようになり、作業効率が格段に向上しました。",
|
||||||
|
avatar: "https://space.coze.cn/api/coze_space/gen_image?image_size=square&prompt=Middle%20aged%20Japanese%20businessman%20smile&sign=753057963873d8d3eaec44917a19d62f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "鈴木 美玲",
|
||||||
|
company: "デザイン事務所DEF",
|
||||||
|
position: "代表取締役",
|
||||||
|
content: "顧客満足度調査を効率よく実施できるようになりました。デザインカスタマイズ機能も充実していて、自分たちのブランドに合わせたアンケートを作成できる点が非常に魅力的です。",
|
||||||
|
avatar: "https://space.coze.cn/api/coze_space/gen_image?image_size=square&prompt=Japanese%20female%20designer%20professional%20look&sign=0c57ddb3fbc04b1fa0b374f9dfacdfdd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "佐藤 明",
|
||||||
|
company: "大学 経済学部",
|
||||||
|
position: "准教授",
|
||||||
|
content: "学術研究のためのアンケート調査に使用しています。高度な条件表示機能と詳細なデータ分析ができるため、複雑な研究デザインにも十分対応できます。学生のアルバイトにも簡単に操作してもらえます。",
|
||||||
|
avatar: "https://space.coze.cn/api/coze_space/gen_image?image_size=square&prompt=Japanese%20university%20professor%20serious%20expression&sign=f364a27a1ded38fb623a950e768190db"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function Testimonials() {
|
||||||
|
return (
|
||||||
|
<section id="testimonials" className="py-20 bg-gray-50">
|
||||||
|
<div className="container mx-auto px-4 md:px-8">
|
||||||
|
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||||
|
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-4">
|
||||||
|
顧客の声
|
||||||
|
</h2>
|
||||||
|
<p className="text-gray-700">
|
||||||
|
Alisurveyをご利用いただいている顧客の声をご紹介します。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
|
{testimonials.map((testimonial, index) => (
|
||||||
|
<motion.div
|
||||||
|
key={index}
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
animate={{ opacity: 1, y: 0 }}
|
||||||
|
transition={{ duration: 0.5, delay: index * 0.1 }}
|
||||||
|
className="bg-white p-8 rounded-2xl shadow-sm"
|
||||||
|
>
|
||||||
|
<div className="flex items-center mb-4">
|
||||||
|
{[1, 2, 3, 4, 5].map((i) => (
|
||||||
|
<i key={i} className="fa-solid fa-star text-yellow-400"></i>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-gray-700 mb-6 italic">"{testimonial.content}"</p>
|
||||||
|
|
||||||
|
<div className="flex items-center">
|
||||||
|
<img
|
||||||
|
src={testimonial.avatar}
|
||||||
|
alt={testimonial.name}
|
||||||
|
className="w-12 h-12 rounded-full object-cover mr-4"
|
||||||
|
/>
|
||||||
|
<div>
|
||||||
|
<h4 className="font-bold text-gray-900">{testimonial.name}</h4>
|
||||||
|
<p className="text-sm text-gray-600">{testimonial.position}, {testimonial.company}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mt-16 text-center">
|
||||||
|
<div className="inline-flex items-center justify-center space-x-12">
|
||||||
|
{[1, 2, 3, 4].map((i) => (
|
||||||
|
<div key={i} className="opacity-60 grayscale hover:opacity-100 hover:grayscale-0 transition-all">
|
||||||
|
<img
|
||||||
|
src={`https://space.coze.cn/api/coze_space/gen_image?image_size=square&prompt=Japanese%20company%20logo%20simple%20design&sign=d07c387595cd76e07532ca1d17df694e`}
|
||||||
|
alt="顧客企業"
|
||||||
|
className="h-8 object-contain"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import { createContext } from "react";
|
||||||
|
|
||||||
|
export const AuthContext = createContext({
|
||||||
|
isAuthenticated: false,
|
||||||
|
setIsAuthenticated: (value: boolean) => {},
|
||||||
|
logout: () => {},
|
||||||
|
});
|
||||||
29
products/react-apps/alisurvey/src/hooks/useTheme.ts
Normal file
29
products/react-apps/alisurvey/src/hooks/useTheme.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { useState, useEffect } from 'react';
|
||||||
|
|
||||||
|
type Theme = 'light' | 'dark';
|
||||||
|
|
||||||
|
export function useTheme() {
|
||||||
|
const [theme, setTheme] = useState<Theme>(() => {
|
||||||
|
const savedTheme = localStorage.getItem('theme') as Theme;
|
||||||
|
if (savedTheme) {
|
||||||
|
return savedTheme;
|
||||||
|
}
|
||||||
|
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.documentElement.classList.remove('light', 'dark');
|
||||||
|
document.documentElement.classList.add(theme);
|
||||||
|
localStorage.setItem('theme', theme);
|
||||||
|
}, [theme]);
|
||||||
|
|
||||||
|
const toggleTheme = () => {
|
||||||
|
setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
theme,
|
||||||
|
toggleTheme,
|
||||||
|
isDark: theme === 'dark'
|
||||||
|
};
|
||||||
|
}
|
||||||
15
products/react-apps/alisurvey/src/index.css
Normal file
15
products/react-apps/alisurvey/src/index.css
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
:root {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||||
|
line-height: 1.5;
|
||||||
|
font-weight: 400;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
|
||||||
|
font-synthesis: none;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
6
products/react-apps/alisurvey/src/lib/utils.ts
Normal file
6
products/react-apps/alisurvey/src/lib/utils.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { clsx, type ClassValue } from "clsx"
|
||||||
|
import { twMerge } from "tailwind-merge"
|
||||||
|
|
||||||
|
export function cn(...inputs: ClassValue[]) {
|
||||||
|
return twMerge(clsx(inputs))
|
||||||
|
}
|
||||||
15
products/react-apps/alisurvey/src/main.tsx
Normal file
15
products/react-apps/alisurvey/src/main.tsx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { StrictMode } from "react";
|
||||||
|
import { createRoot } from "react-dom/client";
|
||||||
|
import { BrowserRouter } from "react-router-dom";
|
||||||
|
import { Toaster } from 'sonner';
|
||||||
|
import App from "./App.tsx";
|
||||||
|
import "./index.css";
|
||||||
|
|
||||||
|
createRoot(document.getElementById("root")!).render(
|
||||||
|
<StrictMode>
|
||||||
|
<BrowserRouter>
|
||||||
|
<App />
|
||||||
|
<Toaster />
|
||||||
|
</BrowserRouter>
|
||||||
|
</StrictMode>
|
||||||
|
);
|
||||||
68
products/react-apps/alisurvey/src/pages/Home.tsx
Normal file
68
products/react-apps/alisurvey/src/pages/Home.tsx
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import { useState, useEffect } from 'react';
|
||||||
|
import {
|
||||||
|
BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer,
|
||||||
|
PieChart, Pie, Cell, LineChart, Line
|
||||||
|
} from 'recharts';
|
||||||
|
import Header from '@/components/Header';
|
||||||
|
import Hero from '@/components/Hero';
|
||||||
|
import FeatureSection from '@/components/FeatureSection';
|
||||||
|
import FeatureDetail from '@/components/FeatureDetail';
|
||||||
|
import ChartDemo from '@/components/ChartDemo';
|
||||||
|
import PricingSection from '@/components/PricingSection';
|
||||||
|
import Testimonials from '@/components/Testimonials';
|
||||||
|
import CTA from '@/components/CTA';
|
||||||
|
import Footer from '@/components/Footer';
|
||||||
|
|
||||||
|
// ダミーデータ - アンケート統計例
|
||||||
|
const surveyData = [
|
||||||
|
{ name: '満足', value: 65 },
|
||||||
|
{ name: '普通', value: 25 },
|
||||||
|
{ name: '不満', value: 10 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const usageData = [
|
||||||
|
{ month: '1月', 利用者: 400 },
|
||||||
|
{ month: '2月', 利用者: 600 },
|
||||||
|
{ month: '3月', 利用者: 800 },
|
||||||
|
{ month: '4月', 利用者: 1200 },
|
||||||
|
{ month: '5月', 利用者: 1500 },
|
||||||
|
{ month: '6月', 利用者: 1800 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042'];
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
const [isScrolled, setIsScrolled] = useState(false);
|
||||||
|
|
||||||
|
// スクロール時のヘッダースタイル変更
|
||||||
|
useEffect(() => {
|
||||||
|
const handleScroll = () => {
|
||||||
|
setIsScrolled(window.scrollY > 50);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('scroll', handleScroll);
|
||||||
|
return () => window.removeEventListener('scroll', handleScroll);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="min-h-screen bg-white text-gray-800">
|
||||||
|
{/* ヘッダー */}
|
||||||
|
<Header isScrolled={isScrolled} />
|
||||||
|
|
||||||
|
{/* ヒーローセクション */}
|
||||||
|
<Hero />
|
||||||
|
|
||||||
|
{/* 特徴セクション */}
|
||||||
|
<FeatureSection />
|
||||||
|
|
||||||
|
{/* 機能詳細セクション */}
|
||||||
|
<FeatureDetail />
|
||||||
|
|
||||||
|
{/* CTAセクション */}
|
||||||
|
<CTA />
|
||||||
|
|
||||||
|
{/* フッター */}
|
||||||
|
<Footer />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
1
products/react-apps/alisurvey/src/vite-env.d.ts
vendored
Normal file
1
products/react-apps/alisurvey/src/vite-env.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
17
products/react-apps/alisurvey/tailwind.config.js
Normal file
17
products/react-apps/alisurvey/tailwind.config.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
|
||||||
|
export default {
|
||||||
|
darkMode: "class",
|
||||||
|
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
|
||||||
|
theme: {
|
||||||
|
container: {
|
||||||
|
center: true,
|
||||||
|
},
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
};
|
||||||
36
products/react-apps/alisurvey/tsconfig.json
Normal file
36
products/react-apps/alisurvey/tsconfig.json
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||||
|
"target": "ES2020",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||||
|
"module": "ESNext",
|
||||||
|
"skipLibCheck": true,
|
||||||
|
|
||||||
|
/* Bundler mode */
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"moduleDetection": "force",
|
||||||
|
"noEmit": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
|
||||||
|
/* Linting */
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noUncheckedSideEffectImports": true,
|
||||||
|
|
||||||
|
/* Paths */
|
||||||
|
"baseUrl": "./",
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": ["src"]
|
||||||
|
}
|
||||||
16
products/react-apps/alisurvey/vite.config.ts
Normal file
16
products/react-apps/alisurvey/vite.config.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
/** WARNING: DON'T EDIT THIS FILE */
|
||||||
|
|
||||||
|
import { defineConfig } from "vite";
|
||||||
|
import react from "@vitejs/plugin-react";
|
||||||
|
import tsconfigPaths from "vite-tsconfig-paths";
|
||||||
|
|
||||||
|
function getPlugins() {
|
||||||
|
const plugins = [react(), tsconfigPaths()];
|
||||||
|
return plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: getPlugins()
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user