diff --git a/src/app/share/dialer-mockup-final/_data.ts b/src/app/share/dialer-mockup-final/_data.ts new file mode 100644 index 00000000..64c1b239 --- /dev/null +++ b/src/app/share/dialer-mockup-final/_data.ts @@ -0,0 +1,204 @@ +export const CURRENT_LEAD = { + name: "Cornelius J. Hayes Jr.", + relationship: "Son of Deceased Owner", + phone: "(216) 555-1947", + address: "4218 Heights Blvd, Cleveland OH 44106", + netToFirm: "$146,132", + leadId: "L-2026-0218", + talkTimer: "04:32", + state: "Connected", + initials: "CH", + contactIndex: 1, + contactTotal: 4, + estate: "Hayes Estate", + caseType: "estate" as "estate" | "property" | "case", +}; + +export const CASE_TYPE_LABELS: Record<"estate" | "property" | "case", string> = { + estate: "Same Estate", + property: "Same Property", + case: "Same Case", +}; + +export const NEXT_LEAD = { + name: "Otis Crockett", + relationship: "Cousin of Heir", + estate: "Crockett Estate", + countdown: "0:03", + cooldownDefaultSeconds: 3, +}; + +export const ESTATE = { + caseNumber: "2026-PR-04188", + county: "Cuyahoga County, OH", + taxSaleDate: "May 6, 2026", + monthsSinceSale: "1 Month", + closingBid: "$312,000", + netToFirm: "$146,132", + recoveryFee: "30%", + ownerStatus: "Deceased, March 2025", + attorney: "Chen & Park", + heirsOfRecord: 3, +}; + +export const AI_SUMMARY = { + source: "Gemini", + generated: "Just Now", + bullets: [ + "Father passed March 2025; tax sale 1 month ago in Cuyahoga County cleared $146,132 in surplus the firm has not yet claimed.", + "Cornelius is the eldest son; sister Loretta handles paperwork. He is the path to her, not the decision maker alone.", + "Last call (June 14) he was receptive but asked for documentation by mail before signing. Open to 30%; wanted Mossy Land letterhead.", + "Cold prior to June 8; firm only has the probate filing on record. Likely needs heir verification and a sibling alignment before signing.", + ], +}; + +export const ACTIVITY = [ + { when: "June 15, 2026", what: "Letter Delivered" }, + { when: "June 14, 2026", what: "Call (12 min), Receptive" }, + { when: "June 12, 2026", what: "Mail Sent" }, + { when: "June 08, 2026", what: "Call (4 min), Screened" }, + { when: "June 05, 2026", what: "Lead Imported" }, +]; + +export const CONTACTS = [ + { + name: "Cornelius J. Hayes Jr.", + relationship: "Son of Deceased Owner", + phone: "(216) 555-1947", + active: true, + }, + { + name: "Loretta Hayes Bell", + relationship: "Sister of Cornelius", + phone: "(216) 555-2204", + }, + { + name: "Marcus Bell", + relationship: "Brother in Law", + phone: "(440) 555-8819", + }, + { + name: "Diane Chen", + relationship: "Probate Attorney", + phone: "(216) 555-0044", + }, +]; + +export type QueueItem = { + id: string; + name: string; + relationship: string; + estate: string; + surplus: string; + county: string; + state?: "active" | "done"; +}; + +export const QUEUE: QueueItem[] = [ + { + id: "L-2026-0218", + name: "Cornelius J. Hayes Jr.", + relationship: "Son of Deceased Owner", + estate: "Hayes Estate", + surplus: "$146K", + county: "Cuyahoga OH", + state: "active", + }, + { + id: "L-2026-0219", + name: "Otis Crockett", + relationship: "Cousin of Heir", + estate: "Crockett Estate", + surplus: "$89K", + county: "Franklin OH", + }, + { + id: "L-2026-0220", + name: "Reginald T. Whitfield", + relationship: "Relationship Unknown", + estate: "Whitfield Estate", + surplus: "$51K", + county: "Hamilton OH", + }, + { + id: "L-2026-0221", + name: "Yolanda Beauchamp", + relationship: "Daughter of Heir", + estate: "Beauchamp Estate", + surplus: "$112K", + county: "Cuyahoga OH", + }, + { + id: "L-2026-0222", + name: "Trevor McKinley", + relationship: "Spouse of Owner", + estate: "McKinley Estate", + surplus: "$34K", + county: "Summit OH", + }, + { + id: "L-2026-0223", + name: "Sandra Vega Romero", + relationship: "Niece of Owner", + estate: "Vega Estate", + surplus: "$77K", + county: "Lucas OH", + }, + { + id: "L-2026-0224", + name: "Adelaide Whitlock", + relationship: "Daughter of Owner", + estate: "Whitlock Estate", + surplus: "$58K", + county: "Mahoning OH", + }, +]; + +export type StatItem = { + label: string; + value: string; + trend: string; + direction: "up" | "flat" | "down"; + tooltip: string; + pulse?: boolean; +}; + +export const SESSION_STATS: StatItem[] = [ + { + label: "Dials", + value: "47", + trend: "above pace", + direction: "up", + tooltip: "Session 47 · Target 60 by 5 PM · +8 vs 30 day avg of 39", + }, + { + label: "Connects", + value: "9", + trend: "above pace", + direction: "up", + pulse: true, + tooltip: "Session 9 · Above session avg of 6 · +3 vs 30 day avg of 6", + }, + { + label: "Rate", + value: "19%", + trend: "above 30 day", + direction: "up", + tooltip: "Session 19% · 30 day avg 14% · Top quartile", + }, + { + label: "Talk", + value: "38m", + trend: "on pace", + direction: "flat", + tooltip: "Session 38m · 30 day avg 41m · Paced", + }, +]; + +export const QUEUE_TOTAL = 100; +export const QUEUE_POSITION = 3; + +export const NOTE_PREFILL = "Logged 3:47 PM"; + +export const CANVAS_W = 1280; +export const CANVAS_H = 820; diff --git a/src/app/share/dialer-mockup-final/_layouts/FullFrame.tsx b/src/app/share/dialer-mockup-final/_layouts/FullFrame.tsx new file mode 100644 index 00000000..6096fa04 --- /dev/null +++ b/src/app/share/dialer-mockup-final/_layouts/FullFrame.tsx @@ -0,0 +1,55 @@ +import Link from "next/link"; +import { CANVAS_W, CANVAS_H } from "../_data"; + +type Tab = { label: string; href: string; key: string }; + +export function FullFrame({ + label, + tabs, + active, + children, +}: { + label: string; + tabs: Tab[]; + active: string; + children: React.ReactNode; +}) { + return ( +
+
+ + ← All Variants + +
+ + {label} + +
+ {tabs.map((t) => ( + + {t.label} + + ))} +
+
+
+
+ {children} +
+
+ ); +} diff --git a/src/app/share/dialer-mockup-final/_layouts/Shared.tsx b/src/app/share/dialer-mockup-final/_layouts/Shared.tsx new file mode 100644 index 00000000..0f77ed55 --- /dev/null +++ b/src/app/share/dialer-mockup-final/_layouts/Shared.tsx @@ -0,0 +1,516 @@ +import { + CANVAS_W, + CANVAS_H, + SESSION_STATS, + QUEUE_TOTAL, + QUEUE_POSITION, + NEXT_LEAD, + AI_SUMMARY, + ESTATE, + CURRENT_LEAD, + CASE_TYPE_LABELS, + NOTE_PREFILL, +} from "../_data"; + +export const PETROL_GRADIENT = + "bg-[linear-gradient(135deg,#04261c_0%,#0a3b2c_45%,#13644e_100%)]"; + +export function CanvasFrame({ children }: { children: React.ReactNode }) { + return ( +
+ {children} +
+ ); +} + +export function Logomark() { + return ( +
+
+ N +
+
+ Next Surplus +
+
+ Power Dialer +
+
+ ); +} + +export function StatsStrip() { + return ( +
+ {SESSION_STATS.map((s) => ( +
+
+ + {s.label} + + + {s.value} + + {s.pulse && ( + + + + + )} +
+
+ + + {s.trend} + +
+
+ ))} +
+ ); +} + +export function StatusBadge({ + state, + timer, +}: { + state: "live" | "ended"; + timer: string; +}) { + const dot = state === "live" ? "bg-petrol-300" : "bg-white/35"; + const label = state === "live" ? "Connected" : "Call Ended"; + return ( +
+ + {state === "live" && ( + + )} + + + + {label} + + + {timer} + +
+ ); +} + +export function CaseTypeChip() { + const label = CASE_TYPE_LABELS[CURRENT_LEAD.caseType]; + return ( + + {label} + · + + Contact {CURRENT_LEAD.contactIndex} of {CURRENT_LEAD.contactTotal} + + + ); +} + +export function NewEstateFlashChip() { + return ( + + + New Estate + · + Hayes → Crockett + + ); +} + +export function HeroDivider() { + return
; +} + +export function Control({ + label, + intent = "secondary", + size = "md", +}: { + label: string; + intent?: "secondary" | "primary" | "danger"; + size?: "md" | "lg"; +}) { + const sizeClass = + size === "lg" ? "h-11 px-6 text-[13px]" : "h-9 px-4 text-[12.5px]"; + const intentClass = + intent === "danger" + ? "bg-[#b91c1c] text-white" + : intent === "primary" + ? "bg-white text-petrol-700" + : "bg-white/20 text-white"; + return ( +
+ {label} +
+ ); +} + +export const DISPOSITION_CHIPS = [ + "Interested", + "Callback Requested", + "Not Interested", + "Wrong Number", + "Do Not Contact", +]; + +export function DispositionRow({ + selected = null, +}: { + selected?: string | null; +}) { + return ( +
+ {DISPOSITION_CHIPS.map((c) => { + const isSelected = c === selected; + const cls = isSelected + ? "bg-white text-petrol-700" + : "bg-transparent text-white ring-1 ring-inset ring-white/30"; + return ( +
+ {c} +
+ ); + })} +
+ ); +} + +export function DispositionHeader() { + return ( +
+
+ Disposition +
+
How did the call go?
+
+ ); +} + +export function QuickNoteInput() { + return ( +
+ + + Add a quick note... + + + {NOTE_PREFILL} + +
+ ); +} + +export function CountdownBanner() { + return ( +
+ + Next + + + {NEXT_LEAD.name} + + {NEXT_LEAD.relationship} + · + + {NEXT_LEAD.countdown} + +
+
+ Dial Now +
+
+ Skip +
+
+
+ ); +} + +export function AiSummary({ dim = false }: { dim?: boolean }) { + return ( +
+
+
+ + What You Already Know + + + {AI_SUMMARY.generated} + +
+
+
+ + AI Summary · {AI_SUMMARY.source} +
+ +
+
+
    + {AI_SUMMARY.bullets.slice(0, 3).map((b, i) => ( +
  • + + + {b} + +
  • + ))} +
+
+ ); +} + +export function FinancialBlock() { + return ( +
+ + Net to Firm + + + {CURRENT_LEAD.netToFirm} + + + Case {CURRENT_LEAD.leadId} + +
+ ); +} + +export function QueueHeaderStats() { + return ( +
+ + {QUEUE_POSITION} of {QUEUE_TOTAL} + {" "} + Leads · 47 Dials · 9 Connects · 19% Rate +
+ ); +} + +export function QueueSearch() { + return ( +
+ + + Search or jump to position + + + / + +
+ ); +} + +export function EstateFactsCard() { + const rows = [ + ["Case Number", ESTATE.caseNumber], + ["County", ESTATE.county], + ["Tax Sale Date", ESTATE.taxSaleDate], + ["Time Since Sale", ESTATE.monthsSinceSale], + ["Closing Bid", ESTATE.closingBid], + ["Net to Firm", ESTATE.netToFirm], + ["Recovery Fee", ESTATE.recoveryFee], + ["Owner Status", ESTATE.ownerStatus], + ["Attorney", ESTATE.attorney], + ]; + return ( +
+
+ Estate Detail +
+
+ {rows.map(([k, v]) => ( +
+
{k}
+
{v}
+
+ ))} +
+
+ ); +} + +export function LatestActivityCard({ + events, +}: { + events: { when: string; what: string }[]; +}) { + return ( +
+
+
+ Latest Activity +
+ + {events[0].when.replace(", 2026", "")} + +
+
+ +
+ {events[0].what} +
+
+
    + {events.slice(1, 4).map((e) => ( +
  • + + {e.what} + + {e.when.replace(", 2026", "")} + +
  • + ))} +
+
+ ); +} + +export function ContactTreeCard({ + contacts, +}: { + contacts: { + name: string; + relationship: string; + phone: string; + active?: boolean; + }[]; +}) { + return ( +
+
+
+ Contact Tree +
+ {contacts.length} Members +
+
+ {contacts.map((c) => ( +
+
+ + {c.name} + + + {c.phone} + +
+
{c.relationship}
+
+ ))} +
+
+ ); +} + +function TrendIcon({ + direction, + className, +}: { + direction: "up" | "flat" | "down"; + className?: string; +}) { + if (direction === "up") { + return ( + + + + ); + } + if (direction === "down") { + return ( + + + + ); + } + return ( + + + + ); +} + +function SparkIcon({ className }: { className?: string }) { + return ( + + + + ); +} + +function RefreshIcon({ className }: { className?: string }) { + return ( + + + + + ); +} + +function SearchIcon({ className }: { className?: string }) { + return ( + + + + + ); +} + +function NoteIcon({ className }: { className?: string }) { + return ( + + + + + ); +} diff --git a/src/app/share/dialer-mockup-final/_layouts/V44.tsx b/src/app/share/dialer-mockup-final/_layouts/V44.tsx new file mode 100644 index 00000000..1f31fe2f --- /dev/null +++ b/src/app/share/dialer-mockup-final/_layouts/V44.tsx @@ -0,0 +1,165 @@ +import { CURRENT_LEAD, QUEUE, CONTACTS, ACTIVITY } from "../_data"; +import { + CanvasFrame, + Logomark, + StatsStrip, + StatusBadge, + CaseTypeChip, + NewEstateFlashChip, + HeroDivider, + Control, + DispositionRow, + DispositionHeader, + QuickNoteInput, + CountdownBanner, + AiSummary, + FinancialBlock, + QueueHeaderStats, + QueueSearch, + EstateFactsCard, + LatestActivityCard, + ContactTreeCard, + PETROL_GRADIENT, +} from "./Shared"; + +export function V44({ wrap = false }: { wrap?: boolean }) { + return ( + +
+
+ +
+ +
+
+ +
+ + +
+ {wrap && } +
+
+
+ + +
+ +
+ +
+
+ {CURRENT_LEAD.initials} +
+
+
+ {CURRENT_LEAD.name} +
+
+ {CURRENT_LEAD.relationship} +
+
+ + {CURRENT_LEAD.phone} + + · + + {CURRENT_LEAD.address} + +
+
+ +
+ + + + + +
+ {wrap ? ( +
+ + + + +
+ ) : ( + <> + +
+ + + + + +
+ +
+
+ + )} +
+
+
+ + +
+
+
+ ); +} diff --git a/src/app/share/dialer-mockup-final/_layouts/V45.tsx b/src/app/share/dialer-mockup-final/_layouts/V45.tsx new file mode 100644 index 00000000..c428326e --- /dev/null +++ b/src/app/share/dialer-mockup-final/_layouts/V45.tsx @@ -0,0 +1,190 @@ +import { CURRENT_LEAD, QUEUE, CONTACTS, ACTIVITY } from "../_data"; +import { + CanvasFrame, + Logomark, + StatsStrip, + StatusBadge, + CaseTypeChip, + HeroDivider, + Control, + DispositionRow, + DispositionHeader, + QuickNoteInput, + CountdownBanner, + AiSummary, + FinancialBlock, + QueueHeaderStats, + QueueSearch, + EstateFactsCard, + LatestActivityCard, + ContactTreeCard, + PETROL_GRADIENT, +} from "./Shared"; + +export function V45({ + wrap = false, + drawerOpen = false, +}: { + wrap?: boolean; + drawerOpen?: boolean; +}) { + const rightCol = drawerOpen ? "360px" : "60px"; + return ( + +
+
+ +
+ +
+
+ +
+ + +
+
+ {wrap && } +
+
+ + +
+ +
+
+ {CURRENT_LEAD.initials} +
+
+
+ {CURRENT_LEAD.name} +
+
+ {CURRENT_LEAD.relationship} +
+
+ {CURRENT_LEAD.phone} +
+
+ {CURRENT_LEAD.address} +
+
+ +
+ + + + + +
+ {wrap ? ( +
+ + + + +
+ ) : ( + <> + +
+ + + + + +
+ +
+
+ + )} +
+
+
+
+ + {drawerOpen ? ( + + ) : ( + + )} +
+
+
+ ); +} diff --git a/src/app/share/dialer-mockup-final/page.tsx b/src/app/share/dialer-mockup-final/page.tsx new file mode 100644 index 00000000..32bb1938 --- /dev/null +++ b/src/app/share/dialer-mockup-final/page.tsx @@ -0,0 +1,270 @@ +import Link from "next/link"; +import type { Metadata } from "next"; +import { CANVAS_W, CANVAS_H } from "./_data"; +import { V44 } from "./_layouts/V44"; +import { V45 } from "./_layouts/V45"; + +export const metadata: Metadata = { + title: "Dialer Mockups Final | Next Surplus", + description: "Two power dialer chassis for the Next Surplus call screen.", +}; + +const SCALE = 0.55; +const PREVIEW_W = Math.round(CANVAS_W * SCALE); +const PREVIEW_H = Math.round(CANVAS_H * SCALE); + +type Screen = { key: string; title: string; href: string; Component: () => React.ReactElement }; + +const V44_SCREENS: Screen[] = [ + { key: "live", title: "Live Call", href: "/share/dialer-mockup-final/v44", Component: () => }, + { key: "wrap", title: "Wrap Up", href: "/share/dialer-mockup-final/v44-wrap", Component: () => }, +]; + +const V45_SCREENS: Screen[] = [ + { key: "live", title: "Live Call", href: "/share/dialer-mockup-final/v45", Component: () => }, + { key: "wrap", title: "Wrap Up", href: "/share/dialer-mockup-final/v45-wrap", Component: () => }, + { key: "drawer", title: "Drawer Open", href: "/share/dialer-mockup-final/v45-drawer-open", Component: () => }, +]; + +export default function DialerMockupFinalIndex() { + return ( +
+
+
+
+ Next Surplus · Power Dialer +
+

+ Final Two Chassis +

+

+ Two structurally distinct call screens with the locked design system applied. Hero is + flattened: no nested tinted boxes, typography hierarchy plus 1px white-at-20% dividers + carry the structure. Right column (V44) and Drawer (V45) keep white cards on off-white, + 16px padding, 8px radius. Wrap Up keeps the petrol hero, dims the AI summary to 70%, + and replaces the control row in place with disposition chips. +

+
+ + Lead · Cornelius J. Hayes Jr. + + + Son of Deceased Owner + + + Hayes Estate · $146,132 Net to Firm + + + Cuyahoga County · Tax Sale May 6 + +
+ + +
+ + + +
+ +
+
+
+ ); +} + +function Section({ + id, + title, + chassis, + premise, + screens, + colCount, +}: { + id: string; + title: string; + chassis: string; + premise: string; + screens: Screen[]; + colCount: 2 | 3; +}) { + const previewWidth = colCount === 3 ? Math.round(PREVIEW_W * 0.66) : PREVIEW_W; + const previewHeight = colCount === 3 ? Math.round(PREVIEW_H * 0.66) : PREVIEW_H; + const scale = colCount === 3 ? SCALE * 0.66 : SCALE; + return ( +
+
+
+
+ {title} +
+
+ {chassis} +
+
+
+ {screens.map((s) => ( + + Open {s.title} + + ))} +
+
+ +

+ Premise: {premise} +

+ +
+ {screens.map((s) => ( +
+
+ {s.title} +
+ +
+ +
+ +
+ ))} +
+
+ ); +} + +function DecisionsBlock() { + const groups = [ + { + head: "Hero", + items: [ + "No tinted boxes. Case-type chip, financial number, and AI summary live on the petrol gradient with no surface; typography weight + opacity + 1px white-at-20% dividers carry the structure.", + "Status: small green dot + Connected + 04:32 in plain text. No badge background.", + "Net to Firm $146,132 prominent. Below it in tiny gray: Case L-2026-0218.", + ], + }, + { + head: "Cards", + items: [ + "Right column (V44) and Drawer (V45) keep white cards on off-white background.", + "Three cards per surface: Estate Detail, Latest Activity, Contact Tree.", + "16px internal padding, 8px radius.", + ], + }, + { + head: "Cadence", + items: [ + "Power dialer. 3s default between disposition and next dial. 0-10s configurable.", + "Skip always visible and active during the countdown.", + "Disposition logs during ring time of the next call. Defers if the next connects first.", + ], + }, + { + head: "Wrap Up Morph", + items: [ + "Hero KEEPS the petrol gradient. No charcoal flip.", + "Status badge changes to neutral gray Call Ended 04:32.", + "AI Summary dims to 70% opacity (reference, not active).", + "Control row replaces in place: Disposition header + How did the call go? + 5 outlined chips + Quick Note input.", + ], + }, + { + head: "Countdown Banner", + items: [ + "Sticky to top of viewport during wrap up.", + "Petrol-900 background, white text.", + "Reads: Next: Otis Crockett · Cousin of Heir · 0:03 · Dial Now · Skip.", + ], + }, + { + head: "Stats + Queue", + items: [ + "Top stats strip: number + single trend indicator (↑ above pace). Hover reveals session vs 30-day tooltip. Connects pulses on new connect.", + "Queue header reads 3 of 100 Leads · 47 Dials · 9 Connects · 19% Rate. Search + jump to position on top.", + "Same Estate · Contact 1 of 4 chip; case_type drives prefix (Estate / Property / Case).", + "Case Number labeled. Floor never appears.", + ], + }, + ]; + return ( +
+
+ Locked Decisions +
+
+ {groups.map((g) => ( +
+
+ {g.head} +
+
    + {g.items.map((it, i) => ( +
  • + + {it} +
  • + ))} +
+
+ ))} +
+
+ ); +} diff --git a/src/app/share/dialer-mockup-final/v44-wrap/page.tsx b/src/app/share/dialer-mockup-final/v44-wrap/page.tsx new file mode 100644 index 00000000..b3bb8098 --- /dev/null +++ b/src/app/share/dialer-mockup-final/v44-wrap/page.tsx @@ -0,0 +1,15 @@ +import { FullFrame } from "../_layouts/FullFrame"; +import { V44 } from "../_layouts/V44"; + +const TABS = [ + { key: "live", label: "Live Call", href: "/share/dialer-mockup-final/v44" }, + { key: "wrap", label: "Wrap Up", href: "/share/dialer-mockup-final/v44-wrap" }, +]; + +export default function V44WrapPage() { + return ( + + + + ); +} diff --git a/src/app/share/dialer-mockup-final/v44/page.tsx b/src/app/share/dialer-mockup-final/v44/page.tsx new file mode 100644 index 00000000..8f4abecd --- /dev/null +++ b/src/app/share/dialer-mockup-final/v44/page.tsx @@ -0,0 +1,15 @@ +import { FullFrame } from "../_layouts/FullFrame"; +import { V44 } from "../_layouts/V44"; + +const TABS = [ + { key: "live", label: "Live Call", href: "/share/dialer-mockup-final/v44" }, + { key: "wrap", label: "Wrap Up", href: "/share/dialer-mockup-final/v44-wrap" }, +]; + +export default function V44Page() { + return ( + + + + ); +} diff --git a/src/app/share/dialer-mockup-final/v45-drawer-open/page.tsx b/src/app/share/dialer-mockup-final/v45-drawer-open/page.tsx new file mode 100644 index 00000000..90d200a1 --- /dev/null +++ b/src/app/share/dialer-mockup-final/v45-drawer-open/page.tsx @@ -0,0 +1,20 @@ +import { FullFrame } from "../_layouts/FullFrame"; +import { V45 } from "../_layouts/V45"; + +const TABS = [ + { key: "live", label: "Live Call", href: "/share/dialer-mockup-final/v45" }, + { key: "wrap", label: "Wrap Up", href: "/share/dialer-mockup-final/v45-wrap" }, + { + key: "drawer", + label: "Drawer Open", + href: "/share/dialer-mockup-final/v45-drawer-open", + }, +]; + +export default function V45DrawerOpenPage() { + return ( + + + + ); +} diff --git a/src/app/share/dialer-mockup-final/v45-wrap/page.tsx b/src/app/share/dialer-mockup-final/v45-wrap/page.tsx new file mode 100644 index 00000000..722a3795 --- /dev/null +++ b/src/app/share/dialer-mockup-final/v45-wrap/page.tsx @@ -0,0 +1,20 @@ +import { FullFrame } from "../_layouts/FullFrame"; +import { V45 } from "../_layouts/V45"; + +const TABS = [ + { key: "live", label: "Live Call", href: "/share/dialer-mockup-final/v45" }, + { key: "wrap", label: "Wrap Up", href: "/share/dialer-mockup-final/v45-wrap" }, + { + key: "drawer", + label: "Drawer Open", + href: "/share/dialer-mockup-final/v45-drawer-open", + }, +]; + +export default function V45WrapPage() { + return ( + + + + ); +} diff --git a/src/app/share/dialer-mockup-final/v45/page.tsx b/src/app/share/dialer-mockup-final/v45/page.tsx new file mode 100644 index 00000000..cd736d88 --- /dev/null +++ b/src/app/share/dialer-mockup-final/v45/page.tsx @@ -0,0 +1,24 @@ +import { FullFrame } from "../_layouts/FullFrame"; +import { V45 } from "../_layouts/V45"; + +const TABS = [ + { key: "live", label: "Live Call", href: "/share/dialer-mockup-final/v45" }, + { key: "wrap", label: "Wrap Up", href: "/share/dialer-mockup-final/v45-wrap" }, + { + key: "drawer", + label: "Drawer Open", + href: "/share/dialer-mockup-final/v45-drawer-open", + }, +]; + +export default function V45Page() { + return ( + + + + ); +}