1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
3import type { Lead, LeadStatus, Note } from "../../shared/types.ts";
4import { LEAD_STATUSES } from "../../shared/types.ts";
44 };
45
46 const handleLogin = async (e: React.FormEvent) => {
47 e.preventDefault();
48 setLoading(true);
417 const [noteType, setNoteType] = useState<Note['type']>('general');
418
419 const handleAddNote = (e: React.FormEvent) => {
420 e.preventDefault();
421 if (newNote.trim()) {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
3import type { ClientData, QuoteStep } from "../../shared/types.ts";
4import {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState } from "https://esm.sh/react@18.2.0";
3
4interface LandingPageProps {
13 });
14
15 const handleSubmit = (e: React.FormEvent) => {
16 e.preventDefault();
17 if (formData.name && formData.email) {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
4import type { Payment, Course } from "../../shared/types.ts";
5import { formatCurrency, getMoMoProvider, isValidGhanaPhone } from "../../shared/utils.ts";
76 };
77
78 const handleSubmit = async (e: React.FormEvent) => {
79 e.preventDefault();
80
138 };
139
140 const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {
141 const { name, value } = e.target;
142 setFormData(prev => ({ ...prev, [name]: value }));
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
3import LandingPage from "./LandingPage.tsx";
4import QuoteAssistant from "./QuoteAssistant.tsx";
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React from "https://esm.sh/react@18.2.0";
3import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
4import App from "./components/App.tsx";
5
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
4import type { Complaint } from "../../shared/types.ts";
5import { formatDateTime, getComplaintPriorityColor } from "../../shared/utils.ts";
54 };
55
56 const handleSubmit = async (e: React.FormEvent) => {
57 e.preventDefault();
58
93 };
94
95 const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => {
96 const { name, value } = e.target;
97 setFormData(prev => ({ ...prev, [name]: value }));
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
4import type { Course } from "../../shared/types.ts";
5import { formatCurrency } from "../../shared/utils.ts";
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3import React, { useState, useEffect } from "https://esm.sh/react@18.2.0";
4
5interface HomePageProps {
72
73- **Backend**: Hono + SQLite
74- **Frontend**: React + TypeScript + TailwindCSS
75- **E-mail**: EmailJS
76- **Banco**: SQLite integrado