kaafil-react-uikit 0.3.0 → 0.4.0
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/CHANGELOG.md +54 -0
- package/dist/admin/index.cjs +565 -387
- package/dist/admin/index.cjs.map +1 -1
- package/dist/admin/index.d.cts +2 -2
- package/dist/admin/index.d.ts +2 -2
- package/dist/admin/index.js +231 -53
- package/dist/admin/index.js.map +1 -1
- package/dist/{chunk-YTSYRLGS.js → chunk-2LMFSKZU.js} +56 -17
- package/dist/chunk-2LMFSKZU.js.map +1 -0
- package/dist/{chunk-BBC5EX5O.cjs → chunk-2XW5EIMS.cjs} +17 -17
- package/dist/{chunk-BBC5EX5O.cjs.map → chunk-2XW5EIMS.cjs.map} +1 -1
- package/dist/{chunk-YU2242AR.js → chunk-3BEQYIFU.js} +5 -5
- package/dist/{chunk-YU2242AR.js.map → chunk-3BEQYIFU.js.map} +1 -1
- package/dist/{chunk-UALMCHNW.cjs → chunk-3N2EQ2KC.cjs} +84 -36
- package/dist/chunk-3N2EQ2KC.cjs.map +1 -0
- package/dist/{chunk-57SUK3GD.cjs → chunk-4QYI7TOF.cjs} +7 -7
- package/dist/{chunk-57SUK3GD.cjs.map → chunk-4QYI7TOF.cjs.map} +1 -1
- package/dist/{chunk-ECCQW5LN.cjs → chunk-6BY2NPBZ.cjs} +4 -4
- package/dist/{chunk-ECCQW5LN.cjs.map → chunk-6BY2NPBZ.cjs.map} +1 -1
- package/dist/{chunk-YNHOPYBK.cjs → chunk-7356B6YS.cjs} +12 -12
- package/dist/{chunk-YNHOPYBK.cjs.map → chunk-7356B6YS.cjs.map} +1 -1
- package/dist/{chunk-A4Z2YBEF.js → chunk-7G6IENKN.js} +84 -36
- package/dist/chunk-7G6IENKN.js.map +1 -0
- package/dist/{chunk-MNUCVVIE.cjs → chunk-A7C74SJT.cjs} +302 -148
- package/dist/chunk-A7C74SJT.cjs.map +1 -0
- package/dist/{chunk-KW5LH6KV.js → chunk-CLHAJBJS.js} +3 -3
- package/dist/{chunk-KW5LH6KV.js.map → chunk-CLHAJBJS.js.map} +1 -1
- package/dist/{chunk-GJ2J3PYN.js → chunk-E6ER25BG.js} +3 -3
- package/dist/{chunk-GJ2J3PYN.js.map → chunk-E6ER25BG.js.map} +1 -1
- package/dist/{chunk-HACH2NUM.cjs → chunk-KETEED2T.cjs} +9 -9
- package/dist/{chunk-HACH2NUM.cjs.map → chunk-KETEED2T.cjs.map} +1 -1
- package/dist/{chunk-RWLO6IFX.js → chunk-KTEXDGAA.js} +3 -3
- package/dist/{chunk-RWLO6IFX.js.map → chunk-KTEXDGAA.js.map} +1 -1
- package/dist/{chunk-VLP323AD.js → chunk-RBIEMGHT.js} +3 -3
- package/dist/{chunk-VLP323AD.js.map → chunk-RBIEMGHT.js.map} +1 -1
- package/dist/{chunk-WTTGPWMR.js → chunk-WPQB7JWS.js} +227 -73
- package/dist/chunk-WPQB7JWS.js.map +1 -0
- package/dist/{chunk-FVK7HMQ5.cjs → chunk-XBLAVNP3.cjs} +88 -48
- package/dist/chunk-XBLAVNP3.cjs.map +1 -0
- package/dist/core/index.cjs +124 -121
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +10 -1
- package/dist/core/index.d.ts +10 -1
- package/dist/core/index.js +20 -19
- package/dist/core/index.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/manager/index.cjs +239 -239
- package/dist/manager/index.js +6 -6
- package/dist/tokens.json +5013 -0
- package/dist/traveller/index.cjs +46 -40
- package/dist/traveller/index.cjs.map +1 -1
- package/dist/traveller/index.js +16 -10
- package/dist/traveller/index.js.map +1 -1
- package/dist/{useAgencyTrip-BUYSIaC2.d.cts → useAgencyTrip-C1YmfuQq.d.cts} +35 -1
- package/dist/{useAgencyTrip-BzyJB1D9.d.ts → useAgencyTrip-gZB0NILH.d.ts} +35 -1
- package/package.json +4 -3
- package/dist/chunk-A4Z2YBEF.js.map +0 -1
- package/dist/chunk-FVK7HMQ5.cjs.map +0 -1
- package/dist/chunk-MNUCVVIE.cjs.map +0 -1
- package/dist/chunk-UALMCHNW.cjs.map +0 -1
- package/dist/chunk-WTTGPWMR.js.map +0 -1
- package/dist/chunk-YTSYRLGS.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/traveller/KaafilShareView/internal/formatShareDate.ts","../../src/traveller/KaafilShareView/internal/deriveTripStatus.ts","../../src/traveller/KaafilShareView/internal/HouseholdSheet.tsx","../../src/traveller/KaafilShareView/internal/ShareEndedScreen.tsx","../../src/traveller/KaafilShareView/internal/ShareSkeleton.tsx","../../src/traveller/KaafilShareView/internal/icons.tsx","../../src/traveller/KaafilShareView/internal/sections/ContactCard.tsx","../../src/traveller/KaafilShareView/internal/sections/AgencyContactSection.tsx","../../src/traveller/KaafilShareView/internal/sections/BrandHeaderSection.tsx","../../src/traveller/KaafilShareView/internal/sections/ChecklistSection.tsx","../../src/traveller/KaafilShareView/internal/sections/DocumentsSection.tsx","../../src/traveller/KaafilShareView/internal/forms/SelectFieldEditor.tsx","../../src/traveller/KaafilShareView/internal/forms/fieldRegistry.tsx","../../src/traveller/KaafilShareView/internal/forms/FormFillScreen.tsx","../../src/traveller/KaafilShareView/internal/sections/FormsSection.tsx","../../src/traveller/KaafilShareView/internal/sections/HeroSection.tsx","../../src/traveller/KaafilShareView/internal/sections/HouseholdBanner.tsx","../../src/traveller/KaafilShareView/internal/sections/ItineraryDayStrip.tsx","../../src/traveller/KaafilShareView/internal/sections/ManagerContactSection.tsx","../../src/traveller/KaafilShareView/internal/sections/MoneySection.tsx","../../src/traveller/KaafilShareView/internal/sections/NextUpBanner.tsx","../../src/traveller/KaafilShareView/internal/sections/StayAndTransportSection.tsx","../../src/traveller/KaafilShareView/internal/sections/TodayPlanSection.tsx","../../src/traveller/KaafilShareView/KaafilShareView.tsx"],"names":["dayLabel","useKaafilChrome","useEffect","jsx","jsxs","Fragment","useState","useRef","createRegistry","useMemo","useContext","OfflineEngineContext","useShareForms","statusLabel","useSession","useShareSnapshot","tokenStyle","BrandShell"],"mappings":"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","file":"index.cjs","sourcesContent":["// Date/time formatting anchored to the trip's own IANA zone\n// (`ShareSnapshotTrip.timezone` — the ONE zone this surface may legally\n// format against, never the device zone, never `new Date()`'s local\n// getters — hard rule #6, `useShareSnapshot.ts`'s own header). No `/core`\n// `DateDisplay`/`TimeDisplay` primitive exists yet in this tree to reuse\n// (`src/primitives` currently ships only `internal/tokenStyle.ts`), so this\n// file is this component's own small, honest formatting layer rather than a\n// hand-rolled string built ad hoc at each call site. JUDGMENT CALL — flagged\n// in the final report: day-before-month (`27 AUG`, never `AUG 27`) is a\n// deliberate choice for an India-market travel product, per the reference\n// craft brief's dated-US-format defect note, not a spec-stated rule.\n//\n// `Intl.DateTimeFormat` is used throughout — never manual arithmetic on a\n// parsed `Date`'s local getters — so the trip's own zone, not the device's,\n// always decides the calendar day/hour a timestamp renders as.\n\nconst WEEKDAY_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst DAY_MONTH_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst TIME_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\n\nfunction cachedFormatter(\n cache: Map<string, Intl.DateTimeFormat>,\n timezone: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const existing = cache.get(timezone);\n if (existing !== undefined) {\n return existing;\n }\n const created = new Intl.DateTimeFormat('en-GB', { ...options, timeZone: timezone });\n cache.set(timezone, created);\n return created;\n}\n\n/** `THU`, uppercased 3-letter weekday. */\nexport function formatWeekdayShort(isoDate: string, timezone: string): string {\n const formatter = cachedFormatter(WEEKDAY_FORMAT_CACHE, timezone, { weekday: 'short' });\n return formatter.format(new Date(isoDate)).toUpperCase();\n}\n\n/** `27 AUG` — day-of-month then a 3-letter uppercase month, never\n * month-first (see this file's header). */\nexport function formatDayMonth(isoDate: string, timezone: string): string {\n const formatter = cachedFormatter(DAY_MONTH_FORMAT_CACHE, timezone, {\n day: 'numeric',\n month: 'short',\n });\n return formatter.format(new Date(isoDate)).toUpperCase();\n}\n\n/** `THU 27` — weekday + day-of-month, no month (the day-chip strip label). */\nexport function formatWeekdayDay(isoDate: string, timezone: string): string {\n return `${formatWeekdayShort(isoDate, timezone)} ${new Intl.DateTimeFormat('en-GB', { day: 'numeric', timeZone: timezone }).format(new Date(isoDate))}`;\n}\n\n/** `15:30` — 24-hour clock, the trip's own zone. */\nexport function formatTimeOfDay(isoDateTime: string, timezone: string): string {\n const formatter = cachedFormatter(TIME_FORMAT_CACHE, timezone, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n return formatter.format(new Date(isoDateTime));\n}\n\n/** Whole calendar days between two ISO stamps, counted in the trip's own\n * zone (so a stamp near local midnight doesn't round to the wrong day\n * depending on the reader's own device zone). Never negative — clamps at 0\n * for a `to` at or before `from`. */\nexport function wholeDaysBetween(fromIso: string, toIso: string, timezone: string): number {\n const dayKeyFormatter = new Intl.DateTimeFormat('en-CA', { timeZone: timezone });\n const fromKey = dayKeyFormatter.format(new Date(fromIso));\n const toKey = dayKeyFormatter.format(new Date(toIso));\n const fromUtc = Date.parse(`${fromKey}T00:00:00Z`);\n const toUtc = Date.parse(`${toKey}T00:00:00Z`);\n const diffDays = Math.round((toUtc - fromUtc) / (24 * 60 * 60 * 1000));\n return diffDays > 0 ? diffDays : 0;\n}\n","// Pure derivation — `trip` + the `itinerary` section + `serverTime` in,\n// hero copy/progress/phase label out. No `Date.now()`/`new Date()` reading\n// the LOCAL wall clock anywhere in this file (hard rule #6): every \"now\" is\n// `serverTime`, the one trusted stamp `useShareSnapshot()` returns.\n// Pure and synchronous so it needs no test harness beyond a plain call —\n// kept out of any component file per this task's own file-tree contract.\n\nimport type { ShareSnapshotTrip } from '../../../core/hooks/useShareSnapshot.js';\nimport { formatDayMonth, wholeDaysBetween } from './formatShareDate';\nimport type { ItinerarySection } from './shareTypes';\n\nexport type TripPhase = 'PRE_DEPARTURE' | 'ON_TRIP' | 'POST_TRIP';\n\nexport interface TripStatus {\n readonly phase: TripPhase;\n readonly phaseLabel: string;\n readonly totalDays: number;\n readonly currentDayNumber: number | null;\n readonly dayLabel: string;\n readonly dateRangeLabel: string;\n readonly daysLeftLabel: string | null;\n /** 0-100. */\n readonly progressPercent: number;\n}\n\nconst PHASE_LABEL_KEY: Record<TripPhase, string> = {\n PRE_DEPARTURE: 'chrome.shareView.trip.phase.preDeparture',\n ON_TRIP: 'chrome.shareView.trip.phase.onTrip',\n POST_TRIP: 'chrome.shareView.trip.phase.postTrip',\n};\n\n/** Pure derivation, called from a component's render — `t` is passed in\n * (not read via `useKaafilChrome()` here) because this file is plain data\n * logic, not a component, and hooks may only be called from one\n * (`13-i18n-and-formatting.md §3.1`'s chrome/content split applies to this\n * file's own phase/day-count copy — the UIKit's own words, never trip\n * content). */\nexport function deriveTripStatus(\n trip: ShareSnapshotTrip,\n itinerary: ItinerarySection | undefined,\n serverTime: string | undefined,\n t: (key: string) => string,\n): TripStatus {\n const totalDays =\n itinerary?.days.length ?? wholeDaysBetween(trip.startDate, trip.endDate, trip.timezone) + 1;\n const todayDay = itinerary?.days.find((day) => day.isToday);\n const currentDayNumber = todayDay !== undefined ? todayDay.dayIndex + 1 : null;\n\n const dayLabel =\n currentDayNumber !== null\n ? t('chrome.shareView.trip.dayOf')\n .replace('{current}', String(currentDayNumber))\n .replace('{total}', String(totalDays))\n : t(PHASE_LABEL_KEY[trip.phase]);\n\n const dateRangeLabel = `${formatDayMonth(trip.startDate, trip.timezone)} → ${formatDayMonth(trip.endDate, trip.timezone)}`;\n\n let daysLeftLabel: string | null = null;\n if (trip.phase === 'ON_TRIP' && serverTime !== undefined) {\n const daysLeft = wholeDaysBetween(serverTime, trip.endDate, trip.timezone);\n daysLeftLabel =\n daysLeft === 1\n ? t('chrome.shareView.trip.daysLeftOne')\n : t('chrome.shareView.trip.daysLeftMany').replace('{count}', String(daysLeft));\n } else if (trip.phase === 'PRE_DEPARTURE' && serverTime !== undefined) {\n const daysToStart = wholeDaysBetween(serverTime, trip.startDate, trip.timezone);\n daysLeftLabel =\n daysToStart === 1\n ? t('chrome.shareView.trip.startsInOne')\n : t('chrome.shareView.trip.startsInMany').replace('{count}', String(daysToStart));\n }\n\n let progressPercent = 0;\n if (trip.phase === 'POST_TRIP') {\n progressPercent = 100;\n } else if (trip.phase === 'ON_TRIP' && currentDayNumber !== null && totalDays > 0) {\n progressPercent = Math.min(100, Math.round((currentDayNumber / totalDays) * 100));\n }\n\n return {\n phase: trip.phase,\n phaseLabel: t(PHASE_LABEL_KEY[trip.phase]),\n totalDays,\n currentDayNumber,\n dayLabel,\n dateRangeLabel,\n daysLeftLabel,\n progressPercent,\n };\n}\n","'use client';\n\n// Opened by tapping the avatar stack in the hero — real gap found comparing\n// against the reference craft brief's `FamilyHouseholdSheet`. Shows only\n// real fields (`firstName`, `initials`, `isSubject`) — the reference sheet\n// also shows a role/dietary line (\"Lead booker · Vegetarian\"), but nothing\n// in the real `household` section carries that (out of scope, not\n// fabricated here).\n\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\nimport type { HouseholdTraveller } from './shareTypes';\n\nexport interface HouseholdSheetProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly label: string | null;\n readonly travellers: readonly HouseholdTraveller[];\n}\n\nexport function HouseholdSheet({\n open,\n onClose,\n label,\n travellers,\n}: HouseholdSheetProps): ReactNode {\n const { t } = useKaafilChrome();\n // Document-level Escape, not a click/keydown pair on the backdrop —\n // a static backdrop `<div>` with its own dismiss handler fights every\n // jsx-a11y interactive-element rule (a `role=\"button\"` div still isn't a\n // real button; nesting a real `<button>` around the sheet is invalid\n // HTML once the sheet has its own interactive children). The explicit\n // close button below stays the primary, always-visible dismiss affordance.\n useEffect(() => {\n if (!open) {\n return;\n }\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n onClose();\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open, onClose]);\n\n if (!open) {\n return null;\n }\n\n return (\n <div className=\"kf-share-view__sheet-backdrop\">\n <div\n className=\"kf-share-view__sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label ?? t('chrome.shareView.household.ariaLabelFallback')}\n >\n <div className=\"kf-share-view__sheet-header\">\n <div>\n <p className=\"kf-eyebrow\">{t('chrome.shareView.household.eyebrow')}</p>\n {label !== null ? <p className=\"kf-share-view__sheet-title\">{label}</p> : null}\n </div>\n <button\n type=\"button\"\n className=\"kf-share-view__sheet-close kf-press\"\n onClick={onClose}\n aria-label={t('chrome.shareView.close')}\n >\n ✕\n </button>\n </div>\n <ul className=\"kf-share-view__list\">\n {travellers.map((traveller, index) => (\n <li\n key={`${traveller.firstName}-${String(index)}`}\n className=\"kf-share-view__row kf-share-view__sheet-row\"\n >\n <span className=\"kf-share-view__household-avatar\" aria-hidden=\"true\">\n {traveller.initials}\n </span>\n <div className=\"kf-share-view__sheet-row-body\">\n <p className=\"kf-share-view__contact-name\">\n {traveller.firstName}\n {traveller.isSubject ? (\n <span className=\"kf-share-view__sheet-you\">\n {' '}\n · {t('chrome.shareView.household.you')}\n </span>\n ) : null}\n </p>\n </div>\n </li>\n ))}\n </ul>\n <p className=\"kf-share-view__sheet-footer kf-eyebrow\">\n {travellers.length}{' '}\n {travellers.length === 1\n ? t('chrome.shareView.household.travellerSingular')\n : t('chrome.shareView.household.travellerPlural')}{' '}\n · {t('chrome.shareView.household.readOnlyView')}\n </p>\n </div>\n </div>\n );\n}\n","'use client';\n\n// `expired`/`revoked` collapse to identical copy (\"This link has ended.\")\n// and `not-found` gets its own, equally plain copy — task brief, verbatim.\n// Structure/tone borrowed from `ErrorShell.tsx`'s own `DefaultFallback`\n// (role/aria-live pairing, no icon, no illustration, one line + nothing\n// else) rather than inventing a new tone: this is the \"any existing\n// not-found pattern already in src/core\" the task points at. Tokens only —\n// `ErrorShell`'s own fallback hardcodes because it must survive without\n// `ThemeShell` context; this component always mounts UNDER `ThemeShell`\n// (via `KaafilUIKitProvider`), so it has no such excuse and uses `--kf-*`.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\n\nexport type ShareEndedReason = 'ended' | 'not-found';\n\nconst COPY_KEY: Record<ShareEndedReason, string> = {\n ended: 'chrome.shareView.ended.ended',\n 'not-found': 'chrome.shareView.ended.notFound',\n};\n\nexport function ShareEndedScreen({ reason }: { readonly reason: ShareEndedReason }): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <div className=\"kf-share-view__ended\" role=\"alert\" aria-live=\"assertive\">\n <p className=\"kf-share-view__ended-message\">{t(COPY_KEY[reason])}</p>\n </div>\n );\n}\n","'use client';\n\n// `status === 'loading'` → a skeleton, never a spinner (task brief,\n// verbatim). Built from `.kf-shimmer` (`base/motion.css`) — the ONE loading\n// treatment this package's own token system ships (that file's own header:\n// \"never a pulse, never 'Loading…' text\").\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\n\nexport function ShareSkeleton(): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <div className=\"kf-share-view__skeleton\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\n <span className=\"kf-visually-hidden\">{t('chrome.shareView.loading')}</span>\n <div className=\"kf-share-view__skeleton-line kf-share-view__skeleton-line--eyebrow kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-line kf-share-view__skeleton-line--headline kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-share-view__skeleton-block--short kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-shimmer\" />\n </div>\n );\n}\n","'use client';\n\n// A small, hand-rolled icon set scoped to THIS component only — not a\n// shared `/primitives` export (v2's own rebuild rule: no shared primitives\n// package). Every icon tile in the reference craft brief (call/WhatsApp\n// buttons, the next-up banner, each stay & transport row) carries a real\n// glyph; rendering an empty colour swatch instead was a real fidelity gap,\n// not a stylistic choice. `currentColor` throughout so each usage site's\n// own `color` decides the glyph tint — never a literal fill here.\n\nimport type { ReactNode } from 'react';\n\nexport interface IconProps {\n readonly size?: number;\n}\n\nfunction svg(children: ReactNode, size = 16): ReactNode {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n\nexport function PhoneIcon({ size }: IconProps): ReactNode {\n return svg(\n <path d=\"M4 4h3.2l1.4 4.4-2 1.6a12.5 12.5 0 0 0 5.4 5.4l1.6-2 4.4 1.4V18a2 2 0 0 1-2 2C10 20 4 14 4 6a2 2 0 0 1 0-2Z\" />,\n size,\n );\n}\n\nexport function WhatsappIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M6.3 17.7 5 20l2.4-1.3A8 8 0 1 0 4 12a8 8 0 0 0 2.3 5.7Z\" />\n <path d=\"M9 9.5c0 3.5 2.9 6 6 6 .6 0 1-.9.6-1.4l-1.2-1.4a.7.7 0 0 0-.8-.2l-1 .4a5 5 0 0 1-2.5-2.5l.4-1a.7.7 0 0 0-.2-.8L9.4 7.4C8.9 7 8 7.4 8 8c0 .5.2 1 1 1.5Z\" />\n </>,\n size,\n );\n}\n\nexport function PlaneIcon({ size }: IconProps): ReactNode {\n return svg(\n <path d=\"M10.5 20.5 12 15l6.5-6.5a2.1 2.1 0 0 0-3-3L9 12l-5.5 1.5 3 2 1 3 2-1Z\" />,\n size,\n );\n}\n\nexport function HouseIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M4 11 12 4l8 7\" />\n <path d=\"M6 10v9a1 1 0 0 0 1 1h3v-5h4v5h3a1 1 0 0 0 1-1v-9\" />\n </>,\n size,\n );\n}\n\nexport function CarIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M4 16V12l2-5h12l2 5v4\" />\n <path d=\"M4 16h16v2a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1H7v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1Z\" />\n <circle cx=\"7.5\" cy=\"16\" r=\"1.2\" />\n <circle cx=\"16.5\" cy=\"16\" r=\"1.2\" />\n </>,\n size,\n );\n}\n\nexport function CompassIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"m14.5 9.5-1.8 4.2-4.2 1.8 1.8-4.2Z\" />\n </>,\n size,\n );\n}\n\nexport function BedIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M3 18v-7a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3\" />\n <path d=\"M3 18v2M21 18v2M3 15h18v3H3z\" />\n <path d=\"M13 11h6a2 2 0 0 1 2 2v2\" />\n <circle cx=\"7\" cy=\"11\" r=\"1.4\" />\n </>,\n size,\n );\n}\n\nexport function DownloadIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M12 4v11\" />\n <path d=\"m7.5 11.5 4.5 4.5 4.5-4.5\" />\n <path d=\"M4 19.5h16\" />\n </>,\n size,\n );\n}\n\nexport function PinIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M12 21s-6.5-5.6-6.5-10.5a6.5 6.5 0 0 1 13 0C18.5 15.4 12 21 12 21Z\" />\n <circle cx=\"12\" cy=\"10.5\" r=\"2.2\" />\n </>,\n size,\n );\n}\n","'use client';\n\n// Shared card body behind `ManagerContactSection`/`AgencyContactSection` —\n// same person-card shape, different eyebrow/footer content, so the render\n// logic (avatar-from-initials, conditional call/WhatsApp buttons) lives\n// once. `phoneDisplay`/`phoneHref`/`whatsappHref` — never `phone` — per the\n// verified `ContactRow` wire shape; a call/WhatsApp button renders ONLY\n// when its own href is non-null, and NEVER derives a link from\n// `phoneDisplay` (it may be server-masked — craft brief's runtime-defect\n// note: stripping a masked display string would dial a stranger). Masking\n// itself is a server decision this component never second-guesses.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { PhoneIcon, WhatsappIcon } from '../icons';\nimport type { ContactRow } from '../shareTypes';\n\nfunction initialsOf(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';\n return `${first}${last}`.toUpperCase();\n}\n\nexport function ContactActions({ row }: { readonly row: ContactRow }): ReactNode {\n const { t } = useKaafilChrome();\n if (row.phoneHref === null && row.whatsappHref === null) {\n return null;\n }\n return (\n <div className=\"kf-share-view__contact-actions\">\n {row.phoneHref !== null ? (\n <a\n className=\"kf-share-view__contact-action kf-share-view__contact-action--call kf-press\"\n href={row.phoneHref}\n >\n <PhoneIcon />\n <span className=\"kf-visually-hidden\">\n {t('chrome.shareView.contact.call').replace('{name}', row.name)}\n </span>\n </a>\n ) : null}\n {row.whatsappHref !== null ? (\n <a\n className=\"kf-share-view__contact-action kf-share-view__contact-action--whatsapp kf-press\"\n href={row.whatsappHref}\n >\n <WhatsappIcon />\n <span className=\"kf-visually-hidden\">\n {t('chrome.shareView.contact.whatsapp').replace('{name}', row.name)}\n </span>\n </a>\n ) : null}\n </div>\n );\n}\n\nexport function ContactCard({\n row,\n roleLabel,\n footer,\n}: {\n readonly row: ContactRow;\n readonly roleLabel: string;\n /** Rendered INSIDE this same card, below a hairline divider — e.g. a\n * co-manager row. Kept in one shared bordered/shadowed container rather\n * than a sibling element, which previously read as a fully separate,\n * disconnected section (real bug, fixed here). */\n readonly footer?: ReactNode;\n}): ReactNode {\n return (\n <div className=\"kf-share-view__card kf-share-view__contact\">\n <div className=\"kf-share-view__contact-main\">\n <span className=\"kf-share-view__contact-avatar\" aria-hidden=\"true\">\n {initialsOf(row.name)}\n </span>\n <div className=\"kf-share-view__contact-identity\">\n <p className=\"kf-share-view__contact-name\">{row.name}</p>\n <p className=\"kf-share-view__contact-role kf-num\">\n {roleLabel}\n {row.phoneDisplay !== null ? ` · ${row.phoneDisplay}` : ''}\n </p>\n </div>\n <ContactActions row={row} />\n </div>\n {footer}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { AgencyContactSectionData } from '../shareTypes';\nimport { ContactCard } from './ContactCard';\n\nexport interface AgencyContactSectionProps {\n readonly data: AgencyContactSectionData;\n}\n\nexport function AgencyContactSection({ data }: AgencyContactSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.agency.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.agency.eyebrow')}</span>\n </div>\n <ContactCard row={data} roleLabel={t('chrome.shareView.agency.roleLabel')} />\n </section>\n );\n}\n","'use client';\n\n// The page's own top identity bar — real gap found comparing against the\n// reference craft brief: agency initial square + name + a link-type label,\n// plus a static \"Read-only\" indicator (a true structural fact of this\n// Surface, never fabricated — every section here except forms IS\n// read-only). Sourced entirely from the real `agencyContact` section\n// (never a `brandLine`/`logoUrl` field — those are the reference's OWN\n// backend, not this surface's wire contract); renders nothing when\n// `agencyContact` is absent, same darkness rule as every other section\n// (hard rule #20).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { AgencyContactSectionData, HouseholdPartyKind } from '../shareTypes';\n\nexport interface BrandHeaderSectionProps {\n readonly agencyContact: AgencyContactSectionData;\n readonly partyKind: HouseholdPartyKind;\n}\n\nconst PARTY_KIND_KEY: Record<Exclude<HouseholdPartyKind, null>, string> = {\n FAMILY: 'chrome.shareView.brand.partyKind.family',\n COUPLE: 'chrome.shareView.brand.partyKind.couple',\n FRIENDS: 'chrome.shareView.brand.partyKind.friends',\n CORPORATE: 'chrome.shareView.brand.partyKind.corporate',\n OTHER: 'chrome.shareView.brand.partyKind.other',\n};\n\nexport function BrandHeaderSection({\n agencyContact,\n partyKind,\n}: BrandHeaderSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const initial = agencyContact.name.trim().slice(0, 1).toUpperCase();\n const kindLabel = partyKind !== null ? t(PARTY_KIND_KEY[partyKind]) : null;\n\n return (\n <div className=\"kf-share-view__brand-header\">\n <span className=\"kf-share-view__brand-mark\" aria-hidden=\"true\">\n {initial}\n </span>\n <p className=\"kf-share-view__brand-name\">\n {agencyContact.name}\n {kindLabel !== null ? (\n <span className=\"kf-share-view__brand-kind\"> · {kindLabel}</span>\n ) : null}\n </p>\n <span className=\"kf-share-view__brand-readonly kf-eyebrow\">\n {t('chrome.shareView.brand.readOnly')}\n </span>\n </div>\n );\n}\n","'use client';\n\n// Plain rows only — no checkbox, no status/badge field (confirmed decision,\n// task brief verbatim). Grouped by `sectionTitle` (a real field) into one\n// card per group; the leading marker is a non-interactive dot, never a\n// checkbox or completion indicator.\n\nimport type { ReactNode } from 'react';\nimport type { ChecklistItem, ChecklistsSection } from '../shareTypes';\n\nexport interface ChecklistSectionProps {\n readonly data: ChecklistsSection;\n}\n\nfunction groupBySectionTitle(items: readonly ChecklistItem[]): Map<string, ChecklistItem[]> {\n const groups = new Map<string, ChecklistItem[]>();\n for (const item of items) {\n const existing = groups.get(item.sectionTitle);\n if (existing !== undefined) {\n existing.push(item);\n } else {\n groups.set(item.sectionTitle, [item]);\n }\n }\n return groups;\n}\n\nexport function ChecklistSection({ data }: ChecklistSectionProps): ReactNode {\n if (data.items.length === 0) {\n return null;\n }\n const groups = groupBySectionTitle(data.items);\n\n return (\n <>\n {Array.from(groups.entries()).map(([sectionTitle, items]) => (\n <section key={sectionTitle} aria-label={sectionTitle}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{sectionTitle}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {items.map((item) => (\n <li key={item.title} className=\"kf-share-view__row kf-share-view__checklist-row\">\n <span className=\"kf-share-view__checklist-marker\" aria-hidden=\"true\" />\n <div className=\"kf-share-view__checklist-body\">\n <p className=\"kf-share-view__checklist-title\">{item.title}</p>\n {item.subLine !== null ? (\n <p className=\"kf-share-view__checklist-sub\">{item.subLine}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </>\n );\n}\n","'use client';\n\n// Vouchers only live in `documents` (craft brief's \"Does NOT\" carry-over) —\n// never merged into `StayAndTransportSection`'s booking rows even though\n// both key off `bookingId`/`dayIndex`.\n//\n// TWO LISTS, ONE SECTION. `files` are documents the agency filed against\n// the trip; `vouchers` come from bookings the CRM pushed. They are rendered\n// as one list because a traveller does not care which system produced their\n// ticket — but the FILES COME FIRST, since a document filed about them\n// personally is the one they opened this link for.\n//\n// A `yours` document is marked. Everything in `files` has already passed\n// the server's scope filter, so nothing here decides who may see what — the\n// badge only tells the reader that this one is theirs specifically and not\n// something the whole group can see, which changes whether they need to\n// forward it.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatDayMonth } from '../formatShareDate';\nimport { DownloadIcon } from '../icons';\nimport type { DocumentsSectionData } from '../shareTypes';\n\nexport interface DocumentsSectionProps {\n readonly data: DocumentsSectionData;\n readonly timezone: string;\n}\n\nfunction formatSize(sizeBytes: number): string {\n if (sizeBytes < 1024) {\n return `${String(sizeBytes)} B`;\n }\n const kb = sizeBytes / 1024;\n if (kb < 1024) {\n return `${kb.toFixed(0)} KB`;\n }\n return `${(kb / 1024).toFixed(1)} MB`;\n}\n\nexport function DocumentsSection({ data, timezone }: DocumentsSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const files = data.files ?? [];\n // BOTH halves empty, not just the vouchers — the old guard returned early\n // on `vouchers.length === 0`, which would have hidden every filed document\n // on a trip whose CRM pushed no vouchers.\n if (data.vouchers.length === 0 && files.length === 0) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.documents.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.documents.eyebrow')}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {files.map((file) => (\n <li key={file.id} className=\"kf-share-view__row kf-share-view__document-row\">\n <span className=\"kf-share-view__document-icon\" aria-hidden=\"true\">\n <DownloadIcon />\n </span>\n <a\n className=\"kf-share-view__document-link\"\n href={file.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {file.title}\n </a>\n <span className=\"kf-share-view__document-meta kf-num\">\n {file.scope === 'yours' ? `${t('chrome.shareView.documents.yours')} · ` : ''}\n {formatSize(file.sizeBytes)}\n </span>\n </li>\n ))}\n {data.vouchers.map((voucher) => (\n <li key={voucher.id} className=\"kf-share-view__row kf-share-view__document-row\">\n <span className=\"kf-share-view__document-icon\" aria-hidden=\"true\">\n <DownloadIcon />\n </span>\n <a\n className=\"kf-share-view__document-link\"\n href={voucher.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {voucher.bookingLabel}\n </a>\n <span className=\"kf-share-view__document-meta kf-num\">\n {formatDayMonth(voucher.isoDate, timezone)} · {formatSize(voucher.sizeBytes)}\n </span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// A custom listbox, not a native `<select>` — real fidelity gap found from\n// user feedback: a native `<select>`'s OPEN dropdown is OS/browser chrome\n// (macOS/Chrome renders it as a giant native popup) that CSS cannot\n// restyle, breaking visual consistency with the rest of this surface. This\n// component owns its own open/closed state via hooks — safe here because\n// `editor()` (`fieldRegistry.tsx`) returns THIS as a real JSX element\n// (`<SelectFieldEditor .../>`), not a plain function-call result; the\n// registry's `editor`/`preview` functions are invoked directly rather than\n// rendered, so hooks may only live inside a component the JSX tree actually\n// mounts, never inside `editor()`'s own body.\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\n\nexport interface SelectFieldOption {\n readonly value: string;\n readonly label: string;\n}\n\nexport interface SelectFieldEditorProps {\n readonly id: string;\n readonly value: string;\n readonly options: readonly SelectFieldOption[];\n readonly required: boolean;\n readonly onChange: (value: string) => void;\n}\n\nexport function SelectFieldEditor({\n id,\n value,\n options,\n required,\n onChange,\n}: SelectFieldEditorProps): ReactNode {\n const { t } = useKaafilChrome();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const selected = options.find((option) => option.value === value);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n function handlePointerDown(event: PointerEvent): void {\n if (rootRef.current !== null && !rootRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open]);\n\n return (\n <div className=\"kf-share-view__select\" ref={rootRef}>\n <button\n type=\"button\"\n id={id}\n className=\"kf-share-view__select-trigger\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((current) => !current)}\n >\n <span className={selected === undefined ? 'kf-share-view__select-placeholder' : undefined}>\n {selected?.label ?? t('chrome.shareView.form.choosePlaceholder')}\n {required && selected === undefined ? ' *' : ''}\n </span>\n <span className=\"kf-share-view__select-chevron\" aria-hidden=\"true\" />\n </button>\n {open ? (\n <div className=\"kf-share-view__select-listbox\" role=\"listbox\">\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n className=\"kf-share-view__select-option\"\n onClick={() => {\n onChange(option.value);\n setOpen(false);\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\n// The 21-kind field dispatch — `createRegistry<FormFieldKind, ...>`, never a\n// `switch`/`if-else` chain (hard rule #8, `09-registries.md §1`). Each\n// registered kind supplies an `editor` (the fill-mode control) and a\n// `preview` (read-only rendering, used once `field.locked` or the form's\n// own `responseStatus === 'SUBMITTED'`) — the two-slot shape the task\n// brief asks for.\n//\n// NO `visibleIf` evaluator anywhere in this file — flagged as a gap in the\n// final report: `RenderFormField` (verified shape, `fieldTypes.ts`) carries\n// no `visibleIf` key, so building an evaluator against it would be\n// guessing a linkage the data doesn't state (task brief, verbatim).\n//\n// FILE_UPLOAD/SIGNATURE gap, also flagged: this pass stores only the\n// selected `File`'s name locally (no blob-lane upload wiring — the wire\n// shape for a file ANSWER value is not given anywhere in this task's\n// contract, and `useBlobStatus`'s own lane is a separate, un-scoped\n// integration this component does not attempt to guess at).\n\nimport type { ChangeEvent, ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/createRegistry.js';\nimport type { AddressAnswer, FieldConfigMap, FormFieldKind, RenderFormField } from './fieldTypes';\nimport { SelectFieldEditor } from './SelectFieldEditor';\n\nexport interface FieldEditorProps {\n readonly field: RenderFormField;\n readonly value: unknown;\n readonly onChange: (value: unknown) => void;\n /** `useKaafilChrome().t`, forwarded in by `FormFillScreen` — a registry\n * entry's `editor`/`preview` is a plain function CALLED during render\n * (`fieldRegistry`'s own header — not JSX, not a hook-eligible\n * component), so it cannot call `useKaafilChrome()` itself; the caller\n * threads `t` through as a prop instead. */\n readonly t: (key: string) => string;\n}\n\nexport interface FieldPreviewProps {\n readonly field: RenderFormField;\n readonly value: unknown;\n readonly t: (key: string) => string;\n}\n\nexport interface FieldHandler {\n readonly editor: (props: FieldEditorProps) => ReactNode;\n readonly preview: (props: FieldPreviewProps) => ReactNode;\n}\n\nfunction configOf<K extends keyof FieldConfigMap>(field: RenderFormField): FieldConfigMap[K] {\n return field.config as FieldConfigMap[K];\n}\n\nfunction textValue(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction numberValue(value: unknown): string {\n return typeof value === 'number' ? String(value) : '';\n}\n\nfunction PlainPreview({ value }: FieldPreviewProps): ReactNode {\n return <p className=\"kf-share-view__form-preview\">{typeof value === 'string' ? value : ''}</p>;\n}\n\nconst fallback: FieldHandler = {\n editor: ({ field, t }) => (\n <p className=\"kf-share-view__form-unsupported\">\n {t('chrome.shareView.form.unsupported').replace('{label}', field.label)}\n </p>\n ),\n preview: PlainPreview,\n};\n\nexport const fieldRegistry = createRegistry<FormFieldKind, FieldHandler>({ fallback });\n\nfieldRegistry.register('HEADING', {\n editor: ({ field }) => <h3 className=\"kf-share-view__form-heading\">{field.label}</h3>,\n preview: ({ field }) => <h3 className=\"kf-share-view__form-heading\">{field.label}</h3>,\n});\n\nfieldRegistry.register('INFO_BLOCK', {\n editor: ({ field }) => <p className=\"kf-share-view__form-info\">{field.contentText}</p>,\n preview: ({ field }) => <p className=\"kf-share-view__form-info\">{field.contentText}</p>,\n});\n\nfieldRegistry.register('SHORT_TEXT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'SHORT_TEXT'>(field);\n return (\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n maxLength={config.maxLength}\n pattern={config.pattern}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('LONG_TEXT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'LONG_TEXT'>(field);\n return (\n <textarea\n className=\"kf-share-view__form-textarea\"\n value={textValue(value)}\n maxLength={config.maxLength}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLTextAreaElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('EMAIL', {\n editor: ({ field, value, onChange }) => {\n void configOf<'EMAIL'>(field);\n return (\n <input\n type=\"email\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('PHONE', {\n editor: ({ field, value, onChange }) => {\n void configOf<'PHONE'>(field);\n return (\n <input\n type=\"tel\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('URL', {\n editor: ({ field, value, onChange }) => (\n <input\n type=\"url\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n ),\n preview: PlainPreview,\n});\n\nfieldRegistry.register('NUMBER', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'NUMBER'>(field);\n return (\n <input\n type=\"number\"\n className=\"kf-share-view__form-input\"\n value={numberValue(value)}\n min={config.min}\n max={config.max}\n step={config.step ?? 1}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.value === '' ? undefined : Number(event.target.value))\n }\n />\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('CURRENCY', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'CURRENCY'>(field);\n return (\n <input\n type=\"number\"\n className=\"kf-share-view__form-input\"\n value={numberValue(value)}\n min={config.minMinor !== undefined ? config.minMinor / 100 : undefined}\n max={config.maxMinor !== undefined ? config.maxMinor / 100 : undefined}\n step={0.01}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(\n event.target.value === '' ? undefined : Math.round(Number(event.target.value) * 100),\n )\n }\n />\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">\n {typeof value === 'number' ? (value / 100).toFixed(2) : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('RATING', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'RATING'>(field);\n const max = config.ratingMax ?? 5;\n return (\n <fieldset className=\"kf-share-view__form-rating\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {Array.from({ length: max }, (_unused, index) => index + 1).map((score) => (\n <button\n key={score}\n type=\"button\"\n aria-pressed={value === score}\n className={`kf-share-view__form-rating-dot kf-press ${\n value === score ? 'kf-share-view__form-rating-dot--selected' : ''\n }`}\n onClick={() => onChange(score)}\n >\n {score}\n </button>\n ))}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('NPS', {\n editor: ({ field, value, onChange }) => {\n void configOf<'NPS'>(field);\n return (\n <fieldset className=\"kf-share-view__form-rating\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {Array.from({ length: 11 }, (_unused, index) => index).map((score) => (\n <button\n key={score}\n type=\"button\"\n aria-pressed={value === score}\n className={`kf-share-view__form-rating-dot kf-press ${\n value === score ? 'kf-share-view__form-rating-dot--selected' : ''\n }`}\n onClick={() => onChange(score)}\n >\n {score}\n </button>\n ))}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('DATE', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'DATE'>(field);\n return (\n <input\n type=\"date\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n min={config.minDate}\n max={config.maxDate}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('DATETIME', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'DATETIME'>(field);\n return (\n <input\n type=\"datetime-local\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n step={config.minuteStep !== undefined ? config.minuteStep * 60 : undefined}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('TIME', {\n editor: ({ field, value, onChange }) => {\n void configOf<'TIME'>(field);\n // Wire value is minutes-past-local-midnight (task brief, verbatim) —\n // the native time input works in `HH:mm`, so this editor converts at\n // the boundary rather than storing the input's own string.\n const minutes = typeof value === 'number' ? value : undefined;\n const hh = minutes !== undefined ? String(Math.floor(minutes / 60)).padStart(2, '0') : '';\n const mm = minutes !== undefined ? String(minutes % 60).padStart(2, '0') : '';\n return (\n <input\n type=\"time\"\n className=\"kf-share-view__form-input\"\n value={minutes !== undefined ? `${hh}:${mm}` : ''}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const [h, m] = event.target.value.split(':');\n if (h === undefined || m === undefined) {\n onChange(undefined);\n return;\n }\n onChange(Number(h) * 60 + Number(m));\n }}\n />\n );\n },\n preview: ({ value }) => {\n const minutes = typeof value === 'number' ? value : undefined;\n return (\n <p className=\"kf-share-view__form-preview kf-num\">\n {minutes !== undefined\n ? `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`\n : ''}\n </p>\n );\n },\n});\n\nfieldRegistry.register('SELECT', {\n editor: ({ field, value, onChange, t }) => {\n const config = configOf<'SELECT'>(field);\n const options = [...config.options].sort((a, b) => a.sortOrder - b.sortOrder);\n const withOther =\n config.otherAllowed === true\n ? [...options, { value: '__other__', label: t('chrome.shareView.form.other') }]\n : options;\n return (\n <SelectFieldEditor\n id={field.id}\n value={textValue(value)}\n options={withOther}\n required={field.required}\n onChange={onChange}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('MULTISELECT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'MULTISELECT'>(field);\n const options = [...config.options].sort((a, b) => a.sortOrder - b.sortOrder);\n const selected = Array.isArray(value) ? (value as string[]) : [];\n return (\n <fieldset className=\"kf-share-view__form-multiselect\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {options.map((option) => {\n const checked = selected.includes(option.value);\n return (\n <label key={option.value} className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const max = config.maxSelections ?? 50;\n if (event.target.checked) {\n if (selected.length >= max) {\n return;\n }\n onChange([...selected, option.value]);\n } else {\n onChange(selected.filter((entry) => entry !== option.value));\n }\n }}\n />\n {option.label}\n </label>\n );\n })}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">\n {Array.isArray(value) ? (value as string[]).join(', ') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('CHECKBOX', {\n editor: ({ field, value, onChange }) => {\n void configOf<'CHECKBOX'>(field);\n return (\n <label className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={value === true}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked)}\n />\n {field.label}\n </label>\n );\n },\n preview: ({ value, t }) => (\n <p className=\"kf-share-view__form-preview\">\n {value === true ? t('chrome.shareView.form.yes') : t('chrome.shareView.form.no')}\n </p>\n ),\n});\n\nfieldRegistry.register('CONSENT', {\n editor: ({ field, value, onChange }) => {\n void configOf<'CONSENT'>(field);\n return (\n <label className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={value === true}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked)}\n />\n {field.contentText ?? field.label}\n </label>\n );\n },\n preview: ({ value, t }) => (\n <p className=\"kf-share-view__form-preview\">\n {value === true ? t('chrome.shareView.form.agreed') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('SIGNATURE', {\n editor: ({ field, value, onChange }) => {\n void configOf<'SIGNATURE'>(field);\n return (\n <div className=\"kf-share-view__form-file\">\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.files?.[0]?.name)\n }\n />\n {typeof value === 'string' ? (\n <p className=\"kf-share-view__form-file-name\">{value}</p>\n ) : null}\n </div>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">{typeof value === 'string' ? value : ''}</p>\n ),\n});\n\nfieldRegistry.register('FILE_UPLOAD', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'FILE_UPLOAD'>(field);\n return (\n <div className=\"kf-share-view__form-file\">\n <input\n type=\"file\"\n accept={config.accept?.join(',')}\n multiple={(config.maxFiles ?? 1) > 1}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(Array.from(event.target.files ?? []).map((file) => file.name))\n }\n />\n {Array.isArray(value) ? (\n <p className=\"kf-share-view__form-file-name\">{(value as string[]).join(', ')}</p>\n ) : null}\n </div>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">\n {Array.isArray(value) ? (value as string[]).join(', ') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('ADDRESS', {\n editor: ({ field, value, onChange, t }) => {\n void configOf<'ADDRESS'>(field);\n const address = (value as Partial<AddressAnswer> | undefined) ?? {};\n const update = (patch: Partial<AddressAnswer>): void => onChange({ ...address, ...patch });\n return (\n <div className=\"kf-share-view__form-address\">\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.line1')}\n value={address.line1 ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) => update({ line1: event.target.value })}\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.city')}\n value={address.city ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) => update({ city: event.target.value })}\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.postalCode')}\n value={address.postalCode ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n update({ postalCode: event.target.value })\n }\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.country')}\n value={address.country ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n update({ country: event.target.value })\n }\n />\n </div>\n );\n },\n preview: ({ value }) => {\n const address = value as Partial<AddressAnswer> | undefined;\n return (\n <p className=\"kf-share-view__form-preview\">\n {address !== undefined\n ? [address.line1, address.city, address.postalCode, address.country]\n .filter(Boolean)\n .join(', ')\n : ''}\n </p>\n );\n },\n});\n","'use client';\n\n// One form, fully rendered as a SINGLE page — task brief's own \"simpler,\n// honest v1\" instruction: `RenderFormResponse.sections` are pages/steps,\n// but `fields` carries no `sectionId` linkage back to them (confirmed\n// against the verified shape), so building a per-page split would be\n// guessing a join the data doesn't state. `fields` is treated as one\n// pre-sorted list; the section→field grouping gap is flagged in the final\n// report, not silently invented here.\n//\n// `clientToken` is minted ONCE per fill session, by THIS component (the\n// CALLER `useShareForms.ts`'s own header names — hard rule #4: no hook\n// mints its own idempotency key) — `useState(() => crypto.randomUUID())`\n// runs its initializer exactly once per mount, and this screen remounts\n// (via the `key={formId}` its parent applies) whenever a different form is\n// opened, which is exactly \"once per fill session\".\n\nimport type { ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport type {\n ShareFormsResult,\n ShareFormWriteInput,\n} from '../../../../core/hooks/useShareForms.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { fieldRegistry } from './fieldRegistry';\nimport type { FieldAnswer, RenderFormField, RenderFormResponse } from './fieldTypes';\n\nexport interface FormFillScreenProps {\n readonly form: RenderFormResponse;\n readonly save: ShareFormsResult['save'];\n readonly submit: ShareFormsResult['submit'];\n readonly writeStatus: ShareFormsResult['writeStatus'];\n /** Party-wide-link disambiguation, forwarded verbatim into every\n * `save`/`submit` write's `ShareFormWriteInput.travellerRef`. */\n readonly travellerRef?: string;\n}\n\nfunction initialAnswers(fields: readonly RenderFormField[]): Map<string, unknown> {\n const map = new Map<string, unknown>();\n for (const field of fields) {\n if (field.kind === 'HEADING' || field.kind === 'INFO_BLOCK') {\n continue;\n }\n map.set(field.key, field.prefill);\n }\n return map;\n}\n\nexport function FormFillScreen({\n form,\n save,\n submit,\n writeStatus,\n travellerRef,\n}: FormFillScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const [clientToken] = useState(() => crypto.randomUUID());\n const [answers, setAnswers] = useState<Map<string, unknown>>(() => initialAnswers(form.fields));\n const readOnly = form.responseStatus === 'SUBMITTED';\n\n const answerList = useMemo<FieldAnswer[]>(() => {\n const list: FieldAnswer[] = [];\n for (const field of form.fields) {\n if (field.kind === 'HEADING' || field.kind === 'INFO_BLOCK') {\n continue;\n }\n list.push({ fieldKey: field.key, value: answers.get(field.key) });\n }\n return list;\n }, [answers, form.fields]);\n\n const setAnswer = (key: string, value: unknown): void => {\n setAnswers((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n };\n\n const writeInput = (): ShareFormWriteInput => ({\n formId: form.formId,\n answers: answerList,\n clientToken,\n ...(travellerRef !== undefined ? { travellerRef } : {}),\n });\n\n return (\n <section className=\"kf-share-view__form-fill\" aria-label={form.title}>\n {form.introText !== null ? (\n <p className=\"kf-share-view__form-intro\">{form.introText}</p>\n ) : null}\n <div className=\"kf-share-view__form-fields\">\n {form.fields.map((field) => {\n const handler = fieldRegistry.resolve(field.kind);\n const value = answers.get(field.key);\n const showPreview = readOnly || field.locked;\n return (\n <div key={field.id} className=\"kf-share-view__form-field\">\n {field.kind !== 'HEADING' && field.kind !== 'INFO_BLOCK' ? (\n <label className=\"kf-share-view__form-label\" htmlFor={field.id}>\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n ) : null}\n {showPreview\n ? handler.preview({ field, value, t })\n : handler.editor({\n field,\n value,\n onChange: (next) => setAnswer(field.key, next),\n t,\n })}\n {field.helpText !== null ? (\n <p className=\"kf-share-view__form-help\">{field.helpText}</p>\n ) : null}\n </div>\n );\n })}\n </div>\n {form.outroText !== null ? (\n <p className=\"kf-share-view__form-outro\">{form.outroText}</p>\n ) : null}\n {!readOnly ? (\n <div className=\"kf-share-view__form-actions\">\n <button\n type=\"button\"\n className=\"kf-share-view__form-action kf-share-view__form-action--save kf-press\"\n disabled={writeStatus === 'saving' || writeStatus === 'submitting'}\n onClick={() => void save(writeInput())}\n >\n {t('chrome.shareView.form.saveDraft')}\n </button>\n <button\n type=\"button\"\n className=\"kf-share-view__form-action kf-share-view__form-action--submit kf-press\"\n disabled={writeStatus === 'saving' || writeStatus === 'submitting'}\n onClick={() => void submit(writeInput())}\n >\n {t('chrome.shareView.form.submit')}\n </button>\n </div>\n ) : null}\n {writeStatus === 'submitted' ? (\n <p className=\"kf-share-view__form-status\" role=\"status\">\n {t('chrome.shareView.form.submittedMessage')}\n </p>\n ) : null}\n {writeStatus === 'queued-offline' ? (\n <p className=\"kf-share-view__form-status\" role=\"status\">\n {t('chrome.shareView.form.queuedOffline')}\n </p>\n ) : null}\n {writeStatus === 'conflicted' ? (\n <p className=\"kf-share-view__form-status\" role=\"alert\">\n {t('chrome.shareView.form.conflicted')}\n </p>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// The write-back half of the surface — the ONLY section that mints a\n// direct `/core` hook call of its own (`useShareForms`) rather than reading\n// off the `sections` map, since `forms` is deliberately never part of the\n// snapshot response (its own dedicated `/forms` routes, `share.service.ts`'s\n// own header) — this section always attempts to mount, and `useShareForms`'s\n// own `status` (`'list-empty'`/`'not-found'`) decides whether anything\n// renders, exactly like every other \"loaded, nothing yet\" section.\n//\n// `useShareForms` calls the throwing `useOfflineEngine()` unconditionally,\n// which needs `OfflineShell` to have actually opened the engine — a brief\n// \"opening\" window `KaafilShareView`'s own top-level gate (session\n// authenticated) does not cover, since the offline engine opens on its OWN\n// effect after that. Same split-component gate pattern: check readiness\n// with the tolerant plain `useContext`, only mount the hook-calling\n// component once ready.\n\nimport type { ReactNode } from 'react';\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { type ShareFormListItem, useShareForms } from '../../../../core/hooks/useShareForms.js';\nimport { OfflineEngineContext } from '../../../../core/internal/contexts.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { FormFillScreen } from '../forms/FormFillScreen';\nimport type { RenderFormResponse } from '../forms/fieldTypes';\n\n/** `fillState` is a server-open string, but its real values are\n * `forms.service.ts#deriveFillState`'s own closed set (verified against\n * the engine, not guessed) — `'ok'` means fillable now, everything else is\n * some reason it currently isn't. `responseStatus` is a separate vocabulary\n * (the traveller's own response row, `FormResponseStatus` in the Prisma\n * schema: `IN_PROGRESS` | `SUBMITTED`) and takes priority when present,\n * since it reflects what THIS traveller has actually done, not just\n * whether the form is theoretically open. Raw value as its own fallback\n * for anything unrecognised, never a switch (hard rule #8 in spirit). */\nconst FILL_STATE_KEY: Record<string, string> = {\n ok: 'chrome.shareView.forms.status.open',\n window_closed: 'chrome.shareView.forms.status.windowClosed',\n form_closed: 'chrome.shareView.forms.status.closed',\n not_open_yet: 'chrome.shareView.forms.status.notOpenYet',\n awaiting_dispatch: 'chrome.shareView.forms.status.notSentYet',\n already_submitted: 'chrome.shareView.forms.status.submitted',\n response_limit_reached: 'chrome.shareView.forms.status.limitReached',\n trip_cancelled: 'chrome.shareView.forms.status.tripCancelled',\n};\n\nfunction statusLabel(form: ShareFormListItem, t: (key: string) => string): string {\n if (form.responseStatus === 'IN_PROGRESS') {\n return t('chrome.shareView.forms.status.inProgress');\n }\n if (form.responseStatus === 'SUBMITTED') {\n return t('chrome.shareView.forms.status.submitted');\n }\n const key = FILL_STATE_KEY[form.fillState];\n return key !== undefined ? t(key) : form.fillState;\n}\n\n/** The one auto-popup trigger: a required form that is actually fillable\n * right now and has no response yet — never a form that's merely present\n * but closed/awaiting-dispatch/already-submitted, so this never nags about\n * something the traveller can't act on. */\nfunction isPendingRequired(form: ShareFormListItem): boolean {\n return form.required && form.fillState === 'ok' && form.responseStatus === null;\n}\n\nexport interface FormsSectionProps {\n readonly token: string;\n /** Party-wide-link disambiguation — see `KaafilShareViewProps.travellerRef`.\n * Forwarded into `renderForm`/`save`/`submit`, never into `useShareForms`\n * itself (the hook's own list call has no such option, verified). */\n readonly travellerRef?: string;\n}\n\nexport function FormsSection({ token, travellerRef }: FormsSectionProps): ReactNode {\n const engine = useContext(OfflineEngineContext);\n if (engine === null) {\n return null;\n }\n return <ReadyFormsSection token={token} travellerRef={travellerRef} />;\n}\n\nfunction ReadyFormsSection({ token, travellerRef }: FormsSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const { status, forms, renderForm, save, submit, writeStatus, refresh } = useShareForms(token);\n const [openFormId, setOpenFormId] = useState<string | null>(null);\n const [openForm, setOpenForm] = useState<RenderFormResponse | null>(null);\n\n // Surfaces a pending required form the moment the list loads, so the\n // traveller sees it needs attention instead of having to notice it in a\n // list they might never scroll to. Fires once per mount — a `useRef`\n // guard, not a `[status]` dependency, since re-running on every `forms`\n // update (e.g. after a save's own `refresh()`) would re-pop the same\n // dialog the traveller just closed.\n const autoOpenedRef = useRef(false);\n useEffect(() => {\n if (autoOpenedRef.current || status !== 'list-populated') {\n return;\n }\n autoOpenedRef.current = true;\n const pending = forms.find(isPendingRequired);\n if (pending !== undefined) {\n setOpenFormId(pending.formId);\n }\n }, [status, forms]);\n\n useEffect(() => {\n if (openFormId === null) {\n setOpenForm(null);\n return;\n }\n let cancelled = false;\n void renderForm(openFormId, { travellerRef }).then((response) => {\n if (!cancelled) {\n setOpenForm(response as unknown as RenderFormResponse);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [openFormId, renderForm, travellerRef]);\n\n useEffect(() => {\n if (writeStatus === 'submitted') {\n void refresh();\n }\n }, [writeStatus, refresh]);\n\n if (status === 'loading') {\n return null;\n }\n if (status === 'not-found' || status === 'list-empty') {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.forms.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.forms.eyebrow')}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {forms.map((form) => (\n <li key={form.formId} className=\"kf-share-view__row kf-share-view__form-row\">\n <button\n type=\"button\"\n className=\"kf-share-view__form-row-button kf-press\"\n onClick={() => setOpenFormId(form.formId)}\n >\n <span className=\"kf-share-view__form-row-title\">{form.title}</span>\n <span className=\"kf-share-view__form-row-end\">\n <span className=\"kf-share-view__form-row-meta kf-eyebrow\">\n {statusLabel(form, t)}\n {form.required ? ` · ${t('chrome.shareView.forms.required')}` : ''}\n </span>\n <span className=\"kf-share-view__form-row-chevron\" aria-hidden=\"true\" />\n </span>\n </button>\n </li>\n ))}\n </ul>\n {openForm !== null ? (\n // A popup, not an inline replacement of this section's own content\n // (user feedback: opening a form used to swap the whole \"Forms\"\n // section's body in place) — same backdrop/sheet dialog pattern as\n // `HouseholdSheet`.\n <div className=\"kf-share-view__sheet-backdrop\">\n <div\n className=\"kf-share-view__sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={openForm.title}\n >\n <div className=\"kf-share-view__sheet-header\">\n <div>\n <p className=\"kf-eyebrow\">{t('chrome.shareView.forms.dialogEyebrow')}</p>\n <p className=\"kf-share-view__sheet-title\">{openForm.title}</p>\n </div>\n <button\n type=\"button\"\n className=\"kf-share-view__sheet-close kf-press\"\n onClick={() => setOpenFormId(null)}\n aria-label={t('chrome.shareView.close')}\n >\n ✕\n </button>\n </div>\n <div className=\"kf-share-view__sheet-body\">\n <FormFillScreen\n form={openForm}\n save={save}\n submit={submit}\n writeStatus={writeStatus}\n travellerRef={travellerRef}\n />\n </div>\n </div>\n </div>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// The page's ONE dark anchor (`tokens/semantic.css`'s own comment on\n// `--kf-surface-inverse*`, added specifically for this section). Structure\n// ported from the reference craft brief (day-of-N headline, phase pill,\n// progress bar, date range + days-left meta row) — colours are entirely\n// `--kf-surface-inverse*`/`--kf-text-inverse-*`/`--kf-accent*` tokens, never\n// a literal (hard rules #13-17).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { TripPhase, TripStatus } from '../deriveTripStatus';\nimport type { HouseholdTraveller } from '../shareTypes';\n\nexport interface HeroSectionProps {\n readonly tripName: string;\n readonly status: TripStatus;\n /** Rendered as an overlapping avatar stack at the card's own foot\n * (reference craft brief: the household lives INSIDE the hero, not as a\n * separate card below it). Omitted entirely when empty. */\n readonly travellers: readonly HouseholdTraveller[];\n /** Opens `HouseholdSheet` — omit to render the avatar stack inert\n * (no household detail to show). */\n readonly onOpenHousehold?: () => void;\n}\n\nconst PHASE_MODIFIER: Record<TripPhase, string> = {\n PRE_DEPARTURE: 'pre-departure',\n ON_TRIP: 'on-trip',\n POST_TRIP: 'post-trip',\n};\n\nexport function HeroSection({\n tripName,\n status,\n travellers,\n onOpenHousehold,\n}: HeroSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section className=\"kf-share-view__hero\" aria-label={t('chrome.shareView.trip.ariaLabel')}>\n <p className=\"kf-share-view__hero-code kf-eyebrow\">{tripName}</p>\n <span\n className={`kf-share-view__hero-pill kf-share-view__hero-pill--${PHASE_MODIFIER[status.phase]}`}\n >\n {status.phaseLabel}\n </span>\n <p className=\"kf-share-view__hero-headline\">{status.dayLabel}</p>\n <div\n className=\"kf-share-view__hero-progress\"\n role=\"progressbar\"\n aria-valuenow={status.progressPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={t('chrome.shareView.trip.progressAriaLabel')}\n >\n <div\n className=\"kf-share-view__hero-progress-fill\"\n style={{ inlineSize: `${String(status.progressPercent)}%` }}\n />\n </div>\n <div className=\"kf-share-view__hero-meta\">\n <span className=\"kf-eyebrow\">{status.dateRangeLabel}</span>\n {status.daysLeftLabel !== null ? (\n <span className=\"kf-eyebrow\">{status.daysLeftLabel}</span>\n ) : null}\n </div>\n {travellers.length > 0 ? (\n <button\n type=\"button\"\n className=\"kf-share-view__hero-travellers kf-press\"\n onClick={onOpenHousehold}\n disabled={onOpenHousehold === undefined}\n >\n <ul className=\"kf-share-view__household-avatars\" aria-hidden=\"true\">\n {travellers.map((traveller, index) => (\n <li\n key={`${traveller.firstName}-${String(index)}`}\n className=\"kf-share-view__household-avatar kf-share-view__household-avatar--on-dark\"\n >\n {traveller.initials}\n </li>\n ))}\n </ul>\n <span className=\"kf-share-view__hero-travellers-names\">\n {travellers.map((traveller) => traveller.firstName).join(' & ')}\n </span>\n </button>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// Greeting banner, NOT a card (craft brief §2) — a headline only. Rendered\n// BEFORE the hero (reference craft brief: the greeting reads as the page's\n// own opening line, with the avatar stack living INSIDE the hero card at\n// its foot instead of as a second box below it — `HeroSection`'s own\n// `travellers` prop). Prefers the real `household` SECTION\n// (`sections.get('household')`) over the caller-supplied `household` PROP,\n// which is a fallback/override for when the backend hasn't shipped that key\n// yet (task brief: \"household — A NEW SECTION BEING ADDED IN A PARALLEL\n// BACKEND CHANGE... may not exist... treat it exactly like every other\n// optional section\"). Renders nothing when neither is present — no\n// heading, no divider, no gap (hard rule #20).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\n\nexport interface HouseholdBannerProps {\n readonly label: string | null;\n readonly names: string;\n}\n\nexport function HouseholdBanner({ label, names }: HouseholdBannerProps): ReactNode {\n const { t } = useKaafilChrome();\n if (names.length === 0 && label === null) {\n return null;\n }\n\n return (\n <section\n className=\"kf-share-view__household\"\n aria-label={t('chrome.shareView.household.ariaLabelFallback')}\n >\n {names.length > 0 ? (\n <p className=\"kf-share-view__household-greeting\">\n {t('chrome.shareView.household.greeting')}{' '}\n <span className=\"kf-share-view__household-name\">{names}</span>,\n </p>\n ) : null}\n {label !== null ? <p className=\"kf-share-view__household-label\">{label}</p> : null}\n </section>\n );\n}\n","'use client';\n\n// The itinerary's navigational spine (craft brief §8/Defect C): one tile\n// per trip day, horizontally scrollable, selected day highlighted with a\n// filled dark tile + dot; the selected day's own card renders beneath.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay, formatWeekdayDay } from '../formatShareDate';\nimport type { ItinerarySection } from '../shareTypes';\n\nexport interface ItineraryDayStripProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n /** Controlled — lifted to `KaafilShareView` so `StayAndTransportSection`\n * can filter its own rows to this same day (user feedback: the merged\n * list showed every day at once, disconnected from the day-strip). */\n readonly selectedIndex: number;\n readonly onSelectIndex: (index: number) => void;\n}\n\nexport function ItineraryDayStrip({\n itinerary,\n timezone,\n selectedIndex,\n onSelectIndex,\n}: ItineraryDayStripProps): ReactNode {\n const { t } = useKaafilChrome();\n const todayIndex = itinerary.days.findIndex((day) => day.isToday);\n const selectedDay = itinerary.days[selectedIndex] ?? itinerary.days[0];\n\n if (itinerary.days.length === 0 || selectedDay === undefined) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.itinerary.ariaLabel')}>\n <div className=\"kf-share-view__eyebrow-row\">\n {/* No repeated \"Read-only\" here — the top brand header already\n * states it once for the whole surface (user feedback: redundant). */}\n <span className=\"kf-eyebrow\">{t('chrome.shareView.itinerary.eyebrow')}</span>\n </div>\n <div\n className=\"kf-share-view__day-strip\"\n role=\"tablist\"\n aria-label={t('chrome.shareView.itinerary.tripDaysAriaLabel')}\n >\n {itinerary.days.map((day, index) => {\n const isSelected = index === selectedIndex;\n const isPast = index < todayIndex;\n return (\n <button\n key={day.dayIndex}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n className={`kf-share-view__day-chip kf-press ${\n isSelected\n ? 'kf-share-view__day-chip--selected'\n : isPast\n ? 'kf-share-view__day-chip--past'\n : ''\n }`}\n onClick={() => onSelectIndex(index)}\n >\n <span className=\"kf-share-view__day-chip-number\">{day.dayIndex + 1}</span>\n <span className=\"kf-share-view__day-chip-label kf-eyebrow\">\n {formatWeekdayDay(day.isoDate, timezone)}\n </span>\n {isSelected ? (\n <span className=\"kf-share-view__day-chip-dot\" aria-hidden=\"true\" />\n ) : null}\n </button>\n );\n })}\n </div>\n <div className=\"kf-share-view__card kf-share-view__day-detail\">\n <div className=\"kf-share-view__day-detail-header\">\n <p className=\"kf-share-view__day-detail-eyebrow kf-eyebrow\">\n {t('chrome.shareView.dayLabel').replace('{n}', String(selectedDay.dayIndex + 1))} ·{' '}\n {formatWeekdayDay(selectedDay.isoDate, timezone)}\n </p>\n <p className=\"kf-share-view__day-detail-title\">{selectedDay.cardTitle}</p>\n {selectedDay.summaryLine !== null ? (\n <p className=\"kf-share-view__day-detail-summary\">{selectedDay.summaryLine}</p>\n ) : null}\n </div>\n {/* The day's own plan, not just its one-line title — real gap found\n * from user feedback: browsing to any day other than \"today\" showed\n * a single title and nothing else, when the real wire shape\n * (`ItineraryDay.items[]`) carries a full per-day plan same as\n * `TodayPlanSection`'s. Reuses that same row markup. */}\n {selectedDay.items.length > 0 ? (\n <ul className=\"kf-share-view__list kf-share-view__day-detail-items\">\n {selectedDay.items.map((item) => (\n <li\n key={item.id}\n className={`kf-share-view__row kf-share-view__plan-row kf-share-view__plan-row--${item.timeState}`}\n >\n <span className=\"kf-share-view__plan-time kf-num\">\n {item.timeState === 'now'\n ? t('chrome.shareView.plan.now')\n : item.startTime !== null\n ? formatTimeOfDay(item.startTime, timezone)\n : ''}\n </span>\n <span className=\"kf-share-view__plan-title\">{item.title}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { ManagerContactSectionData } from '../shareTypes';\nimport { ContactCard } from './ContactCard';\n\nexport interface ManagerContactSectionProps {\n readonly data: ManagerContactSectionData;\n}\n\nexport function ManagerContactSection({ data }: ManagerContactSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.manager.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.manager.eyebrow')}</span>\n <span className=\"kf-eyebrow\">{t('chrome.shareView.manager.available')}</span>\n </div>\n <ContactCard\n row={data}\n roleLabel={t('chrome.shareView.manager.roleLabel')}\n footer={data.coManagers?.map((coManager) => (\n <div key={coManager.name} className=\"kf-share-view__contact-footer\">\n <span className=\"kf-share-view__contact-footer-label kf-eyebrow\">\n {t('chrome.shareView.manager.coManagerLabel').replace('{name}', coManager.name)}\n </span>\n {/* Text, not icon buttons — the phone NUMBER itself must stay\n * readable at a glance here (real gap: the previous icon-only\n * treatment dropped the number entirely, showing no way to see\n * who you'd be calling without tapping first). */}\n {coManager.phoneDisplay !== null ? (\n coManager.phoneHref !== null ? (\n <a\n href={coManager.phoneHref}\n className=\"kf-share-view__contact-footer-phone kf-num\"\n >\n {coManager.phoneDisplay}\n </a>\n ) : (\n <span className=\"kf-share-view__contact-footer-phone kf-num\">\n {coManager.phoneDisplay}\n </span>\n )\n ) : null}\n </div>\n ))}\n />\n </section>\n );\n}\n","'use client';\n\n// Renders only when the `money` section is present — never for a\n// whole-trip/family token (task brief, verbatim: \"only present when the\n// token IS scoped to a traveller\").\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { MoneySectionData } from '../shareTypes';\n\nfunction formatMinor(minor: number, currency: string): string {\n return new Intl.NumberFormat(undefined, { style: 'currency', currency }).format(minor / 100);\n}\n\nexport function MoneySection({ data }: { readonly data: MoneySectionData }): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.money.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.money.eyebrow')}</span>\n </div>\n <dl className=\"kf-share-view__card kf-share-view__money\">\n <div className=\"kf-share-view__money-row\">\n <dt>{t('chrome.shareView.money.total')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.totalMinor, data.currency)}</dd>\n </div>\n <div className=\"kf-share-view__money-row\">\n <dt>{t('chrome.shareView.money.collected')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.collectedMinor, data.currency)}</dd>\n </div>\n <div className=\"kf-share-view__money-row kf-share-view__money-row--due\">\n <dt>{t('chrome.shareView.money.due')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.dueMinor, data.currency)}</dd>\n </div>\n </dl>\n </section>\n );\n}\n","'use client';\n\n// A tinted strip, NOT a card (craft brief §4) — \"the fact a traveller\n// wants\" surfaced ahead of everything else. Derives its own \"what's next\"\n// pick from the real `itinerary` section: the first `'now'` item on\n// today's day, else the first `'upcoming'` item today, else the first item\n// of the next day that has any items. No fabricated status — every field\n// used (`title`, `startTime`, `timeState`) is server-computed.\n\nimport type { ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/index.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay } from '../formatShareDate';\nimport { CarIcon, CompassIcon, HouseIcon, PlaneIcon } from '../icons';\nimport type { ItineraryItem, ItinerarySection } from '../shareTypes';\n\n/** `item.type` is a server-open string, not a closed union — resolved by\n * registry lookup, never a switch/if-else chain (hard rule #8), so a type\n * value this build predates still gets an icon (`default`) instead of a\n * missing/crashing render. */\nconst ITEM_TYPE_ICON = createRegistry<string, () => ReactNode>({\n fallback: () => <CompassIcon />,\n});\nITEM_TYPE_ICON.register('FLIGHT', () => <PlaneIcon />);\nITEM_TYPE_ICON.register('TRANSPORT', () => <CarIcon />);\nITEM_TYPE_ICON.register('ACCOMMODATION', () => <HouseIcon />);\nITEM_TYPE_ICON.register('STAY', () => <HouseIcon />);\n\nexport interface NextUpBannerProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n}\n\nfunction pickNextItem(itinerary: ItinerarySection): ItineraryItem | undefined {\n const todayIndex = itinerary.days.findIndex((day) => day.isToday);\n if (todayIndex !== -1) {\n const today = itinerary.days[todayIndex];\n if (today !== undefined) {\n const nowItem = today.items.find((item) => item.timeState === 'now');\n if (nowItem !== undefined) {\n return nowItem;\n }\n const upcomingItem = today.items.find((item) => item.timeState === 'upcoming');\n if (upcomingItem !== undefined) {\n return upcomingItem;\n }\n }\n for (let index = todayIndex + 1; index < itinerary.days.length; index += 1) {\n const day = itinerary.days[index];\n const firstItem = day?.items[0];\n if (firstItem !== undefined) {\n return firstItem;\n }\n }\n return undefined;\n }\n // No day flagged `isToday` (e.g. `PRE_DEPARTURE`) — surface the very\n // first upcoming item on the trip.\n for (const day of itinerary.days) {\n const firstItem = day.items[0];\n if (firstItem !== undefined) {\n return firstItem;\n }\n }\n return undefined;\n}\n\nexport function NextUpBanner({ itinerary, timezone }: NextUpBannerProps): ReactNode {\n const { t } = useKaafilChrome();\n const item = pickNextItem(itinerary);\n if (item === undefined) {\n return null;\n }\n\n return (\n <section className=\"kf-share-view__next-up\" aria-label={t('chrome.shareView.nextUp.ariaLabel')}>\n <div className=\"kf-share-view__next-up-icon\" aria-hidden=\"true\">\n {ITEM_TYPE_ICON.resolve(item.type)()}\n </div>\n <div className=\"kf-share-view__next-up-body\">\n <p className=\"kf-share-view__next-up-title\">{item.title}</p>\n {item.startTime !== null ? (\n <p className=\"kf-share-view__next-up-time kf-num\">\n {formatTimeOfDay(item.startTime, timezone)}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n","'use client';\n\n// Joins `accommodation`/`transport`/`activities` (identical `DayBookingItem`\n// shape, different section key) AND `rooming` (room/bed assignments, its\n// own `startDayIndex`/`endDayIndex` range rather than a single `dayIndex`)\n// into ONE composed card, per the craft brief's Defect B / `00-decisions.md`\n// U-021: \"where a coherent view requires joining data that arrives as\n// separate section keys, the Surface composes a purpose-built view\n// component that does the joining.\" `seating` (a single vehicle/seat pair,\n// no day key of its own) and `pickup` (stops with a `time` but no day key)\n// are appended as their own un-grouped rows rather than force-fit onto a\n// day they don't declare — JUDGMENT CALL, flagged in the final report: the\n// wire contract gives neither section a day key to join on, so guessing one\n// would be fabricating a linkage the data doesn't state.\n//\n// The gating invariant is untouched: a section key the server did not\n// return contributes zero rows to this card; if the whole group ends up\n// empty, the group renders nothing at all (hard rule #20).\n//\n// The eyebrow's DONE/NOW/UPCOMING suffix is DERIVED, never fabricated:\n// `DayBookingItem` carries no server-provided status field (unlike the\n// reference craft brief's own `segmentState`, a different backend's\n// concept), but it DOES carry real `startAt`/`endAt` timestamps — comparing\n// those against the snapshot's own `serverTime` (never `Date.now()`, hard\n// rule #6) is a real computation off real fields, not an invented one.\n// `pickup` stops carry their OWN real `kind`/`status` fields already\n// (`PickupKind`/`StopStatus`, both closed Prisma enums) — rendered through\n// the same chrome-label-by-real-value pattern as the derived done/now/\n// upcoming state above, never the raw enum string, with the raw value as\n// fallback for a value this build predates.\n//\n// Every merged row that DOES carry a day key (`accommodation`/`transport`/\n// `activities`/`rooming`) is sorted together into ONE chronological list,\n// keyed off a numeric `sortKey` (each item's own `dayIndex`, or `rooming`'s\n// own `startDayIndex` — its only day-shaped field) rather than the\n// bookingId-string sort this file used before rooming was added; a string\n// sort on an opaque id never guaranteed day order in the first place.\n// `roommates` are already first-names-only at the wire level (the same\n// privacy precedent every other section on this surface already follows),\n// so they're rendered as-is, no further redaction.\n\nimport type { ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/index.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatDayMonth, formatTimeOfDay } from '../formatShareDate';\nimport { BedIcon, CarIcon, CompassIcon, HouseIcon, PinIcon } from '../icons';\nimport type {\n DayBookingsSection,\n PickupSection,\n PickupStop,\n RoomingAssignment,\n RoomingSection,\n SeatingSection,\n} from '../shareTypes';\n\nexport interface StayAndTransportSectionProps {\n readonly accommodation: DayBookingsSection | undefined;\n readonly transport: DayBookingsSection | undefined;\n readonly activities: DayBookingsSection | undefined;\n readonly rooming: RoomingSection | undefined;\n readonly seating: SeatingSection | undefined;\n readonly pickup: PickupSection | undefined;\n readonly timezone: string;\n /** Filters `accommodation`/`transport`/`activities`/`rooming` rows to\n * this one day — `undefined` shows every day (no itinerary day-strip to\n * link to). `seating`/`pickup` have no day key of their own in the wire\n * contract, so they stay unconditionally visible either way. */\n readonly selectedDayIndex: number | undefined;\n /** For deriving each accommodation/transport/activity row's own\n * done/now/upcoming state from its real `startAt`/`endAt` — `undefined`\n * (snapshot not yet resolved) omits the suffix rather than guessing. */\n readonly serverTime: string | undefined;\n}\n\n/** `startAt`/`endAt` vs `serverTime` — a real computation off real\n * timestamps, not a fabricated field. No `endAt` means a point-in-time\n * booking (e.g. a pickup), \"now\" only once `startAt` has passed. */\nfunction deriveBookingState(\n startAt: string,\n endAt: string | null,\n serverTime: string | undefined,\n): 'done' | 'now' | 'upcoming' | null {\n if (serverTime === undefined) {\n return null;\n }\n const now = new Date(serverTime).getTime();\n const start = new Date(startAt).getTime();\n const end = endAt !== null ? new Date(endAt).getTime() : start;\n if (now < start) {\n return 'upcoming';\n }\n if (now > end) {\n return 'done';\n }\n return 'now';\n}\n\nconst STATE_LABEL_KEY: Record<'done' | 'now' | 'upcoming', string> = {\n done: 'chrome.shareView.stay.state.done',\n now: 'chrome.shareView.plan.now',\n upcoming: 'chrome.shareView.stay.state.upcoming',\n};\n\n/** `t('chrome.shareView.dayLabel')` is the one shared \"Day {n}\" chrome\n * string every merged row's eyebrow needs — a tiny local helper rather\n * than a new shared util module, since it's a single `.replace()` call. */\nfunction dayLabel(t: (key: string) => string, n: number): string {\n return t('chrome.shareView.dayLabel').replace('{n}', String(n));\n}\n\ninterface MergedRow {\n readonly key: string;\n /** The day this row sorts by — `dayIndex` for a booking item,\n * `startDayIndex` for a rooming assignment. Not rendered directly. */\n readonly sortKey: number;\n /** `dayIndex` for a booking item, `endDayIndex` for a rooming assignment\n * — same as `sortKey` for a single-day row. Used only to test whether\n * `selectedDayIndex` falls within this row's day range. */\n readonly dayEnd: number;\n /** Looked up in `ROW_ICON` below — a registry key, never a switch (hard\n * rule #8), since a future merged section would add a new kind here. */\n readonly kind: string;\n readonly eyebrow: string;\n readonly title: string;\n readonly whenLabel: string;\n readonly locationText: string | null;\n}\n\n/** One glyph per merged row kind — resolved by lookup (hard rule #8), never\n * a switch/if-else. `default` covers a kind this build predates. */\nconst ROW_ICON = createRegistry<string, () => ReactNode>({ fallback: () => <CompassIcon /> });\nROW_ICON.register('transport', () => <CarIcon />);\nROW_ICON.register('stay', () => <HouseIcon />);\nROW_ICON.register('activity', () => <CompassIcon />);\nROW_ICON.register('rooming', () => <BedIcon />);\nROW_ICON.register('pickup', () => <PinIcon />);\nROW_ICON.register('vehicle', () => <CarIcon />);\n\nfunction mergeDayBookings(\n section: DayBookingsSection | undefined,\n kind: string,\n typeLabel: string,\n timezone: string,\n serverTime: string | undefined,\n t: (key: string) => string,\n): MergedRow[] {\n if (section === undefined) {\n return [];\n }\n const rows: MergedRow[] = [];\n for (const day of section.days) {\n for (const item of day.items) {\n const whenLabel =\n item.endAt !== null\n ? `${formatDayMonth(item.startAt, timezone)} → ${formatDayMonth(item.endAt, timezone)}`\n : formatDayMonth(item.startAt, timezone);\n const state = deriveBookingState(item.startAt, item.endAt, serverTime);\n const eyebrow = `${typeLabel} · ${dayLabel(t, item.dayIndex + 1)}${\n state !== null ? ` · ${t(STATE_LABEL_KEY[state])}` : ''\n }`;\n rows.push({\n key: item.bookingId,\n sortKey: item.dayIndex,\n dayEnd: item.dayIndex,\n kind,\n eyebrow,\n title: item.title,\n whenLabel: t('chrome.shareView.stay.when').replace('{when}', whenLabel),\n locationText: item.locationText,\n });\n }\n }\n return rows;\n}\n\nfunction dayRangeLabel(assignment: RoomingAssignment, t: (key: string) => string): string {\n return assignment.startDayIndex === assignment.endDayIndex\n ? dayLabel(t, assignment.startDayIndex + 1)\n : t('chrome.shareView.dayRangeLabel')\n .replace('{start}', String(assignment.startDayIndex + 1))\n .replace('{end}', String(assignment.endDayIndex + 1));\n}\n\nfunction mergeRooming(\n section: RoomingSection | undefined,\n t: (key: string) => string,\n): MergedRow[] {\n if (section === undefined) {\n return [];\n }\n return section.assignments.map((assignment) => {\n const roomLabel = t('chrome.shareView.stay.room').replace('{room}', assignment.room);\n const roomBed =\n assignment.bed !== null\n ? t('chrome.shareView.stay.roomBed')\n .replace('{room}', assignment.room)\n .replace('{bed}', assignment.bed)\n : roomLabel;\n return {\n key: assignment.stayWindowId,\n sortKey: assignment.startDayIndex,\n dayEnd: assignment.endDayIndex,\n kind: 'rooming',\n eyebrow: `${t('chrome.shareView.stay.rooming')} · ${dayRangeLabel(assignment, t)}`,\n title: assignment.label !== '' ? assignment.label : roomLabel,\n whenLabel: roomBed,\n locationText:\n assignment.roommates.length > 0\n ? t('chrome.shareView.stay.with').replace('{names}', assignment.roommates.join(', '))\n : null,\n };\n });\n}\n\n/** `PickupStop.kind` (`PickupKind` — `'PICKUP' | 'DROP'`, the Prisma enum,\n * verified against the engine) — a closed real enum, not free text, so it\n * gets the same chrome-label treatment as `STATE_LABEL_KEY` above rather\n * than being printed raw. Raw value as its own fallback for a kind this\n * build predates (hard rule #8 in spirit). */\nconst PICKUP_KIND_LABEL_KEY: Record<string, string> = {\n PICKUP: 'chrome.shareView.stay.pickup.kind.pickup',\n DROP: 'chrome.shareView.stay.pickup.kind.drop',\n};\n\n/** `PickupStop.status` is `TravellerPickup.status` on the wire\n * (`share.repository.ts#findPickupForTraveller` selects it off that model,\n * not `PickupPoint.status`) — the Prisma enum is `BoardStatus`:\n * `'PENDING' | 'BOARDED' | 'NO_SHOW'`, verified against the schema. Same\n * reasoning as `PICKUP_KIND_LABEL_KEY`. */\nconst PICKUP_STATUS_LABEL_KEY: Record<string, string> = {\n PENDING: 'chrome.shareView.stay.pickup.status.pending',\n BOARDED: 'chrome.shareView.stay.pickup.status.boarded',\n NO_SHOW: 'chrome.shareView.stay.pickup.status.noShow',\n};\n\nfunction pickupRow(\n stop: PickupStop,\n index: number,\n timezone: string,\n t: (key: string) => string,\n): MergedRow {\n const kindLabel = PICKUP_KIND_LABEL_KEY[stop.kind];\n const statusLabel = PICKUP_STATUS_LABEL_KEY[stop.status];\n return {\n key: `pickup-${String(index)}`,\n sortKey: Number.POSITIVE_INFINITY,\n dayEnd: Number.POSITIVE_INFINITY,\n kind: 'pickup',\n eyebrow: `${kindLabel !== undefined ? t(kindLabel) : stop.kind} · ${\n statusLabel !== undefined ? t(statusLabel) : stop.status\n }`,\n title: stop.point,\n whenLabel: formatTimeOfDay(stop.time, timezone),\n locationText: stop.locationLabel,\n };\n}\n\nexport function StayAndTransportSection({\n accommodation,\n transport,\n activities,\n rooming,\n seating,\n pickup,\n timezone,\n selectedDayIndex,\n serverTime,\n}: StayAndTransportSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const allDayRows: MergedRow[] = [\n ...mergeDayBookings(\n transport,\n 'transport',\n t('chrome.shareView.stay.typeLabel.transport'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeDayBookings(\n accommodation,\n 'stay',\n t('chrome.shareView.stay.typeLabel.stay'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeDayBookings(\n activities,\n 'activity',\n t('chrome.shareView.stay.typeLabel.activity'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeRooming(rooming, t),\n ].sort((a, b) => a.sortKey - b.sortKey || a.key.localeCompare(b.key));\n\n const dayRows =\n selectedDayIndex === undefined\n ? allDayRows\n : allDayRows.filter(\n (row) => row.sortKey <= selectedDayIndex && selectedDayIndex <= row.dayEnd,\n );\n\n const rows: MergedRow[] = [\n ...dayRows,\n ...(pickup?.stops.map((stop, index) => pickupRow(stop, index, timezone, t)) ?? []),\n ];\n\n const hasVehicle = seating !== undefined;\n\n if (rows.length === 0 && !hasVehicle) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.stay.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.stay.eyebrow')}</span>\n {selectedDayIndex !== undefined ? (\n <span className=\"kf-eyebrow\">{dayLabel(t, selectedDayIndex + 1)}</span>\n ) : null}\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {hasVehicle && seating !== undefined ? (\n <li className=\"kf-share-view__row kf-share-view__booking-row\">\n <div className=\"kf-share-view__booking-icon\" aria-hidden=\"true\">\n {ROW_ICON.resolve('vehicle')()}\n </div>\n <div className=\"kf-share-view__booking-body\">\n <p className=\"kf-share-view__booking-eyebrow kf-eyebrow\">\n {t('chrome.shareView.stay.vehicle')}\n </p>\n {/* Registration number as the title — the one identifier a\n * traveller actually needs to spot the right vehicle\n * kerbside, not the generic type label repeated from the\n * line below (real gap: `label`/`type` are near-duplicates\n * — \"Tempo Traveller\" twice — while `regNo` never appeared\n * anywhere at all). */}\n <p className=\"kf-share-view__booking-title\">{seating.vehicle.regNo}</p>\n <p className=\"kf-share-view__booking-when\">\n {seating.vehicle.label} · {seating.vehicle.regNo}\n </p>\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.capacity').replace(\n '{n}',\n String(seating.vehicle.capacity),\n )}\n </p>\n {seating.vehicle.driver !== null ? (\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.driver').replace('{name}', seating.vehicle.driver.name)}\n </p>\n ) : null}\n {/* A real paragraph break, not just another tightly-stacked\n * line — this is a SEPARATE fact group (the traveller's own\n * assignment), not more vehicle metadata (real gap: every\n * line here previously shared the same 4px gap as the\n * vehicle facts above it, reading as one undifferentiated\n * block instead of two). */}\n {(seating.seat !== null && seating.seat !== undefined) ||\n (seating.vehicle.driver !== null && seating.vehicle.driver.phoneHref !== null) ? (\n <div className=\"kf-share-view__booking-assignment\">\n {seating.seat !== null && seating.seat !== undefined ? (\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.yourSeat').replace('{seat}', seating.seat)}\n </p>\n ) : null}\n {seating.vehicle.driver !== null && seating.vehicle.driver.phoneHref !== null ? (\n <a\n className=\"kf-share-view__booking-driver-link\"\n href={seating.vehicle.driver.phoneHref}\n >\n {t('chrome.shareView.stay.callDriver')}\n {seating.vehicle.driver.phoneDisplay !== null\n ? ` · ${seating.vehicle.driver.phoneDisplay}`\n : ''}\n </a>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n ) : null}\n {rows.map((row) => (\n <li key={row.key} className=\"kf-share-view__row kf-share-view__booking-row\">\n <div className=\"kf-share-view__booking-icon\" aria-hidden=\"true\">\n {ROW_ICON.resolve(row.kind)()}\n </div>\n <div className=\"kf-share-view__booking-body\">\n <p className=\"kf-share-view__booking-eyebrow kf-eyebrow\">{row.eyebrow}</p>\n <p className=\"kf-share-view__booking-title\">{row.title}</p>\n <p className=\"kf-share-view__booking-when\">{row.whenLabel}</p>\n {row.locationText !== null ? (\n <p className=\"kf-share-view__booking-when\">{row.locationText}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// A timeline card — hairline-divided rows, no card padding, each row\n// owning its own inline padding (craft brief's \"divided-row card\" recipe).\n// Renders only today's day; if no day is flagged `isToday` (pre-departure /\n// post-trip), this section contributes nothing (hard rule #20 applied per\n// this component, not just per top-level section key).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay } from '../formatShareDate';\nimport type { ItinerarySection } from '../shareTypes';\n\nexport interface TodayPlanSectionProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n}\n\nexport function TodayPlanSection({ itinerary, timezone }: TodayPlanSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const today = itinerary.days.find((day) => day.isToday);\n if (today === undefined || today.items.length === 0) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.today.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.today.eyebrow')}</span>\n <span className=\"kf-eyebrow\">\n {t('chrome.shareView.dayLabel').replace('{n}', String(today.dayIndex + 1))}\n </span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {today.items.map((item) => (\n <li\n key={item.id}\n className={`kf-share-view__row kf-share-view__plan-row kf-share-view__plan-row--${item.timeState}`}\n >\n <span className=\"kf-share-view__plan-time kf-num\">\n {item.timeState === 'now'\n ? t('chrome.shareView.plan.now')\n : item.startTime !== null\n ? formatTimeOfDay(item.startTime, timezone)\n : ''}\n </span>\n <span className=\"kf-share-view__plan-title\">{item.title}</span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// The traveller family's ENTIRE public-facing surface, as ONE exported\n// component (`src/traveller/index.ts` re-exports only this — the task's\n// deliberate deviation from the old ~10-composite spec). Internal files\n// under `KaafilShareView/internal/` are this component's own code\n// organisation, never a second export.\n//\n// JUDGMENT CALLS, flagged in the final report (see also each internal\n// file's own header comment for the narrower ones):\n//\n// 1. `data-kf-family=\"traveller\"` is set directly on this component's own\n// root element rather than via `AppShell`'s `family` prop —\n// `KaafilUIKitProvider` mounts `AppShell` once, app-wide, and does not\n// thread a `family` prop through today (verified,\n// `KaafilUIKitProvider.tsx`), so a family Surface component setting the\n// attribute on its own root is the only way `families/traveller.css`'s\n// `[data-kf-family=\"traveller\"]` tokens ever apply without also\n// changing the provider itself (out of this task's scope).\n// 2. The fixed render order names distinct visual slots (\"next-up\n// banner\", \"today's plan\", \"itinerary day-strip\") that all read off the\n// SAME `itinerary` section key. `sections.itinerary = false` hides all\n// four itinerary-derived pieces (hero's day-count, next-up, today's\n// plan, day-strip); `renderSection.itinerary`, which can only replace\n// ONE react subtree, is wired to the day-strip specifically — the most\n// literal one-to-one mapping of that key — not to all four.\n// 3. `StayAndTransportSection` joins six section keys\n// (`accommodation`/`transport`/`activities`/`rooming`/`seating`/\n// `pickup`) that have no single owning key of their own;\n// `sections.<key> = false` excludes just that key's rows from the\n// merge, and no `renderSection` override exists for the merged view\n// (there is no single key to hang one off).\n// 4. `rooming` (room/bed assignments) is now merged into\n// `StayAndTransportSection` alongside accommodation/transport/\n// activities, sorted by `startDayIndex` the same way the others sort\n// by `dayIndex` — closed gap, previously flagged as unread in this\n// file's render tree.\n\nimport type { ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport { useSession } from '../../core/hooks/useSession.js';\nimport { useShareSnapshot } from '../../core/hooks/useShareSnapshot.js';\nimport { BrandShell } from '../../core/shells/BrandShell.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport { tokenStyle } from '../../primitives/internal/tokenStyle.js';\nimport { deriveTripStatus } from './internal/deriveTripStatus';\nimport { HouseholdSheet } from './internal/HouseholdSheet';\nimport { ShareEndedScreen } from './internal/ShareEndedScreen';\nimport { ShareSkeleton } from './internal/ShareSkeleton';\nimport { AgencyContactSection } from './internal/sections/AgencyContactSection';\nimport { BrandHeaderSection } from './internal/sections/BrandHeaderSection';\nimport { ChecklistSection } from './internal/sections/ChecklistSection';\nimport { DocumentsSection } from './internal/sections/DocumentsSection';\nimport { FormsSection } from './internal/sections/FormsSection';\nimport { HeroSection } from './internal/sections/HeroSection';\nimport { HouseholdBanner } from './internal/sections/HouseholdBanner';\nimport { ItineraryDayStrip } from './internal/sections/ItineraryDayStrip';\nimport { ManagerContactSection } from './internal/sections/ManagerContactSection';\nimport { MoneySection } from './internal/sections/MoneySection';\nimport { NextUpBanner } from './internal/sections/NextUpBanner';\nimport { StayAndTransportSection } from './internal/sections/StayAndTransportSection';\nimport { TodayPlanSection } from './internal/sections/TodayPlanSection';\nimport type {\n AgencyContactSectionData,\n ChecklistsSection,\n DayBookingsSection,\n DocumentsSectionData,\n HouseholdSectionData,\n ItinerarySection,\n ManagerContactSectionData,\n MoneySectionData,\n PickupSection,\n RoomingSection,\n SeatingSection,\n ShareSectionKey,\n} from './internal/shareTypes';\nimport type { KaafilShareViewProps } from './KaafilShareView.types';\n\nfunction isVisible(key: ShareSectionKey, overrides: KaafilShareViewProps['sections']): boolean {\n return overrides?.[key] !== false;\n}\n\n/**\n * `SessionShell` renders `{children}` unconditionally throughout, including\n * the brief \"opening\" tick before it constructs the `KaafilClient`\n * (`core/shells/SessionShell.tsx`'s own comment) — `KaafilClientContext` is\n * simply not provided yet during that window. `useShareSnapshot()` (like\n * every other `/core` data hook) calls `useKaafilClient()` unconditionally,\n * which throws outside that context. Rules of Hooks means this can't be a\n * conditional hook call inside one component — so the public component\n * gates on `useSession().status` (safe during \"opening\") and only MOUNTS\n * the data-hook-calling component once authenticated, rather than calling\n * `useShareSnapshot()` itself before that's guaranteed.\n */\nexport function KaafilShareView(props: KaafilShareViewProps): ReactNode {\n const session = useSession();\n if (session.status !== 'authenticated') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\">\n <ShareSkeleton />\n </div>\n );\n }\n return <ReadyKaafilShareView {...props} />;\n}\n\nfunction ReadyKaafilShareView({\n token,\n travellerRef,\n headStrategy = 'own-page',\n sections: sectionOverrides,\n household: householdProp,\n renderSection,\n style,\n}: KaafilShareViewProps): ReactNode {\n const { t } = useKaafilChrome();\n const snapshot = useShareSnapshot(token, { travellerRef });\n const [householdSheetOpen, setHouseholdSheetOpen] = useState(false);\n // -1 = \"not yet explicitly chosen\" — resolved to today's day (or day 1)\n // below, once `itinerary` actually loads, rather than freezing at 0 the\n // way a lazy `useState` initializer would (this component mounts before\n // the snapshot's data has arrived).\n const [chosenDayIndex, setChosenDayIndex] = useState(-1);\n\n const itinerary = snapshot.sections.get('itinerary') as ItinerarySection | undefined;\n const rooming = isVisible('rooming', sectionOverrides)\n ? (snapshot.sections.get('rooming') as RoomingSection | undefined)\n : undefined;\n const seating = isVisible('seating', sectionOverrides)\n ? (snapshot.sections.get('seating') as SeatingSection | undefined)\n : undefined;\n const pickup = isVisible('pickup', sectionOverrides)\n ? (snapshot.sections.get('pickup') as PickupSection | undefined)\n : undefined;\n const accommodation = isVisible('accommodation', sectionOverrides)\n ? (snapshot.sections.get('accommodation') as DayBookingsSection | undefined)\n : undefined;\n const transport = isVisible('transport', sectionOverrides)\n ? (snapshot.sections.get('transport') as DayBookingsSection | undefined)\n : undefined;\n const activities = isVisible('activities', sectionOverrides)\n ? (snapshot.sections.get('activities') as DayBookingsSection | undefined)\n : undefined;\n const checklists = snapshot.sections.get('checklists') as ChecklistsSection | undefined;\n const documents = snapshot.sections.get('documents') as DocumentsSectionData | undefined;\n const money = snapshot.sections.get('money') as MoneySectionData | undefined;\n const managerContact = snapshot.sections.get('managerContact') as\n | ManagerContactSectionData\n | undefined;\n const agencyContact = snapshot.sections.get('agencyContact') as\n | AgencyContactSectionData\n | undefined;\n const household = snapshot.sections.get('household') as HouseholdSectionData | undefined;\n\n const tripStatus = useMemo(\n () =>\n snapshot.trip !== undefined\n ? deriveTripStatus(snapshot.trip, itinerary, snapshot.serverTime, t)\n : undefined,\n [snapshot.trip, itinerary, snapshot.serverTime, t],\n );\n\n const rootStyle = tokenStyle(style);\n\n if (snapshot.status === 'loading') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareSkeleton />\n </div>\n );\n }\n if (snapshot.status === 'expired' || snapshot.status === 'revoked') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareEndedScreen reason=\"ended\" />\n </div>\n );\n }\n if (snapshot.status === 'not-found' || snapshot.trip === undefined || tripStatus === undefined) {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareEndedScreen reason=\"not-found\" />\n </div>\n );\n }\n\n const timezone = snapshot.trip.timezone;\n const tripName = snapshot.trip.name;\n\n const householdLabel = household?.partyLabel ?? householdProp?.label ?? null;\n const householdTravellers =\n household?.travellers ??\n householdProp?.travellers?.map((entry) => ({ ...entry, isSubject: false })) ??\n [];\n const householdNames = householdTravellers.map((traveller) => traveller.firstName).join(' & ');\n const showHousehold =\n isVisible('household', sectionOverrides) &&\n (householdTravellers.length > 0 || householdLabel !== null);\n\n const showItinerary = isVisible('itinerary', sectionOverrides) && itinerary !== undefined;\n const todayDayIndex = itinerary?.days.findIndex((day) => day.isToday) ?? -1;\n const selectedDayIndex =\n chosenDayIndex !== -1 ? chosenDayIndex : todayDayIndex !== -1 ? todayDayIndex : 0;\n const showStayAndTransport =\n accommodation !== undefined ||\n transport !== undefined ||\n activities !== undefined ||\n rooming !== undefined ||\n seating !== undefined ||\n pickup !== undefined;\n\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <BrandShell headStrategy={headStrategy} appName={tripName}>\n {agencyContact !== undefined ? (\n <BrandHeaderSection\n agencyContact={agencyContact}\n partyKind={household?.partyKind ?? null}\n />\n ) : null}\n\n {showHousehold\n ? (\n renderSection?.household ??\n (() => <HouseholdBanner label={householdLabel} names={householdNames} />)\n )(household)\n : null}\n\n <HeroSection\n tripName={tripName}\n status={tripStatus}\n travellers={householdTravellers}\n onOpenHousehold={\n householdTravellers.length > 0 ? () => setHouseholdSheetOpen(true) : undefined\n }\n />\n\n {showItinerary && itinerary !== undefined ? (\n <NextUpBanner itinerary={itinerary} timezone={timezone} />\n ) : null}\n\n {showItinerary && itinerary !== undefined ? (\n <TodayPlanSection itinerary={itinerary} timezone={timezone} />\n ) : null}\n\n {isVisible('managerContact', sectionOverrides) && managerContact !== undefined\n ? (\n renderSection?.managerContact ??\n (() => <ManagerContactSection data={managerContact} />)\n )(managerContact)\n : null}\n\n {showItinerary && itinerary !== undefined\n ? (\n renderSection?.itinerary ??\n (() => (\n <ItineraryDayStrip\n itinerary={itinerary}\n timezone={timezone}\n selectedIndex={selectedDayIndex}\n onSelectIndex={setChosenDayIndex}\n />\n ))\n )(itinerary)\n : null}\n\n {showStayAndTransport ? (\n <StayAndTransportSection\n accommodation={accommodation}\n transport={transport}\n activities={activities}\n rooming={rooming}\n seating={seating}\n pickup={pickup}\n timezone={timezone}\n selectedDayIndex={showItinerary ? selectedDayIndex : undefined}\n serverTime={snapshot.serverTime}\n />\n ) : null}\n\n {isVisible('checklists', sectionOverrides) && checklists !== undefined\n ? (renderSection?.checklists ?? (() => <ChecklistSection data={checklists} />))(\n checklists,\n )\n : null}\n\n {isVisible('documents', sectionOverrides) && documents !== undefined\n ? (\n renderSection?.documents ??\n (() => <DocumentsSection data={documents} timezone={timezone} />)\n )(documents)\n : null}\n\n {isVisible('money', sectionOverrides) && money !== undefined\n ? (renderSection?.money ?? (() => <MoneySection data={money} />))(money)\n : null}\n\n {isVisible('agencyContact', sectionOverrides) && agencyContact !== undefined\n ? (renderSection?.agencyContact ?? (() => <AgencyContactSection data={agencyContact} />))(\n agencyContact,\n )\n : null}\n\n {isVisible('forms', sectionOverrides)\n ? (\n renderSection?.forms ??\n (() => <FormsSection token={token} travellerRef={travellerRef} />)\n )(undefined)\n : null}\n </BrandShell>\n <HouseholdSheet\n open={householdSheetOpen}\n onClose={() => setHouseholdSheetOpen(false)}\n label={householdLabel}\n travellers={householdTravellers}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/traveller/KaafilShareView/internal/formatShareDate.ts","../../src/traveller/KaafilShareView/internal/deriveTripStatus.ts","../../src/traveller/KaafilShareView/internal/HouseholdSheet.tsx","../../src/traveller/KaafilShareView/internal/ShareEndedScreen.tsx","../../src/traveller/KaafilShareView/internal/ShareSkeleton.tsx","../../src/traveller/KaafilShareView/internal/icons.tsx","../../src/traveller/KaafilShareView/internal/sections/ContactCard.tsx","../../src/traveller/KaafilShareView/internal/sections/AgencyContactSection.tsx","../../src/traveller/KaafilShareView/internal/sections/BrandHeaderSection.tsx","../../src/traveller/KaafilShareView/internal/sections/ChecklistSection.tsx","../../src/traveller/KaafilShareView/internal/sections/DocumentsSection.tsx","../../src/traveller/KaafilShareView/internal/forms/SelectFieldEditor.tsx","../../src/traveller/KaafilShareView/internal/forms/fieldRegistry.tsx","../../src/traveller/KaafilShareView/internal/forms/FormFillScreen.tsx","../../src/traveller/KaafilShareView/internal/sections/FormsSection.tsx","../../src/traveller/KaafilShareView/internal/sections/HeroSection.tsx","../../src/traveller/KaafilShareView/internal/sections/HouseholdBanner.tsx","../../src/traveller/KaafilShareView/internal/sections/ItineraryDayStrip.tsx","../../src/traveller/KaafilShareView/internal/sections/ManagerContactSection.tsx","../../src/traveller/KaafilShareView/internal/sections/MoneySection.tsx","../../src/traveller/KaafilShareView/internal/sections/NextUpBanner.tsx","../../src/traveller/KaafilShareView/internal/sections/StayAndTransportSection.tsx","../../src/traveller/KaafilShareView/internal/sections/TodayPlanSection.tsx","../../src/traveller/KaafilShareView/KaafilShareView.tsx"],"names":["dayLabel","useKaafilChrome","useEffect","jsx","jsxs","Fragment","useState","useRef","createRegistry","useMemo","useContext","OfflineEngineContext","useShareForms","statusLabel","useSession","useShareSnapshot","tokenStyle","BrandShell"],"mappings":"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","file":"index.cjs","sourcesContent":["// Date/time formatting anchored to the trip's own IANA zone\n// (`ShareSnapshotTrip.timezone` — the ONE zone this surface may legally\n// format against, never the device zone, never `new Date()`'s local\n// getters — hard rule #6, `useShareSnapshot.ts`'s own header). No `/core`\n// `DateDisplay`/`TimeDisplay` primitive exists yet in this tree to reuse\n// (`src/primitives` currently ships only `internal/tokenStyle.ts`), so this\n// file is this component's own small, honest formatting layer rather than a\n// hand-rolled string built ad hoc at each call site. JUDGMENT CALL — flagged\n// in the final report: day-before-month (`27 AUG`, never `AUG 27`) is a\n// deliberate choice for an India-market travel product, per the reference\n// craft brief's dated-US-format defect note, not a spec-stated rule.\n//\n// `Intl.DateTimeFormat` is used throughout — never manual arithmetic on a\n// parsed `Date`'s local getters — so the trip's own zone, not the device's,\n// always decides the calendar day/hour a timestamp renders as.\n\nconst WEEKDAY_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst DAY_MONTH_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst TIME_FORMAT_CACHE = new Map<string, Intl.DateTimeFormat>();\n\nfunction cachedFormatter(\n cache: Map<string, Intl.DateTimeFormat>,\n timezone: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const existing = cache.get(timezone);\n if (existing !== undefined) {\n return existing;\n }\n const created = new Intl.DateTimeFormat('en-GB', { ...options, timeZone: timezone });\n cache.set(timezone, created);\n return created;\n}\n\n/** `THU`, uppercased 3-letter weekday. */\nexport function formatWeekdayShort(isoDate: string, timezone: string): string {\n const formatter = cachedFormatter(WEEKDAY_FORMAT_CACHE, timezone, { weekday: 'short' });\n return formatter.format(new Date(isoDate)).toUpperCase();\n}\n\n/** `27 AUG` — day-of-month then a 3-letter uppercase month, never\n * month-first (see this file's header). */\nexport function formatDayMonth(isoDate: string, timezone: string): string {\n const formatter = cachedFormatter(DAY_MONTH_FORMAT_CACHE, timezone, {\n day: 'numeric',\n month: 'short',\n });\n return formatter.format(new Date(isoDate)).toUpperCase();\n}\n\n/** `THU 27` — weekday + day-of-month, no month (the day-chip strip label). */\nexport function formatWeekdayDay(isoDate: string, timezone: string): string {\n return `${formatWeekdayShort(isoDate, timezone)} ${new Intl.DateTimeFormat('en-GB', { day: 'numeric', timeZone: timezone }).format(new Date(isoDate))}`;\n}\n\n/** `15:30` — 24-hour clock, the trip's own zone. */\nexport function formatTimeOfDay(isoDateTime: string, timezone: string): string {\n const formatter = cachedFormatter(TIME_FORMAT_CACHE, timezone, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n return formatter.format(new Date(isoDateTime));\n}\n\n/** Whole calendar days between two ISO stamps, counted in the trip's own\n * zone (so a stamp near local midnight doesn't round to the wrong day\n * depending on the reader's own device zone). Never negative — clamps at 0\n * for a `to` at or before `from`. */\nexport function wholeDaysBetween(fromIso: string, toIso: string, timezone: string): number {\n const dayKeyFormatter = new Intl.DateTimeFormat('en-CA', { timeZone: timezone });\n const fromKey = dayKeyFormatter.format(new Date(fromIso));\n const toKey = dayKeyFormatter.format(new Date(toIso));\n const fromUtc = Date.parse(`${fromKey}T00:00:00Z`);\n const toUtc = Date.parse(`${toKey}T00:00:00Z`);\n const diffDays = Math.round((toUtc - fromUtc) / (24 * 60 * 60 * 1000));\n return diffDays > 0 ? diffDays : 0;\n}\n","// Pure derivation — `trip` + the `itinerary` section + `serverTime` in,\n// hero copy/progress/phase label out. No `Date.now()`/`new Date()` reading\n// the LOCAL wall clock anywhere in this file (hard rule #6): every \"now\" is\n// `serverTime`, the one trusted stamp `useShareSnapshot()` returns.\n// Pure and synchronous so it needs no test harness beyond a plain call —\n// kept out of any component file per this task's own file-tree contract.\n\nimport type { ShareSnapshotTrip } from '../../../core/hooks/useShareSnapshot.js';\nimport { formatDayMonth, wholeDaysBetween } from './formatShareDate';\nimport type { ItinerarySection } from './shareTypes';\n\nexport type TripPhase = 'PRE_DEPARTURE' | 'ON_TRIP' | 'POST_TRIP';\n\nexport interface TripStatus {\n readonly phase: TripPhase;\n /**\n * Mirrors the wire's own `trip.cancelled` — deliberately NOT a fourth\n * `TripPhase` member. `phase` answers \"where in the trip are we\" and is\n * date-derived; cancellation is an orthogonal fact, and the engine's\n * `share.dto.ts` keeps the two apart for exactly that reason. A cancelled\n * trip still reports whichever `phase` its dates imply, so every consumer\n * must consult THIS flag before rendering anything date-derived.\n */\n readonly cancelled: boolean;\n readonly phaseLabel: string;\n readonly totalDays: number;\n readonly currentDayNumber: number | null;\n readonly dayLabel: string;\n readonly dateRangeLabel: string;\n readonly daysLeftLabel: string | null;\n /** 0-100. */\n readonly progressPercent: number;\n}\n\nconst PHASE_LABEL_KEY: Record<TripPhase, string> = {\n PRE_DEPARTURE: 'chrome.shareView.trip.phase.preDeparture',\n ON_TRIP: 'chrome.shareView.trip.phase.onTrip',\n POST_TRIP: 'chrome.shareView.trip.phase.postTrip',\n};\n\n/** Pure derivation, called from a component's render — `t` is passed in\n * (not read via `useKaafilChrome()` here) because this file is plain data\n * logic, not a component, and hooks may only be called from one\n * (`13-i18n-and-formatting.md §3.1`'s chrome/content split applies to this\n * file's own phase/day-count copy — the UIKit's own words, never trip\n * content). */\nexport function deriveTripStatus(\n trip: ShareSnapshotTrip,\n itinerary: ItinerarySection | undefined,\n serverTime: string | undefined,\n t: (key: string) => string,\n): TripStatus {\n const totalDays =\n itinerary?.days.length ?? wholeDaysBetween(trip.startDate, trip.endDate, trip.timezone) + 1;\n const todayDay = itinerary?.days.find((day) => day.isToday);\n const currentDayNumber = todayDay !== undefined ? todayDay.dayIndex + 1 : null;\n\n // A cancelled trip answers every date-derived question the same way: it is\n // not happening. Deriving the headline, the countdown or the progress bar\n // from its dates is what produced the defect this branch exists for — a\n // family-facing page reading \"Upcoming · Starts in 5 days\" for a trip the\n // agency had called off (QA stress report §2.3).\n const cancelled = trip.cancelled;\n\n const dayLabel = cancelled\n ? t('chrome.shareView.trip.cancelledHeadline')\n : currentDayNumber !== null\n ? t('chrome.shareView.trip.dayOf')\n .replace('{current}', String(currentDayNumber))\n .replace('{total}', String(totalDays))\n : t(PHASE_LABEL_KEY[trip.phase]);\n\n const dateRangeLabel = `${formatDayMonth(trip.startDate, trip.timezone)} → ${formatDayMonth(trip.endDate, trip.timezone)}`;\n\n let daysLeftLabel: string | null = null;\n if (cancelled) {\n // No countdown of any kind — neither \"starts in\" nor \"days left\".\n daysLeftLabel = null;\n } else if (trip.phase === 'ON_TRIP' && serverTime !== undefined) {\n const daysLeft = wholeDaysBetween(serverTime, trip.endDate, trip.timezone);\n daysLeftLabel =\n daysLeft === 1\n ? t('chrome.shareView.trip.daysLeftOne')\n : t('chrome.shareView.trip.daysLeftMany').replace('{count}', String(daysLeft));\n } else if (trip.phase === 'PRE_DEPARTURE' && serverTime !== undefined) {\n const daysToStart = wholeDaysBetween(serverTime, trip.startDate, trip.timezone);\n daysLeftLabel =\n daysToStart === 1\n ? t('chrome.shareView.trip.startsInOne')\n : t('chrome.shareView.trip.startsInMany').replace('{count}', String(daysToStart));\n }\n\n // A cancelled trip has made no progress through an itinerary it will not\n // run, so the bar stays empty regardless of where its dates fall.\n let progressPercent = 0;\n if (cancelled) {\n progressPercent = 0;\n } else if (trip.phase === 'POST_TRIP') {\n progressPercent = 100;\n } else if (trip.phase === 'ON_TRIP' && currentDayNumber !== null && totalDays > 0) {\n progressPercent = Math.min(100, Math.round((currentDayNumber / totalDays) * 100));\n }\n\n return {\n phase: trip.phase,\n cancelled,\n phaseLabel: cancelled\n ? t('chrome.shareView.trip.phase.cancelled')\n : t(PHASE_LABEL_KEY[trip.phase]),\n totalDays,\n currentDayNumber,\n dayLabel,\n dateRangeLabel,\n daysLeftLabel,\n progressPercent,\n };\n}\n","'use client';\n\n// Opened by tapping the avatar stack in the hero — real gap found comparing\n// against the reference craft brief's `FamilyHouseholdSheet`. Shows only\n// real fields (`firstName`, `initials`, `isSubject`) — the reference sheet\n// also shows a role/dietary line (\"Lead booker · Vegetarian\"), but nothing\n// in the real `household` section carries that (out of scope, not\n// fabricated here).\n\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\nimport type { HouseholdTraveller } from './shareTypes';\n\nexport interface HouseholdSheetProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly label: string | null;\n readonly travellers: readonly HouseholdTraveller[];\n}\n\nexport function HouseholdSheet({\n open,\n onClose,\n label,\n travellers,\n}: HouseholdSheetProps): ReactNode {\n const { t } = useKaafilChrome();\n // Document-level Escape, not a click/keydown pair on the backdrop —\n // a static backdrop `<div>` with its own dismiss handler fights every\n // jsx-a11y interactive-element rule (a `role=\"button\"` div still isn't a\n // real button; nesting a real `<button>` around the sheet is invalid\n // HTML once the sheet has its own interactive children). The explicit\n // close button below stays the primary, always-visible dismiss affordance.\n useEffect(() => {\n if (!open) {\n return;\n }\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n onClose();\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open, onClose]);\n\n if (!open) {\n return null;\n }\n\n return (\n <div className=\"kf-share-view__sheet-backdrop\">\n <div\n className=\"kf-share-view__sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label ?? t('chrome.shareView.household.ariaLabelFallback')}\n >\n <div className=\"kf-share-view__sheet-header\">\n <div>\n <p className=\"kf-eyebrow\">{t('chrome.shareView.household.eyebrow')}</p>\n {label !== null ? <p className=\"kf-share-view__sheet-title\">{label}</p> : null}\n </div>\n <button\n type=\"button\"\n className=\"kf-share-view__sheet-close kf-press\"\n onClick={onClose}\n aria-label={t('chrome.shareView.close')}\n >\n ✕\n </button>\n </div>\n <ul className=\"kf-share-view__list\">\n {travellers.map((traveller, index) => (\n <li\n key={`${traveller.firstName}-${String(index)}`}\n className=\"kf-share-view__row kf-share-view__sheet-row\"\n >\n <span className=\"kf-share-view__household-avatar\" aria-hidden=\"true\">\n {traveller.initials}\n </span>\n <div className=\"kf-share-view__sheet-row-body\">\n <p className=\"kf-share-view__contact-name\">\n {traveller.firstName}\n {traveller.isSubject ? (\n <span className=\"kf-share-view__sheet-you\">\n {' '}\n · {t('chrome.shareView.household.you')}\n </span>\n ) : null}\n </p>\n </div>\n </li>\n ))}\n </ul>\n <p className=\"kf-share-view__sheet-footer kf-eyebrow\">\n {travellers.length}{' '}\n {travellers.length === 1\n ? t('chrome.shareView.household.travellerSingular')\n : t('chrome.shareView.household.travellerPlural')}{' '}\n · {t('chrome.shareView.household.readOnlyView')}\n </p>\n </div>\n </div>\n );\n}\n","'use client';\n\n// `expired`/`revoked` collapse to identical copy (\"This link has ended.\")\n// and `not-found` gets its own, equally plain copy — task brief, verbatim.\n// Structure/tone borrowed from `ErrorShell.tsx`'s own `DefaultFallback`\n// (role/aria-live pairing, no icon, no illustration, one line + nothing\n// else) rather than inventing a new tone: this is the \"any existing\n// not-found pattern already in src/core\" the task points at. Tokens only —\n// `ErrorShell`'s own fallback hardcodes because it must survive without\n// `ThemeShell` context; this component always mounts UNDER `ThemeShell`\n// (via `KaafilUIKitProvider`), so it has no such excuse and uses `--kf-*`.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\n\nexport type ShareEndedReason = 'ended' | 'not-found';\n\nconst COPY_KEY: Record<ShareEndedReason, string> = {\n ended: 'chrome.shareView.ended.ended',\n 'not-found': 'chrome.shareView.ended.notFound',\n};\n\nexport function ShareEndedScreen({ reason }: { readonly reason: ShareEndedReason }): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <div className=\"kf-share-view__ended\" role=\"alert\" aria-live=\"assertive\">\n <p className=\"kf-share-view__ended-message\">{t(COPY_KEY[reason])}</p>\n </div>\n );\n}\n","'use client';\n\n// `status === 'loading'` → a skeleton, never a spinner (task brief,\n// verbatim). Built from `.kf-shimmer` (`base/motion.css`) — the ONE loading\n// treatment this package's own token system ships (that file's own header:\n// \"never a pulse, never 'Loading…' text\").\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../core/shells/I18nShell.js';\n\nexport function ShareSkeleton(): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <div className=\"kf-share-view__skeleton\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\n <span className=\"kf-visually-hidden\">{t('chrome.shareView.loading')}</span>\n <div className=\"kf-share-view__skeleton-line kf-share-view__skeleton-line--eyebrow kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-line kf-share-view__skeleton-line--headline kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-share-view__skeleton-block--short kf-shimmer\" />\n <div className=\"kf-share-view__skeleton-block kf-shimmer\" />\n </div>\n );\n}\n","'use client';\n\n// A small, hand-rolled icon set scoped to THIS component only — not a\n// shared `/primitives` export (v2's own rebuild rule: no shared primitives\n// package). Every icon tile in the reference craft brief (call/WhatsApp\n// buttons, the next-up banner, each stay & transport row) carries a real\n// glyph; rendering an empty colour swatch instead was a real fidelity gap,\n// not a stylistic choice. `currentColor` throughout so each usage site's\n// own `color` decides the glyph tint — never a literal fill here.\n\nimport type { ReactNode } from 'react';\n\nexport interface IconProps {\n readonly size?: number;\n}\n\nfunction svg(children: ReactNode, size = 16): ReactNode {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n\nexport function PhoneIcon({ size }: IconProps): ReactNode {\n return svg(\n <path d=\"M4 4h3.2l1.4 4.4-2 1.6a12.5 12.5 0 0 0 5.4 5.4l1.6-2 4.4 1.4V18a2 2 0 0 1-2 2C10 20 4 14 4 6a2 2 0 0 1 0-2Z\" />,\n size,\n );\n}\n\nexport function WhatsappIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M6.3 17.7 5 20l2.4-1.3A8 8 0 1 0 4 12a8 8 0 0 0 2.3 5.7Z\" />\n <path d=\"M9 9.5c0 3.5 2.9 6 6 6 .6 0 1-.9.6-1.4l-1.2-1.4a.7.7 0 0 0-.8-.2l-1 .4a5 5 0 0 1-2.5-2.5l.4-1a.7.7 0 0 0-.2-.8L9.4 7.4C8.9 7 8 7.4 8 8c0 .5.2 1 1 1.5Z\" />\n </>,\n size,\n );\n}\n\nexport function PlaneIcon({ size }: IconProps): ReactNode {\n return svg(\n <path d=\"M10.5 20.5 12 15l6.5-6.5a2.1 2.1 0 0 0-3-3L9 12l-5.5 1.5 3 2 1 3 2-1Z\" />,\n size,\n );\n}\n\nexport function HouseIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M4 11 12 4l8 7\" />\n <path d=\"M6 10v9a1 1 0 0 0 1 1h3v-5h4v5h3a1 1 0 0 0 1-1v-9\" />\n </>,\n size,\n );\n}\n\nexport function CarIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M4 16V12l2-5h12l2 5v4\" />\n <path d=\"M4 16h16v2a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1H7v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1Z\" />\n <circle cx=\"7.5\" cy=\"16\" r=\"1.2\" />\n <circle cx=\"16.5\" cy=\"16\" r=\"1.2\" />\n </>,\n size,\n );\n}\n\nexport function CompassIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"m14.5 9.5-1.8 4.2-4.2 1.8 1.8-4.2Z\" />\n </>,\n size,\n );\n}\n\nexport function BedIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M3 18v-7a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3\" />\n <path d=\"M3 18v2M21 18v2M3 15h18v3H3z\" />\n <path d=\"M13 11h6a2 2 0 0 1 2 2v2\" />\n <circle cx=\"7\" cy=\"11\" r=\"1.4\" />\n </>,\n size,\n );\n}\n\nexport function DownloadIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M12 4v11\" />\n <path d=\"m7.5 11.5 4.5 4.5 4.5-4.5\" />\n <path d=\"M4 19.5h16\" />\n </>,\n size,\n );\n}\n\nexport function PinIcon({ size }: IconProps): ReactNode {\n return svg(\n <>\n <path d=\"M12 21s-6.5-5.6-6.5-10.5a6.5 6.5 0 0 1 13 0C18.5 15.4 12 21 12 21Z\" />\n <circle cx=\"12\" cy=\"10.5\" r=\"2.2\" />\n </>,\n size,\n );\n}\n","'use client';\n\n// Shared card body behind `ManagerContactSection`/`AgencyContactSection` —\n// same person-card shape, different eyebrow/footer content, so the render\n// logic (avatar-from-initials, conditional call/WhatsApp buttons) lives\n// once. `phoneDisplay`/`phoneHref`/`whatsappHref` — never `phone` — per the\n// verified `ContactRow` wire shape; a call/WhatsApp button renders ONLY\n// when its own href is non-null, and NEVER derives a link from\n// `phoneDisplay` (it may be server-masked — craft brief's runtime-defect\n// note: stripping a masked display string would dial a stranger). Masking\n// itself is a server decision this component never second-guesses.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { PhoneIcon, WhatsappIcon } from '../icons';\nimport type { ContactRow } from '../shareTypes';\n\nfunction initialsOf(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';\n return `${first}${last}`.toUpperCase();\n}\n\nexport function ContactActions({ row }: { readonly row: ContactRow }): ReactNode {\n const { t } = useKaafilChrome();\n if (row.phoneHref === null && row.whatsappHref === null) {\n return null;\n }\n return (\n <div className=\"kf-share-view__contact-actions\">\n {row.phoneHref !== null ? (\n <a\n className=\"kf-share-view__contact-action kf-share-view__contact-action--call kf-press\"\n href={row.phoneHref}\n >\n <PhoneIcon />\n <span className=\"kf-visually-hidden\">\n {t('chrome.shareView.contact.call').replace('{name}', row.name)}\n </span>\n </a>\n ) : null}\n {row.whatsappHref !== null ? (\n <a\n className=\"kf-share-view__contact-action kf-share-view__contact-action--whatsapp kf-press\"\n href={row.whatsappHref}\n >\n <WhatsappIcon />\n <span className=\"kf-visually-hidden\">\n {t('chrome.shareView.contact.whatsapp').replace('{name}', row.name)}\n </span>\n </a>\n ) : null}\n </div>\n );\n}\n\nexport function ContactCard({\n row,\n roleLabel,\n footer,\n}: {\n readonly row: ContactRow;\n readonly roleLabel: string;\n /** Rendered INSIDE this same card, below a hairline divider — e.g. a\n * co-manager row. Kept in one shared bordered/shadowed container rather\n * than a sibling element, which previously read as a fully separate,\n * disconnected section (real bug, fixed here). */\n readonly footer?: ReactNode;\n}): ReactNode {\n return (\n <div className=\"kf-share-view__card kf-share-view__contact\">\n <div className=\"kf-share-view__contact-main\">\n <span className=\"kf-share-view__contact-avatar\" aria-hidden=\"true\">\n {initialsOf(row.name)}\n </span>\n <div className=\"kf-share-view__contact-identity\">\n <p className=\"kf-share-view__contact-name\">{row.name}</p>\n <p className=\"kf-share-view__contact-role kf-num\">\n {roleLabel}\n {row.phoneDisplay !== null ? ` · ${row.phoneDisplay}` : ''}\n </p>\n </div>\n <ContactActions row={row} />\n </div>\n {footer}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { AgencyContactSectionData } from '../shareTypes';\nimport { ContactCard } from './ContactCard';\n\nexport interface AgencyContactSectionProps {\n readonly data: AgencyContactSectionData;\n}\n\nexport function AgencyContactSection({ data }: AgencyContactSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.agency.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.agency.eyebrow')}</span>\n </div>\n <ContactCard row={data} roleLabel={t('chrome.shareView.agency.roleLabel')} />\n </section>\n );\n}\n","'use client';\n\n// The page's own top identity bar — real gap found comparing against the\n// reference craft brief: agency initial square + name + a link-type label,\n// plus a static \"Read-only\" indicator (a true structural fact of this\n// Surface, never fabricated — every section here except forms IS\n// read-only). Sourced entirely from the real `agencyContact` section\n// (never a `brandLine`/`logoUrl` field — those are the reference's OWN\n// backend, not this surface's wire contract); renders nothing when\n// `agencyContact` is absent, same darkness rule as every other section\n// (hard rule #20).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { AgencyContactSectionData, HouseholdPartyKind } from '../shareTypes';\n\nexport interface BrandHeaderSectionProps {\n readonly agencyContact: AgencyContactSectionData;\n readonly partyKind: HouseholdPartyKind;\n}\n\nconst PARTY_KIND_KEY: Record<Exclude<HouseholdPartyKind, null>, string> = {\n FAMILY: 'chrome.shareView.brand.partyKind.family',\n COUPLE: 'chrome.shareView.brand.partyKind.couple',\n FRIENDS: 'chrome.shareView.brand.partyKind.friends',\n CORPORATE: 'chrome.shareView.brand.partyKind.corporate',\n OTHER: 'chrome.shareView.brand.partyKind.other',\n};\n\nexport function BrandHeaderSection({\n agencyContact,\n partyKind,\n}: BrandHeaderSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const initial = agencyContact.name.trim().slice(0, 1).toUpperCase();\n const kindLabel = partyKind !== null ? t(PARTY_KIND_KEY[partyKind]) : null;\n\n return (\n <div className=\"kf-share-view__brand-header\">\n <span className=\"kf-share-view__brand-mark\" aria-hidden=\"true\">\n {initial}\n </span>\n <p className=\"kf-share-view__brand-name\">\n {agencyContact.name}\n {kindLabel !== null ? (\n <span className=\"kf-share-view__brand-kind\"> · {kindLabel}</span>\n ) : null}\n </p>\n <span className=\"kf-share-view__brand-readonly kf-eyebrow\">\n {t('chrome.shareView.brand.readOnly')}\n </span>\n </div>\n );\n}\n","'use client';\n\n// Plain rows only — no checkbox, no status/badge field (confirmed decision,\n// task brief verbatim). Grouped by `sectionTitle` (a real field) into one\n// card per group; the leading marker is a non-interactive dot, never a\n// checkbox or completion indicator.\n\nimport type { ReactNode } from 'react';\nimport type { ChecklistItem, ChecklistsSection } from '../shareTypes';\n\nexport interface ChecklistSectionProps {\n readonly data: ChecklistsSection;\n}\n\nfunction groupBySectionTitle(items: readonly ChecklistItem[]): Map<string, ChecklistItem[]> {\n const groups = new Map<string, ChecklistItem[]>();\n for (const item of items) {\n const existing = groups.get(item.sectionTitle);\n if (existing !== undefined) {\n existing.push(item);\n } else {\n groups.set(item.sectionTitle, [item]);\n }\n }\n return groups;\n}\n\nexport function ChecklistSection({ data }: ChecklistSectionProps): ReactNode {\n if (data.items.length === 0) {\n return null;\n }\n const groups = groupBySectionTitle(data.items);\n\n return (\n <>\n {Array.from(groups.entries()).map(([sectionTitle, items]) => (\n <section key={sectionTitle} aria-label={sectionTitle}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{sectionTitle}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {items.map((item) => (\n <li key={item.title} className=\"kf-share-view__row kf-share-view__checklist-row\">\n <span className=\"kf-share-view__checklist-marker\" aria-hidden=\"true\" />\n <div className=\"kf-share-view__checklist-body\">\n <p className=\"kf-share-view__checklist-title\">{item.title}</p>\n {item.subLine !== null ? (\n <p className=\"kf-share-view__checklist-sub\">{item.subLine}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </>\n );\n}\n","'use client';\n\n// Vouchers only live in `documents` (craft brief's \"Does NOT\" carry-over) —\n// never merged into `StayAndTransportSection`'s booking rows even though\n// both key off `bookingId`/`dayIndex`.\n//\n// TWO LISTS, ONE SECTION. `files` are documents the agency filed against\n// the trip; `vouchers` come from bookings the CRM pushed. They are rendered\n// as one list because a traveller does not care which system produced their\n// ticket — but the FILES COME FIRST, since a document filed about them\n// personally is the one they opened this link for.\n//\n// A `yours` document is marked. Everything in `files` has already passed\n// the server's scope filter, so nothing here decides who may see what — the\n// badge only tells the reader that this one is theirs specifically and not\n// something the whole group can see, which changes whether they need to\n// forward it.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatDayMonth } from '../formatShareDate';\nimport { DownloadIcon } from '../icons';\nimport type { DocumentsSectionData } from '../shareTypes';\n\nexport interface DocumentsSectionProps {\n readonly data: DocumentsSectionData;\n readonly timezone: string;\n}\n\nfunction formatSize(sizeBytes: number): string {\n if (sizeBytes < 1024) {\n return `${String(sizeBytes)} B`;\n }\n const kb = sizeBytes / 1024;\n if (kb < 1024) {\n return `${kb.toFixed(0)} KB`;\n }\n return `${(kb / 1024).toFixed(1)} MB`;\n}\n\nexport function DocumentsSection({ data, timezone }: DocumentsSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const files = data.files ?? [];\n // BOTH halves empty, not just the vouchers — the old guard returned early\n // on `vouchers.length === 0`, which would have hidden every filed document\n // on a trip whose CRM pushed no vouchers.\n if (data.vouchers.length === 0 && files.length === 0) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.documents.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.documents.eyebrow')}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {files.map((file) => (\n <li key={file.id} className=\"kf-share-view__row kf-share-view__document-row\">\n <span className=\"kf-share-view__document-icon\" aria-hidden=\"true\">\n <DownloadIcon />\n </span>\n <a\n className=\"kf-share-view__document-link\"\n href={file.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {file.title}\n </a>\n <span className=\"kf-share-view__document-meta kf-num\">\n {file.scope === 'yours' ? `${t('chrome.shareView.documents.yours')} · ` : ''}\n {formatSize(file.sizeBytes)}\n </span>\n </li>\n ))}\n {data.vouchers.map((voucher) => (\n <li key={voucher.id} className=\"kf-share-view__row kf-share-view__document-row\">\n <span className=\"kf-share-view__document-icon\" aria-hidden=\"true\">\n <DownloadIcon />\n </span>\n <a\n className=\"kf-share-view__document-link\"\n href={voucher.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {voucher.bookingLabel}\n </a>\n <span className=\"kf-share-view__document-meta kf-num\">\n {formatDayMonth(voucher.isoDate, timezone)} · {formatSize(voucher.sizeBytes)}\n </span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// A custom listbox, not a native `<select>` — real fidelity gap found from\n// user feedback: a native `<select>`'s OPEN dropdown is OS/browser chrome\n// (macOS/Chrome renders it as a giant native popup) that CSS cannot\n// restyle, breaking visual consistency with the rest of this surface. This\n// component owns its own open/closed state via hooks — safe here because\n// `editor()` (`fieldRegistry.tsx`) returns THIS as a real JSX element\n// (`<SelectFieldEditor .../>`), not a plain function-call result; the\n// registry's `editor`/`preview` functions are invoked directly rather than\n// rendered, so hooks may only live inside a component the JSX tree actually\n// mounts, never inside `editor()`'s own body.\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\n\nexport interface SelectFieldOption {\n readonly value: string;\n readonly label: string;\n}\n\nexport interface SelectFieldEditorProps {\n readonly id: string;\n readonly value: string;\n readonly options: readonly SelectFieldOption[];\n readonly required: boolean;\n readonly onChange: (value: string) => void;\n}\n\nexport function SelectFieldEditor({\n id,\n value,\n options,\n required,\n onChange,\n}: SelectFieldEditorProps): ReactNode {\n const { t } = useKaafilChrome();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const selected = options.find((option) => option.value === value);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n function handlePointerDown(event: PointerEvent): void {\n if (rootRef.current !== null && !rootRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open]);\n\n return (\n <div className=\"kf-share-view__select\" ref={rootRef}>\n <button\n type=\"button\"\n id={id}\n className=\"kf-share-view__select-trigger\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((current) => !current)}\n >\n <span className={selected === undefined ? 'kf-share-view__select-placeholder' : undefined}>\n {selected?.label ?? t('chrome.shareView.form.choosePlaceholder')}\n {required && selected === undefined ? ' *' : ''}\n </span>\n <span className=\"kf-share-view__select-chevron\" aria-hidden=\"true\" />\n </button>\n {open ? (\n <div className=\"kf-share-view__select-listbox\" role=\"listbox\">\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n className=\"kf-share-view__select-option\"\n onClick={() => {\n onChange(option.value);\n setOpen(false);\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\n// The 21-kind field dispatch — `createRegistry<FormFieldKind, ...>`, never a\n// `switch`/`if-else` chain (hard rule #8, `09-registries.md §1`). Each\n// registered kind supplies an `editor` (the fill-mode control) and a\n// `preview` (read-only rendering, used once `field.locked` or the form's\n// own `responseStatus === 'SUBMITTED'`) — the two-slot shape the task\n// brief asks for.\n//\n// NO `visibleIf` evaluator anywhere in this file — flagged as a gap in the\n// final report: `RenderFormField` (verified shape, `fieldTypes.ts`) carries\n// no `visibleIf` key, so building an evaluator against it would be\n// guessing a linkage the data doesn't state (task brief, verbatim).\n//\n// FILE_UPLOAD/SIGNATURE gap, also flagged: this pass stores only the\n// selected `File`'s name locally (no blob-lane upload wiring — the wire\n// shape for a file ANSWER value is not given anywhere in this task's\n// contract, and `useBlobStatus`'s own lane is a separate, un-scoped\n// integration this component does not attempt to guess at).\n\nimport type { ChangeEvent, ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/createRegistry.js';\nimport type { AddressAnswer, FieldConfigMap, FormFieldKind, RenderFormField } from './fieldTypes';\nimport { SelectFieldEditor } from './SelectFieldEditor';\n\nexport interface FieldEditorProps {\n readonly field: RenderFormField;\n readonly value: unknown;\n readonly onChange: (value: unknown) => void;\n /** `useKaafilChrome().t`, forwarded in by `FormFillScreen` — a registry\n * entry's `editor`/`preview` is a plain function CALLED during render\n * (`fieldRegistry`'s own header — not JSX, not a hook-eligible\n * component), so it cannot call `useKaafilChrome()` itself; the caller\n * threads `t` through as a prop instead. */\n readonly t: (key: string) => string;\n}\n\nexport interface FieldPreviewProps {\n readonly field: RenderFormField;\n readonly value: unknown;\n readonly t: (key: string) => string;\n}\n\nexport interface FieldHandler {\n readonly editor: (props: FieldEditorProps) => ReactNode;\n readonly preview: (props: FieldPreviewProps) => ReactNode;\n}\n\nfunction configOf<K extends keyof FieldConfigMap>(field: RenderFormField): FieldConfigMap[K] {\n return field.config as FieldConfigMap[K];\n}\n\nfunction textValue(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction numberValue(value: unknown): string {\n return typeof value === 'number' ? String(value) : '';\n}\n\nfunction PlainPreview({ value }: FieldPreviewProps): ReactNode {\n return <p className=\"kf-share-view__form-preview\">{typeof value === 'string' ? value : ''}</p>;\n}\n\nconst fallback: FieldHandler = {\n editor: ({ field, t }) => (\n <p className=\"kf-share-view__form-unsupported\">\n {t('chrome.shareView.form.unsupported').replace('{label}', field.label)}\n </p>\n ),\n preview: PlainPreview,\n};\n\nexport const fieldRegistry = createRegistry<FormFieldKind, FieldHandler>({ fallback });\n\nfieldRegistry.register('HEADING', {\n editor: ({ field }) => <h3 className=\"kf-share-view__form-heading\">{field.label}</h3>,\n preview: ({ field }) => <h3 className=\"kf-share-view__form-heading\">{field.label}</h3>,\n});\n\nfieldRegistry.register('INFO_BLOCK', {\n editor: ({ field }) => <p className=\"kf-share-view__form-info\">{field.contentText}</p>,\n preview: ({ field }) => <p className=\"kf-share-view__form-info\">{field.contentText}</p>,\n});\n\nfieldRegistry.register('SHORT_TEXT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'SHORT_TEXT'>(field);\n return (\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n maxLength={config.maxLength}\n pattern={config.pattern}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('LONG_TEXT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'LONG_TEXT'>(field);\n return (\n <textarea\n className=\"kf-share-view__form-textarea\"\n value={textValue(value)}\n maxLength={config.maxLength}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLTextAreaElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('EMAIL', {\n editor: ({ field, value, onChange }) => {\n void configOf<'EMAIL'>(field);\n return (\n <input\n type=\"email\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('PHONE', {\n editor: ({ field, value, onChange }) => {\n void configOf<'PHONE'>(field);\n return (\n <input\n type=\"tel\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('URL', {\n editor: ({ field, value, onChange }) => (\n <input\n type=\"url\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n ),\n preview: PlainPreview,\n});\n\nfieldRegistry.register('NUMBER', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'NUMBER'>(field);\n return (\n <input\n type=\"number\"\n className=\"kf-share-view__form-input\"\n value={numberValue(value)}\n min={config.min}\n max={config.max}\n step={config.step ?? 1}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.value === '' ? undefined : Number(event.target.value))\n }\n />\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('CURRENCY', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'CURRENCY'>(field);\n return (\n <input\n type=\"number\"\n className=\"kf-share-view__form-input\"\n value={numberValue(value)}\n min={config.minMinor !== undefined ? config.minMinor / 100 : undefined}\n max={config.maxMinor !== undefined ? config.maxMinor / 100 : undefined}\n step={0.01}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(\n event.target.value === '' ? undefined : Math.round(Number(event.target.value) * 100),\n )\n }\n />\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">\n {typeof value === 'number' ? (value / 100).toFixed(2) : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('RATING', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'RATING'>(field);\n const max = config.ratingMax ?? 5;\n return (\n <fieldset className=\"kf-share-view__form-rating\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {Array.from({ length: max }, (_unused, index) => index + 1).map((score) => (\n <button\n key={score}\n type=\"button\"\n aria-pressed={value === score}\n className={`kf-share-view__form-rating-dot kf-press ${\n value === score ? 'kf-share-view__form-rating-dot--selected' : ''\n }`}\n onClick={() => onChange(score)}\n >\n {score}\n </button>\n ))}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('NPS', {\n editor: ({ field, value, onChange }) => {\n void configOf<'NPS'>(field);\n return (\n <fieldset className=\"kf-share-view__form-rating\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {Array.from({ length: 11 }, (_unused, index) => index).map((score) => (\n <button\n key={score}\n type=\"button\"\n aria-pressed={value === score}\n className={`kf-share-view__form-rating-dot kf-press ${\n value === score ? 'kf-share-view__form-rating-dot--selected' : ''\n }`}\n onClick={() => onChange(score)}\n >\n {score}\n </button>\n ))}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview kf-num\">{numberValue(value)}</p>\n ),\n});\n\nfieldRegistry.register('DATE', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'DATE'>(field);\n return (\n <input\n type=\"date\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n min={config.minDate}\n max={config.maxDate}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('DATETIME', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'DATETIME'>(field);\n return (\n <input\n type=\"datetime-local\"\n className=\"kf-share-view__form-input\"\n value={textValue(value)}\n step={config.minuteStep !== undefined ? config.minuteStep * 60 : undefined}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('TIME', {\n editor: ({ field, value, onChange }) => {\n void configOf<'TIME'>(field);\n // Wire value is minutes-past-local-midnight (task brief, verbatim) —\n // the native time input works in `HH:mm`, so this editor converts at\n // the boundary rather than storing the input's own string.\n const minutes = typeof value === 'number' ? value : undefined;\n const hh = minutes !== undefined ? String(Math.floor(minutes / 60)).padStart(2, '0') : '';\n const mm = minutes !== undefined ? String(minutes % 60).padStart(2, '0') : '';\n return (\n <input\n type=\"time\"\n className=\"kf-share-view__form-input\"\n value={minutes !== undefined ? `${hh}:${mm}` : ''}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const [h, m] = event.target.value.split(':');\n if (h === undefined || m === undefined) {\n onChange(undefined);\n return;\n }\n onChange(Number(h) * 60 + Number(m));\n }}\n />\n );\n },\n preview: ({ value }) => {\n const minutes = typeof value === 'number' ? value : undefined;\n return (\n <p className=\"kf-share-view__form-preview kf-num\">\n {minutes !== undefined\n ? `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`\n : ''}\n </p>\n );\n },\n});\n\nfieldRegistry.register('SELECT', {\n editor: ({ field, value, onChange, t }) => {\n const config = configOf<'SELECT'>(field);\n const options = [...config.options].sort((a, b) => a.sortOrder - b.sortOrder);\n const withOther =\n config.otherAllowed === true\n ? [...options, { value: '__other__', label: t('chrome.shareView.form.other') }]\n : options;\n return (\n <SelectFieldEditor\n id={field.id}\n value={textValue(value)}\n options={withOther}\n required={field.required}\n onChange={onChange}\n />\n );\n },\n preview: PlainPreview,\n});\n\nfieldRegistry.register('MULTISELECT', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'MULTISELECT'>(field);\n const options = [...config.options].sort((a, b) => a.sortOrder - b.sortOrder);\n const selected = Array.isArray(value) ? (value as string[]) : [];\n return (\n <fieldset className=\"kf-share-view__form-multiselect\">\n <legend className=\"kf-visually-hidden\">{field.label}</legend>\n {options.map((option) => {\n const checked = selected.includes(option.value);\n return (\n <label key={option.value} className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const max = config.maxSelections ?? 50;\n if (event.target.checked) {\n if (selected.length >= max) {\n return;\n }\n onChange([...selected, option.value]);\n } else {\n onChange(selected.filter((entry) => entry !== option.value));\n }\n }}\n />\n {option.label}\n </label>\n );\n })}\n </fieldset>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">\n {Array.isArray(value) ? (value as string[]).join(', ') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('CHECKBOX', {\n editor: ({ field, value, onChange }) => {\n void configOf<'CHECKBOX'>(field);\n return (\n <label className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={value === true}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked)}\n />\n {field.label}\n </label>\n );\n },\n preview: ({ value, t }) => (\n <p className=\"kf-share-view__form-preview\">\n {value === true ? t('chrome.shareView.form.yes') : t('chrome.shareView.form.no')}\n </p>\n ),\n});\n\nfieldRegistry.register('CONSENT', {\n editor: ({ field, value, onChange }) => {\n void configOf<'CONSENT'>(field);\n return (\n <label className=\"kf-share-view__form-checkbox-row\">\n <input\n type=\"checkbox\"\n checked={value === true}\n required={field.required}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked)}\n />\n {field.contentText ?? field.label}\n </label>\n );\n },\n preview: ({ value, t }) => (\n <p className=\"kf-share-view__form-preview\">\n {value === true ? t('chrome.shareView.form.agreed') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('SIGNATURE', {\n editor: ({ field, value, onChange }) => {\n void configOf<'SIGNATURE'>(field);\n return (\n <div className=\"kf-share-view__form-file\">\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.files?.[0]?.name)\n }\n />\n {typeof value === 'string' ? (\n <p className=\"kf-share-view__form-file-name\">{value}</p>\n ) : null}\n </div>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">{typeof value === 'string' ? value : ''}</p>\n ),\n});\n\nfieldRegistry.register('FILE_UPLOAD', {\n editor: ({ field, value, onChange }) => {\n const config = configOf<'FILE_UPLOAD'>(field);\n return (\n <div className=\"kf-share-view__form-file\">\n <input\n type=\"file\"\n accept={config.accept?.join(',')}\n multiple={(config.maxFiles ?? 1) > 1}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n onChange(Array.from(event.target.files ?? []).map((file) => file.name))\n }\n />\n {Array.isArray(value) ? (\n <p className=\"kf-share-view__form-file-name\">{(value as string[]).join(', ')}</p>\n ) : null}\n </div>\n );\n },\n preview: ({ value }) => (\n <p className=\"kf-share-view__form-preview\">\n {Array.isArray(value) ? (value as string[]).join(', ') : ''}\n </p>\n ),\n});\n\nfieldRegistry.register('ADDRESS', {\n editor: ({ field, value, onChange, t }) => {\n void configOf<'ADDRESS'>(field);\n const address = (value as Partial<AddressAnswer> | undefined) ?? {};\n const update = (patch: Partial<AddressAnswer>): void => onChange({ ...address, ...patch });\n return (\n <div className=\"kf-share-view__form-address\">\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.line1')}\n value={address.line1 ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) => update({ line1: event.target.value })}\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.city')}\n value={address.city ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) => update({ city: event.target.value })}\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.postalCode')}\n value={address.postalCode ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n update({ postalCode: event.target.value })\n }\n />\n <input\n type=\"text\"\n className=\"kf-share-view__form-input\"\n placeholder={t('chrome.shareView.form.address.country')}\n value={address.country ?? ''}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n update({ country: event.target.value })\n }\n />\n </div>\n );\n },\n preview: ({ value }) => {\n const address = value as Partial<AddressAnswer> | undefined;\n return (\n <p className=\"kf-share-view__form-preview\">\n {address !== undefined\n ? [address.line1, address.city, address.postalCode, address.country]\n .filter(Boolean)\n .join(', ')\n : ''}\n </p>\n );\n },\n});\n","'use client';\n\n// One form, fully rendered as a SINGLE page — task brief's own \"simpler,\n// honest v1\" instruction: `RenderFormResponse.sections` are pages/steps,\n// but `fields` carries no `sectionId` linkage back to them (confirmed\n// against the verified shape), so building a per-page split would be\n// guessing a join the data doesn't state. `fields` is treated as one\n// pre-sorted list; the section→field grouping gap is flagged in the final\n// report, not silently invented here.\n//\n// `clientToken` is minted ONCE per fill session, by THIS component (the\n// CALLER `useShareForms.ts`'s own header names — hard rule #4: no hook\n// mints its own idempotency key) — `useState(() => crypto.randomUUID())`\n// runs its initializer exactly once per mount, and this screen remounts\n// (via the `key={formId}` its parent applies) whenever a different form is\n// opened, which is exactly \"once per fill session\".\n\nimport type { ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport type {\n ShareFormsResult,\n ShareFormWriteInput,\n} from '../../../../core/hooks/useShareForms.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { fieldRegistry } from './fieldRegistry';\nimport type { FieldAnswer, RenderFormField, RenderFormResponse } from './fieldTypes';\n\nexport interface FormFillScreenProps {\n readonly form: RenderFormResponse;\n readonly save: ShareFormsResult['save'];\n readonly submit: ShareFormsResult['submit'];\n readonly writeStatus: ShareFormsResult['writeStatus'];\n /** Party-wide-link disambiguation, forwarded verbatim into every\n * `save`/`submit` write's `ShareFormWriteInput.travellerRef`. */\n readonly travellerRef?: string;\n}\n\nfunction initialAnswers(fields: readonly RenderFormField[]): Map<string, unknown> {\n const map = new Map<string, unknown>();\n for (const field of fields) {\n if (field.kind === 'HEADING' || field.kind === 'INFO_BLOCK') {\n continue;\n }\n map.set(field.key, field.prefill);\n }\n return map;\n}\n\nexport function FormFillScreen({\n form,\n save,\n submit,\n writeStatus,\n travellerRef,\n}: FormFillScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const [clientToken] = useState(() => crypto.randomUUID());\n const [answers, setAnswers] = useState<Map<string, unknown>>(() => initialAnswers(form.fields));\n const readOnly = form.responseStatus === 'SUBMITTED';\n\n const answerList = useMemo<FieldAnswer[]>(() => {\n const list: FieldAnswer[] = [];\n for (const field of form.fields) {\n if (field.kind === 'HEADING' || field.kind === 'INFO_BLOCK') {\n continue;\n }\n list.push({ fieldKey: field.key, value: answers.get(field.key) });\n }\n return list;\n }, [answers, form.fields]);\n\n const setAnswer = (key: string, value: unknown): void => {\n setAnswers((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n };\n\n const writeInput = (): ShareFormWriteInput => ({\n formId: form.formId,\n answers: answerList,\n clientToken,\n ...(travellerRef !== undefined ? { travellerRef } : {}),\n });\n\n return (\n <section className=\"kf-share-view__form-fill\" aria-label={form.title}>\n {form.introText !== null ? (\n <p className=\"kf-share-view__form-intro\">{form.introText}</p>\n ) : null}\n <div className=\"kf-share-view__form-fields\">\n {form.fields.map((field) => {\n const handler = fieldRegistry.resolve(field.kind);\n const value = answers.get(field.key);\n const showPreview = readOnly || field.locked;\n return (\n <div key={field.id} className=\"kf-share-view__form-field\">\n {field.kind !== 'HEADING' && field.kind !== 'INFO_BLOCK' ? (\n <label className=\"kf-share-view__form-label\" htmlFor={field.id}>\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n ) : null}\n {showPreview\n ? handler.preview({ field, value, t })\n : handler.editor({\n field,\n value,\n onChange: (next) => setAnswer(field.key, next),\n t,\n })}\n {field.helpText !== null ? (\n <p className=\"kf-share-view__form-help\">{field.helpText}</p>\n ) : null}\n </div>\n );\n })}\n </div>\n {form.outroText !== null ? (\n <p className=\"kf-share-view__form-outro\">{form.outroText}</p>\n ) : null}\n {!readOnly ? (\n <div className=\"kf-share-view__form-actions\">\n <button\n type=\"button\"\n className=\"kf-share-view__form-action kf-share-view__form-action--save kf-press\"\n disabled={writeStatus === 'saving' || writeStatus === 'submitting'}\n onClick={() => void save(writeInput())}\n >\n {t('chrome.shareView.form.saveDraft')}\n </button>\n <button\n type=\"button\"\n className=\"kf-share-view__form-action kf-share-view__form-action--submit kf-press\"\n disabled={writeStatus === 'saving' || writeStatus === 'submitting'}\n onClick={() => void submit(writeInput())}\n >\n {t('chrome.shareView.form.submit')}\n </button>\n </div>\n ) : null}\n {writeStatus === 'submitted' ? (\n <p className=\"kf-share-view__form-status\" role=\"status\">\n {t('chrome.shareView.form.submittedMessage')}\n </p>\n ) : null}\n {writeStatus === 'queued-offline' ? (\n <p className=\"kf-share-view__form-status\" role=\"status\">\n {t('chrome.shareView.form.queuedOffline')}\n </p>\n ) : null}\n {writeStatus === 'conflicted' ? (\n <p className=\"kf-share-view__form-status\" role=\"alert\">\n {t('chrome.shareView.form.conflicted')}\n </p>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// The write-back half of the surface — the ONLY section that mints a\n// direct `/core` hook call of its own (`useShareForms`) rather than reading\n// off the `sections` map, since `forms` is deliberately never part of the\n// snapshot response (its own dedicated `/forms` routes, `share.service.ts`'s\n// own header) — this section always attempts to mount, and `useShareForms`'s\n// own `status` (`'list-empty'`/`'not-found'`) decides whether anything\n// renders, exactly like every other \"loaded, nothing yet\" section.\n//\n// `useShareForms` calls the throwing `useOfflineEngine()` unconditionally,\n// which needs `OfflineShell` to have actually opened the engine — a brief\n// \"opening\" window `KaafilShareView`'s own top-level gate (session\n// authenticated) does not cover, since the offline engine opens on its OWN\n// effect after that. Same split-component gate pattern: check readiness\n// with the tolerant plain `useContext`, only mount the hook-calling\n// component once ready.\n\nimport type { ReactNode } from 'react';\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { type ShareFormListItem, useShareForms } from '../../../../core/hooks/useShareForms.js';\nimport { OfflineEngineContext } from '../../../../core/internal/contexts.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { FormFillScreen } from '../forms/FormFillScreen';\nimport type { RenderFormResponse } from '../forms/fieldTypes';\n\n/** `fillState` is a server-open string, but its real values are\n * `forms.service.ts#deriveFillState`'s own closed set (verified against\n * the engine, not guessed) — `'ok'` means fillable now, everything else is\n * some reason it currently isn't. `responseStatus` is a separate vocabulary\n * (the traveller's own response row, `FormResponseStatus` in the Prisma\n * schema: `IN_PROGRESS` | `SUBMITTED`) and takes priority when present,\n * since it reflects what THIS traveller has actually done, not just\n * whether the form is theoretically open. Raw value as its own fallback\n * for anything unrecognised, never a switch (hard rule #8 in spirit). */\nconst FILL_STATE_KEY: Record<string, string> = {\n ok: 'chrome.shareView.forms.status.open',\n window_closed: 'chrome.shareView.forms.status.windowClosed',\n form_closed: 'chrome.shareView.forms.status.closed',\n not_open_yet: 'chrome.shareView.forms.status.notOpenYet',\n awaiting_dispatch: 'chrome.shareView.forms.status.notSentYet',\n already_submitted: 'chrome.shareView.forms.status.submitted',\n response_limit_reached: 'chrome.shareView.forms.status.limitReached',\n trip_cancelled: 'chrome.shareView.forms.status.tripCancelled',\n};\n\nfunction statusLabel(form: ShareFormListItem, t: (key: string) => string): string {\n if (form.responseStatus === 'IN_PROGRESS') {\n return t('chrome.shareView.forms.status.inProgress');\n }\n if (form.responseStatus === 'SUBMITTED') {\n return t('chrome.shareView.forms.status.submitted');\n }\n const key = FILL_STATE_KEY[form.fillState];\n return key !== undefined ? t(key) : form.fillState;\n}\n\n/** The one auto-popup trigger: a required form that is actually fillable\n * right now and has no response yet — never a form that's merely present\n * but closed/awaiting-dispatch/already-submitted, so this never nags about\n * something the traveller can't act on. */\nfunction isPendingRequired(form: ShareFormListItem): boolean {\n return form.required && form.fillState === 'ok' && form.responseStatus === null;\n}\n\nexport interface FormsSectionProps {\n readonly token: string;\n /** Party-wide-link disambiguation — see `KaafilShareViewProps.travellerRef`.\n * Forwarded into `renderForm`/`save`/`submit`, never into `useShareForms`\n * itself (the hook's own list call has no such option, verified). */\n readonly travellerRef?: string;\n}\n\nexport function FormsSection({ token, travellerRef }: FormsSectionProps): ReactNode {\n const engine = useContext(OfflineEngineContext);\n if (engine === null) {\n return null;\n }\n return <ReadyFormsSection token={token} travellerRef={travellerRef} />;\n}\n\nfunction ReadyFormsSection({ token, travellerRef }: FormsSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const { status, forms, renderForm, save, submit, writeStatus, refresh } = useShareForms(token);\n const [openFormId, setOpenFormId] = useState<string | null>(null);\n const [openForm, setOpenForm] = useState<RenderFormResponse | null>(null);\n\n // Surfaces a pending required form the moment the list loads, so the\n // traveller sees it needs attention instead of having to notice it in a\n // list they might never scroll to. Fires once per mount — a `useRef`\n // guard, not a `[status]` dependency, since re-running on every `forms`\n // update (e.g. after a save's own `refresh()`) would re-pop the same\n // dialog the traveller just closed.\n const autoOpenedRef = useRef(false);\n useEffect(() => {\n if (autoOpenedRef.current || status !== 'list-populated') {\n return;\n }\n autoOpenedRef.current = true;\n const pending = forms.find(isPendingRequired);\n if (pending !== undefined) {\n setOpenFormId(pending.formId);\n }\n }, [status, forms]);\n\n useEffect(() => {\n if (openFormId === null) {\n setOpenForm(null);\n return;\n }\n let cancelled = false;\n void renderForm(openFormId, { travellerRef }).then((response) => {\n if (!cancelled) {\n setOpenForm(response as unknown as RenderFormResponse);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [openFormId, renderForm, travellerRef]);\n\n useEffect(() => {\n if (writeStatus === 'submitted') {\n void refresh();\n }\n }, [writeStatus, refresh]);\n\n if (status === 'loading') {\n return null;\n }\n if (status === 'not-found' || status === 'list-empty') {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.forms.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.forms.eyebrow')}</span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {forms.map((form) => (\n <li key={form.formId} className=\"kf-share-view__row kf-share-view__form-row\">\n <button\n type=\"button\"\n className=\"kf-share-view__form-row-button kf-press\"\n onClick={() => setOpenFormId(form.formId)}\n >\n <span className=\"kf-share-view__form-row-title\">{form.title}</span>\n <span className=\"kf-share-view__form-row-end\">\n <span className=\"kf-share-view__form-row-meta kf-eyebrow\">\n {statusLabel(form, t)}\n {form.required ? ` · ${t('chrome.shareView.forms.required')}` : ''}\n </span>\n <span className=\"kf-share-view__form-row-chevron\" aria-hidden=\"true\" />\n </span>\n </button>\n </li>\n ))}\n </ul>\n {openForm !== null ? (\n // A popup, not an inline replacement of this section's own content\n // (user feedback: opening a form used to swap the whole \"Forms\"\n // section's body in place) — same backdrop/sheet dialog pattern as\n // `HouseholdSheet`.\n <div className=\"kf-share-view__sheet-backdrop\">\n <div\n className=\"kf-share-view__sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={openForm.title}\n >\n <div className=\"kf-share-view__sheet-header\">\n <div>\n <p className=\"kf-eyebrow\">{t('chrome.shareView.forms.dialogEyebrow')}</p>\n <p className=\"kf-share-view__sheet-title\">{openForm.title}</p>\n </div>\n <button\n type=\"button\"\n className=\"kf-share-view__sheet-close kf-press\"\n onClick={() => setOpenFormId(null)}\n aria-label={t('chrome.shareView.close')}\n >\n ✕\n </button>\n </div>\n <div className=\"kf-share-view__sheet-body\">\n <FormFillScreen\n form={openForm}\n save={save}\n submit={submit}\n writeStatus={writeStatus}\n travellerRef={travellerRef}\n />\n </div>\n </div>\n </div>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// The page's ONE dark anchor (`tokens/semantic.css`'s own comment on\n// `--kf-surface-inverse*`, added specifically for this section). Structure\n// ported from the reference craft brief (day-of-N headline, phase pill,\n// progress bar, date range + days-left meta row) — colours are entirely\n// `--kf-surface-inverse*`/`--kf-text-inverse-*`/`--kf-accent*` tokens, never\n// a literal (hard rules #13-17).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { TripPhase, TripStatus } from '../deriveTripStatus';\nimport type { HouseholdTraveller } from '../shareTypes';\n\nexport interface HeroSectionProps {\n readonly tripName: string;\n readonly status: TripStatus;\n /** Rendered as an overlapping avatar stack at the card's own foot\n * (reference craft brief: the household lives INSIDE the hero, not as a\n * separate card below it). Omitted entirely when empty. */\n readonly travellers: readonly HouseholdTraveller[];\n /** Opens `HouseholdSheet` — omit to render the avatar stack inert\n * (no household detail to show). */\n readonly onOpenHousehold?: () => void;\n}\n\nconst PHASE_MODIFIER: Record<TripPhase, string> = {\n PRE_DEPARTURE: 'pre-departure',\n ON_TRIP: 'on-trip',\n POST_TRIP: 'post-trip',\n};\n\nexport function HeroSection({\n tripName,\n status,\n travellers,\n onOpenHousehold,\n}: HeroSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section className=\"kf-share-view__hero\" aria-label={t('chrome.shareView.trip.ariaLabel')}>\n <p className=\"kf-share-view__hero-code kf-eyebrow\">{tripName}</p>\n {/* Cancellation overrides the phase modifier outright: the pill must\n * not wear an \"upcoming\" or \"on trip\" tone for a trip that is not\n * happening. `status.phase` still holds the wire's date-derived value,\n * which is why it is never consulted when `cancelled` is set. */}\n <span\n className={`kf-share-view__hero-pill kf-share-view__hero-pill--${status.cancelled ? 'cancelled' : PHASE_MODIFIER[status.phase]}`}\n >\n {status.phaseLabel}\n </span>\n <p className=\"kf-share-view__hero-headline\">{status.dayLabel}</p>\n <div\n className=\"kf-share-view__hero-progress\"\n role=\"progressbar\"\n aria-valuenow={status.progressPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={t('chrome.shareView.trip.progressAriaLabel')}\n >\n <div\n className=\"kf-share-view__hero-progress-fill\"\n style={{ inlineSize: `${String(status.progressPercent)}%` }}\n />\n </div>\n <div className=\"kf-share-view__hero-meta\">\n <span className=\"kf-eyebrow\">{status.dateRangeLabel}</span>\n {status.daysLeftLabel !== null ? (\n <span className=\"kf-eyebrow\">{status.daysLeftLabel}</span>\n ) : null}\n </div>\n {travellers.length > 0 ? (\n <button\n type=\"button\"\n className=\"kf-share-view__hero-travellers kf-press\"\n onClick={onOpenHousehold}\n disabled={onOpenHousehold === undefined}\n >\n <ul className=\"kf-share-view__household-avatars\" aria-hidden=\"true\">\n {travellers.map((traveller, index) => (\n <li\n key={`${traveller.firstName}-${String(index)}`}\n className=\"kf-share-view__household-avatar kf-share-view__household-avatar--on-dark\"\n >\n {traveller.initials}\n </li>\n ))}\n </ul>\n <span className=\"kf-share-view__hero-travellers-names\">\n {travellers.map((traveller) => traveller.firstName).join(' & ')}\n </span>\n </button>\n ) : null}\n </section>\n );\n}\n","'use client';\n\n// Greeting banner, NOT a card (craft brief §2) — a headline only. Rendered\n// BEFORE the hero (reference craft brief: the greeting reads as the page's\n// own opening line, with the avatar stack living INSIDE the hero card at\n// its foot instead of as a second box below it — `HeroSection`'s own\n// `travellers` prop). Prefers the real `household` SECTION\n// (`sections.get('household')`) over the caller-supplied `household` PROP,\n// which is a fallback/override for when the backend hasn't shipped that key\n// yet (task brief: \"household — A NEW SECTION BEING ADDED IN A PARALLEL\n// BACKEND CHANGE... may not exist... treat it exactly like every other\n// optional section\"). Renders nothing when neither is present — no\n// heading, no divider, no gap (hard rule #20).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\n\nexport interface HouseholdBannerProps {\n readonly label: string | null;\n readonly names: string;\n}\n\nexport function HouseholdBanner({ label, names }: HouseholdBannerProps): ReactNode {\n const { t } = useKaafilChrome();\n if (names.length === 0 && label === null) {\n return null;\n }\n\n return (\n <section\n className=\"kf-share-view__household\"\n aria-label={t('chrome.shareView.household.ariaLabelFallback')}\n >\n {names.length > 0 ? (\n <p className=\"kf-share-view__household-greeting\">\n {t('chrome.shareView.household.greeting')}{' '}\n <span className=\"kf-share-view__household-name\">{names}</span>,\n </p>\n ) : null}\n {label !== null ? <p className=\"kf-share-view__household-label\">{label}</p> : null}\n </section>\n );\n}\n","'use client';\n\n// The itinerary's navigational spine (craft brief §8/Defect C): one tile\n// per trip day, horizontally scrollable, selected day highlighted with a\n// filled dark tile + dot; the selected day's own card renders beneath.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay, formatWeekdayDay } from '../formatShareDate';\nimport type { ItinerarySection } from '../shareTypes';\n\nexport interface ItineraryDayStripProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n /** Controlled — lifted to `KaafilShareView` so `StayAndTransportSection`\n * can filter its own rows to this same day (user feedback: the merged\n * list showed every day at once, disconnected from the day-strip). */\n readonly selectedIndex: number;\n readonly onSelectIndex: (index: number) => void;\n}\n\nexport function ItineraryDayStrip({\n itinerary,\n timezone,\n selectedIndex,\n onSelectIndex,\n}: ItineraryDayStripProps): ReactNode {\n const { t } = useKaafilChrome();\n const todayIndex = itinerary.days.findIndex((day) => day.isToday);\n const selectedDay = itinerary.days[selectedIndex] ?? itinerary.days[0];\n\n if (itinerary.days.length === 0 || selectedDay === undefined) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.itinerary.ariaLabel')}>\n <div className=\"kf-share-view__eyebrow-row\">\n {/* No repeated \"Read-only\" here — the top brand header already\n * states it once for the whole surface (user feedback: redundant). */}\n <span className=\"kf-eyebrow\">{t('chrome.shareView.itinerary.eyebrow')}</span>\n </div>\n <div\n className=\"kf-share-view__day-strip\"\n role=\"tablist\"\n aria-label={t('chrome.shareView.itinerary.tripDaysAriaLabel')}\n >\n {itinerary.days.map((day, index) => {\n const isSelected = index === selectedIndex;\n const isPast = index < todayIndex;\n return (\n <button\n key={day.dayIndex}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n className={`kf-share-view__day-chip kf-press ${\n isSelected\n ? 'kf-share-view__day-chip--selected'\n : isPast\n ? 'kf-share-view__day-chip--past'\n : ''\n }`}\n onClick={() => onSelectIndex(index)}\n >\n <span className=\"kf-share-view__day-chip-number\">{day.dayIndex + 1}</span>\n <span className=\"kf-share-view__day-chip-label kf-eyebrow\">\n {formatWeekdayDay(day.isoDate, timezone)}\n </span>\n {isSelected ? (\n <span className=\"kf-share-view__day-chip-dot\" aria-hidden=\"true\" />\n ) : null}\n </button>\n );\n })}\n </div>\n <div className=\"kf-share-view__card kf-share-view__day-detail\">\n <div className=\"kf-share-view__day-detail-header\">\n <p className=\"kf-share-view__day-detail-eyebrow kf-eyebrow\">\n {t('chrome.shareView.dayLabel').replace('{n}', String(selectedDay.dayIndex + 1))} ·{' '}\n {formatWeekdayDay(selectedDay.isoDate, timezone)}\n </p>\n <p className=\"kf-share-view__day-detail-title\">{selectedDay.cardTitle}</p>\n {selectedDay.summaryLine !== null ? (\n <p className=\"kf-share-view__day-detail-summary\">{selectedDay.summaryLine}</p>\n ) : null}\n </div>\n {/* The day's own plan, not just its one-line title — real gap found\n * from user feedback: browsing to any day other than \"today\" showed\n * a single title and nothing else, when the real wire shape\n * (`ItineraryDay.items[]`) carries a full per-day plan same as\n * `TodayPlanSection`'s. Reuses that same row markup. */}\n {selectedDay.items.length > 0 ? (\n <ul className=\"kf-share-view__list kf-share-view__day-detail-items\">\n {selectedDay.items.map((item) => (\n <li\n key={item.id}\n className={`kf-share-view__row kf-share-view__plan-row kf-share-view__plan-row--${item.timeState}`}\n >\n <span className=\"kf-share-view__plan-time kf-num\">\n {item.timeState === 'now'\n ? t('chrome.shareView.plan.now')\n : item.startTime !== null\n ? formatTimeOfDay(item.startTime, timezone)\n : ''}\n </span>\n <span className=\"kf-share-view__plan-title\">{item.title}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { ManagerContactSectionData } from '../shareTypes';\nimport { ContactCard } from './ContactCard';\n\nexport interface ManagerContactSectionProps {\n readonly data: ManagerContactSectionData;\n}\n\nexport function ManagerContactSection({ data }: ManagerContactSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.manager.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.manager.eyebrow')}</span>\n <span className=\"kf-eyebrow\">{t('chrome.shareView.manager.available')}</span>\n </div>\n <ContactCard\n row={data}\n roleLabel={t('chrome.shareView.manager.roleLabel')}\n footer={data.coManagers?.map((coManager) => (\n <div key={coManager.name} className=\"kf-share-view__contact-footer\">\n <span className=\"kf-share-view__contact-footer-label kf-eyebrow\">\n {t('chrome.shareView.manager.coManagerLabel').replace('{name}', coManager.name)}\n </span>\n {/* Text, not icon buttons — the phone NUMBER itself must stay\n * readable at a glance here (real gap: the previous icon-only\n * treatment dropped the number entirely, showing no way to see\n * who you'd be calling without tapping first). */}\n {coManager.phoneDisplay !== null ? (\n coManager.phoneHref !== null ? (\n <a\n href={coManager.phoneHref}\n className=\"kf-share-view__contact-footer-phone kf-num\"\n >\n {coManager.phoneDisplay}\n </a>\n ) : (\n <span className=\"kf-share-view__contact-footer-phone kf-num\">\n {coManager.phoneDisplay}\n </span>\n )\n ) : null}\n </div>\n ))}\n />\n </section>\n );\n}\n","'use client';\n\n// Renders only when the `money` section is present — never for a\n// whole-trip/family token (task brief, verbatim: \"only present when the\n// token IS scoped to a traveller\").\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport type { MoneySectionData } from '../shareTypes';\n\nfunction formatMinor(minor: number, currency: string): string {\n return new Intl.NumberFormat(undefined, { style: 'currency', currency }).format(minor / 100);\n}\n\nexport function MoneySection({ data }: { readonly data: MoneySectionData }): ReactNode {\n const { t } = useKaafilChrome();\n return (\n <section aria-label={t('chrome.shareView.money.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.money.eyebrow')}</span>\n </div>\n <dl className=\"kf-share-view__card kf-share-view__money\">\n <div className=\"kf-share-view__money-row\">\n <dt>{t('chrome.shareView.money.total')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.totalMinor, data.currency)}</dd>\n </div>\n <div className=\"kf-share-view__money-row\">\n <dt>{t('chrome.shareView.money.collected')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.collectedMinor, data.currency)}</dd>\n </div>\n <div className=\"kf-share-view__money-row kf-share-view__money-row--due\">\n <dt>{t('chrome.shareView.money.due')}</dt>\n <dd className=\"kf-num\">{formatMinor(data.dueMinor, data.currency)}</dd>\n </div>\n </dl>\n </section>\n );\n}\n","'use client';\n\n// A tinted strip, NOT a card (craft brief §4) — \"the fact a traveller\n// wants\" surfaced ahead of everything else. Derives its own \"what's next\"\n// pick from the real `itinerary` section: the first `'now'` item on\n// today's day, else the first `'upcoming'` item today, else the first item\n// of the next day that has any items. No fabricated status — every field\n// used (`title`, `startTime`, `timeState`) is server-computed.\n\nimport type { ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/index.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay } from '../formatShareDate';\nimport { CarIcon, CompassIcon, HouseIcon, PlaneIcon } from '../icons';\nimport type { ItineraryItem, ItinerarySection } from '../shareTypes';\n\n/** `item.type` is a server-open string, not a closed union — resolved by\n * registry lookup, never a switch/if-else chain (hard rule #8), so a type\n * value this build predates still gets an icon (`default`) instead of a\n * missing/crashing render. */\nconst ITEM_TYPE_ICON = createRegistry<string, () => ReactNode>({\n fallback: () => <CompassIcon />,\n});\nITEM_TYPE_ICON.register('FLIGHT', () => <PlaneIcon />);\nITEM_TYPE_ICON.register('TRANSPORT', () => <CarIcon />);\nITEM_TYPE_ICON.register('ACCOMMODATION', () => <HouseIcon />);\nITEM_TYPE_ICON.register('STAY', () => <HouseIcon />);\n\nexport interface NextUpBannerProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n}\n\nfunction pickNextItem(itinerary: ItinerarySection): ItineraryItem | undefined {\n const todayIndex = itinerary.days.findIndex((day) => day.isToday);\n if (todayIndex !== -1) {\n const today = itinerary.days[todayIndex];\n if (today !== undefined) {\n const nowItem = today.items.find((item) => item.timeState === 'now');\n if (nowItem !== undefined) {\n return nowItem;\n }\n const upcomingItem = today.items.find((item) => item.timeState === 'upcoming');\n if (upcomingItem !== undefined) {\n return upcomingItem;\n }\n }\n for (let index = todayIndex + 1; index < itinerary.days.length; index += 1) {\n const day = itinerary.days[index];\n const firstItem = day?.items[0];\n if (firstItem !== undefined) {\n return firstItem;\n }\n }\n return undefined;\n }\n // No day flagged `isToday` (e.g. `PRE_DEPARTURE`) — surface the very\n // first upcoming item on the trip.\n for (const day of itinerary.days) {\n const firstItem = day.items[0];\n if (firstItem !== undefined) {\n return firstItem;\n }\n }\n return undefined;\n}\n\nexport function NextUpBanner({ itinerary, timezone }: NextUpBannerProps): ReactNode {\n const { t } = useKaafilChrome();\n const item = pickNextItem(itinerary);\n if (item === undefined) {\n return null;\n }\n\n return (\n <section className=\"kf-share-view__next-up\" aria-label={t('chrome.shareView.nextUp.ariaLabel')}>\n <div className=\"kf-share-view__next-up-icon\" aria-hidden=\"true\">\n {ITEM_TYPE_ICON.resolve(item.type)()}\n </div>\n <div className=\"kf-share-view__next-up-body\">\n <p className=\"kf-share-view__next-up-title\">{item.title}</p>\n {item.startTime !== null ? (\n <p className=\"kf-share-view__next-up-time kf-num\">\n {formatTimeOfDay(item.startTime, timezone)}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n","'use client';\n\n// Joins `accommodation`/`transport`/`activities` (identical `DayBookingItem`\n// shape, different section key) AND `rooming` (room/bed assignments, its\n// own `startDayIndex`/`endDayIndex` range rather than a single `dayIndex`)\n// into ONE composed card, per the craft brief's Defect B / `00-decisions.md`\n// U-021: \"where a coherent view requires joining data that arrives as\n// separate section keys, the Surface composes a purpose-built view\n// component that does the joining.\" `seating` (a single vehicle/seat pair,\n// no day key of its own) and `pickup` (stops with a `time` but no day key)\n// are appended as their own un-grouped rows rather than force-fit onto a\n// day they don't declare — JUDGMENT CALL, flagged in the final report: the\n// wire contract gives neither section a day key to join on, so guessing one\n// would be fabricating a linkage the data doesn't state.\n//\n// The gating invariant is untouched: a section key the server did not\n// return contributes zero rows to this card; if the whole group ends up\n// empty, the group renders nothing at all (hard rule #20).\n//\n// The eyebrow's DONE/NOW/UPCOMING suffix is DERIVED, never fabricated:\n// `DayBookingItem` carries no server-provided status field (unlike the\n// reference craft brief's own `segmentState`, a different backend's\n// concept), but it DOES carry real `startAt`/`endAt` timestamps — comparing\n// those against the snapshot's own `serverTime` (never `Date.now()`, hard\n// rule #6) is a real computation off real fields, not an invented one.\n// `pickup` stops carry their OWN real `kind`/`status` fields already\n// (`PickupKind`/`StopStatus`, both closed Prisma enums) — rendered through\n// the same chrome-label-by-real-value pattern as the derived done/now/\n// upcoming state above, never the raw enum string, with the raw value as\n// fallback for a value this build predates.\n//\n// Every merged row that DOES carry a day key (`accommodation`/`transport`/\n// `activities`/`rooming`) is sorted together into ONE chronological list,\n// keyed off a numeric `sortKey` (each item's own `dayIndex`, or `rooming`'s\n// own `startDayIndex` — its only day-shaped field) rather than the\n// bookingId-string sort this file used before rooming was added; a string\n// sort on an opaque id never guaranteed day order in the first place.\n// `roommates` are already first-names-only at the wire level (the same\n// privacy precedent every other section on this surface already follows),\n// so they're rendered as-is, no further redaction.\n\nimport type { ReactNode } from 'react';\nimport { createRegistry } from '../../../../core/registry/index.js';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatDayMonth, formatTimeOfDay } from '../formatShareDate';\nimport { BedIcon, CarIcon, CompassIcon, HouseIcon, PinIcon } from '../icons';\nimport type {\n DayBookingsSection,\n PickupSection,\n PickupStop,\n RoomingAssignment,\n RoomingSection,\n SeatingSection,\n} from '../shareTypes';\n\nexport interface StayAndTransportSectionProps {\n readonly accommodation: DayBookingsSection | undefined;\n readonly transport: DayBookingsSection | undefined;\n readonly activities: DayBookingsSection | undefined;\n readonly rooming: RoomingSection | undefined;\n readonly seating: SeatingSection | undefined;\n readonly pickup: PickupSection | undefined;\n readonly timezone: string;\n /** Filters `accommodation`/`transport`/`activities`/`rooming` rows to\n * this one day — `undefined` shows every day (no itinerary day-strip to\n * link to). `seating`/`pickup` have no day key of their own in the wire\n * contract, so they stay unconditionally visible either way. */\n readonly selectedDayIndex: number | undefined;\n /** For deriving each accommodation/transport/activity row's own\n * done/now/upcoming state from its real `startAt`/`endAt` — `undefined`\n * (snapshot not yet resolved) omits the suffix rather than guessing. */\n readonly serverTime: string | undefined;\n}\n\n/** `startAt`/`endAt` vs `serverTime` — a real computation off real\n * timestamps, not a fabricated field. No `endAt` means a point-in-time\n * booking (e.g. a pickup), \"now\" only once `startAt` has passed. */\nfunction deriveBookingState(\n startAt: string,\n endAt: string | null,\n serverTime: string | undefined,\n): 'done' | 'now' | 'upcoming' | null {\n if (serverTime === undefined) {\n return null;\n }\n const now = new Date(serverTime).getTime();\n const start = new Date(startAt).getTime();\n const end = endAt !== null ? new Date(endAt).getTime() : start;\n if (now < start) {\n return 'upcoming';\n }\n if (now > end) {\n return 'done';\n }\n return 'now';\n}\n\nconst STATE_LABEL_KEY: Record<'done' | 'now' | 'upcoming', string> = {\n done: 'chrome.shareView.stay.state.done',\n now: 'chrome.shareView.plan.now',\n upcoming: 'chrome.shareView.stay.state.upcoming',\n};\n\n/** `t('chrome.shareView.dayLabel')` is the one shared \"Day {n}\" chrome\n * string every merged row's eyebrow needs — a tiny local helper rather\n * than a new shared util module, since it's a single `.replace()` call. */\nfunction dayLabel(t: (key: string) => string, n: number): string {\n return t('chrome.shareView.dayLabel').replace('{n}', String(n));\n}\n\ninterface MergedRow {\n readonly key: string;\n /** The day this row sorts by — `dayIndex` for a booking item,\n * `startDayIndex` for a rooming assignment. Not rendered directly. */\n readonly sortKey: number;\n /** `dayIndex` for a booking item, `endDayIndex` for a rooming assignment\n * — same as `sortKey` for a single-day row. Used only to test whether\n * `selectedDayIndex` falls within this row's day range. */\n readonly dayEnd: number;\n /** Looked up in `ROW_ICON` below — a registry key, never a switch (hard\n * rule #8), since a future merged section would add a new kind here. */\n readonly kind: string;\n readonly eyebrow: string;\n readonly title: string;\n readonly whenLabel: string;\n readonly locationText: string | null;\n}\n\n/** One glyph per merged row kind — resolved by lookup (hard rule #8), never\n * a switch/if-else. `default` covers a kind this build predates. */\nconst ROW_ICON = createRegistry<string, () => ReactNode>({ fallback: () => <CompassIcon /> });\nROW_ICON.register('transport', () => <CarIcon />);\nROW_ICON.register('stay', () => <HouseIcon />);\nROW_ICON.register('activity', () => <CompassIcon />);\nROW_ICON.register('rooming', () => <BedIcon />);\nROW_ICON.register('pickup', () => <PinIcon />);\nROW_ICON.register('vehicle', () => <CarIcon />);\n\nfunction mergeDayBookings(\n section: DayBookingsSection | undefined,\n kind: string,\n typeLabel: string,\n timezone: string,\n serverTime: string | undefined,\n t: (key: string) => string,\n): MergedRow[] {\n if (section === undefined) {\n return [];\n }\n const rows: MergedRow[] = [];\n for (const day of section.days) {\n for (const item of day.items) {\n const whenLabel =\n item.endAt !== null\n ? `${formatDayMonth(item.startAt, timezone)} → ${formatDayMonth(item.endAt, timezone)}`\n : formatDayMonth(item.startAt, timezone);\n const state = deriveBookingState(item.startAt, item.endAt, serverTime);\n const eyebrow = `${typeLabel} · ${dayLabel(t, item.dayIndex + 1)}${\n state !== null ? ` · ${t(STATE_LABEL_KEY[state])}` : ''\n }`;\n rows.push({\n key: item.bookingId,\n sortKey: item.dayIndex,\n dayEnd: item.dayIndex,\n kind,\n eyebrow,\n title: item.title,\n whenLabel: t('chrome.shareView.stay.when').replace('{when}', whenLabel),\n locationText: item.locationText,\n });\n }\n }\n return rows;\n}\n\nfunction dayRangeLabel(assignment: RoomingAssignment, t: (key: string) => string): string {\n return assignment.startDayIndex === assignment.endDayIndex\n ? dayLabel(t, assignment.startDayIndex + 1)\n : t('chrome.shareView.dayRangeLabel')\n .replace('{start}', String(assignment.startDayIndex + 1))\n .replace('{end}', String(assignment.endDayIndex + 1));\n}\n\nfunction mergeRooming(\n section: RoomingSection | undefined,\n t: (key: string) => string,\n): MergedRow[] {\n if (section === undefined) {\n return [];\n }\n return section.assignments.map((assignment) => {\n const roomLabel = t('chrome.shareView.stay.room').replace('{room}', assignment.room);\n const roomBed =\n assignment.bed !== null\n ? t('chrome.shareView.stay.roomBed')\n .replace('{room}', assignment.room)\n .replace('{bed}', assignment.bed)\n : roomLabel;\n return {\n key: assignment.stayWindowId,\n sortKey: assignment.startDayIndex,\n dayEnd: assignment.endDayIndex,\n kind: 'rooming',\n eyebrow: `${t('chrome.shareView.stay.rooming')} · ${dayRangeLabel(assignment, t)}`,\n title: assignment.label !== '' ? assignment.label : roomLabel,\n whenLabel: roomBed,\n locationText:\n assignment.roommates.length > 0\n ? t('chrome.shareView.stay.with').replace('{names}', assignment.roommates.join(', '))\n : null,\n };\n });\n}\n\n/** `PickupStop.kind` (`PickupKind` — `'PICKUP' | 'DROP'`, the Prisma enum,\n * verified against the engine) — a closed real enum, not free text, so it\n * gets the same chrome-label treatment as `STATE_LABEL_KEY` above rather\n * than being printed raw. Raw value as its own fallback for a kind this\n * build predates (hard rule #8 in spirit). */\nconst PICKUP_KIND_LABEL_KEY: Record<string, string> = {\n PICKUP: 'chrome.shareView.stay.pickup.kind.pickup',\n DROP: 'chrome.shareView.stay.pickup.kind.drop',\n};\n\n/** `PickupStop.status` is `TravellerPickup.status` on the wire\n * (`share.repository.ts#findPickupForTraveller` selects it off that model,\n * not `PickupPoint.status`) — the Prisma enum is `BoardStatus`:\n * `'PENDING' | 'BOARDED' | 'NO_SHOW'`, verified against the schema. Same\n * reasoning as `PICKUP_KIND_LABEL_KEY`. */\nconst PICKUP_STATUS_LABEL_KEY: Record<string, string> = {\n PENDING: 'chrome.shareView.stay.pickup.status.pending',\n BOARDED: 'chrome.shareView.stay.pickup.status.boarded',\n NO_SHOW: 'chrome.shareView.stay.pickup.status.noShow',\n};\n\nfunction pickupRow(\n stop: PickupStop,\n index: number,\n timezone: string,\n t: (key: string) => string,\n): MergedRow {\n const kindLabel = PICKUP_KIND_LABEL_KEY[stop.kind];\n const statusLabel = PICKUP_STATUS_LABEL_KEY[stop.status];\n return {\n key: `pickup-${String(index)}`,\n sortKey: Number.POSITIVE_INFINITY,\n dayEnd: Number.POSITIVE_INFINITY,\n kind: 'pickup',\n eyebrow: `${kindLabel !== undefined ? t(kindLabel) : stop.kind} · ${\n statusLabel !== undefined ? t(statusLabel) : stop.status\n }`,\n title: stop.point,\n whenLabel: formatTimeOfDay(stop.time, timezone),\n locationText: stop.locationLabel,\n };\n}\n\nexport function StayAndTransportSection({\n accommodation,\n transport,\n activities,\n rooming,\n seating,\n pickup,\n timezone,\n selectedDayIndex,\n serverTime,\n}: StayAndTransportSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const allDayRows: MergedRow[] = [\n ...mergeDayBookings(\n transport,\n 'transport',\n t('chrome.shareView.stay.typeLabel.transport'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeDayBookings(\n accommodation,\n 'stay',\n t('chrome.shareView.stay.typeLabel.stay'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeDayBookings(\n activities,\n 'activity',\n t('chrome.shareView.stay.typeLabel.activity'),\n timezone,\n serverTime,\n t,\n ),\n ...mergeRooming(rooming, t),\n ].sort((a, b) => a.sortKey - b.sortKey || a.key.localeCompare(b.key));\n\n const dayRows =\n selectedDayIndex === undefined\n ? allDayRows\n : allDayRows.filter(\n (row) => row.sortKey <= selectedDayIndex && selectedDayIndex <= row.dayEnd,\n );\n\n const rows: MergedRow[] = [\n ...dayRows,\n ...(pickup?.stops.map((stop, index) => pickupRow(stop, index, timezone, t)) ?? []),\n ];\n\n const hasVehicle = seating !== undefined;\n\n if (rows.length === 0 && !hasVehicle) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.stay.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.stay.eyebrow')}</span>\n {selectedDayIndex !== undefined ? (\n <span className=\"kf-eyebrow\">{dayLabel(t, selectedDayIndex + 1)}</span>\n ) : null}\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {hasVehicle && seating !== undefined ? (\n <li className=\"kf-share-view__row kf-share-view__booking-row\">\n <div className=\"kf-share-view__booking-icon\" aria-hidden=\"true\">\n {ROW_ICON.resolve('vehicle')()}\n </div>\n <div className=\"kf-share-view__booking-body\">\n <p className=\"kf-share-view__booking-eyebrow kf-eyebrow\">\n {t('chrome.shareView.stay.vehicle')}\n </p>\n {/* Registration number as the title — the one identifier a\n * traveller actually needs to spot the right vehicle\n * kerbside, not the generic type label repeated from the\n * line below (real gap: `label`/`type` are near-duplicates\n * — \"Tempo Traveller\" twice — while `regNo` never appeared\n * anywhere at all). */}\n <p className=\"kf-share-view__booking-title\">{seating.vehicle.regNo}</p>\n <p className=\"kf-share-view__booking-when\">\n {seating.vehicle.label} · {seating.vehicle.regNo}\n </p>\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.capacity').replace(\n '{n}',\n String(seating.vehicle.capacity),\n )}\n </p>\n {seating.vehicle.driver !== null ? (\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.driver').replace('{name}', seating.vehicle.driver.name)}\n </p>\n ) : null}\n {/* A real paragraph break, not just another tightly-stacked\n * line — this is a SEPARATE fact group (the traveller's own\n * assignment), not more vehicle metadata (real gap: every\n * line here previously shared the same 4px gap as the\n * vehicle facts above it, reading as one undifferentiated\n * block instead of two). */}\n {(seating.seat !== null && seating.seat !== undefined) ||\n (seating.vehicle.driver !== null && seating.vehicle.driver.phoneHref !== null) ? (\n <div className=\"kf-share-view__booking-assignment\">\n {seating.seat !== null && seating.seat !== undefined ? (\n <p className=\"kf-share-view__booking-when\">\n {t('chrome.shareView.stay.yourSeat').replace('{seat}', seating.seat)}\n </p>\n ) : null}\n {seating.vehicle.driver !== null && seating.vehicle.driver.phoneHref !== null ? (\n <a\n className=\"kf-share-view__booking-driver-link\"\n href={seating.vehicle.driver.phoneHref}\n >\n {t('chrome.shareView.stay.callDriver')}\n {seating.vehicle.driver.phoneDisplay !== null\n ? ` · ${seating.vehicle.driver.phoneDisplay}`\n : ''}\n </a>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n ) : null}\n {rows.map((row) => (\n <li key={row.key} className=\"kf-share-view__row kf-share-view__booking-row\">\n <div className=\"kf-share-view__booking-icon\" aria-hidden=\"true\">\n {ROW_ICON.resolve(row.kind)()}\n </div>\n <div className=\"kf-share-view__booking-body\">\n <p className=\"kf-share-view__booking-eyebrow kf-eyebrow\">{row.eyebrow}</p>\n <p className=\"kf-share-view__booking-title\">{row.title}</p>\n <p className=\"kf-share-view__booking-when\">{row.whenLabel}</p>\n {row.locationText !== null ? (\n <p className=\"kf-share-view__booking-when\">{row.locationText}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// A timeline card — hairline-divided rows, no card padding, each row\n// owning its own inline padding (craft brief's \"divided-row card\" recipe).\n// Renders only today's day; if no day is flagged `isToday` (pre-departure /\n// post-trip), this section contributes nothing (hard rule #20 applied per\n// this component, not just per top-level section key).\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../../../core/shells/I18nShell.js';\nimport { formatTimeOfDay } from '../formatShareDate';\nimport type { ItinerarySection } from '../shareTypes';\n\nexport interface TodayPlanSectionProps {\n readonly itinerary: ItinerarySection;\n readonly timezone: string;\n}\n\nexport function TodayPlanSection({ itinerary, timezone }: TodayPlanSectionProps): ReactNode {\n const { t } = useKaafilChrome();\n const today = itinerary.days.find((day) => day.isToday);\n if (today === undefined || today.items.length === 0) {\n return null;\n }\n\n return (\n <section aria-label={t('chrome.shareView.today.eyebrow')}>\n <div className=\"kf-share-view__eyebrow-row\">\n <span className=\"kf-eyebrow\">{t('chrome.shareView.today.eyebrow')}</span>\n <span className=\"kf-eyebrow\">\n {t('chrome.shareView.dayLabel').replace('{n}', String(today.dayIndex + 1))}\n </span>\n </div>\n <ul className=\"kf-share-view__card kf-share-view__list\">\n {today.items.map((item) => (\n <li\n key={item.id}\n className={`kf-share-view__row kf-share-view__plan-row kf-share-view__plan-row--${item.timeState}`}\n >\n <span className=\"kf-share-view__plan-time kf-num\">\n {item.timeState === 'now'\n ? t('chrome.shareView.plan.now')\n : item.startTime !== null\n ? formatTimeOfDay(item.startTime, timezone)\n : ''}\n </span>\n <span className=\"kf-share-view__plan-title\">{item.title}</span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","'use client';\n\n// The traveller family's ENTIRE public-facing surface, as ONE exported\n// component (`src/traveller/index.ts` re-exports only this — the task's\n// deliberate deviation from the old ~10-composite spec). Internal files\n// under `KaafilShareView/internal/` are this component's own code\n// organisation, never a second export.\n//\n// JUDGMENT CALLS, flagged in the final report (see also each internal\n// file's own header comment for the narrower ones):\n//\n// 1. `data-kf-family=\"traveller\"` is set directly on this component's own\n// root element rather than via `AppShell`'s `family` prop —\n// `KaafilUIKitProvider` mounts `AppShell` once, app-wide, and does not\n// thread a `family` prop through today (verified,\n// `KaafilUIKitProvider.tsx`), so a family Surface component setting the\n// attribute on its own root is the only way `families/traveller.css`'s\n// `[data-kf-family=\"traveller\"]` tokens ever apply without also\n// changing the provider itself (out of this task's scope).\n// 2. The fixed render order names distinct visual slots (\"next-up\n// banner\", \"today's plan\", \"itinerary day-strip\") that all read off the\n// SAME `itinerary` section key. `sections.itinerary = false` hides all\n// four itinerary-derived pieces (hero's day-count, next-up, today's\n// plan, day-strip); `renderSection.itinerary`, which can only replace\n// ONE react subtree, is wired to the day-strip specifically — the most\n// literal one-to-one mapping of that key — not to all four.\n// 3. `StayAndTransportSection` joins six section keys\n// (`accommodation`/`transport`/`activities`/`rooming`/`seating`/\n// `pickup`) that have no single owning key of their own;\n// `sections.<key> = false` excludes just that key's rows from the\n// merge, and no `renderSection` override exists for the merged view\n// (there is no single key to hang one off).\n// 4. `rooming` (room/bed assignments) is now merged into\n// `StayAndTransportSection` alongside accommodation/transport/\n// activities, sorted by `startDayIndex` the same way the others sort\n// by `dayIndex` — closed gap, previously flagged as unread in this\n// file's render tree.\n\nimport type { ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport { useSession } from '../../core/hooks/useSession.js';\nimport { useShareSnapshot } from '../../core/hooks/useShareSnapshot.js';\nimport { BrandShell } from '../../core/shells/BrandShell.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport { tokenStyle } from '../../primitives/internal/tokenStyle.js';\nimport { deriveTripStatus } from './internal/deriveTripStatus';\nimport { HouseholdSheet } from './internal/HouseholdSheet';\nimport { ShareEndedScreen } from './internal/ShareEndedScreen';\nimport { ShareSkeleton } from './internal/ShareSkeleton';\nimport { AgencyContactSection } from './internal/sections/AgencyContactSection';\nimport { BrandHeaderSection } from './internal/sections/BrandHeaderSection';\nimport { ChecklistSection } from './internal/sections/ChecklistSection';\nimport { DocumentsSection } from './internal/sections/DocumentsSection';\nimport { FormsSection } from './internal/sections/FormsSection';\nimport { HeroSection } from './internal/sections/HeroSection';\nimport { HouseholdBanner } from './internal/sections/HouseholdBanner';\nimport { ItineraryDayStrip } from './internal/sections/ItineraryDayStrip';\nimport { ManagerContactSection } from './internal/sections/ManagerContactSection';\nimport { MoneySection } from './internal/sections/MoneySection';\nimport { NextUpBanner } from './internal/sections/NextUpBanner';\nimport { StayAndTransportSection } from './internal/sections/StayAndTransportSection';\nimport { TodayPlanSection } from './internal/sections/TodayPlanSection';\nimport type {\n AgencyContactSectionData,\n ChecklistsSection,\n DayBookingsSection,\n DocumentsSectionData,\n HouseholdSectionData,\n ItinerarySection,\n ManagerContactSectionData,\n MoneySectionData,\n PickupSection,\n RoomingSection,\n SeatingSection,\n ShareSectionKey,\n} from './internal/shareTypes';\nimport type { KaafilShareViewProps } from './KaafilShareView.types';\n\nfunction isVisible(key: ShareSectionKey, overrides: KaafilShareViewProps['sections']): boolean {\n return overrides?.[key] !== false;\n}\n\n/**\n * `SessionShell` renders `{children}` unconditionally throughout, including\n * the brief \"opening\" tick before it constructs the `KaafilClient`\n * (`core/shells/SessionShell.tsx`'s own comment) — `KaafilClientContext` is\n * simply not provided yet during that window. `useShareSnapshot()` (like\n * every other `/core` data hook) calls `useKaafilClient()` unconditionally,\n * which throws outside that context. Rules of Hooks means this can't be a\n * conditional hook call inside one component — so the public component\n * gates on `useSession().status` (safe during \"opening\") and only MOUNTS\n * the data-hook-calling component once authenticated, rather than calling\n * `useShareSnapshot()` itself before that's guaranteed.\n */\nexport function KaafilShareView(props: KaafilShareViewProps): ReactNode {\n const session = useSession();\n if (session.status !== 'authenticated') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\">\n <ShareSkeleton />\n </div>\n );\n }\n return <ReadyKaafilShareView {...props} />;\n}\n\nfunction ReadyKaafilShareView({\n token,\n travellerRef,\n headStrategy = 'own-page',\n sections: sectionOverrides,\n household: householdProp,\n renderSection,\n style,\n}: KaafilShareViewProps): ReactNode {\n const { t } = useKaafilChrome();\n const snapshot = useShareSnapshot(token, { travellerRef });\n const [householdSheetOpen, setHouseholdSheetOpen] = useState(false);\n // -1 = \"not yet explicitly chosen\" — resolved to today's day (or day 1)\n // below, once `itinerary` actually loads, rather than freezing at 0 the\n // way a lazy `useState` initializer would (this component mounts before\n // the snapshot's data has arrived).\n const [chosenDayIndex, setChosenDayIndex] = useState(-1);\n\n const itinerary = snapshot.sections.get('itinerary') as ItinerarySection | undefined;\n const rooming = isVisible('rooming', sectionOverrides)\n ? (snapshot.sections.get('rooming') as RoomingSection | undefined)\n : undefined;\n const seating = isVisible('seating', sectionOverrides)\n ? (snapshot.sections.get('seating') as SeatingSection | undefined)\n : undefined;\n const pickup = isVisible('pickup', sectionOverrides)\n ? (snapshot.sections.get('pickup') as PickupSection | undefined)\n : undefined;\n const accommodation = isVisible('accommodation', sectionOverrides)\n ? (snapshot.sections.get('accommodation') as DayBookingsSection | undefined)\n : undefined;\n const transport = isVisible('transport', sectionOverrides)\n ? (snapshot.sections.get('transport') as DayBookingsSection | undefined)\n : undefined;\n const activities = isVisible('activities', sectionOverrides)\n ? (snapshot.sections.get('activities') as DayBookingsSection | undefined)\n : undefined;\n const checklists = snapshot.sections.get('checklists') as ChecklistsSection | undefined;\n const documents = snapshot.sections.get('documents') as DocumentsSectionData | undefined;\n const money = snapshot.sections.get('money') as MoneySectionData | undefined;\n const managerContact = snapshot.sections.get('managerContact') as\n | ManagerContactSectionData\n | undefined;\n const agencyContact = snapshot.sections.get('agencyContact') as\n | AgencyContactSectionData\n | undefined;\n const household = snapshot.sections.get('household') as HouseholdSectionData | undefined;\n\n const tripStatus = useMemo(\n () =>\n snapshot.trip !== undefined\n ? deriveTripStatus(snapshot.trip, itinerary, snapshot.serverTime, t)\n : undefined,\n [snapshot.trip, itinerary, snapshot.serverTime, t],\n );\n\n const rootStyle = tokenStyle(style);\n\n if (snapshot.status === 'loading') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareSkeleton />\n </div>\n );\n }\n if (snapshot.status === 'expired' || snapshot.status === 'revoked') {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareEndedScreen reason=\"ended\" />\n </div>\n );\n }\n if (snapshot.status === 'not-found' || snapshot.trip === undefined || tripStatus === undefined) {\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <ShareEndedScreen reason=\"not-found\" />\n </div>\n );\n }\n\n const timezone = snapshot.trip.timezone;\n const tripName = snapshot.trip.name;\n\n const householdLabel = household?.partyLabel ?? householdProp?.label ?? null;\n const householdTravellers =\n household?.travellers ??\n householdProp?.travellers?.map((entry) => ({ ...entry, isSubject: false })) ??\n [];\n const householdNames = householdTravellers.map((traveller) => traveller.firstName).join(' & ');\n const showHousehold =\n isVisible('household', sectionOverrides) &&\n (householdTravellers.length > 0 || householdLabel !== null);\n\n const showItinerary = isVisible('itinerary', sectionOverrides) && itinerary !== undefined;\n const todayDayIndex = itinerary?.days.findIndex((day) => day.isToday) ?? -1;\n const selectedDayIndex =\n chosenDayIndex !== -1 ? chosenDayIndex : todayDayIndex !== -1 ? todayDayIndex : 0;\n const showStayAndTransport =\n accommodation !== undefined ||\n transport !== undefined ||\n activities !== undefined ||\n rooming !== undefined ||\n seating !== undefined ||\n pickup !== undefined;\n\n return (\n <div className=\"kf-share-view\" data-kf-family=\"traveller\" style={rootStyle}>\n <BrandShell headStrategy={headStrategy} appName={tripName}>\n {agencyContact !== undefined ? (\n <BrandHeaderSection\n agencyContact={agencyContact}\n partyKind={household?.partyKind ?? null}\n />\n ) : null}\n\n {showHousehold\n ? (\n renderSection?.household ??\n (() => <HouseholdBanner label={householdLabel} names={householdNames} />)\n )(household)\n : null}\n\n <HeroSection\n tripName={tripName}\n status={tripStatus}\n travellers={householdTravellers}\n onOpenHousehold={\n householdTravellers.length > 0 ? () => setHouseholdSheetOpen(true) : undefined\n }\n />\n\n {showItinerary && itinerary !== undefined ? (\n <NextUpBanner itinerary={itinerary} timezone={timezone} />\n ) : null}\n\n {showItinerary && itinerary !== undefined ? (\n <TodayPlanSection itinerary={itinerary} timezone={timezone} />\n ) : null}\n\n {isVisible('managerContact', sectionOverrides) && managerContact !== undefined\n ? (\n renderSection?.managerContact ??\n (() => <ManagerContactSection data={managerContact} />)\n )(managerContact)\n : null}\n\n {showItinerary && itinerary !== undefined\n ? (\n renderSection?.itinerary ??\n (() => (\n <ItineraryDayStrip\n itinerary={itinerary}\n timezone={timezone}\n selectedIndex={selectedDayIndex}\n onSelectIndex={setChosenDayIndex}\n />\n ))\n )(itinerary)\n : null}\n\n {showStayAndTransport ? (\n <StayAndTransportSection\n accommodation={accommodation}\n transport={transport}\n activities={activities}\n rooming={rooming}\n seating={seating}\n pickup={pickup}\n timezone={timezone}\n selectedDayIndex={showItinerary ? selectedDayIndex : undefined}\n serverTime={snapshot.serverTime}\n />\n ) : null}\n\n {isVisible('checklists', sectionOverrides) && checklists !== undefined\n ? (renderSection?.checklists ?? (() => <ChecklistSection data={checklists} />))(\n checklists,\n )\n : null}\n\n {isVisible('documents', sectionOverrides) && documents !== undefined\n ? (\n renderSection?.documents ??\n (() => <DocumentsSection data={documents} timezone={timezone} />)\n )(documents)\n : null}\n\n {isVisible('money', sectionOverrides) && money !== undefined\n ? (renderSection?.money ?? (() => <MoneySection data={money} />))(money)\n : null}\n\n {isVisible('agencyContact', sectionOverrides) && agencyContact !== undefined\n ? (renderSection?.agencyContact ?? (() => <AgencyContactSection data={agencyContact} />))(\n agencyContact,\n )\n : null}\n\n {isVisible('forms', sectionOverrides)\n ? (\n renderSection?.forms ??\n (() => <FormsSection token={token} travellerRef={travellerRef} />)\n )(undefined)\n : null}\n </BrandShell>\n <HouseholdSheet\n open={householdSheetOpen}\n onClose={() => setHouseholdSheetOpen(false)}\n label={householdLabel}\n travellers={householdTravellers}\n />\n </div>\n );\n}\n"]}
|