@proveanything/smartlinks-utils-ui 1.13.11 → 1.13.14

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AdminPageHeader/AdminPageHeader.tsx","../src/hints/useHintsPreference.ts","../src/hints/useIntroState.ts","../src/utils/ErrorBoundary.tsx"],"names":["useState","useEffect","useCallback","jsx","jsxs"],"mappings":"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","file":"chunk-XASZS7EA.js","sourcesContent":["// =============================================================================\r\n// AdminPageHeader\r\n//\r\n// A standardised page header for any SmartLinks admin surface. Designed to be\r\n// used standalone (lightweight apps that don't need the full RecordsAdminShell)\r\n// or composed inside other shells. Supports:\r\n//\r\n// • Inline icon + title + full-width subtitle\r\n// • Right-aligned slot for app-specific actions (e.g. \"+ New\" button)\r\n// • External help link (icon-button that opens docs in a new tab)\r\n// • Optional dismissible intro card with `?` reopen affordance\r\n// • Optional `aside` slot for extra header content (stats strips, etc.)\r\n//\r\n// Styling is self-contained under `.sl-aph` and reuses the shared `--ra-*`\r\n// design tokens with sensible fallbacks, so it themes correctly whether the\r\n// host has loaded the records-admin token sheet or not.\r\n// =============================================================================\r\nimport { type ReactNode, useId } from 'react';\r\nimport { BookOpen, HelpCircle, X, Lightbulb, CheckCircle2, AlertTriangle, Info } from 'lucide-react';\r\nimport './admin-page-header.css';\r\n\r\nexport type AdminPageHeaderIntroTone = 'info' | 'success' | 'warning';\r\n\r\nexport interface AdminPageHeaderIntro {\r\n /** Short headline shown in bold at the start of the intro card. */\r\n title: string;\r\n /** Body content — plain text or rich nodes. */\r\n body: ReactNode;\r\n /** Visual tone — controls icon and surface tint. Default `'info'`. */\r\n tone?: AdminPageHeaderIntroTone;\r\n /** Optional action node rendered inline after the body (e.g. a Learn-more link). */\r\n action?: ReactNode;\r\n /** Whether the intro is currently dismissed. Controlled. */\r\n dismissed: boolean;\r\n /** Called when the user clicks the dismiss `X`. */\r\n onDismiss: () => void;\r\n /**\r\n * Called when the user clicks the reopen `?` button (only rendered when\r\n * dismissed is true). Omit to hide the reopen affordance entirely.\r\n */\r\n onReopen?: () => void;\r\n /** Tooltip / aria-label for the reopen button. Default \"How it works\". */\r\n reopenLabel?: string;\r\n}\r\n\r\nexport interface AdminPageHeaderProps {\r\n /** Page title — required. */\r\n title: string;\r\n /** Single-line muted subtitle under the title. */\r\n subtitle?: string;\r\n /** Icon rendered inline before the title. Pass a Lucide element or any node. */\r\n icon?: ReactNode;\r\n /**\r\n * External help / documentation URL. When set, renders a small icon-button\r\n * that opens the URL in a new tab. Use this to point at app-specific docs.\r\n */\r\n helpUrl?: string;\r\n /** Tooltip / aria-label for the help link. Default \"Help & documentation\". */\r\n helpLabel?: string;\r\n /**\r\n * Right-aligned action slot — typically a primary \"+ New\" button and/or\r\n * secondary controls. Rendered before the help / intro-reopen icon-buttons.\r\n */\r\n actions?: ReactNode;\r\n /**\r\n * Extra header content rendered between `actions` and the trailing\r\n * help / reopen icon-buttons. Used by RecordsAdminShell for its stats strip;\r\n * standalone apps rarely need it.\r\n */\r\n aside?: ReactNode;\r\n /**\r\n * Optional dismissible intro card rendered below the header row.\r\n * See {@link AdminPageHeaderIntro}.\r\n */\r\n intro?: AdminPageHeaderIntro;\r\n /** Extra class on the root container for layout overrides. */\r\n className?: string;\r\n}\r\n\r\nconst TONE_ICON = {\r\n info: Lightbulb,\r\n success: CheckCircle2,\r\n warning: AlertTriangle,\r\n} as const;\r\n\r\nexport function AdminPageHeader({\r\n title, subtitle, icon, helpUrl, helpLabel,\r\n actions, aside, intro, className,\r\n}: AdminPageHeaderProps) {\r\n const titleId = useId();\r\n const resolvedHelpLabel = helpLabel ?? 'Help & documentation';\r\n const resolvedReopenLabel = intro?.reopenLabel ?? 'How it works';\r\n const showReopen = !!intro && intro.dismissed && !!intro.onReopen;\r\n const showIntro = !!intro && !intro.dismissed;\r\n\r\n return (\r\n <header className={`sl-aph${className ? ` ${className}` : ''}`} aria-labelledby={titleId}>\r\n <div className=\"sl-aph__row\">\r\n <div className=\"sl-aph__main\">\r\n <div className=\"sl-aph__text\">\r\n <h1 className=\"sl-aph__title\" id={titleId}>\r\n {icon ? (\r\n <span className=\"sl-aph__icon\" aria-hidden=\"true\">{icon}</span>\r\n ) : null}\r\n <span>{title}</span>\r\n </h1>\r\n {subtitle ? <p className=\"sl-aph__subtitle\">{subtitle}</p> : null}\r\n </div>\r\n </div>\r\n {(actions || aside || helpUrl || showReopen) ? (\r\n <div className=\"sl-aph__aside\">\r\n {actions}\r\n {aside}\r\n {helpUrl ? (\r\n <a\r\n href={helpUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"sl-aph__icon-btn\"\r\n aria-label={resolvedHelpLabel}\r\n title={resolvedHelpLabel}\r\n >\r\n <BookOpen aria-hidden=\"true\" />\r\n </a>\r\n ) : null}\r\n {showReopen ? (\r\n <button\r\n type=\"button\"\r\n onClick={intro!.onReopen}\r\n className=\"sl-aph__icon-btn\"\r\n aria-label={resolvedReopenLabel}\r\n title={resolvedReopenLabel}\r\n >\r\n <HelpCircle aria-hidden=\"true\" />\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n </div>\r\n {showIntro ? <AdminPageHeaderIntroCard intro={intro!} /> : null}\r\n </header>\r\n );\r\n}\r\n\r\nfunction AdminPageHeaderIntroCard({ intro }: { intro: AdminPageHeaderIntro }) {\r\n const tone = intro.tone ?? 'info';\r\n const Icon = TONE_ICON[tone] ?? Info;\r\n return (\r\n <div className=\"sl-aph__intro\" data-tone={tone} role=\"note\">\r\n <div className=\"sl-aph__intro-icon\">\r\n <Icon aria-hidden=\"true\" style={{ width: '0.95rem', height: '0.95rem' }} />\r\n </div>\r\n <div className=\"sl-aph__intro-body\">\r\n <h4 className=\"sl-aph__intro-title\">{intro.title}</h4>\r\n <span className=\"sl-aph__intro-text\">{intro.body}</span>\r\n {intro.action ? <span className=\"sl-aph__intro-action\">{intro.action}</span> : null}\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={intro.onDismiss}\r\n aria-label=\"Dismiss\"\r\n className=\"sl-aph__intro-dismiss\"\r\n >\r\n <X aria-hidden=\"true\" style={{ width: '0.875rem', height: '0.875rem' }} />\r\n </button>\r\n </div>\r\n );\r\n}","// =============================================================================\r\n// useHintsPreference\r\n//\r\n// Single source of truth for the user-level \"show inline hints?\" preference.\r\n// Reads from `SL.auth.getAccount().prefs` (the canonical account-level prefs\r\n// bag added in SmartLinks SDK 1.11.5+) so the same flag follows the user\r\n// across every SmartLinks admin app — flip it once, applies everywhere.\r\n// There is intentionally no per-app preference list; that's what\r\n// `useIntroState` (browser-level dismiss) is for.\r\n//\r\n// Writes still flow through `SL.userAppData('prefs')` because the SDK does\r\n// not yet expose a dedicated `auth.setPrefs(...)`. The server treats the\r\n// `prefs` userAppData document as the backing store for `account.prefs`,\r\n// so reads and writes stay in sync.\r\n//\r\n// Shape on `account.prefs`:\r\n// { showHints?: boolean, ...other future flags }\r\n//\r\n// Default when unset / unauthenticated / SDK missing → `true` (show hints).\r\n// =============================================================================\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nexport const HINTS_PREFS_APP_ID = 'prefs';\r\nexport const HINTS_PREFS_KEY = 'showHints';\r\n\r\n/** Optional cross-tab cache so multiple components share one fetch per session. */\r\nlet cachedShowHints: boolean | undefined;\r\nlet inflight: Promise<boolean> | null = null;\r\n\r\nasync function readShowHints(SL: any): Promise<boolean> {\r\n if (cachedShowHints !== undefined) return cachedShowHints;\r\n if (inflight) return inflight;\r\n inflight = (async () => {\r\n try {\r\n // Read from the authenticated account's prefs bag. `prefs` may be\r\n // absent (server returned no document) — that's fine, we fall back\r\n // to the default below.\r\n const account = await SL?.auth?.getAccount?.();\r\n const value = account?.prefs?.[HINTS_PREFS_KEY];\r\n const resolved = typeof value === 'boolean' ? value : true;\r\n cachedShowHints = resolved;\r\n return resolved;\r\n } catch {\r\n cachedShowHints = true;\r\n return true;\r\n } finally {\r\n inflight = null;\r\n }\r\n })();\r\n return inflight;\r\n}\r\n\r\nasync function writeShowHints(SL: any, next: boolean): Promise<void> {\r\n cachedShowHints = next;\r\n try {\r\n // No dedicated `auth.setPrefs` setter exists yet — write through\r\n // userAppData('prefs'), which the server uses as the backing store\r\n // for `account.prefs`.\r\n const cfg = await SL?.userAppData?.getConfig?.(HINTS_PREFS_APP_ID).catch(() => ({}));\r\n await SL?.userAppData?.setConfig?.(HINTS_PREFS_APP_ID, {\r\n ...(cfg ?? {}),\r\n [HINTS_PREFS_KEY]: next,\r\n });\r\n } catch { /* best-effort */ }\r\n}\r\n\r\nexport interface UseHintsPreferenceResult {\r\n /** Whether inline hints / intro cards should be shown by default. */\r\n showHints: boolean;\r\n /** True until the first read from `userAppData` resolves. */\r\n isLoading: boolean;\r\n /** Persist a new value on the user record. */\r\n setShowHints: (next: boolean) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Subscribe to the user's global `showHints` preference. Optimistic; defaults\r\n * to `true` while loading so admins coming in fresh always see the help.\r\n */\r\nexport function useHintsPreference(SL: any): UseHintsPreferenceResult {\r\n // NB: do NOT lazy-init from a module-level cache — Vite HMR reloads this\r\n // module while React keeps the old hook queue, which trips\r\n // \"Should have a queue. This is likely a bug in React.\". Always init to\r\n // the same shape and rely on the effect below to hydrate.\r\n const [showHints, setShowHintsState] = useState<boolean>(true);\r\n const [isLoading, setIsLoading] = useState<boolean>(true);\r\n const mounted = useRef(true);\r\n\r\n useEffect(() => {\r\n mounted.current = true;\r\n if (cachedShowHints !== undefined) {\r\n setShowHintsState(cachedShowHints);\r\n setIsLoading(false);\r\n return () => { mounted.current = false; };\r\n }\r\n readShowHints(SL).then((value) => {\r\n if (!mounted.current) return;\r\n setShowHintsState(value);\r\n setIsLoading(false);\r\n });\r\n return () => { mounted.current = false; };\r\n }, [SL]);\r\n\r\n const setShowHints = useCallback(async (next: boolean) => {\r\n setShowHintsState(next);\r\n await writeShowHints(SL, next);\r\n }, [SL]);\r\n\r\n return { showHints, isLoading, setShowHints };\r\n}\r\n\r\n/** Test / sign-out helper — drop the in-memory cache. */\r\nexport function __resetHintsPreferenceCache() {\r\n cachedShowHints = undefined;\r\n inflight = null;\r\n}\r\n","// =============================================================================\r\n// useIntroState\r\n//\r\n// One hook that resolves the full intro-card state for an `<AdminPageHeader>`:\r\n//\r\n// 1. Global user preference (`prefs.showHints` on `userAppData`)\r\n// → if `false`, the intro stays collapsed by default. The `?` reopen\r\n// button is still rendered so the user can pop it open whenever.\r\n// 2. Per-browser, per-app temporary dismiss (`localStorage`)\r\n// → flipped by the dismiss `X`, so reloads on this browser keep it\r\n// collapsed until they click `?`.\r\n//\r\n// Apps just call:\r\n// const intro = useIntroState({ SL, persistKey: appId });\r\n// <AdminPageHeader intro={{ title, body, ...intro }} />\r\n// =============================================================================\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useHintsPreference } from './useHintsPreference';\r\n\r\nconst lsKey = (persistKey: string) => `sl:intro-dismissed:${persistKey}`;\r\n\r\nexport interface UseIntroStateArgs {\r\n /** SmartLinks SDK namespace (`* as SL from '@proveanything/smartlinks'`). */\r\n SL: any;\r\n /**\r\n * Stable per-app key used for the browser-level dismiss. Usually the\r\n * app's `appId`. Pass a more specific value (e.g. `${appId}:rules`) if\r\n * you have multiple intros within one app.\r\n */\r\n persistKey: string;\r\n}\r\n\r\nexport interface UseIntroStateResult {\r\n /** Whether the intro card is currently dismissed/collapsed. */\r\n dismissed: boolean;\r\n /** Wire to AdminPageHeader's `intro.onDismiss`. */\r\n onDismiss: () => void;\r\n /** Wire to AdminPageHeader's `intro.onReopen`. Always available. */\r\n onReopen: () => void;\r\n /** True until the user preference has finished loading. */\r\n isLoading: boolean;\r\n}\r\n\r\nfunction readBrowserDismissed(persistKey: string): boolean {\r\n try { return localStorage.getItem(lsKey(persistKey)) === '1'; }\r\n catch { return false; }\r\n}\r\n\r\n/** Resolve dismiss state from global pref + per-browser flag. */\r\nexport function useIntroState({ SL, persistKey }: UseIntroStateArgs): UseIntroStateResult {\r\n const { showHints, isLoading } = useHintsPreference(SL);\r\n const [browserDismissed, setBrowserDismissed] = useState<boolean>(() => readBrowserDismissed(persistKey));\r\n\r\n // Re-read browser flag if the key changes (rare, but cheap).\r\n useEffect(() => {\r\n setBrowserDismissed(readBrowserDismissed(persistKey));\r\n }, [persistKey]);\r\n\r\n const onDismiss = useCallback(() => {\r\n setBrowserDismissed(true);\r\n try { localStorage.setItem(lsKey(persistKey), '1'); } catch { /* ignore */ }\r\n }, [persistKey]);\r\n\r\n const onReopen = useCallback(() => {\r\n setBrowserDismissed(false);\r\n try { localStorage.removeItem(lsKey(persistKey)); } catch { /* ignore */ }\r\n }, [persistKey]);\r\n\r\n // Dismissed when either: user opted out of hints globally, or they X'd it\r\n // on this browser. Reopening always works (it just clears the browser flag\r\n // for this session — global pref stays as-is).\r\n const dismissed = !showHints || browserDismissed;\r\n\r\n return { dismissed, onDismiss, onReopen, isLoading };\r\n}\r\n","// =============================================================================\r\n// ErrorBoundary — generic render-time crash guard.\r\n//\r\n// Purpose\r\n// -------\r\n// Host apps wired into the records-admin shell render arbitrary editor,\r\n// card, row, and preview content. A bad record, a missing field, or a\r\n// thrown exception in any of those host-supplied renderers used to take\r\n// down the entire admin app with a white screen. This boundary contains\r\n// the blast radius to the affected slot and shows a friendly \"couldn't\r\n// render\" panel with a Retry button.\r\n//\r\n// Notes\r\n// -----\r\n// * Implemented as a class (the only API React exposes for error\r\n// boundaries). Functional components cannot replace this.\r\n// * `resetKeys` mirrors react-error-boundary's API — when any key in the\r\n// array changes between renders, the boundary clears its error and\r\n// re-renders children. Use it to auto-recover when the user navigates\r\n// to a different record.\r\n// * `fallback` may be a React node or a render function receiving the\r\n// error + a `reset` callback. Defaults to a small themed card that\r\n// matches the records-admin `.ra-empty` aesthetic but degrades\r\n// gracefully when those tokens aren't loaded.\r\n// =============================================================================\r\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\r\n\r\nexport interface ErrorBoundaryProps {\r\n children: ReactNode;\r\n /**\r\n * Optional label used in the default fallback message — e.g.\r\n * `label=\"editor\"` renders \"This editor couldn't be rendered.\"\r\n */\r\n label?: string;\r\n /**\r\n * Custom fallback. Either a node or a render function. When using the\r\n * function form, call `reset()` to clear the error and remount children.\r\n */\r\n fallback?: ReactNode | ((info: { error: Error; reset: () => void }) => ReactNode);\r\n /**\r\n * Fires when the boundary catches. Use to forward to telemetry.\r\n */\r\n onError?: (error: Error, info: ErrorInfo) => void;\r\n /**\r\n * When any value in this array changes (shallow compare), the boundary\r\n * clears its error state. Use to auto-recover on navigation.\r\n */\r\n resetKeys?: ReadonlyArray<unknown>;\r\n}\r\n\r\ninterface State {\r\n error: Error | null;\r\n}\r\n\r\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, State> {\r\n state: State = { error: null };\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { error };\r\n }\r\n\r\n componentDidCatch(error: Error, info: ErrorInfo): void {\r\n // Always log — silent failures in admin tooling are worse than noisy\r\n // ones. Hosts can mute via `onError` if they want.\r\n // eslint-disable-next-line no-console\r\n console.error(\r\n `[smartlinks-ui] ErrorBoundary${this.props.label ? ` (${this.props.label})` : ''} caught:`,\r\n error,\r\n info?.componentStack,\r\n );\r\n this.props.onError?.(error, info);\r\n }\r\n\r\n componentDidUpdate(prev: ErrorBoundaryProps): void {\r\n if (!this.state.error) return;\r\n const cur = this.props.resetKeys;\r\n const old = prev.resetKeys;\r\n if (!cur || !old) return;\r\n if (cur.length !== old.length) {\r\n this.reset();\r\n return;\r\n }\r\n for (let i = 0; i < cur.length; i++) {\r\n if (!Object.is(cur[i], old[i])) {\r\n this.reset();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n reset = (): void => {\r\n this.setState({ error: null });\r\n };\r\n\r\n render(): ReactNode {\r\n const { error } = this.state;\r\n if (!error) return this.props.children;\r\n const { fallback, label } = this.props;\r\n if (typeof fallback === 'function') {\r\n return fallback({ error, reset: this.reset });\r\n }\r\n if (fallback !== undefined) return fallback;\r\n return <DefaultFallback error={error} reset={this.reset} label={label} />;\r\n }\r\n}\r\n\r\ninterface DefaultFallbackProps {\r\n error: Error;\r\n reset: () => void;\r\n label?: string;\r\n}\r\n\r\nconst DefaultFallback = ({ error, reset, label }: DefaultFallbackProps) => {\r\n const what = label ? `This ${label}` : 'This view';\r\n return (\r\n <div\r\n role=\"alert\"\r\n className=\"ra-empty\"\r\n style={{\r\n margin: 12,\r\n padding: 16,\r\n border: '1px solid hsl(var(--ra-border, 0 0% 90%))',\r\n borderRadius: 8,\r\n background: 'hsl(var(--ra-surface, 0 0% 100%))',\r\n color: 'hsl(var(--ra-text, 0 0% 10%))',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: 8,\r\n textAlign: 'center',\r\n }}\r\n >\r\n <div\r\n className=\"ra-empty-icon\"\r\n style={{\r\n width: 36, height: 36, borderRadius: 9999,\r\n background: 'hsl(var(--ra-danger, 0 70% 50%) / 0.10)',\r\n color: 'hsl(var(--ra-danger, 0 70% 50%))',\r\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\r\n fontWeight: 700, fontSize: 18,\r\n }}\r\n aria-hidden=\"true\"\r\n >\r\n !\r\n </div>\r\n <h3 className=\"ra-empty-title\" style={{ margin: 0, fontSize: 14, fontWeight: 600 }}>\r\n {what} couldn't be rendered\r\n </h3>\r\n <p\r\n className=\"ra-empty-body\"\r\n style={{\r\n margin: 0,\r\n fontSize: 12,\r\n color: 'hsl(var(--ra-muted-text, 0 0% 40%))',\r\n maxWidth: 520,\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error?.message || 'An unexpected error occurred while rendering this view.'}\r\n </p>\r\n <button\r\n type=\"button\"\r\n onClick={reset}\r\n className=\"ra-btn\"\r\n style={{\r\n marginTop: 4,\r\n padding: '4px 10px',\r\n fontSize: 12,\r\n borderRadius: 6,\r\n border: '1px solid hsl(var(--ra-border, 0 0% 80%))',\r\n background: 'hsl(var(--ra-surface, 0 0% 100%))',\r\n cursor: 'pointer',\r\n }}\r\n >\r\n Try again\r\n </button>\r\n </div>\r\n );\r\n};"]}
@@ -1,4 +1,4 @@
1
- export { AssetPicker, useAppRegistry, useAssets } from '../../chunk-7RWLFKHC.js';
1
+ export { AssetPicker, useAppRegistry, useAssets } from '../../chunk-I3T36FSI.js';
2
2
  import '../../chunk-OLYC54YT.js';
3
3
  import '../../chunk-5UQQYXCX.js';
4
4
  import '../../chunk-L7FQ52F5.js';
@@ -1,4 +1,4 @@
1
- export { ConditionsEditor } from '../../chunk-A4YZYKWT.js';
1
+ export { ConditionsEditor } from '../../chunk-JNCRSL2H.js';
2
2
  import '../../chunk-DH5HG5DW.js';
3
3
  import '../../chunk-5UQQYXCX.js';
4
4
  import '../../chunk-L7FQ52F5.js';
@@ -6,6 +6,7 @@ import { LucideIcon } from 'lucide-react';
6
6
  import * as _tanstack_query_core from '@tanstack/query-core';
7
7
  import * as _proveanything_smartlinks from '@proveanything/smartlinks';
8
8
  import { InfiniteData } from '@tanstack/react-query';
9
+ export { E as ErrorBoundary, a as ErrorBoundaryProps } from '../../ErrorBoundary-J9iKgF_H.js';
9
10
 
10
11
  /**
11
12
  * Where a record is anchored in the inheritance chain.
@@ -2035,6 +2036,18 @@ declare const listRecords: (ctx: RecordsCtx, params?: {
2035
2036
  limit?: number;
2036
2037
  offset?: number;
2037
2038
  sort?: string;
2039
+ /**
2040
+ * Include records past their `expiresAt`. Defaults to `true` — the admin
2041
+ * shell needs to see expired records so operators can review, extend or
2042
+ * delete them. Pass `false` on public-facing surfaces that should only
2043
+ * see currently-live records.
2044
+ */
2045
+ includeExpired?: boolean;
2046
+ /**
2047
+ * Include records whose `startsAt` is in the future. Defaults to `true`
2048
+ * for the same admin-surface reason as `includeExpired`.
2049
+ */
2050
+ includeScheduled?: boolean;
2038
2051
  }) => Promise<{
2039
2052
  data: AppRecord[];
2040
2053
  total: number;
@@ -1,6 +1,7 @@
1
- import { parsedRefToTarget, parsedRefToScope, matchRecords, scopesEqual, getRecordById, listRecords, upsertRecord, updateRecord, createRecord, removeRecord } from '../../chunk-KA4MKRHL.js';
2
- export { bulkDelete, bulkUpsert, createRecord, getRecordById, listRecords, matchRecords, parsedRefToScope, parsedRefToTarget, removeRecord, restoreRecord, scopesEqual, upsertRecord } from '../../chunk-KA4MKRHL.js';
3
- import { useIntroState, AdminPageHeader } from '../../chunk-3RRHM4LP.js';
1
+ import { parsedRefToTarget, parsedRefToScope, matchRecords, scopesEqual, getRecordById, listRecords, upsertRecord, updateRecord, createRecord, removeRecord } from '../../chunk-W5ZEH3RT.js';
2
+ export { bulkDelete, bulkUpsert, createRecord, getRecordById, listRecords, matchRecords, parsedRefToScope, parsedRefToTarget, removeRecord, restoreRecord, scopesEqual, upsertRecord } from '../../chunk-W5ZEH3RT.js';
3
+ import { useIntroState, ErrorBoundary, AdminPageHeader } from '../../chunk-XASZS7EA.js';
4
+ export { ErrorBoundary } from '../../chunk-XASZS7EA.js';
4
5
  import { FacetRuleEditor } from '../../chunk-WVCNIX7N.js';
5
6
  import { useFacets } from '../../chunk-DH5HG5DW.js';
6
7
  import { assertComponentStylesLoaded } from '../../chunk-OLYC54YT.js';
@@ -712,7 +713,12 @@ var useProductSubRecords = (args) => {
712
713
  {
713
714
  ...recordType ? { recordType } : {},
714
715
  limit,
715
- offset
716
+ offset,
717
+ // Admin discovery: include expired + scheduled so the rail
718
+ // exposes every variant/batch that has *ever* held a record,
719
+ // matching the rest of the admin shell's list semantics.
720
+ includeExpired: true,
721
+ includeScheduled: true
716
722
  },
717
723
  true
718
724
  ).catch(() => null);
@@ -2654,7 +2660,7 @@ function useShellNavigation(args) {
2654
2660
  }
2655
2661
  }
2656
2662
  try {
2657
- const { removeRecord: removeRecord2 } = await import('../../records-4NN757SG.js');
2663
+ const { removeRecord: removeRecord2 } = await import('../../records-GPSKUNST.js');
2658
2664
  await removeRecord2(ctx, itemId);
2659
2665
  onTelemetry?.({ type: "item.delete", recordType, scopeRef: baseScopeRef, itemId });
2660
2666
  if (selectedItemId === itemId) setSelectedItemId(null);
@@ -4401,6 +4407,7 @@ var DefaultRecordRow = ({ record, ctx, compact = false }) => {
4401
4407
  }
4402
4408
  );
4403
4409
  };
4410
+ var RowGuard = ({ recordId, children }) => /* @__PURE__ */ jsx(ErrorBoundary, { label: "row", resetKeys: [recordId], children });
4404
4411
  var RecordList = ({
4405
4412
  items,
4406
4413
  selectedId,
@@ -4500,7 +4507,7 @@ var RecordList = ({
4500
4507
  const historyCount = history?.length ?? 0;
4501
4508
  const ctxWithHistory = historyCount > 0 && sKey ? { ...ctx, historyCount, historyExpanded: expanded, onToggleHistory: () => toggleSlot(sKey) } : ctx;
4502
4509
  return /* @__PURE__ */ jsxs("li", { children: [
4503
- renderListRow ? renderListRow(item, ctxWithHistory) : /* @__PURE__ */ jsx(DefaultRecordRow, { record: item, ctx: ctxWithHistory, compact }),
4510
+ renderListRow ? /* @__PURE__ */ jsx(RowGuard, { recordId: item.id ?? key, children: renderListRow(item, ctxWithHistory) }) : /* @__PURE__ */ jsx(DefaultRecordRow, { record: item, ctx: ctxWithHistory, compact }),
4504
4511
  history && history.length > 0 ? /* @__PURE__ */ jsx("div", { className: "ra-history-block", children: expanded ? /* @__PURE__ */ jsx("ul", { className: "ra-history-rows", "aria-label": "Archived records", children: history.map((h, hIdx) => {
4505
4512
  const hCtx = buildCtx(h, groupFacetKeys);
4506
4513
  const hKey = h.id ?? `hist:${idx}:${hIdx}`;
@@ -4511,7 +4518,7 @@ var RecordList = ({
4511
4518
  { label: h.lifecycleStatus ?? "archived", tone: "warning" }
4512
4519
  ]
4513
4520
  };
4514
- return /* @__PURE__ */ jsx("li", { className: "ra-history-row", "data-history": "true", children: renderListRow ? renderListRow(badged, hCtx) : /* @__PURE__ */ jsx(DefaultRecordRow, { record: badged, ctx: hCtx, compact }) }, hKey);
4521
+ return /* @__PURE__ */ jsx("li", { className: "ra-history-row", "data-history": "true", children: renderListRow ? /* @__PURE__ */ jsx(RowGuard, { recordId: hKey, children: renderListRow(badged, hCtx) }) : /* @__PURE__ */ jsx(DefaultRecordRow, { record: badged, ctx: hCtx, compact }) }, hKey);
4515
4522
  }) }) : null }) : null
4516
4523
  ] }, key);
4517
4524
  }) });
@@ -7111,7 +7118,7 @@ function DefaultItemCards({
7111
7118
  onClick: open,
7112
7119
  className: "ra-item-card-wrap",
7113
7120
  "data-selected": slotCtx.selected,
7114
- children: renderCard(item, slotCtx)
7121
+ children: /* @__PURE__ */ jsx(ErrorBoundary, { label: "card", resetKeys: [id], children: renderCard(item, slotCtx) })
7115
7122
  },
7116
7123
  key
7117
7124
  );
@@ -7303,7 +7310,9 @@ function ItemListView({
7303
7310
  });
7304
7311
  };
7305
7312
  const renderBody = (rows) => {
7306
- if (renderItemList) return renderItemList(rows, guardedCtx);
7313
+ if (renderItemList) {
7314
+ return /* @__PURE__ */ jsx(ErrorBoundary, { label: "list", resetKeys: [rows.length, guardedCtx.selectedId], children: renderItemList(rows, guardedCtx) });
7315
+ }
7307
7316
  if (view === "table") {
7308
7317
  return /* @__PURE__ */ jsx(
7309
7318
  DefaultItemTable,
@@ -7425,7 +7434,7 @@ function ItemListView({
7425
7434
  } else if (error) {
7426
7435
  body = /* @__PURE__ */ jsx(ErrorState, { error });
7427
7436
  } else if (items.length === 0) {
7428
- body = renderItemEmpty ? renderItemEmpty(ctx) : /* @__PURE__ */ jsx(
7437
+ body = renderItemEmpty ? /* @__PURE__ */ jsx(ErrorBoundary, { label: "empty state", children: renderItemEmpty(ctx) }) : /* @__PURE__ */ jsx(
7429
7438
  EmptyState,
7430
7439
  {
7431
7440
  title: i18n.noItemsTitle,
@@ -9212,7 +9221,7 @@ var EditorPoolBody = ({
9212
9221
  }) => {
9213
9222
  const ctx = useEditorSlotContext(editorId);
9214
9223
  if (!ctx) return null;
9215
- return /* @__PURE__ */ jsx(CallbackRenderer, { render: renderEditor, args: ctx });
9224
+ return /* @__PURE__ */ jsx(ErrorBoundary, { label: "editor", resetKeys: [editorId], children: /* @__PURE__ */ jsx(CallbackRenderer, { render: renderEditor, args: ctx }) });
9216
9225
  };
9217
9226
  var CallbackRenderer = ({
9218
9227
  render,
@@ -10441,13 +10450,13 @@ function RecordsAdminShellInner(props) {
10441
10450
  renderEditor
10442
10451
  }
10443
10452
  ),
10444
- fallback: /* @__PURE__ */ jsx(
10453
+ fallback: /* @__PURE__ */ jsx(ErrorBoundary, { label: "editor", resetKeys: [editorCtx?.recordId], children: /* @__PURE__ */ jsx(
10445
10454
  CallbackRenderer,
10446
10455
  {
10447
10456
  render: renderEditor,
10448
10457
  args: editorCtx
10449
10458
  }
10450
- )
10459
+ ) })
10451
10460
  }
10452
10461
  )
10453
10462
  }