kaafil-react-uikit 0.11.2 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/admin/index.cjs +361 -361
- package/dist/admin/index.js +5 -5
- package/dist/{chunk-JK7EGZ6D.js → chunk-4U5VHQDT.js} +5 -5
- package/dist/{chunk-JK7EGZ6D.js.map → chunk-4U5VHQDT.js.map} +1 -1
- package/dist/{chunk-77RL3E4C.cjs → chunk-5ORJRFXZ.cjs} +24 -3
- package/dist/chunk-5ORJRFXZ.cjs.map +1 -0
- package/dist/{chunk-4U5I3QV7.js → chunk-63JQKLMH.js} +3 -3
- package/dist/{chunk-4U5I3QV7.js.map → chunk-63JQKLMH.js.map} +1 -1
- package/dist/{chunk-YCD42AD6.cjs → chunk-6QSHORU3.cjs} +17 -17
- package/dist/{chunk-YCD42AD6.cjs.map → chunk-6QSHORU3.cjs.map} +1 -1
- package/dist/{chunk-GBYQPMJY.js → chunk-F2ENMVT7.js} +3 -3
- package/dist/{chunk-GBYQPMJY.js.map → chunk-F2ENMVT7.js.map} +1 -1
- package/dist/{chunk-T5LU3IUR.js → chunk-LJO2FGFD.js} +5 -5
- package/dist/{chunk-T5LU3IUR.js.map → chunk-LJO2FGFD.js.map} +1 -1
- package/dist/{chunk-BGXB7ST5.js → chunk-LOLQNRIK.js} +3 -3
- package/dist/{chunk-BGXB7ST5.js.map → chunk-LOLQNRIK.js.map} +1 -1
- package/dist/{chunk-63FVHEQV.cjs → chunk-ODH3SYYW.cjs} +55 -55
- package/dist/{chunk-63FVHEQV.cjs.map → chunk-ODH3SYYW.cjs.map} +1 -1
- package/dist/{chunk-IQ4OFIUJ.js → chunk-RCWSMWQD.js} +3 -3
- package/dist/{chunk-IQ4OFIUJ.js.map → chunk-RCWSMWQD.js.map} +1 -1
- package/dist/{chunk-6XUIJCTP.cjs → chunk-T5JYKERY.cjs} +12 -12
- package/dist/{chunk-6XUIJCTP.cjs.map → chunk-T5JYKERY.cjs.map} +1 -1
- package/dist/{chunk-XTNPBDRA.js → chunk-U6IE2UYL.js} +3 -3
- package/dist/{chunk-XTNPBDRA.js.map → chunk-U6IE2UYL.js.map} +1 -1
- package/dist/{chunk-QRDWTJ5F.cjs → chunk-USKVWPJD.cjs} +83 -83
- package/dist/{chunk-QRDWTJ5F.cjs.map → chunk-USKVWPJD.cjs.map} +1 -1
- package/dist/{chunk-I7NTF56J.cjs → chunk-VHBGE4BY.cjs} +4 -4
- package/dist/{chunk-I7NTF56J.cjs.map → chunk-VHBGE4BY.cjs.map} +1 -1
- package/dist/{chunk-SBYLJGAD.cjs → chunk-XWU5MCY3.cjs} +9 -9
- package/dist/{chunk-SBYLJGAD.cjs.map → chunk-XWU5MCY3.cjs.map} +1 -1
- package/dist/{chunk-WYPUA6ZD.js → chunk-YJJ4DI42.js} +24 -3
- package/dist/chunk-YJJ4DI42.js.map +1 -0
- package/dist/chunk-YKBA4WQJ.cjs +12 -0
- package/dist/{chunk-HUJGLKZR.cjs.map → chunk-YKBA4WQJ.cjs.map} +1 -1
- package/dist/core/index.cjs +107 -107
- package/dist/core/index.js +10 -10
- package/dist/manager/index.cjs +262 -260
- package/dist/manager/index.cjs.map +1 -1
- package/dist/manager/index.js +12 -10
- package/dist/manager/index.js.map +1 -1
- package/dist/traveller/index.cjs +35 -35
- package/dist/traveller/index.js +5 -5
- package/package.json +2 -2
- package/dist/chunk-77RL3E4C.cjs.map +0 -1
- package/dist/chunk-HUJGLKZR.cjs +0 -12
- package/dist/chunk-WYPUA6ZD.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/system-screens/BootErrorScreen.tsx","../src/shared/system-screens/internal/SystemScreenFrame.tsx","../src/shared/system-screens/LockedTripScreen.tsx","../src/shared/system-screens/NotFoundScreen.tsx","../src/shared/system-screens/OfflineFallbackScreen.tsx","../src/shared/system-screens/PlanLockedScreen.tsx","../src/shared/system-screens/SessionExpiredScreen.tsx"],"names":["jsx","jsxs","Fragment","useState"],"mappings":"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","file":"chunk-BGXB7ST5.js","sourcesContent":["'use client';\n\n// `shared/01-system-screens.md §BootErrorScreen`.\n//\n// ── THE ONE SCREEN THAT CANNOT ASSUME ANYTHING ───────────────────────────\n//\n// It renders when `<KaafilUIKitProvider>` itself never opened, mounted by\n// the integrator's own error boundary around it. That means:\n//\n// · NO `I18nShell` → no `t()`. The copy below is ENGLISH ONLY, and that\n// is the spec's own DELTA, not an oversight.\n// · NO `ThemeShell` → no resolved tokens.\n// · NO `usePersona` → the credential never opened, so there is no\n// resolved persona to fork a presentation on. This is\n// the ONE screen in the tier that ships a single\n// rendering for every mounting context, including the\n// share surface — `public`'s richer reading layout\n// depends on shells that did not run.\n// · NO hook of any kind. There is no context above it to read.\n//\n// ── WHY IT CARRIES INLINE STYLES, WHICH NOTHING ELSE HERE DOES ───────────\n//\n// The stylesheet is OPT-IN (`import \"kaafil-react-uikit/styles\"`), so this\n// screen may render with no CSS whatsoever — and it is the one screen whose\n// entire job is explaining a total failure. Unstyled black-on-white text is\n// a poor way to do that, and a token reference resolves to nothing when the\n// ladder never loaded.\n//\n// So every node carries BOTH: an inline style that works with zero CSS, and\n// a `.kf-boot-error-screen__*` class so a host that DID load the stylesheet\n// can restyle it. The literals below are deliberate and must not be\n// \"corrected\" into `var(--kf-*)` — doing so silently breaks the only case\n// this screen exists for. dx-05 governs `src/styles/components/**` and does\n// not reach here, which is consistent rather than a loophole: the rule\n// exists so a stylesheet cannot shadow a token, and this file is not one.\n\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useState } from 'react';\n\n/** The same failure modes `<KaafilSessionProbe/>` distinguishes, plus the\n * honest sixth for anything unclassifiable. */\nexport type BootFailureMode =\n | 'endpoint-401'\n | 'wrong-environment'\n | 'test-key-on-live'\n | 'clock-skew'\n | 'cors'\n | 'unknown';\n\nexport interface BootErrorScreenProps {\n readonly failureMode?: BootFailureMode;\n /** The underlying error's message. Rendered behind a disclosure, never\n * inline in the primary copy — it is developer-facing. */\n readonly detail?: string;\n /** Remounts the entire provider tree; some boot failures (a `kf_test_`\n * key shipped to production) cannot be fixed by retrying at all, which\n * is why this is optional. */\n readonly onRetry?: () => void;\n readonly components?: { readonly BootErrorScreenUI?: () => ReactNode };\n}\n\n/** English-only by contract — see this file's header. Each line says what\n * an integrator can actually DO, because the audience for a boot failure is\n * whoever wired the provider, not an end user. */\nconst COPY: Readonly<Record<BootFailureMode, string>> = {\n 'endpoint-401':\n 'The API key or session token was rejected. Check the credential the provider was given.',\n 'wrong-environment':\n 'This credential belongs to a different environment than the endpoint it was sent to.',\n 'test-key-on-live': 'A test key was used against live. Retrying will not help — swap the key.',\n 'clock-skew': \"This device's clock is too far from the server's for a token to validate.\",\n cors: 'The browser blocked the request before it was sent. This origin is not allowlisted on the API.',\n unknown: 'Kaafil could not start. The detail below may say why.',\n};\n\nconst PANEL: CSSProperties = {\n boxSizing: 'border-box',\n maxInlineSize: '32rem',\n marginInline: 'auto',\n marginBlock: '3rem',\n padding: '1.5rem',\n border: '1px solid #e3ded7',\n borderRadius: '10px',\n background: '#ffffff',\n color: '#1c1917',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n fontSize: '0.875rem',\n lineHeight: 1.5,\n};\n\nconst TITLE: CSSProperties = { margin: '0 0 0.5rem', fontSize: '1rem', fontWeight: 600 };\nconst BODY: CSSProperties = { margin: '0 0 1rem', color: '#57534e' };\nconst CODE: CSSProperties = {\n display: 'block',\n overflowX: 'auto',\n marginBlockStart: '0.5rem',\n padding: '0.75rem',\n borderRadius: '6px',\n background: '#f5f5f4',\n color: '#44403c',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n fontSize: '0.75rem',\n whiteSpace: 'pre-wrap',\n};\nconst BUTTON: CSSProperties = {\n padding: '0.5rem 1rem',\n border: '0',\n borderRadius: '8px',\n background: '#1c1917',\n color: '#ffffff',\n fontSize: '0.8125rem',\n fontWeight: 500,\n cursor: 'pointer',\n};\nconst TOGGLE: CSSProperties = {\n marginBlockStart: '1rem',\n color: '#78716c',\n fontSize: '0.75rem',\n cursor: 'pointer',\n};\n\nexport function BootErrorScreen({\n failureMode = 'unknown',\n detail,\n onRetry,\n components,\n}: BootErrorScreenProps): ReactNode {\n const [showDetail, setShowDetail] = useState(false);\n const Override = components?.BootErrorScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <div className=\"kf-boot-error-screen\" style={PANEL} role=\"alert\">\n <h1 className=\"kf-boot-error-screen__title\" style={TITLE}>\n Kaafil could not start\n </h1>\n <p className=\"kf-boot-error-screen__body\" style={BODY}>\n {COPY[failureMode]}\n </p>\n\n {onRetry === undefined ? null : (\n <button\n type=\"button\"\n className=\"kf-boot-error-screen__retry\"\n style={BUTTON}\n onClick={onRetry}\n >\n Try again\n </button>\n )}\n\n {detail === undefined || detail === '' ? null : (\n <div className=\"kf-boot-error-screen__detail\">\n {/* A disclosure rather than always-on: the message is the\n * underlying error's, which can be long and is not the first\n * thing a reader needs. */}\n <button\n type=\"button\"\n className=\"kf-boot-error-screen__detail-toggle\"\n style={{ ...TOGGLE, background: 'none', border: 0, padding: 0 }}\n aria-expanded={showDetail}\n onClick={() => setShowDetail((open) => !open)}\n >\n {showDetail ? 'Hide technical detail' : 'Show technical detail'}\n </button>\n {showDetail ? (\n <code className=\"kf-boot-error-screen__detail-text\" style={CODE}>\n {detail}\n </code>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n// The one frame the five context-reading system screens share.\n//\n// ── THE PRESENTATION FORK IS REAL, AND IT IS NOT A PROP ───────────────────\n//\n// `shared/01-system-screens.md` records a `Presentation notes by mounting\n// context` field on every screen: an `admin`-family mount is a CONTAINED\n// CARD inside the host's own CRM page, a `manager`-family mount is a\n// FULL-VIEWPORT takeover with its primary action reachable without\n// scrolling. The spec is explicit that this is a genuine layout-model fork\n// (`03-layer-contract.md §5` level 3), not a spacing difference — and\n// equally explicit that it is ONE component, never two named variants.\n//\n// It is derived from `usePersona()`, never from a prop. Hard rule #7: no\n// `persona` prop and no `mode` prop exists anywhere, and dx-07 fails the\n// build on either. The credential decides.\n//\n// ── WHY THIS IS A FRAME AND NOT AN ATOM ──────────────────────────────────\n//\n// The spec's `Composes` rows name `EmptyState`/`Button`/`Banner` atoms from\n// `atomic/*`. Those do not exist: the v2 rebuild ships no shared\n// `/primitives` layer, by decision — each family owns whatever atoms it\n// needs. So these five screens share a FRAME (the layout fork, the focus\n// move, the announcement) and own their own content, rather than depending\n// on a primitives package this package deliberately does not have.\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useId, useRef } from 'react';\nimport { usePersona } from '../../../core/hooks/usePersona.js';\nimport type { KaafilTokenOverrides } from '../../../primitives/internal/tokenStyle.js';\nimport { tokenStyle } from '../../../primitives/internal/tokenStyle.js';\n\nexport interface SystemScreenFrameProps {\n /** BEM block name — each screen owns its own, so a host can target one\n * without catching the rest (`.kf-session-expired-screen__*`). */\n readonly block: string;\n readonly title: string;\n readonly body: ReactNode;\n /** Rendered below the body. On a field mount this is what the sticky\n * action region holds. */\n readonly actions?: ReactNode;\n /** An error/context line above the title. */\n readonly banner?: ReactNode;\n readonly icon?: ReactNode;\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function SystemScreenFrame({\n block,\n title,\n body,\n actions,\n banner,\n icon,\n style,\n}: SystemScreenFrameProps): ReactNode {\n const persona = usePersona();\n const headingRef = useRef<HTMLHeadingElement>(null);\n const headingId = useId();\n\n // A field mount owns the whole screen; a desk mount is embedded beside the\n // host's own nav and must not consume the viewport (briefing §27.7).\n // `traveller` takes the contained treatment too — only `OfflineFallback`\n // and `BootError` reach the public surface, and neither should black out\n // a document a host has embedded.\n const layout = persona === 'manager' ? 'takeover' : 'contained';\n\n // FOCUS MOVES TO THE HEADING on mount. This is a full state replacement,\n // not an overlay — there is no opener to return focus to, so the\n // overlay-focus contract (`12-accessibility.md §3`) does not apply and the\n // heading is the correct landing point. Without this a keyboard or screen\n // reader user gets no signal that the page became something else and Tab\n // keeps walking whatever is still behind it.\n useEffect(() => {\n headingRef.current?.focus();\n }, []);\n\n return (\n <div\n className=\"kf-system-screen\"\n data-block={block}\n data-layout={layout}\n style={tokenStyle(style)}\n // A significant, infrequent state change — announced politely rather\n // than assertively, since the focus move above already carries the\n // urgency and `assertive` would interrupt whatever is mid-sentence.\n role=\"status\"\n aria-live=\"polite\"\n aria-labelledby={headingId}\n >\n <div className={`kf-system-screen__panel ${block}`}>\n {icon === undefined ? null : (\n <span className=\"kf-system-screen__glyph\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {banner === undefined ? null : <div className=\"kf-system-screen__banner\">{banner}</div>}\n {/* `tabIndex={-1}` so the effect above can focus it — a heading is\n * not focusable by default and focusing the panel instead would\n * draw the accent ring around the entire card. */}\n <h1 ref={headingRef} id={headingId} tabIndex={-1} className=\"kf-system-screen__title\">\n {title}\n </h1>\n <div className=\"kf-system-screen__body\">{body}</div>\n {actions === undefined ? null : <div className=\"kf-system-screen__actions\">{actions}</div>}\n </div>\n </div>\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §LockedTripScreen`.\n//\n// The destination for a WRITE-ONLY deep link into a closed-out trip — a\n// \"record this collection\" push sent before the trip closed, a bookmarked\n// mutation route. Mounting the flow it points at would show a form whose\n// one action can only ever answer `423`.\n//\n// BACKED BY NOTHING, and that is the discipline rather than a gap. This\n// screen never calls `closeout.get`/`useCloseout` to learn the trip is\n// locked: the caller already knows (its own write would 423, or the link's\n// own metadata carried the LOCKED stage). Checking again here would be a\n// second gate — \"check the resolved state before render, never\n// render-then-catch\", applied to lock state instead of capability darkness.\n//\n// LINKS to Closing Day, never mounts it. No unlock control appears here or\n// anywhere else at any layer (hard rule #21): the desk locks, the CRM\n// reopens.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface LockedTripScreenProps {\n /** For context and for building the link's destination — never used to\n * fetch anything. */\n readonly tripRef: string;\n /** What the dead-end link would have done (\"Record a collection\"), from\n * whatever metadata came with it. Absent means the generic sentence: this\n * screen invents no explanation of its own. */\n readonly intendedAction?: string;\n /** The host's own navigation to wherever it mounts Closing Day. A screen\n * never navigates itself. */\n readonly onGoToClosingDay: (tripRef: string) => void;\n readonly components?: { readonly LockedTripScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function LockedTripScreen({\n tripRef,\n intendedAction,\n onGoToClosingDay,\n components,\n style,\n}: LockedTripScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const Override = components?.LockedTripScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-locked-trip-screen\"\n title={t('chrome.systemScreens.lockedTrip.title')}\n banner={\n intendedAction === undefined\n ? t('chrome.systemScreens.lockedTrip.genericAction')\n : t('chrome.systemScreens.lockedTrip.namedAction').replace('{action}', intendedAction)\n }\n body={<p>{t('chrome.systemScreens.lockedTrip.body')}</p>}\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n onClick={() => onGoToClosingDay(tripRef)}\n >\n {t('chrome.systemScreens.lockedTrip.action')}\n </button>\n }\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §NotFoundScreen`.\n//\n// A route-level 404 for a `manager`/`agencyAdmin` mount: a bookmarked\n// `tripRef` from another agency, a deep link to a deleted entity, a stale\n// notification pointing at a now-cross-tenant resource.\n//\n// NOT THE TRAVELLER'S 404, and this is load-bearing rather than an\n// oversight. A dead share token is `ShareEndedScreen`'s `not-found`\n// variant, which must stay 404-shaped — no heading, no divider, no\n// distinguishing DOM signal (hard rule #20, enforced by dx-15). Rendering\n// THIS screen on the share surface would leak that the token was once real.\n// It is therefore never re-exported from `/traveller`.\n//\n// BACKED BY NOTHING, by design. It renders on a 404 that some mounted\n// flow's own hook already surfaced; it performs no second fetch to\n// \"double-check\" what the flow already learned.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface NotFoundScreenProps {\n /** The host's own \"back\" navigation. Optional — a host that reached this\n * with no history to return to simply gets no button, which is more\n * honest than one that goes nowhere. */\n readonly onGoBack?: () => void;\n readonly components?: { readonly NotFoundScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function NotFoundScreen({ onGoBack, components, style }: NotFoundScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const Override = components?.NotFoundScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-not-found-screen\"\n title={t('chrome.systemScreens.notFound.title')}\n // Deliberately does not speculate about WHY. \"Deleted, or belongs to\n // another agency, or you mistyped it\" are three different sentences\n // and this screen cannot tell which is true — naming one would be a\n // guess presented as a diagnosis.\n body={<p>{t('chrome.systemScreens.notFound.body')}</p>}\n {...(style !== undefined ? { style } : {})}\n {...(onGoBack !== undefined\n ? {\n actions: (\n <button type=\"button\" className=\"kf-system-screen__primary\" onClick={onGoBack}>\n {t('chrome.systemScreens.notFound.action')}\n </button>\n ),\n }\n : {})}\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §OfflineFallbackScreen`.\n//\n// The device has nothing cached AND no connectivity — a manager opening a\n// trip for the first time at a trailhead before ever syncing, a desk\n// session losing the network before its first pull, a share link opened\n// with zero signal before the first snapshot.\n//\n// THE ONLY ONE OF THE SIX THE TRAVELLER SURFACE SHARES besides\n// `BootErrorScreen`, and it is safe there precisely because it discloses\n// nothing: \"there is no connection\" is true of any URL and leaks nothing\n// about whether this token was ever real. That is what separates it from\n// `ShareEndedScreen`'s dead-token cases, which are about a token's\n// VALIDITY and must stay 404-shaped (hard rule #20).\n//\n// SESSION STATE OUTRANKS THIS. An offline device whose credential has also\n// expired shows `SessionExpiredScreen`, not this — re-authentication is the\n// blocking concern regardless of connectivity, and a caller composing both\n// should check session first.\n\nimport type { ReactNode } from 'react';\nimport { useOutboxStatus } from '../../core/hooks/useOutboxStatus.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface OfflineFallbackScreenProps {\n /** Present on a trip-scoped mount; absent on the share surface. Context\n * only — this screen fetches nothing. */\n readonly tripRef?: string;\n /** Present on a share mount instead of `tripRef`. */\n readonly token?: string;\n /** The host's own retry — typically remounting whatever failed. */\n readonly onRetry?: () => void;\n readonly components?: { readonly OfflineFallbackScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function OfflineFallbackScreen({\n onRetry,\n components,\n style,\n}: OfflineFallbackScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const { isOnline } = useOutboxStatus();\n const Override = components?.OfflineFallbackScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-offline-fallback-screen\"\n title={t('chrome.systemScreens.offlineFallback.title')}\n body={\n <>\n <p>{t('chrome.systemScreens.offlineFallback.body')}</p>\n {/* Connectivity came back while this was on screen. Said rather\n * than acted on: this screen does not refetch or navigate on its\n * own, because whatever failed is the caller's to retry — but\n * leaving a stale \"you are offline\" up while the bars are back is\n * the thing that makes an app feel broken. */}\n {isOnline ? (\n <p data-tone=\"ok\">{t('chrome.systemScreens.offlineFallback.backOnline')}</p>\n ) : null}\n </>\n }\n {...(style !== undefined ? { style } : {})}\n {...(onRetry !== undefined\n ? {\n actions: (\n <button type=\"button\" className=\"kf-system-screen__primary\" onClick={onRetry}>\n {t('chrome.systemScreens.offlineFallback.action')}\n </button>\n ),\n }\n : {})}\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §PlanLockedScreen`.\n//\n// The takeover a STANDALONE route (no surrounding tab bar) renders when its\n// destination module is flag-dark. Admin-only: entitlement is a desk\n// concern, a manager's flows are always mounted inside a tab set where a\n// flag-dark tab renders its own inline view, and the share surface has no\n// upsell copy at all (its flag-dark case is 404-shaped).\n//\n// ── A SPEC FIELD THAT HAS NO WIRE SOURCE ─────────────────────────────────\n//\n// The spec splits the CTA by `details.reason` into `'agency'` (the agency's\n// own plan) vs `'partner-ceiling'` (the partner's tier caps it), so the\n// right person is sent to the right queue. `CapabilityRow` carries no such\n// field — `06-capability-and-personas.md §6` point 2 fixes it as \"four\n// booleans, no `reason` string\", and `capability.types.ts` says so too.\n//\n// So the reason is an OPTIONAL PROP, supplied by whatever the caller saw\n// (a refusal's own `details`), and `onUpgradeRequest` is called with\n// `undefined` when nobody knows. Defaulting it to `'agency'` would have\n// been a guess routed to a real support queue — the host can decide what to\n// do with \"unknown\" far better than this screen can invent an answer.\n\nimport type { ReactNode } from 'react';\nimport { useCapabilities } from '../../core/hooks/useCapabilities.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport type PlanLockedReason = 'agency' | 'partner-ceiling';\n\nexport interface PlanLockedScreenProps {\n /** The capability this route was headed for. Read for its own triple\n * only — never exhaustively switched on (`§6` point 5's open-set rule). */\n readonly capabilityKey: string;\n /** The host's own upsell/support flow — Kaafil has no in-product upgrade\n * path to hand off to. `undefined` means the wire did not say which\n * queue this belongs in; see this file's header. */\n readonly onUpgradeRequest: (reason: PlanLockedReason | undefined) => void;\n /** Supplied by the caller when it saw a refusal that named one. */\n readonly reason?: PlanLockedReason;\n readonly components?: { readonly PlanLockedScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function PlanLockedScreen({\n capabilityKey,\n onUpgradeRequest,\n reason,\n components,\n style,\n}: PlanLockedScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const capabilities = useCapabilities([capabilityKey]);\n const Override = components?.PlanLockedScreenUI;\n if (Override !== undefined) return <Override />;\n\n // Read, never re-derived: `status` is resolved once in `/core` and this\n // screen reads it rather than recombining the booleans itself\n // (`06-capability-and-personas.md §6` point 2).\n const status = capabilities.get(capabilityKey)?.status;\n\n return (\n <SystemScreenFrame\n block=\"kf-plan-locked-screen\"\n title={t('chrome.systemScreens.planLocked.title')}\n body={\n <>\n <p>\n {t(\n reason === 'partner-ceiling'\n ? 'chrome.systemScreens.planLocked.bodyPartnerCeiling'\n : 'chrome.systemScreens.planLocked.body',\n )}\n </p>\n {/* A route that reached this screen for a capability that is NOT\n * flag-dark is a caller bug, and saying so beats rendering upsell\n * copy over a module that is merely data-dark or simply lit. */}\n {status === 'flag-dark' ? null : (\n <p data-tone=\"warn\">{t('chrome.systemScreens.planLocked.notFlagDark')}</p>\n )}\n </>\n }\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n onClick={() => onUpgradeRequest(reason)}\n >\n {t('chrome.systemScreens.planLocked.action')}\n </button>\n }\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §SessionExpiredScreen`.\n//\n// Renders exactly when `useSession().status === 'expired'` — the open\n// credential's silent refresh has exhausted itself. Re-authentication is\n// routed through the HOST's own login; Kaafil has no login page to redirect\n// to, which is why `onReauthenticate` is required and has no default.\n//\n// DOES NOT retry any token call itself. A broken credential means the\n// host's own user is not authenticated and must re-authenticate through the\n// host's own flow — obtaining fresh tokens is `SessionShell`'s concern on\n// the NEXT successful mount, not this screen's on the current broken one.\n//\n// DOES NOT inspect which credential kind expired beyond the resolved\n// persona (`00-decisions.md` U-003 forecloses reading a JWT at any layer\n// above `SessionShell`).\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface SessionExpiredScreenProps {\n /** The host's own re-auth entry point. Required: there is no default\n * action, because Kaafil has no login page of its own. */\n readonly onReauthenticate: (returnTo?: string) => void | Promise<void>;\n /** Threaded back to `onReauthenticate` UNEXAMINED. This screen never\n * interprets it, builds a URL from it, or hands it to a router — it\n * exists purely so the host's own flow can restore the right destination\n * afterwards. */\n readonly returnTo?: string;\n readonly components?: { readonly SessionExpiredScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function SessionExpiredScreen({\n onReauthenticate,\n returnTo,\n components,\n style,\n}: SessionExpiredScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const [pending, setPending] = useState(false);\n // The host's own auth failure reason is not something Kaafil can\n // classify, so the rejection's own message is shown verbatim.\n const [failure, setFailure] = useState<string | undefined>(undefined);\n\n const Override = components?.SessionExpiredScreenUI;\n if (Override !== undefined) return <Override />;\n\n async function reauthenticate(): Promise<void> {\n setPending(true);\n setFailure(undefined);\n try {\n await onReauthenticate(returnTo);\n } catch (error) {\n setFailure(error instanceof Error ? error.message : String(error));\n } finally {\n setPending(false);\n }\n }\n\n return (\n <SystemScreenFrame\n block=\"kf-session-expired-screen\"\n title={t('chrome.systemScreens.sessionExpired.title')}\n body={<p>{t('chrome.systemScreens.sessionExpired.body')}</p>}\n {...(failure !== undefined ? { banner: <span data-tone=\"warn\">{failure}</span> } : {})}\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n disabled={pending}\n onClick={() => void reauthenticate()}\n >\n {t(\n pending\n ? 'chrome.systemScreens.sessionExpired.busy'\n : 'chrome.systemScreens.sessionExpired.action',\n )}\n </button>\n }\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/system-screens/BootErrorScreen.tsx","../src/shared/system-screens/internal/SystemScreenFrame.tsx","../src/shared/system-screens/LockedTripScreen.tsx","../src/shared/system-screens/NotFoundScreen.tsx","../src/shared/system-screens/OfflineFallbackScreen.tsx","../src/shared/system-screens/PlanLockedScreen.tsx","../src/shared/system-screens/SessionExpiredScreen.tsx"],"names":["jsx","jsxs","Fragment","useState"],"mappings":";;;;AAgEA,IAAM,IAAA,GAAkD;AAAA,EACtD,cAAA,EACE,yFAAA;AAAA,EACF,mBAAA,EACE,sFAAA;AAAA,EACF,kBAAA,EAAoB,+EAAA;AAAA,EACpB,YAAA,EAAc,2EAAA;AAAA,EACd,IAAA,EAAM,gGAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,KAAA,GAAuB;AAAA,EAC3B,SAAA,EAAW,YAAA;AAAA,EACX,aAAA,EAAe,OAAA;AAAA,EACf,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,mBAAA;AAAA,EACR,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY,SAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,UAAA,EAAY,wDAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,QAAuB,EAAE,MAAA,EAAQ,cAAc,QAAA,EAAU,MAAA,EAAQ,YAAY,GAAA,EAAI;AACvF,IAAM,IAAA,GAAsB,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAO,SAAA,EAAU;AACnE,IAAM,IAAA,GAAsB;AAAA,EAC1B,OAAA,EAAS,OAAA;AAAA,EACT,SAAA,EAAW,MAAA;AAAA,EACX,gBAAA,EAAkB,QAAA;AAAA,EAClB,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,SAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,UAAA,EAAY,gDAAA;AAAA,EACZ,QAAA,EAAU,SAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AACA,IAAM,MAAA,GAAwB;AAAA,EAC5B,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ,GAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,SAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;AACA,IAAM,MAAA,GAAwB;AAAA,EAC5B,gBAAA,EAAkB,MAAA;AAAA,EAClB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,WAAA,GAAc,SAAA;AAAA,EACd,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,WAAW,UAAA,EAAY,iBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA;AAE7C,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAuB,KAAA,EAAO,KAAA,EAAO,MAAK,OAAA,EACvD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,6BAAA,EAA8B,KAAA,EAAO,OAAO,QAAA,EAAA,wBAAA,EAE1D,CAAA;AAAA,oBACA,GAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EAA6B,OAAO,IAAA,EAC9C,QAAA,EAAA,IAAA,CAAK,WAAW,CAAA,EACnB,CAAA;AAAA,IAEC,OAAA,KAAY,SAAY,IAAA,mBACvB,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,6BAAA;AAAA,QACV,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACV,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IAGD,MAAA,KAAW,UAAa,MAAA,KAAW,EAAA,GAAK,uBACvC,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EAIb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,qCAAA;AAAA,UACV,KAAA,EAAO,EAAE,GAAG,MAAA,EAAQ,YAAY,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AAAA,UAC9D,eAAA,EAAe,UAAA;AAAA,UACf,SAAS,MAAM,aAAA,CAAc,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,UAE3C,uBAAa,uBAAA,GAA0B;AAAA;AAAA,OAC1C;AAAA,MACC,UAAA,uBACE,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAoC,KAAA,EAAO,IAAA,EACxD,kBACH,CAAA,GACE;AAAA,KAAA,EACN;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC9HO,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,UAAA,GAAa,OAA2B,IAAI,CAAA;AAClD,EAAA,MAAM,YAAY,KAAA,EAAM;AAOxB,EAAA,MAAM,MAAA,GAAS,OAAA,KAAY,SAAA,GAAY,UAAA,GAAa,WAAA;AAQpD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAa,MAAA;AAAA,MACb,KAAA,EAAO,WAAW,KAAK,CAAA;AAAA,MAIvB,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,QAAA;AAAA,MACV,iBAAA,EAAiB,SAAA;AAAA,MAEjB,0BAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAA,EAC7C,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,MAAA,GAAY,uBACpBD,GAAAA,CAAC,UAAK,SAAA,EAAU,yBAAA,EAA0B,aAAA,EAAY,MAAA,EACnD,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,QAED,MAAA,KAAW,SAAY,IAAA,mBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAA4B,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBAIjFA,GAAAA,CAAC,IAAA,EAAA,EAAG,GAAA,EAAK,UAAA,EAAY,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,SAAA,EAAU,yBAAA,EACzD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,QAC7C,OAAA,KAAY,SAAY,IAAA,mBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAA6B,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACtF;AAAA;AAAA,GACF;AAEJ;ACrEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqC;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,eAAA,EAAgB;AAC9B,EAAA,MAAM,WAAW,UAAA,EAAY,kBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAOA,IAAC,QAAA,EAAA,EAAS,CAAA;AAE7C,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,uBAAA;AAAA,MACN,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,MAChD,MAAA,EACE,cAAA,KAAmB,MAAA,GACf,CAAA,CAAE,+CAA+C,CAAA,GACjD,CAAA,CAAE,6CAA6C,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,cAAc,CAAA;AAAA,MAEzF,sBAAMA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAAA,EAAE,CAAA;AAAA,MACnD,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACxC,yBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,2BAAA;AAAA,UACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,UAEtC,YAAE,wCAAwC;AAAA;AAAA;AAC7C;AAAA,GAEJ;AAEJ;ACxCO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,UAAA,EAAY,OAAM,EAAmC;AAC9F,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,eAAA,EAAgB;AAC9B,EAAA,MAAM,WAAW,UAAA,EAAY,gBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAOA,IAAC,QAAA,EAAA,EAAS,CAAA;AAE7C,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,qBAAA;AAAA,MACN,KAAA,EAAO,EAAE,qCAAqC,CAAA;AAAA,MAK9C,sBAAMA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,oCAAoC,CAAA,EAAE,CAAA;AAAA,MACjD,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACvC,GAAI,aAAa,MAAA,GACd;AAAA,QACE,OAAA,kBACEA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,2BAAA,EAA4B,OAAA,EAAS,QAAA,EAClE,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAAA,EAC3C;AAAA,UAGJ;AAAC;AAAA,GACP;AAEJ;ACpBO,SAAS,qBAAA,CAAsB;AAAA,EACpC,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA0C;AACxC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,eAAA,EAAgB;AAC9B,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,eAAA,EAAgB;AACrC,EAAA,MAAM,WAAW,UAAA,EAAY,uBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAOA,IAAC,QAAA,EAAA,EAAS,CAAA;AAE7C,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,EAAE,4CAA4C,CAAA;AAAA,MACrD,IAAA,kBACEC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,2CAA2C,CAAA,EAAE,CAAA;AAAA,QAMlD,QAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,aAAU,IAAA,EAAM,QAAA,EAAA,CAAA,CAAE,iDAAiD,CAAA,EAAE,CAAA,GACtE;AAAA,OAAA,EACN,CAAA;AAAA,MAED,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACvC,GAAI,YAAY,MAAA,GACb;AAAA,QACE,OAAA,kBACEA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,2BAAA,EAA4B,OAAA,EAAS,OAAA,EAClE,QAAA,EAAA,CAAA,CAAE,6CAA6C,CAAA,EAClD;AAAA,UAGJ;AAAC;AAAA,GACP;AAEJ;AChCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqC;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,eAAA,EAAgB;AAC9B,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,CAAC,aAAa,CAAC,CAAA;AACpD,EAAA,MAAM,WAAW,UAAA,EAAY,kBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAOA,IAAC,QAAA,EAAA,EAAS,CAAA;AAK7C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,aAAa,CAAA,EAAG,MAAA;AAEhD,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,uBAAA;AAAA,MACN,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,MAChD,IAAA,kBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAF,IAAC,GAAA,EAAA,EACE,QAAA,EAAA,CAAA;AAAA,UACC,MAAA,KAAW,oBACP,oDAAA,GACA;AAAA,SACN,EACF,CAAA;AAAA,QAIC,MAAA,KAAW,WAAA,GAAc,IAAA,mBACxBA,GAAAA,CAAC,OAAE,WAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,CAAA,CAAE,6CAA6C,CAAA,EAAE;AAAA,OAAA,EAE1E,CAAA;AAAA,MAED,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACxC,yBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,2BAAA;AAAA,UACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAAA,UAErC,YAAE,wCAAwC;AAAA;AAAA;AAC7C;AAAA,GAEJ;AAEJ;AC3DO,SAAS,oBAAA,CAAqB;AAAA,EACnC,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,eAAA,EAAgB;AAC9B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIG,SAAS,KAAK,CAAA;AAG5C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAA6B,MAAS,CAAA;AAEpE,EAAA,MAAM,WAAW,UAAA,EAAY,sBAAA;AAC7B,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,uBAAOH,IAAC,QAAA,EAAA,EAAS,CAAA;AAE7C,EAAA,eAAe,cAAA,GAAgC;AAC7C,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,UAAA,CAAW,MAAS,CAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,iBAAiB,QAAQ,CAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACnE,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,2BAAA;AAAA,MACN,KAAA,EAAO,EAAE,2CAA2C,CAAA;AAAA,MACpD,sBAAMA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,0CAA0C,CAAA,EAAE,CAAA;AAAA,MACvD,GAAI,OAAA,KAAY,MAAA,GAAY,EAAE,MAAA,kBAAQA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,OAAA,EAAQ,CAAA,KAAY,EAAC;AAAA,MACnF,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACxC,yBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,2BAAA;AAAA,UACV,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS,MAAM,KAAK,cAAA,EAAe;AAAA,UAElC,QAAA,EAAA,CAAA;AAAA,YACC,UACI,0CAAA,GACA;AAAA;AACN;AAAA;AACF;AAAA,GAEJ;AAEJ","file":"chunk-LOLQNRIK.js","sourcesContent":["'use client';\n\n// `shared/01-system-screens.md §BootErrorScreen`.\n//\n// ── THE ONE SCREEN THAT CANNOT ASSUME ANYTHING ───────────────────────────\n//\n// It renders when `<KaafilUIKitProvider>` itself never opened, mounted by\n// the integrator's own error boundary around it. That means:\n//\n// · NO `I18nShell` → no `t()`. The copy below is ENGLISH ONLY, and that\n// is the spec's own DELTA, not an oversight.\n// · NO `ThemeShell` → no resolved tokens.\n// · NO `usePersona` → the credential never opened, so there is no\n// resolved persona to fork a presentation on. This is\n// the ONE screen in the tier that ships a single\n// rendering for every mounting context, including the\n// share surface — `public`'s richer reading layout\n// depends on shells that did not run.\n// · NO hook of any kind. There is no context above it to read.\n//\n// ── WHY IT CARRIES INLINE STYLES, WHICH NOTHING ELSE HERE DOES ───────────\n//\n// The stylesheet is OPT-IN (`import \"kaafil-react-uikit/styles\"`), so this\n// screen may render with no CSS whatsoever — and it is the one screen whose\n// entire job is explaining a total failure. Unstyled black-on-white text is\n// a poor way to do that, and a token reference resolves to nothing when the\n// ladder never loaded.\n//\n// So every node carries BOTH: an inline style that works with zero CSS, and\n// a `.kf-boot-error-screen__*` class so a host that DID load the stylesheet\n// can restyle it. The literals below are deliberate and must not be\n// \"corrected\" into `var(--kf-*)` — doing so silently breaks the only case\n// this screen exists for. dx-05 governs `src/styles/components/**` and does\n// not reach here, which is consistent rather than a loophole: the rule\n// exists so a stylesheet cannot shadow a token, and this file is not one.\n\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useState } from 'react';\n\n/** The same failure modes `<KaafilSessionProbe/>` distinguishes, plus the\n * honest sixth for anything unclassifiable. */\nexport type BootFailureMode =\n | 'endpoint-401'\n | 'wrong-environment'\n | 'test-key-on-live'\n | 'clock-skew'\n | 'cors'\n | 'unknown';\n\nexport interface BootErrorScreenProps {\n readonly failureMode?: BootFailureMode;\n /** The underlying error's message. Rendered behind a disclosure, never\n * inline in the primary copy — it is developer-facing. */\n readonly detail?: string;\n /** Remounts the entire provider tree; some boot failures (a `kf_test_`\n * key shipped to production) cannot be fixed by retrying at all, which\n * is why this is optional. */\n readonly onRetry?: () => void;\n readonly components?: { readonly BootErrorScreenUI?: () => ReactNode };\n}\n\n/** English-only by contract — see this file's header. Each line says what\n * an integrator can actually DO, because the audience for a boot failure is\n * whoever wired the provider, not an end user. */\nconst COPY: Readonly<Record<BootFailureMode, string>> = {\n 'endpoint-401':\n 'The API key or session token was rejected. Check the credential the provider was given.',\n 'wrong-environment':\n 'This credential belongs to a different environment than the endpoint it was sent to.',\n 'test-key-on-live': 'A test key was used against live. Retrying will not help — swap the key.',\n 'clock-skew': \"This device's clock is too far from the server's for a token to validate.\",\n cors: 'The browser blocked the request before it was sent. This origin is not allowlisted on the API.',\n unknown: 'Kaafil could not start. The detail below may say why.',\n};\n\nconst PANEL: CSSProperties = {\n boxSizing: 'border-box',\n maxInlineSize: '32rem',\n marginInline: 'auto',\n marginBlock: '3rem',\n padding: '1.5rem',\n border: '1px solid #e3ded7',\n borderRadius: '10px',\n background: '#ffffff',\n color: '#1c1917',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n fontSize: '0.875rem',\n lineHeight: 1.5,\n};\n\nconst TITLE: CSSProperties = { margin: '0 0 0.5rem', fontSize: '1rem', fontWeight: 600 };\nconst BODY: CSSProperties = { margin: '0 0 1rem', color: '#57534e' };\nconst CODE: CSSProperties = {\n display: 'block',\n overflowX: 'auto',\n marginBlockStart: '0.5rem',\n padding: '0.75rem',\n borderRadius: '6px',\n background: '#f5f5f4',\n color: '#44403c',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n fontSize: '0.75rem',\n whiteSpace: 'pre-wrap',\n};\nconst BUTTON: CSSProperties = {\n padding: '0.5rem 1rem',\n border: '0',\n borderRadius: '8px',\n background: '#1c1917',\n color: '#ffffff',\n fontSize: '0.8125rem',\n fontWeight: 500,\n cursor: 'pointer',\n};\nconst TOGGLE: CSSProperties = {\n marginBlockStart: '1rem',\n color: '#78716c',\n fontSize: '0.75rem',\n cursor: 'pointer',\n};\n\nexport function BootErrorScreen({\n failureMode = 'unknown',\n detail,\n onRetry,\n components,\n}: BootErrorScreenProps): ReactNode {\n const [showDetail, setShowDetail] = useState(false);\n const Override = components?.BootErrorScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <div className=\"kf-boot-error-screen\" style={PANEL} role=\"alert\">\n <h1 className=\"kf-boot-error-screen__title\" style={TITLE}>\n Kaafil could not start\n </h1>\n <p className=\"kf-boot-error-screen__body\" style={BODY}>\n {COPY[failureMode]}\n </p>\n\n {onRetry === undefined ? null : (\n <button\n type=\"button\"\n className=\"kf-boot-error-screen__retry\"\n style={BUTTON}\n onClick={onRetry}\n >\n Try again\n </button>\n )}\n\n {detail === undefined || detail === '' ? null : (\n <div className=\"kf-boot-error-screen__detail\">\n {/* A disclosure rather than always-on: the message is the\n * underlying error's, which can be long and is not the first\n * thing a reader needs. */}\n <button\n type=\"button\"\n className=\"kf-boot-error-screen__detail-toggle\"\n style={{ ...TOGGLE, background: 'none', border: 0, padding: 0 }}\n aria-expanded={showDetail}\n onClick={() => setShowDetail((open) => !open)}\n >\n {showDetail ? 'Hide technical detail' : 'Show technical detail'}\n </button>\n {showDetail ? (\n <code className=\"kf-boot-error-screen__detail-text\" style={CODE}>\n {detail}\n </code>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n// The one frame the five context-reading system screens share.\n//\n// ── THE PRESENTATION FORK IS REAL, AND IT IS NOT A PROP ───────────────────\n//\n// `shared/01-system-screens.md` records a `Presentation notes by mounting\n// context` field on every screen: an `admin`-family mount is a CONTAINED\n// CARD inside the host's own CRM page, a `manager`-family mount is a\n// FULL-VIEWPORT takeover with its primary action reachable without\n// scrolling. The spec is explicit that this is a genuine layout-model fork\n// (`03-layer-contract.md §5` level 3), not a spacing difference — and\n// equally explicit that it is ONE component, never two named variants.\n//\n// It is derived from `usePersona()`, never from a prop. Hard rule #7: no\n// `persona` prop and no `mode` prop exists anywhere, and dx-07 fails the\n// build on either. The credential decides.\n//\n// ── WHY THIS IS A FRAME AND NOT AN ATOM ──────────────────────────────────\n//\n// The spec's `Composes` rows name `EmptyState`/`Button`/`Banner` atoms from\n// `atomic/*`. Those do not exist: the v2 rebuild ships no shared\n// `/primitives` layer, by decision — each family owns whatever atoms it\n// needs. So these five screens share a FRAME (the layout fork, the focus\n// move, the announcement) and own their own content, rather than depending\n// on a primitives package this package deliberately does not have.\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useId, useRef } from 'react';\nimport { usePersona } from '../../../core/hooks/usePersona.js';\nimport type { KaafilTokenOverrides } from '../../../primitives/internal/tokenStyle.js';\nimport { tokenStyle } from '../../../primitives/internal/tokenStyle.js';\n\nexport interface SystemScreenFrameProps {\n /** BEM block name — each screen owns its own, so a host can target one\n * without catching the rest (`.kf-session-expired-screen__*`). */\n readonly block: string;\n readonly title: string;\n readonly body: ReactNode;\n /** Rendered below the body. On a field mount this is what the sticky\n * action region holds. */\n readonly actions?: ReactNode;\n /** An error/context line above the title. */\n readonly banner?: ReactNode;\n readonly icon?: ReactNode;\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function SystemScreenFrame({\n block,\n title,\n body,\n actions,\n banner,\n icon,\n style,\n}: SystemScreenFrameProps): ReactNode {\n const persona = usePersona();\n const headingRef = useRef<HTMLHeadingElement>(null);\n const headingId = useId();\n\n // A field mount owns the whole screen; a desk mount is embedded beside the\n // host's own nav and must not consume the viewport (briefing §27.7).\n // `traveller` takes the contained treatment too — only `OfflineFallback`\n // and `BootError` reach the public surface, and neither should black out\n // a document a host has embedded.\n const layout = persona === 'manager' ? 'takeover' : 'contained';\n\n // FOCUS MOVES TO THE HEADING on mount. This is a full state replacement,\n // not an overlay — there is no opener to return focus to, so the\n // overlay-focus contract (`12-accessibility.md §3`) does not apply and the\n // heading is the correct landing point. Without this a keyboard or screen\n // reader user gets no signal that the page became something else and Tab\n // keeps walking whatever is still behind it.\n useEffect(() => {\n headingRef.current?.focus();\n }, []);\n\n return (\n <div\n className=\"kf-system-screen\"\n data-block={block}\n data-layout={layout}\n style={tokenStyle(style)}\n // A significant, infrequent state change — announced politely rather\n // than assertively, since the focus move above already carries the\n // urgency and `assertive` would interrupt whatever is mid-sentence.\n role=\"status\"\n aria-live=\"polite\"\n aria-labelledby={headingId}\n >\n <div className={`kf-system-screen__panel ${block}`}>\n {icon === undefined ? null : (\n <span className=\"kf-system-screen__glyph\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {banner === undefined ? null : <div className=\"kf-system-screen__banner\">{banner}</div>}\n {/* `tabIndex={-1}` so the effect above can focus it — a heading is\n * not focusable by default and focusing the panel instead would\n * draw the accent ring around the entire card. */}\n <h1 ref={headingRef} id={headingId} tabIndex={-1} className=\"kf-system-screen__title\">\n {title}\n </h1>\n <div className=\"kf-system-screen__body\">{body}</div>\n {actions === undefined ? null : <div className=\"kf-system-screen__actions\">{actions}</div>}\n </div>\n </div>\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §LockedTripScreen`.\n//\n// The destination for a WRITE-ONLY deep link into a closed-out trip — a\n// \"record this collection\" push sent before the trip closed, a bookmarked\n// mutation route. Mounting the flow it points at would show a form whose\n// one action can only ever answer `423`.\n//\n// BACKED BY NOTHING, and that is the discipline rather than a gap. This\n// screen never calls `closeout.get`/`useCloseout` to learn the trip is\n// locked: the caller already knows (its own write would 423, or the link's\n// own metadata carried the LOCKED stage). Checking again here would be a\n// second gate — \"check the resolved state before render, never\n// render-then-catch\", applied to lock state instead of capability darkness.\n//\n// LINKS to Closing Day, never mounts it. No unlock control appears here or\n// anywhere else at any layer (hard rule #21): the desk locks, the CRM\n// reopens.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface LockedTripScreenProps {\n /** For context and for building the link's destination — never used to\n * fetch anything. */\n readonly tripRef: string;\n /** What the dead-end link would have done (\"Record a collection\"), from\n * whatever metadata came with it. Absent means the generic sentence: this\n * screen invents no explanation of its own. */\n readonly intendedAction?: string;\n /** The host's own navigation to wherever it mounts Closing Day. A screen\n * never navigates itself. */\n readonly onGoToClosingDay: (tripRef: string) => void;\n readonly components?: { readonly LockedTripScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function LockedTripScreen({\n tripRef,\n intendedAction,\n onGoToClosingDay,\n components,\n style,\n}: LockedTripScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const Override = components?.LockedTripScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-locked-trip-screen\"\n title={t('chrome.systemScreens.lockedTrip.title')}\n banner={\n intendedAction === undefined\n ? t('chrome.systemScreens.lockedTrip.genericAction')\n : t('chrome.systemScreens.lockedTrip.namedAction').replace('{action}', intendedAction)\n }\n body={<p>{t('chrome.systemScreens.lockedTrip.body')}</p>}\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n onClick={() => onGoToClosingDay(tripRef)}\n >\n {t('chrome.systemScreens.lockedTrip.action')}\n </button>\n }\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §NotFoundScreen`.\n//\n// A route-level 404 for a `manager`/`agencyAdmin` mount: a bookmarked\n// `tripRef` from another agency, a deep link to a deleted entity, a stale\n// notification pointing at a now-cross-tenant resource.\n//\n// NOT THE TRAVELLER'S 404, and this is load-bearing rather than an\n// oversight. A dead share token is `ShareEndedScreen`'s `not-found`\n// variant, which must stay 404-shaped — no heading, no divider, no\n// distinguishing DOM signal (hard rule #20, enforced by dx-15). Rendering\n// THIS screen on the share surface would leak that the token was once real.\n// It is therefore never re-exported from `/traveller`.\n//\n// BACKED BY NOTHING, by design. It renders on a 404 that some mounted\n// flow's own hook already surfaced; it performs no second fetch to\n// \"double-check\" what the flow already learned.\n\nimport type { ReactNode } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface NotFoundScreenProps {\n /** The host's own \"back\" navigation. Optional — a host that reached this\n * with no history to return to simply gets no button, which is more\n * honest than one that goes nowhere. */\n readonly onGoBack?: () => void;\n readonly components?: { readonly NotFoundScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function NotFoundScreen({ onGoBack, components, style }: NotFoundScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const Override = components?.NotFoundScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-not-found-screen\"\n title={t('chrome.systemScreens.notFound.title')}\n // Deliberately does not speculate about WHY. \"Deleted, or belongs to\n // another agency, or you mistyped it\" are three different sentences\n // and this screen cannot tell which is true — naming one would be a\n // guess presented as a diagnosis.\n body={<p>{t('chrome.systemScreens.notFound.body')}</p>}\n {...(style !== undefined ? { style } : {})}\n {...(onGoBack !== undefined\n ? {\n actions: (\n <button type=\"button\" className=\"kf-system-screen__primary\" onClick={onGoBack}>\n {t('chrome.systemScreens.notFound.action')}\n </button>\n ),\n }\n : {})}\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §OfflineFallbackScreen`.\n//\n// The device has nothing cached AND no connectivity — a manager opening a\n// trip for the first time at a trailhead before ever syncing, a desk\n// session losing the network before its first pull, a share link opened\n// with zero signal before the first snapshot.\n//\n// THE ONLY ONE OF THE SIX THE TRAVELLER SURFACE SHARES besides\n// `BootErrorScreen`, and it is safe there precisely because it discloses\n// nothing: \"there is no connection\" is true of any URL and leaks nothing\n// about whether this token was ever real. That is what separates it from\n// `ShareEndedScreen`'s dead-token cases, which are about a token's\n// VALIDITY and must stay 404-shaped (hard rule #20).\n//\n// SESSION STATE OUTRANKS THIS. An offline device whose credential has also\n// expired shows `SessionExpiredScreen`, not this — re-authentication is the\n// blocking concern regardless of connectivity, and a caller composing both\n// should check session first.\n\nimport type { ReactNode } from 'react';\nimport { useOutboxStatus } from '../../core/hooks/useOutboxStatus.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface OfflineFallbackScreenProps {\n /** Present on a trip-scoped mount; absent on the share surface. Context\n * only — this screen fetches nothing. */\n readonly tripRef?: string;\n /** Present on a share mount instead of `tripRef`. */\n readonly token?: string;\n /** The host's own retry — typically remounting whatever failed. */\n readonly onRetry?: () => void;\n readonly components?: { readonly OfflineFallbackScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function OfflineFallbackScreen({\n onRetry,\n components,\n style,\n}: OfflineFallbackScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const { isOnline } = useOutboxStatus();\n const Override = components?.OfflineFallbackScreenUI;\n if (Override !== undefined) return <Override />;\n\n return (\n <SystemScreenFrame\n block=\"kf-offline-fallback-screen\"\n title={t('chrome.systemScreens.offlineFallback.title')}\n body={\n <>\n <p>{t('chrome.systemScreens.offlineFallback.body')}</p>\n {/* Connectivity came back while this was on screen. Said rather\n * than acted on: this screen does not refetch or navigate on its\n * own, because whatever failed is the caller's to retry — but\n * leaving a stale \"you are offline\" up while the bars are back is\n * the thing that makes an app feel broken. */}\n {isOnline ? (\n <p data-tone=\"ok\">{t('chrome.systemScreens.offlineFallback.backOnline')}</p>\n ) : null}\n </>\n }\n {...(style !== undefined ? { style } : {})}\n {...(onRetry !== undefined\n ? {\n actions: (\n <button type=\"button\" className=\"kf-system-screen__primary\" onClick={onRetry}>\n {t('chrome.systemScreens.offlineFallback.action')}\n </button>\n ),\n }\n : {})}\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §PlanLockedScreen`.\n//\n// The takeover a STANDALONE route (no surrounding tab bar) renders when its\n// destination module is flag-dark. Admin-only: entitlement is a desk\n// concern, a manager's flows are always mounted inside a tab set where a\n// flag-dark tab renders its own inline view, and the share surface has no\n// upsell copy at all (its flag-dark case is 404-shaped).\n//\n// ── A SPEC FIELD THAT HAS NO WIRE SOURCE ─────────────────────────────────\n//\n// The spec splits the CTA by `details.reason` into `'agency'` (the agency's\n// own plan) vs `'partner-ceiling'` (the partner's tier caps it), so the\n// right person is sent to the right queue. `CapabilityRow` carries no such\n// field — `06-capability-and-personas.md §6` point 2 fixes it as \"four\n// booleans, no `reason` string\", and `capability.types.ts` says so too.\n//\n// So the reason is an OPTIONAL PROP, supplied by whatever the caller saw\n// (a refusal's own `details`), and `onUpgradeRequest` is called with\n// `undefined` when nobody knows. Defaulting it to `'agency'` would have\n// been a guess routed to a real support queue — the host can decide what to\n// do with \"unknown\" far better than this screen can invent an answer.\n\nimport type { ReactNode } from 'react';\nimport { useCapabilities } from '../../core/hooks/useCapabilities.js';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport type PlanLockedReason = 'agency' | 'partner-ceiling';\n\nexport interface PlanLockedScreenProps {\n /** The capability this route was headed for. Read for its own triple\n * only — never exhaustively switched on (`§6` point 5's open-set rule). */\n readonly capabilityKey: string;\n /** The host's own upsell/support flow — Kaafil has no in-product upgrade\n * path to hand off to. `undefined` means the wire did not say which\n * queue this belongs in; see this file's header. */\n readonly onUpgradeRequest: (reason: PlanLockedReason | undefined) => void;\n /** Supplied by the caller when it saw a refusal that named one. */\n readonly reason?: PlanLockedReason;\n readonly components?: { readonly PlanLockedScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function PlanLockedScreen({\n capabilityKey,\n onUpgradeRequest,\n reason,\n components,\n style,\n}: PlanLockedScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const capabilities = useCapabilities([capabilityKey]);\n const Override = components?.PlanLockedScreenUI;\n if (Override !== undefined) return <Override />;\n\n // Read, never re-derived: `status` is resolved once in `/core` and this\n // screen reads it rather than recombining the booleans itself\n // (`06-capability-and-personas.md §6` point 2).\n const status = capabilities.get(capabilityKey)?.status;\n\n return (\n <SystemScreenFrame\n block=\"kf-plan-locked-screen\"\n title={t('chrome.systemScreens.planLocked.title')}\n body={\n <>\n <p>\n {t(\n reason === 'partner-ceiling'\n ? 'chrome.systemScreens.planLocked.bodyPartnerCeiling'\n : 'chrome.systemScreens.planLocked.body',\n )}\n </p>\n {/* A route that reached this screen for a capability that is NOT\n * flag-dark is a caller bug, and saying so beats rendering upsell\n * copy over a module that is merely data-dark or simply lit. */}\n {status === 'flag-dark' ? null : (\n <p data-tone=\"warn\">{t('chrome.systemScreens.planLocked.notFlagDark')}</p>\n )}\n </>\n }\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n onClick={() => onUpgradeRequest(reason)}\n >\n {t('chrome.systemScreens.planLocked.action')}\n </button>\n }\n />\n );\n}\n","'use client';\n\n// `shared/01-system-screens.md §SessionExpiredScreen`.\n//\n// Renders exactly when `useSession().status === 'expired'` — the open\n// credential's silent refresh has exhausted itself. Re-authentication is\n// routed through the HOST's own login; Kaafil has no login page to redirect\n// to, which is why `onReauthenticate` is required and has no default.\n//\n// DOES NOT retry any token call itself. A broken credential means the\n// host's own user is not authenticated and must re-authenticate through the\n// host's own flow — obtaining fresh tokens is `SessionShell`'s concern on\n// the NEXT successful mount, not this screen's on the current broken one.\n//\n// DOES NOT inspect which credential kind expired beyond the resolved\n// persona (`00-decisions.md` U-003 forecloses reading a JWT at any layer\n// above `SessionShell`).\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useKaafilChrome } from '../../core/shells/I18nShell.js';\nimport type { KaafilTokenOverrides } from '../../primitives/internal/tokenStyle.js';\nimport { SystemScreenFrame } from './internal/SystemScreenFrame';\n\nexport interface SessionExpiredScreenProps {\n /** The host's own re-auth entry point. Required: there is no default\n * action, because Kaafil has no login page of its own. */\n readonly onReauthenticate: (returnTo?: string) => void | Promise<void>;\n /** Threaded back to `onReauthenticate` UNEXAMINED. This screen never\n * interprets it, builds a URL from it, or hands it to a router — it\n * exists purely so the host's own flow can restore the right destination\n * afterwards. */\n readonly returnTo?: string;\n readonly components?: { readonly SessionExpiredScreenUI?: () => ReactNode };\n readonly style?: KaafilTokenOverrides;\n}\n\nexport function SessionExpiredScreen({\n onReauthenticate,\n returnTo,\n components,\n style,\n}: SessionExpiredScreenProps): ReactNode {\n const { t } = useKaafilChrome();\n const [pending, setPending] = useState(false);\n // The host's own auth failure reason is not something Kaafil can\n // classify, so the rejection's own message is shown verbatim.\n const [failure, setFailure] = useState<string | undefined>(undefined);\n\n const Override = components?.SessionExpiredScreenUI;\n if (Override !== undefined) return <Override />;\n\n async function reauthenticate(): Promise<void> {\n setPending(true);\n setFailure(undefined);\n try {\n await onReauthenticate(returnTo);\n } catch (error) {\n setFailure(error instanceof Error ? error.message : String(error));\n } finally {\n setPending(false);\n }\n }\n\n return (\n <SystemScreenFrame\n block=\"kf-session-expired-screen\"\n title={t('chrome.systemScreens.sessionExpired.title')}\n body={<p>{t('chrome.systemScreens.sessionExpired.body')}</p>}\n {...(failure !== undefined ? { banner: <span data-tone=\"warn\">{failure}</span> } : {})}\n {...(style !== undefined ? { style } : {})}\n actions={\n <button\n type=\"button\"\n className=\"kf-system-screen__primary\"\n disabled={pending}\n onClick={() => void reauthenticate()}\n >\n {t(\n pending\n ? 'chrome.systemScreens.sessionExpired.busy'\n : 'chrome.systemScreens.sessionExpired.action',\n )}\n </button>\n }\n />\n );\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkUSKVWPJD_cjs = require('./chunk-USKVWPJD.cjs');
|
|
4
|
+
var chunkVHBGE4BY_cjs = require('./chunk-VHBGE4BY.cjs');
|
|
5
|
+
var chunk5ORJRFXZ_cjs = require('./chunk-5ORJRFXZ.cjs');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var client = require('kaafil-js/client');
|
|
8
8
|
var reactDom = require('react-dom');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
10
|
|
|
11
11
|
function useAgencyAdminMe() {
|
|
12
|
-
const client =
|
|
12
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
13
13
|
const [result, setResult] = react.useState({ status: "loading" });
|
|
14
14
|
react.useEffect(() => {
|
|
15
15
|
let cancelled = false;
|
|
@@ -31,7 +31,7 @@ function useAgencyAdminMe() {
|
|
|
31
31
|
return result;
|
|
32
32
|
}
|
|
33
33
|
function useAgencyChecklistTemplates() {
|
|
34
|
-
const client =
|
|
34
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
35
35
|
const [templates, setTemplates] = react.useState([]);
|
|
36
36
|
const [loaded, setLoaded] = react.useState(false);
|
|
37
37
|
const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
|
|
@@ -91,7 +91,7 @@ function useAgencyChecklistTemplates() {
|
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
93
|
function useAgencyForms() {
|
|
94
|
-
const client =
|
|
94
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
95
95
|
const [forms, setForms] = react.useState([]);
|
|
96
96
|
const [loaded, setLoaded] = react.useState(false);
|
|
97
97
|
const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
|
|
@@ -247,7 +247,7 @@ function useAgencyForms() {
|
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
function useAgencyJourneyTriggers() {
|
|
250
|
-
const client =
|
|
250
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
251
251
|
const [triggers, setTriggers] = react.useState([]);
|
|
252
252
|
const [loaded, setLoaded] = react.useState(false);
|
|
253
253
|
const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
|
|
@@ -275,7 +275,7 @@ function useAgencyJourneyTriggers() {
|
|
|
275
275
|
return { triggers, loaded, lastFetchFailed, refresh, patchTrigger };
|
|
276
276
|
}
|
|
277
277
|
function useAgencyManagerProfile(managerRef) {
|
|
278
|
-
const client =
|
|
278
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
279
279
|
const [read, setRead] = react.useState(void 0);
|
|
280
280
|
const [readFailed, setReadFailed] = react.useState(false);
|
|
281
281
|
const refresh = react.useCallback(async () => {
|
|
@@ -293,7 +293,7 @@ function useAgencyManagerProfile(managerRef) {
|
|
|
293
293
|
return { read, readFailed, refresh };
|
|
294
294
|
}
|
|
295
295
|
function useAgencySettings() {
|
|
296
|
-
const client =
|
|
296
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
297
297
|
const [document2, setDocument] = react.useState(void 0);
|
|
298
298
|
const [loaded, setLoaded] = react.useState(false);
|
|
299
299
|
const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
|
|
@@ -321,7 +321,7 @@ function useAgencySettings() {
|
|
|
321
321
|
return { document: document2, loaded, lastFetchFailed, refresh, patchSettings };
|
|
322
322
|
}
|
|
323
323
|
function useAgencyTrip(tripRef) {
|
|
324
|
-
const client =
|
|
324
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
325
325
|
const [read, setRead] = react.useState(void 0);
|
|
326
326
|
const [readFailed, setReadFailed] = react.useState(false);
|
|
327
327
|
const refresh = react.useCallback(async () => {
|
|
@@ -341,7 +341,7 @@ function useAgencyTrip(tripRef) {
|
|
|
341
341
|
var DEFAULT_PAGE_LIMIT = 20;
|
|
342
342
|
var GROUPED_PAGE_LIMIT = 100;
|
|
343
343
|
function useAgencyTripManifest(tripRef) {
|
|
344
|
-
const client =
|
|
344
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
345
345
|
const [facets, setFacets] = react.useState(void 0);
|
|
346
346
|
const mountedRef = react.useRef(true);
|
|
347
347
|
react.useEffect(() => {
|
|
@@ -372,7 +372,7 @@ function useAgencyTripManifest(tripRef) {
|
|
|
372
372
|
}
|
|
373
373
|
var DEFAULT_PAGE_LIMIT2 = 20;
|
|
374
374
|
function useAgencyTrips() {
|
|
375
|
-
const client =
|
|
375
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
376
376
|
const [segmentCounts, setSegmentCounts] = react.useState(
|
|
377
377
|
void 0
|
|
378
378
|
);
|
|
@@ -402,18 +402,18 @@ function useAgencyTrips() {
|
|
|
402
402
|
);
|
|
403
403
|
return { makeTripsFetch, segmentCounts };
|
|
404
404
|
}
|
|
405
|
-
var useBookingsInternal =
|
|
405
|
+
var useBookingsInternal = chunkUSKVWPJD_cjs.createDomainHook("bookings", (tripRef) => {
|
|
406
406
|
const {
|
|
407
407
|
rows: bookings,
|
|
408
408
|
syncedAt,
|
|
409
409
|
refreshLive
|
|
410
|
-
} =
|
|
410
|
+
} = chunkUSKVWPJD_cjs.useSnapshotList(tripRef, "bookings", {
|
|
411
411
|
live: async (liveClient, ref) => {
|
|
412
412
|
const response = await liveClient.bookings.list({ tripRef: ref });
|
|
413
413
|
return { rows: [...response], syncedAt: response.meta.serverTime };
|
|
414
414
|
}
|
|
415
415
|
});
|
|
416
|
-
const vouchersMutation =
|
|
416
|
+
const vouchersMutation = chunk5ORJRFXZ_cjs.useOfflineMutation({
|
|
417
417
|
tripRef,
|
|
418
418
|
enqueue: (engine, input) => engine.enqueue({
|
|
419
419
|
tripRef,
|
|
@@ -450,10 +450,10 @@ function useBookings(tripRef) {
|
|
|
450
450
|
return useBookingsInternal(tripRef);
|
|
451
451
|
}
|
|
452
452
|
function useCapabilityStatuses(tripRef) {
|
|
453
|
-
const { rows, loaded } =
|
|
453
|
+
const { rows, loaded } = chunk5ORJRFXZ_cjs.useCapabilityRows(tripRef);
|
|
454
454
|
const statuses = react.useMemo(() => {
|
|
455
455
|
const map = /* @__PURE__ */ new Map();
|
|
456
|
-
for (const row of rows) map.set(row.capability,
|
|
456
|
+
for (const row of rows) map.set(row.capability, chunk5ORJRFXZ_cjs.deriveCapabilityTriple(row).status);
|
|
457
457
|
return map;
|
|
458
458
|
}, [rows]);
|
|
459
459
|
return { statuses, loaded };
|
|
@@ -471,8 +471,8 @@ var DirectoriesWriteError = class _DirectoriesWriteError extends Error {
|
|
|
471
471
|
}
|
|
472
472
|
};
|
|
473
473
|
function useDirectories(agencyRef) {
|
|
474
|
-
const client =
|
|
475
|
-
|
|
474
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
475
|
+
chunkVHBGE4BY_cjs.useServerTime();
|
|
476
476
|
const makeManagersFetch = react.useCallback(
|
|
477
477
|
(filters) => async (cursor) => {
|
|
478
478
|
const page = await client.agencies.managers.listPage({
|
|
@@ -519,7 +519,7 @@ function useDirectories(agencyRef) {
|
|
|
519
519
|
isLead: input.isLead
|
|
520
520
|
});
|
|
521
521
|
} catch (error) {
|
|
522
|
-
throw new DirectoriesWriteError(
|
|
522
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
523
523
|
}
|
|
524
524
|
},
|
|
525
525
|
[client]
|
|
@@ -534,7 +534,7 @@ function useDirectories(agencyRef) {
|
|
|
534
534
|
...input.isLead === void 0 ? {} : { isLead: input.isLead }
|
|
535
535
|
});
|
|
536
536
|
} catch (error) {
|
|
537
|
-
throw new DirectoriesWriteError(
|
|
537
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
538
538
|
}
|
|
539
539
|
},
|
|
540
540
|
[client]
|
|
@@ -547,7 +547,7 @@ function useDirectories(agencyRef) {
|
|
|
547
547
|
managerRef: input.managerRef
|
|
548
548
|
});
|
|
549
549
|
} catch (error) {
|
|
550
|
-
throw new DirectoriesWriteError(
|
|
550
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
551
551
|
}
|
|
552
552
|
},
|
|
553
553
|
[client]
|
|
@@ -582,7 +582,7 @@ function useDirectories(agencyRef) {
|
|
|
582
582
|
if (error instanceof DirectoriesWriteError) {
|
|
583
583
|
throw error;
|
|
584
584
|
}
|
|
585
|
-
throw new DirectoriesWriteError(
|
|
585
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
586
586
|
}
|
|
587
587
|
},
|
|
588
588
|
[client]
|
|
@@ -598,7 +598,7 @@ function useDirectories(agencyRef) {
|
|
|
598
598
|
externalTravellerId: input.externalTravellerId
|
|
599
599
|
});
|
|
600
600
|
} catch (error) {
|
|
601
|
-
throw new DirectoriesWriteError(
|
|
601
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
602
602
|
}
|
|
603
603
|
},
|
|
604
604
|
[client]
|
|
@@ -611,7 +611,7 @@ function useDirectories(agencyRef) {
|
|
|
611
611
|
travellerRef: input.travellerRef
|
|
612
612
|
});
|
|
613
613
|
} catch (error) {
|
|
614
|
-
throw new DirectoriesWriteError(
|
|
614
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
615
615
|
}
|
|
616
616
|
},
|
|
617
617
|
[client]
|
|
@@ -626,7 +626,7 @@ function useDirectories(agencyRef) {
|
|
|
626
626
|
travellerRefs: [...input.travellerRefs]
|
|
627
627
|
});
|
|
628
628
|
} catch (error) {
|
|
629
|
-
throw new DirectoriesWriteError(
|
|
629
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
630
630
|
}
|
|
631
631
|
},
|
|
632
632
|
[client]
|
|
@@ -643,7 +643,7 @@ function useDirectories(agencyRef) {
|
|
|
643
643
|
...input.travellerRefs !== void 0 ? { travellerRefs: [...input.travellerRefs] } : {}
|
|
644
644
|
});
|
|
645
645
|
} catch (error) {
|
|
646
|
-
throw new DirectoriesWriteError(
|
|
646
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
647
647
|
}
|
|
648
648
|
},
|
|
649
649
|
[client]
|
|
@@ -653,7 +653,7 @@ function useDirectories(agencyRef) {
|
|
|
653
653
|
try {
|
|
654
654
|
await client.trips.parties.remove({ tripRef: input.tripRef, partyId: input.partyId });
|
|
655
655
|
} catch (error) {
|
|
656
|
-
throw new DirectoriesWriteError(
|
|
656
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
657
657
|
}
|
|
658
658
|
},
|
|
659
659
|
[client]
|
|
@@ -667,7 +667,7 @@ function useDirectories(agencyRef) {
|
|
|
667
667
|
body: input.body
|
|
668
668
|
});
|
|
669
669
|
} catch (error) {
|
|
670
|
-
throw new DirectoriesWriteError(
|
|
670
|
+
throw new DirectoriesWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
671
671
|
}
|
|
672
672
|
},
|
|
673
673
|
[client]
|
|
@@ -714,7 +714,7 @@ function usePaginatedList(fetch, options) {
|
|
|
714
714
|
setPageIndex(index);
|
|
715
715
|
setError(void 0);
|
|
716
716
|
} catch (caught) {
|
|
717
|
-
setError(
|
|
717
|
+
setError(chunkUSKVWPJD_cjs.classifyError(caught));
|
|
718
718
|
setHasNext(false);
|
|
719
719
|
} finally {
|
|
720
720
|
setSettled(true);
|
|
@@ -773,7 +773,7 @@ var ShareLinkWriteError = class extends Error {
|
|
|
773
773
|
}
|
|
774
774
|
};
|
|
775
775
|
function useShareLinks(tripRef, travellerRef) {
|
|
776
|
-
const client =
|
|
776
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
777
777
|
const [links, setLinks] = react.useState(void 0);
|
|
778
778
|
const [readFailed, setReadFailed] = react.useState(false);
|
|
779
779
|
const refresh = react.useCallback(async () => {
|
|
@@ -804,7 +804,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
804
804
|
await refresh();
|
|
805
805
|
return minted;
|
|
806
806
|
} catch (error) {
|
|
807
|
-
throw new ShareLinkWriteError(
|
|
807
|
+
throw new ShareLinkWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
808
808
|
}
|
|
809
809
|
},
|
|
810
810
|
[client, tripRef, refresh]
|
|
@@ -815,7 +815,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
815
815
|
await client.shareTokens.revoke({ id });
|
|
816
816
|
await refresh();
|
|
817
817
|
} catch (error) {
|
|
818
|
-
throw new ShareLinkWriteError(
|
|
818
|
+
throw new ShareLinkWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
819
819
|
}
|
|
820
820
|
},
|
|
821
821
|
[client, refresh]
|
|
@@ -831,7 +831,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
831
831
|
});
|
|
832
832
|
await refresh();
|
|
833
833
|
} catch (error) {
|
|
834
|
-
throw new ShareLinkWriteError(
|
|
834
|
+
throw new ShareLinkWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
835
835
|
}
|
|
836
836
|
},
|
|
837
837
|
[client, refresh]
|
|
@@ -843,7 +843,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
843
843
|
await refresh();
|
|
844
844
|
return minted;
|
|
845
845
|
} catch (error) {
|
|
846
|
-
throw new ShareLinkWriteError(
|
|
846
|
+
throw new ShareLinkWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
847
847
|
}
|
|
848
848
|
},
|
|
849
849
|
[client, refresh]
|
|
@@ -854,7 +854,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
854
854
|
const response = await client.shareTokens.reveal({ id });
|
|
855
855
|
return response.token;
|
|
856
856
|
} catch (error) {
|
|
857
|
-
throw new ShareLinkWriteError(
|
|
857
|
+
throw new ShareLinkWriteError(chunkUSKVWPJD_cjs.classifyError(error));
|
|
858
858
|
}
|
|
859
859
|
},
|
|
860
860
|
[client]
|
|
@@ -862,7 +862,7 @@ function useShareLinks(tripRef, travellerRef) {
|
|
|
862
862
|
return { links, readFailed, refresh, mint, revoke, patch, regenerate, reveal };
|
|
863
863
|
}
|
|
864
864
|
function useTravellerFormResponses(tripRef, travellerRef) {
|
|
865
|
-
const client =
|
|
865
|
+
const client = chunk5ORJRFXZ_cjs.useKaafilClient();
|
|
866
866
|
const [responses, setResponses] = react.useState(
|
|
867
867
|
void 0
|
|
868
868
|
);
|
|
@@ -917,7 +917,7 @@ function ShadowIsolationBoundary({
|
|
|
917
917
|
}
|
|
918
918
|
function useDeskMinimumWidthWarning(rootRef, frame) {
|
|
919
919
|
react.useEffect(() => {
|
|
920
|
-
if (frame !== "desk" || !
|
|
920
|
+
if (frame !== "desk" || !chunk5ORJRFXZ_cjs.isDevelopment() || typeof ResizeObserver === "undefined") {
|
|
921
921
|
return;
|
|
922
922
|
}
|
|
923
923
|
const node = rootRef.current;
|
|
@@ -943,7 +943,7 @@ function useDeskMinimumWidthWarning(rootRef, frame) {
|
|
|
943
943
|
}
|
|
944
944
|
function useUnfilledConnectivitySlotWarning(frame, connectivitySlot) {
|
|
945
945
|
react.useEffect(() => {
|
|
946
|
-
if (frame === "field" && connectivitySlot === void 0 &&
|
|
946
|
+
if (frame === "field" && connectivitySlot === void 0 && chunk5ORJRFXZ_cjs.isDevelopment()) {
|
|
947
947
|
console.warn(
|
|
948
948
|
`kaafil-react-uikit: AppShell's "field" frame has no connectivitySlot filled \u2014 the permanently-visible connectivity/sync region this frame reserves is empty (01-app-shell.md, briefing \xA727.2).`
|
|
949
949
|
);
|
|
@@ -992,7 +992,7 @@ function AppShell({
|
|
|
992
992
|
className: "kf-root",
|
|
993
993
|
"data-kf-isolation": "shadow",
|
|
994
994
|
...dataAttributes,
|
|
995
|
-
style:
|
|
995
|
+
style: chunk5ORJRFXZ_cjs.tokenStyle(style),
|
|
996
996
|
children: /* @__PURE__ */ jsxRuntime.jsx(ShadowIsolationBoundary, { className: "kf-app-shell__shadow-host", children: content })
|
|
997
997
|
}
|
|
998
998
|
);
|
|
@@ -1004,7 +1004,7 @@ function AppShell({
|
|
|
1004
1004
|
className: "kf-root",
|
|
1005
1005
|
"data-kf-isolation": "scoped",
|
|
1006
1006
|
...dataAttributes,
|
|
1007
|
-
style:
|
|
1007
|
+
style: chunk5ORJRFXZ_cjs.tokenStyle(style),
|
|
1008
1008
|
children: content
|
|
1009
1009
|
}
|
|
1010
1010
|
);
|
|
@@ -1023,10 +1023,10 @@ function ConfigShell({ seedConfig = {}, children }) {
|
|
|
1023
1023
|
}),
|
|
1024
1024
|
[seedConfig.agency, seedConfig.tenant]
|
|
1025
1025
|
);
|
|
1026
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1026
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunk5ORJRFXZ_cjs.ConfigContext.Provider, { value, children });
|
|
1027
1027
|
}
|
|
1028
1028
|
function classifyForFallback(error) {
|
|
1029
|
-
const classification =
|
|
1029
|
+
const classification = chunkUSKVWPJD_cjs.classifyError(error);
|
|
1030
1030
|
if (classification.code === "RESOURCE_NOT_FOUND") {
|
|
1031
1031
|
return { classification: "isolation", code: classification.code };
|
|
1032
1032
|
}
|
|
@@ -1083,9 +1083,9 @@ function OfflineShell({
|
|
|
1083
1083
|
scope,
|
|
1084
1084
|
children
|
|
1085
1085
|
}) {
|
|
1086
|
-
const client = react.useContext(
|
|
1087
|
-
const persona =
|
|
1088
|
-
const session =
|
|
1086
|
+
const client = react.useContext(chunk5ORJRFXZ_cjs.KaafilClientContext);
|
|
1087
|
+
const persona = chunk5ORJRFXZ_cjs.usePersona();
|
|
1088
|
+
const session = chunk5ORJRFXZ_cjs.useSession();
|
|
1089
1089
|
const reportExpired = react.useContext(SessionExpiryBridgeContext);
|
|
1090
1090
|
const [engine, setEngine] = react.useState(null);
|
|
1091
1091
|
const engineRef = react.useRef(null);
|
|
@@ -1135,7 +1135,7 @@ function OfflineShell({
|
|
|
1135
1135
|
}
|
|
1136
1136
|
};
|
|
1137
1137
|
}, [client, derivedScope, session.status, persona, reportExpired]);
|
|
1138
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1138
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunk5ORJRFXZ_cjs.OfflineEngineContext.Provider, { value: engine, children });
|
|
1139
1139
|
}
|
|
1140
1140
|
|
|
1141
1141
|
// src/core/shells/internal/jwtKind.ts
|
|
@@ -1256,14 +1256,14 @@ function SessionShell(props) {
|
|
|
1256
1256
|
if (state === null) {
|
|
1257
1257
|
const openingPersona = shareTokenDep !== void 0 ? "share" : "manager";
|
|
1258
1258
|
return /* @__PURE__ */ jsxRuntime.jsx(SessionExpiryBridgeContext.Provider, { value: reportExpired, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1259
|
-
|
|
1259
|
+
chunk5ORJRFXZ_cjs.SessionContext.Provider,
|
|
1260
1260
|
{
|
|
1261
1261
|
value: { status: "opening", persona: openingPersona, agencyRef: void 0, environment },
|
|
1262
1262
|
children
|
|
1263
1263
|
}
|
|
1264
1264
|
) });
|
|
1265
1265
|
}
|
|
1266
|
-
return /* @__PURE__ */ jsxRuntime.jsx(SessionExpiryBridgeContext.Provider, { value: reportExpired, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1266
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SessionExpiryBridgeContext.Provider, { value: reportExpired, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5ORJRFXZ_cjs.KaafilClientContext.Provider, { value: state.client, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5ORJRFXZ_cjs.SessionContext.Provider, { value: state.session, children }) }) });
|
|
1267
1267
|
}
|
|
1268
1268
|
function emit(onEvent, event) {
|
|
1269
1269
|
if (onEvent === void 0) {
|
|
@@ -1275,8 +1275,8 @@ function emit(onEvent, event) {
|
|
|
1275
1275
|
}
|
|
1276
1276
|
}
|
|
1277
1277
|
function TelemetryShell({ onEvent, children }) {
|
|
1278
|
-
const session =
|
|
1279
|
-
const serverTime =
|
|
1278
|
+
const session = chunk5ORJRFXZ_cjs.useSession();
|
|
1279
|
+
const serverTime = chunkVHBGE4BY_cjs.useServerTime();
|
|
1280
1280
|
const previousStatusRef = react.useRef(void 0);
|
|
1281
1281
|
react.useEffect(() => {
|
|
1282
1282
|
const previousStatus = previousStatusRef.current;
|
|
@@ -1355,7 +1355,7 @@ function KaafilUIKitProvider(props) {
|
|
|
1355
1355
|
...credential
|
|
1356
1356
|
} = props;
|
|
1357
1357
|
const inner = /* @__PURE__ */ jsxRuntime.jsx(BuildShareUrlContext.Provider, { value: buildShareUrl ?? null, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultCapabilityViewsContext.Provider, { value: defaultCapabilityViews ?? {}, children: /* @__PURE__ */ jsxRuntime.jsx(ConfigShell, { seedConfig, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1358
|
-
|
|
1358
|
+
chunk5ORJRFXZ_cjs.BrandShell,
|
|
1359
1359
|
{
|
|
1360
1360
|
appName: brand?.appName,
|
|
1361
1361
|
logo: brand?.logo,
|
|
@@ -1365,7 +1365,7 @@ function KaafilUIKitProvider(props) {
|
|
|
1365
1365
|
children: /* @__PURE__ */ jsxRuntime.jsx(TelemetryShell, { onEvent, children })
|
|
1366
1366
|
}
|
|
1367
1367
|
) }) }) });
|
|
1368
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ErrorShell, { children: /* @__PURE__ */ jsxRuntime.jsx(ThemeShell, { theme, density, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1368
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ErrorShell, { children: /* @__PURE__ */ jsxRuntime.jsx(ThemeShell, { theme, density, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5ORJRFXZ_cjs.I18nShell, { locale, children: /* @__PURE__ */ jsxRuntime.jsx(AppShell, { isolation, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1369
1369
|
SessionShell,
|
|
1370
1370
|
{
|
|
1371
1371
|
...credential,
|
|
@@ -1497,5 +1497,5 @@ exports.useDirectories = useDirectories;
|
|
|
1497
1497
|
exports.usePaginatedList = usePaginatedList;
|
|
1498
1498
|
exports.useShareLinks = useShareLinks;
|
|
1499
1499
|
exports.useTravellerFormResponses = useTravellerFormResponses;
|
|
1500
|
-
//# sourceMappingURL=chunk-
|
|
1501
|
-
//# sourceMappingURL=chunk-
|
|
1500
|
+
//# sourceMappingURL=chunk-ODH3SYYW.cjs.map
|
|
1501
|
+
//# sourceMappingURL=chunk-ODH3SYYW.cjs.map
|