@aws505/sheetsite 1.0.3 → 1.0.4
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/dist/components/index.js +128 -3
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +127 -3
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/index.ts +3 -0
- package/src/components/layout/Header.tsx +1 -0
- package/src/components/sections/Hero.tsx +19 -3
- package/src/components/ui/FloatingClaimBanner.tsx +160 -0
|
@@ -472,6 +472,7 @@ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
|
472
472
|
var defaultNavigation = [
|
|
473
473
|
{ label: "Home", href: "/" },
|
|
474
474
|
{ label: "Services", href: "/#services" },
|
|
475
|
+
{ label: "Gallery", href: "/#gallery" },
|
|
475
476
|
{ label: "Hours", href: "/#hours" },
|
|
476
477
|
{ label: "Reviews", href: "/#reviews" },
|
|
477
478
|
{ label: "FAQ", href: "/#faq" }
|
|
@@ -730,6 +731,15 @@ function Footer({
|
|
|
730
731
|
|
|
731
732
|
// src/components/sections/Hero.tsx
|
|
732
733
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
734
|
+
var defaultTrustSignals = {
|
|
735
|
+
salon: ["Expert Stylists", "Walk-Ins Welcome", "Quality Products"],
|
|
736
|
+
restaurant: ["Fresh Ingredients", "Family Recipes", "Friendly Service"],
|
|
737
|
+
repair: ["Certified Technicians", "Honest Estimates", "Quality Parts"],
|
|
738
|
+
tailor: ["Expert Craftsmanship", "Perfect Fit Guaranteed", "Quick Turnaround"],
|
|
739
|
+
professional: ["Quality Work", "Fair Prices", "Fast Service"],
|
|
740
|
+
retail: ["Quality Products", "Great Selection", "Friendly Service"],
|
|
741
|
+
default: ["Quality Work", "Fair Prices", "Fast Service"]
|
|
742
|
+
};
|
|
733
743
|
function Hero({
|
|
734
744
|
business,
|
|
735
745
|
variant = "centered",
|
|
@@ -738,8 +748,11 @@ function Hero({
|
|
|
738
748
|
todayHours,
|
|
739
749
|
backgroundImage,
|
|
740
750
|
overlay = true,
|
|
741
|
-
className = ""
|
|
751
|
+
className = "",
|
|
752
|
+
trustSignals
|
|
742
753
|
}) {
|
|
754
|
+
const businessType = business.type || "default";
|
|
755
|
+
const signals = trustSignals || defaultTrustSignals[businessType] || defaultTrustSignals.default;
|
|
743
756
|
const bgStyle = backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : void 0;
|
|
744
757
|
const handleCallClick = () => {
|
|
745
758
|
if (business.phone) {
|
|
@@ -819,8 +832,8 @@ function Hero({
|
|
|
819
832
|
) }),
|
|
820
833
|
/* @__PURE__ */ jsx4("h1", { className: "text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4", children: business.name }),
|
|
821
834
|
business.tagline && /* @__PURE__ */ jsx4("p", { className: "text-xl md:text-2xl text-white/90 mb-6", children: business.tagline }),
|
|
822
|
-
business.aboutShort && /* @__PURE__ */ jsx4("p", { className:
|
|
823
|
-
/* @__PURE__ */ jsx4("div", { className:
|
|
835
|
+
business.aboutShort && /* @__PURE__ */ jsx4("p", { className: `text-lg text-white/80 mb-8 max-w-xl ${variant === "centered" ? "mx-auto" : ""}`, children: business.aboutShort }),
|
|
836
|
+
/* @__PURE__ */ jsx4("div", { className: `flex flex-wrap gap-4 mb-8 ${variant === "centered" ? "justify-center" : ""}`, children: signals.map((signal) => /* @__PURE__ */ jsxs4("div", { className: "flex items-center text-white/90", children: [
|
|
824
837
|
/* @__PURE__ */ jsx4("svg", { className: "w-5 h-5 text-accent-400 mr-2", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx4(
|
|
825
838
|
"path",
|
|
826
839
|
{
|
|
@@ -2318,6 +2331,116 @@ function StaggerContainer({
|
|
|
2318
2331
|
}
|
|
2319
2332
|
)) });
|
|
2320
2333
|
}
|
|
2334
|
+
|
|
2335
|
+
// src/components/ui/FloatingClaimBanner.tsx
|
|
2336
|
+
import { useState as useState7, useEffect as useEffect2 } from "react";
|
|
2337
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2338
|
+
function FloatingClaimBanner({
|
|
2339
|
+
contactEmail = "andrew@whotookmy.com",
|
|
2340
|
+
siteUrl,
|
|
2341
|
+
businessName,
|
|
2342
|
+
position = "bottom-right",
|
|
2343
|
+
showDelay = 3e3,
|
|
2344
|
+
dismissible = true,
|
|
2345
|
+
message = "Is this your business?",
|
|
2346
|
+
buttonText = "Claim This Site",
|
|
2347
|
+
className = ""
|
|
2348
|
+
}) {
|
|
2349
|
+
const [isVisible, setIsVisible] = useState7(false);
|
|
2350
|
+
const [isDismissed, setIsDismissed] = useState7(false);
|
|
2351
|
+
useEffect2(() => {
|
|
2352
|
+
const dismissed = sessionStorage.getItem("claimBannerDismissed");
|
|
2353
|
+
if (dismissed) {
|
|
2354
|
+
setIsDismissed(true);
|
|
2355
|
+
return;
|
|
2356
|
+
}
|
|
2357
|
+
const timer = setTimeout(() => {
|
|
2358
|
+
setIsVisible(true);
|
|
2359
|
+
}, showDelay);
|
|
2360
|
+
return () => clearTimeout(timer);
|
|
2361
|
+
}, [showDelay]);
|
|
2362
|
+
const handleDismiss = () => {
|
|
2363
|
+
setIsVisible(false);
|
|
2364
|
+
setIsDismissed(true);
|
|
2365
|
+
sessionStorage.setItem("claimBannerDismissed", "true");
|
|
2366
|
+
};
|
|
2367
|
+
const handleClaim = () => {
|
|
2368
|
+
const url = siteUrl || (typeof window !== "undefined" ? window.location.hostname : "unknown");
|
|
2369
|
+
const subject = encodeURIComponent(`Claim my site - ${url}`);
|
|
2370
|
+
const body = encodeURIComponent(
|
|
2371
|
+
`Hi,
|
|
2372
|
+
|
|
2373
|
+
I am the owner of ${businessName || "this business"} and I would like to claim my website at ${url}.
|
|
2374
|
+
|
|
2375
|
+
Please contact me to discuss.
|
|
2376
|
+
|
|
2377
|
+
Thank you!`
|
|
2378
|
+
);
|
|
2379
|
+
window.location.href = `mailto:${contactEmail}?subject=${subject}&body=${body}`;
|
|
2380
|
+
};
|
|
2381
|
+
if (isDismissed || !isVisible) {
|
|
2382
|
+
return null;
|
|
2383
|
+
}
|
|
2384
|
+
const positionClasses = {
|
|
2385
|
+
"bottom-right": "bottom-4 right-4",
|
|
2386
|
+
"bottom-left": "bottom-4 left-4",
|
|
2387
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
|
|
2388
|
+
};
|
|
2389
|
+
return /* @__PURE__ */ jsxs15(
|
|
2390
|
+
"div",
|
|
2391
|
+
{
|
|
2392
|
+
className: `
|
|
2393
|
+
fixed z-50 ${positionClasses[position]}
|
|
2394
|
+
animate-slide-up
|
|
2395
|
+
${className}
|
|
2396
|
+
`,
|
|
2397
|
+
style: {
|
|
2398
|
+
animation: "slideUp 0.5s ease-out"
|
|
2399
|
+
},
|
|
2400
|
+
children: [
|
|
2401
|
+
/* @__PURE__ */ jsx16("div", { className: "bg-white rounded-lg shadow-2xl border border-gray-200 p-4 max-w-sm", children: /* @__PURE__ */ jsxs15("div", { className: "flex items-start gap-3", children: [
|
|
2402
|
+
/* @__PURE__ */ jsx16("div", { className: "flex-shrink-0 w-10 h-10 bg-primary-100 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx16("svg", { className: "w-5 h-5 text-primary-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx16("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) }),
|
|
2403
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex-1 min-w-0", children: [
|
|
2404
|
+
/* @__PURE__ */ jsx16("p", { className: "text-sm font-medium text-gray-900", children: message }),
|
|
2405
|
+
/* @__PURE__ */ jsx16("p", { className: "text-xs text-gray-500 mt-1", children: "We built this site for you. Claim it today!" }),
|
|
2406
|
+
/* @__PURE__ */ jsxs15(
|
|
2407
|
+
"button",
|
|
2408
|
+
{
|
|
2409
|
+
onClick: handleClaim,
|
|
2410
|
+
className: "mt-3 w-full inline-flex items-center justify-center px-4 py-2 bg-primary-600 text-white text-sm font-medium rounded-lg hover:bg-primary-700 transition-colors",
|
|
2411
|
+
children: [
|
|
2412
|
+
/* @__PURE__ */ jsx16("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx16("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }),
|
|
2413
|
+
buttonText
|
|
2414
|
+
]
|
|
2415
|
+
}
|
|
2416
|
+
)
|
|
2417
|
+
] }),
|
|
2418
|
+
dismissible && /* @__PURE__ */ jsx16(
|
|
2419
|
+
"button",
|
|
2420
|
+
{
|
|
2421
|
+
onClick: handleDismiss,
|
|
2422
|
+
className: "flex-shrink-0 text-gray-400 hover:text-gray-600 transition-colors",
|
|
2423
|
+
"aria-label": "Dismiss",
|
|
2424
|
+
children: /* @__PURE__ */ jsx16("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx16("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
2425
|
+
}
|
|
2426
|
+
)
|
|
2427
|
+
] }) }),
|
|
2428
|
+
/* @__PURE__ */ jsx16("style", { jsx: true, children: `
|
|
2429
|
+
@keyframes slideUp {
|
|
2430
|
+
from {
|
|
2431
|
+
opacity: 0;
|
|
2432
|
+
transform: translateY(20px);
|
|
2433
|
+
}
|
|
2434
|
+
to {
|
|
2435
|
+
opacity: 1;
|
|
2436
|
+
transform: translateY(0);
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
` })
|
|
2440
|
+
]
|
|
2441
|
+
}
|
|
2442
|
+
);
|
|
2443
|
+
}
|
|
2321
2444
|
export {
|
|
2322
2445
|
AnimatedSection,
|
|
2323
2446
|
BeforeAfter,
|
|
@@ -2336,6 +2459,7 @@ export {
|
|
|
2336
2459
|
ClockIcon,
|
|
2337
2460
|
FAQ,
|
|
2338
2461
|
FacebookIcon,
|
|
2462
|
+
FloatingClaimBanner,
|
|
2339
2463
|
Footer,
|
|
2340
2464
|
Gallery,
|
|
2341
2465
|
Header,
|