@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
package/dist/components/index.js
CHANGED
|
@@ -48,6 +48,7 @@ __export(components_exports, {
|
|
|
48
48
|
ClockIcon: () => ClockIcon,
|
|
49
49
|
FAQ: () => FAQ,
|
|
50
50
|
FacebookIcon: () => FacebookIcon,
|
|
51
|
+
FloatingClaimBanner: () => FloatingClaimBanner,
|
|
51
52
|
Footer: () => Footer,
|
|
52
53
|
Gallery: () => Gallery,
|
|
53
54
|
Header: () => Header,
|
|
@@ -551,6 +552,7 @@ var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
|
551
552
|
var defaultNavigation = [
|
|
552
553
|
{ label: "Home", href: "/" },
|
|
553
554
|
{ label: "Services", href: "/#services" },
|
|
555
|
+
{ label: "Gallery", href: "/#gallery" },
|
|
554
556
|
{ label: "Hours", href: "/#hours" },
|
|
555
557
|
{ label: "Reviews", href: "/#reviews" },
|
|
556
558
|
{ label: "FAQ", href: "/#faq" }
|
|
@@ -809,6 +811,15 @@ function Footer({
|
|
|
809
811
|
|
|
810
812
|
// src/components/sections/Hero.tsx
|
|
811
813
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
814
|
+
var defaultTrustSignals = {
|
|
815
|
+
salon: ["Expert Stylists", "Walk-Ins Welcome", "Quality Products"],
|
|
816
|
+
restaurant: ["Fresh Ingredients", "Family Recipes", "Friendly Service"],
|
|
817
|
+
repair: ["Certified Technicians", "Honest Estimates", "Quality Parts"],
|
|
818
|
+
tailor: ["Expert Craftsmanship", "Perfect Fit Guaranteed", "Quick Turnaround"],
|
|
819
|
+
professional: ["Quality Work", "Fair Prices", "Fast Service"],
|
|
820
|
+
retail: ["Quality Products", "Great Selection", "Friendly Service"],
|
|
821
|
+
default: ["Quality Work", "Fair Prices", "Fast Service"]
|
|
822
|
+
};
|
|
812
823
|
function Hero({
|
|
813
824
|
business,
|
|
814
825
|
variant = "centered",
|
|
@@ -817,8 +828,11 @@ function Hero({
|
|
|
817
828
|
todayHours,
|
|
818
829
|
backgroundImage,
|
|
819
830
|
overlay = true,
|
|
820
|
-
className = ""
|
|
831
|
+
className = "",
|
|
832
|
+
trustSignals
|
|
821
833
|
}) {
|
|
834
|
+
const businessType = business.type || "default";
|
|
835
|
+
const signals = trustSignals || defaultTrustSignals[businessType] || defaultTrustSignals.default;
|
|
822
836
|
const bgStyle = backgroundImage ? { backgroundImage: `url(${backgroundImage})` } : void 0;
|
|
823
837
|
const handleCallClick = () => {
|
|
824
838
|
if (business.phone) {
|
|
@@ -898,8 +912,8 @@ function Hero({
|
|
|
898
912
|
) }),
|
|
899
913
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4", children: business.name }),
|
|
900
914
|
business.tagline && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-xl md:text-2xl text-white/90 mb-6", children: business.tagline }),
|
|
901
|
-
business.aboutShort && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className:
|
|
902
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className:
|
|
915
|
+
business.aboutShort && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: `text-lg text-white/80 mb-8 max-w-xl ${variant === "centered" ? "mx-auto" : ""}`, children: business.aboutShort }),
|
|
916
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: `flex flex-wrap gap-4 mb-8 ${variant === "centered" ? "justify-center" : ""}`, children: signals.map((signal) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center text-white/90", children: [
|
|
903
917
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { className: "w-5 h-5 text-accent-400 mr-2", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
904
918
|
"path",
|
|
905
919
|
{
|
|
@@ -2397,6 +2411,116 @@ function StaggerContainer({
|
|
|
2397
2411
|
}
|
|
2398
2412
|
)) });
|
|
2399
2413
|
}
|
|
2414
|
+
|
|
2415
|
+
// src/components/ui/FloatingClaimBanner.tsx
|
|
2416
|
+
var import_react7 = require("react");
|
|
2417
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
2418
|
+
function FloatingClaimBanner({
|
|
2419
|
+
contactEmail = "andrew@whotookmy.com",
|
|
2420
|
+
siteUrl,
|
|
2421
|
+
businessName,
|
|
2422
|
+
position = "bottom-right",
|
|
2423
|
+
showDelay = 3e3,
|
|
2424
|
+
dismissible = true,
|
|
2425
|
+
message = "Is this your business?",
|
|
2426
|
+
buttonText = "Claim This Site",
|
|
2427
|
+
className = ""
|
|
2428
|
+
}) {
|
|
2429
|
+
const [isVisible, setIsVisible] = (0, import_react7.useState)(false);
|
|
2430
|
+
const [isDismissed, setIsDismissed] = (0, import_react7.useState)(false);
|
|
2431
|
+
(0, import_react7.useEffect)(() => {
|
|
2432
|
+
const dismissed = sessionStorage.getItem("claimBannerDismissed");
|
|
2433
|
+
if (dismissed) {
|
|
2434
|
+
setIsDismissed(true);
|
|
2435
|
+
return;
|
|
2436
|
+
}
|
|
2437
|
+
const timer = setTimeout(() => {
|
|
2438
|
+
setIsVisible(true);
|
|
2439
|
+
}, showDelay);
|
|
2440
|
+
return () => clearTimeout(timer);
|
|
2441
|
+
}, [showDelay]);
|
|
2442
|
+
const handleDismiss = () => {
|
|
2443
|
+
setIsVisible(false);
|
|
2444
|
+
setIsDismissed(true);
|
|
2445
|
+
sessionStorage.setItem("claimBannerDismissed", "true");
|
|
2446
|
+
};
|
|
2447
|
+
const handleClaim = () => {
|
|
2448
|
+
const url = siteUrl || (typeof window !== "undefined" ? window.location.hostname : "unknown");
|
|
2449
|
+
const subject = encodeURIComponent(`Claim my site - ${url}`);
|
|
2450
|
+
const body = encodeURIComponent(
|
|
2451
|
+
`Hi,
|
|
2452
|
+
|
|
2453
|
+
I am the owner of ${businessName || "this business"} and I would like to claim my website at ${url}.
|
|
2454
|
+
|
|
2455
|
+
Please contact me to discuss.
|
|
2456
|
+
|
|
2457
|
+
Thank you!`
|
|
2458
|
+
);
|
|
2459
|
+
window.location.href = `mailto:${contactEmail}?subject=${subject}&body=${body}`;
|
|
2460
|
+
};
|
|
2461
|
+
if (isDismissed || !isVisible) {
|
|
2462
|
+
return null;
|
|
2463
|
+
}
|
|
2464
|
+
const positionClasses = {
|
|
2465
|
+
"bottom-right": "bottom-4 right-4",
|
|
2466
|
+
"bottom-left": "bottom-4 left-4",
|
|
2467
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
|
|
2468
|
+
};
|
|
2469
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
2470
|
+
"div",
|
|
2471
|
+
{
|
|
2472
|
+
className: `
|
|
2473
|
+
fixed z-50 ${positionClasses[position]}
|
|
2474
|
+
animate-slide-up
|
|
2475
|
+
${className}
|
|
2476
|
+
`,
|
|
2477
|
+
style: {
|
|
2478
|
+
animation: "slideUp 0.5s ease-out"
|
|
2479
|
+
},
|
|
2480
|
+
children: [
|
|
2481
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "bg-white rounded-lg shadow-2xl border border-gray-200 p-4 max-w-sm", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
2482
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex-shrink-0 w-10 h-10 bg-primary-100 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { className: "w-5 h-5 text-primary-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("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" }) }) }),
|
|
2483
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
2484
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-sm font-medium text-gray-900", children: message }),
|
|
2485
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-gray-500 mt-1", children: "We built this site for you. Claim it today!" }),
|
|
2486
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
2487
|
+
"button",
|
|
2488
|
+
{
|
|
2489
|
+
onClick: handleClaim,
|
|
2490
|
+
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",
|
|
2491
|
+
children: [
|
|
2492
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("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" }) }),
|
|
2493
|
+
buttonText
|
|
2494
|
+
]
|
|
2495
|
+
}
|
|
2496
|
+
)
|
|
2497
|
+
] }),
|
|
2498
|
+
dismissible && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2499
|
+
"button",
|
|
2500
|
+
{
|
|
2501
|
+
onClick: handleDismiss,
|
|
2502
|
+
className: "flex-shrink-0 text-gray-400 hover:text-gray-600 transition-colors",
|
|
2503
|
+
"aria-label": "Dismiss",
|
|
2504
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
2505
|
+
}
|
|
2506
|
+
)
|
|
2507
|
+
] }) }),
|
|
2508
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("style", { jsx: true, children: `
|
|
2509
|
+
@keyframes slideUp {
|
|
2510
|
+
from {
|
|
2511
|
+
opacity: 0;
|
|
2512
|
+
transform: translateY(20px);
|
|
2513
|
+
}
|
|
2514
|
+
to {
|
|
2515
|
+
opacity: 1;
|
|
2516
|
+
transform: translateY(0);
|
|
2517
|
+
}
|
|
2518
|
+
}
|
|
2519
|
+
` })
|
|
2520
|
+
]
|
|
2521
|
+
}
|
|
2522
|
+
);
|
|
2523
|
+
}
|
|
2400
2524
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2401
2525
|
0 && (module.exports = {
|
|
2402
2526
|
AnimatedSection,
|
|
@@ -2416,6 +2540,7 @@ function StaggerContainer({
|
|
|
2416
2540
|
ClockIcon,
|
|
2417
2541
|
FAQ,
|
|
2418
2542
|
FacebookIcon,
|
|
2543
|
+
FloatingClaimBanner,
|
|
2419
2544
|
Footer,
|
|
2420
2545
|
Gallery,
|
|
2421
2546
|
Header,
|