@vantageos/mosaic 0.3.0-alpha.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +145 -0
  2. package/README.md +12 -0
  3. package/dist/{Alert.schema-BQsZGG6P.d.cts → Alert.schema-LPJE5gFP.d.cts} +31 -1
  4. package/dist/{Alert.schema-BQsZGG6P.d.ts → Alert.schema-LPJE5gFP.d.ts} +31 -1
  5. package/dist/MarkdownRenderer.schema-Rx7kIeVA.d.cts +22 -0
  6. package/dist/MarkdownRenderer.schema-Rx7kIeVA.d.ts +22 -0
  7. package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +22 -0
  8. package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +22 -0
  9. package/dist/StatusBadge.schema-1tOjB4Ir.d.cts +22 -0
  10. package/dist/StatusBadge.schema-1tOjB4Ir.d.ts +22 -0
  11. package/dist/artifacts.cjs +126 -2
  12. package/dist/artifacts.cjs.map +1 -1
  13. package/dist/artifacts.d.cts +3 -21
  14. package/dist/artifacts.d.ts +3 -21
  15. package/dist/artifacts.js +126 -2
  16. package/dist/artifacts.js.map +1 -1
  17. package/dist/confirmation.cjs +126 -2
  18. package/dist/confirmation.cjs.map +1 -1
  19. package/dist/confirmation.d.cts +3 -32
  20. package/dist/confirmation.d.ts +3 -32
  21. package/dist/confirmation.js +126 -2
  22. package/dist/confirmation.js.map +1 -1
  23. package/dist/display.cjs +129 -2
  24. package/dist/display.cjs.map +1 -1
  25. package/dist/display.d.cts +132 -2
  26. package/dist/display.d.ts +132 -2
  27. package/dist/display.js +129 -2
  28. package/dist/display.js.map +1 -1
  29. package/dist/forms.cjs +20 -17
  30. package/dist/forms.cjs.map +1 -1
  31. package/dist/forms.js +20 -17
  32. package/dist/forms.js.map +1 -1
  33. package/dist/index.cjs +129 -2
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +9 -7
  36. package/dist/index.d.ts +9 -7
  37. package/dist/index.js +129 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/media.cjs +126 -2
  40. package/dist/media.cjs.map +1 -1
  41. package/dist/media.d.cts +3 -21
  42. package/dist/media.d.ts +3 -21
  43. package/dist/media.js +126 -2
  44. package/dist/media.js.map +1 -1
  45. package/dist/preact/artifacts.d.ts +39 -1
  46. package/dist/preact/artifacts.js +234 -0
  47. package/dist/preact/artifacts.js.map +1 -1
  48. package/dist/preact/confirmation.d.ts +31 -1
  49. package/dist/preact/confirmation.js +245 -5
  50. package/dist/preact/confirmation.js.map +1 -1
  51. package/dist/preact/display.d.ts +127 -1
  52. package/dist/preact/display.js +419 -11
  53. package/dist/preact/display.js.map +1 -1
  54. package/dist/preact/forms.js +22 -19
  55. package/dist/preact/forms.js.map +1 -1
  56. package/dist/preact/input.js +2 -2
  57. package/dist/preact/progress.d.ts +35 -1
  58. package/dist/preact/progress.js +263 -0
  59. package/dist/preact/progress.js.map +1 -1
  60. package/dist/progress.cjs +126 -2
  61. package/dist/progress.cjs.map +1 -1
  62. package/dist/progress.d.cts +3 -21
  63. package/dist/progress.d.ts +3 -21
  64. package/dist/progress.js +126 -2
  65. package/dist/progress.js.map +1 -1
  66. package/dist/react/artifacts.cjs +241 -0
  67. package/dist/react/artifacts.cjs.map +1 -1
  68. package/dist/react/artifacts.d.cts +20 -1
  69. package/dist/react/artifacts.d.ts +20 -1
  70. package/dist/react/artifacts.js +234 -0
  71. package/dist/react/artifacts.js.map +1 -1
  72. package/dist/react/confirmation.cjs +248 -2
  73. package/dist/react/confirmation.cjs.map +1 -1
  74. package/dist/react/confirmation.d.cts +3 -3
  75. package/dist/react/confirmation.d.ts +3 -3
  76. package/dist/react/confirmation.js +244 -4
  77. package/dist/react/confirmation.js.map +1 -1
  78. package/dist/react/display.cjs +418 -2
  79. package/dist/react/display.cjs.map +1 -1
  80. package/dist/react/display.d.cts +20 -3
  81. package/dist/react/display.d.ts +20 -3
  82. package/dist/react/display.js +413 -4
  83. package/dist/react/display.js.map +1 -1
  84. package/dist/react/forms.cjs +20 -17
  85. package/dist/react/forms.cjs.map +1 -1
  86. package/dist/react/forms.js +20 -17
  87. package/dist/react/forms.js.map +1 -1
  88. package/dist/react/progress.cjs +266 -0
  89. package/dist/react/progress.cjs.map +1 -1
  90. package/dist/react/progress.d.cts +17 -1
  91. package/dist/react/progress.d.ts +17 -1
  92. package/dist/react/progress.js +263 -0
  93. package/dist/react/progress.js.map +1 -1
  94. package/package.json +15 -13
  95. package/registry.yaml +34 -21
  96. package/dist/Skeleton.schema-BO0ca2UX.d.cts +0 -135
  97. package/dist/Skeleton.schema-BO0ca2UX.d.ts +0 -135
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/display/EmptyState.logic.ts","../../src/components/display/EmptyState.schema.ts","../../src/i18n/strings.ts","../../src/runtimes/react/components/display/EmptyState.tsx","../../src/components/display/Skeleton.logic.ts","../../src/components/display/Skeleton.schema.ts","../../src/runtimes/react/components/display/Skeleton.tsx","../../src/components/display/VirtualList.schema.ts","../../src/components/display/VirtualList.tsx"],"names":["z","jsxs","jsx","locale","useRef","useCallback","useVirtualizer"],"mappings":"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","file":"display.cjs","sourcesContent":["/**\n * EmptyState.logic.ts — pure, framework-agnostic helpers.\n * No JSX here — shared between React 19 and Preact 10 runtimes.\n */\n\nexport type EmptyStateActionVariant = \"primary\" | \"secondary\";\n\n/**\n * Tailwind class maps for CTA button variants.\n * Using slate neutrals (OKLCH-tinted, never pure gray).\n */\nexport const ACTION_VARIANT_CLASSES: Record<EmptyStateActionVariant, string> = {\n primary:\n \"inline-flex items-center justify-center rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-slate-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-900 disabled:pointer-events-none disabled:opacity-50\",\n secondary:\n \"inline-flex items-center justify-center rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 shadow-sm transition-colors hover:bg-slate-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-400 disabled:pointer-events-none disabled:opacity-50\",\n};\n","import { z } from \"zod\";\n\n// i18nKeys: EmptyState.error.invalidProps\n\n/**\n * EmptyState component props schema.\n *\n * Empty-set illustration + title + description + optional CTA.\n * Consumer-driven i18n: caller passes already-localized strings.\n *\n * icon — optional ReactNode / PreactNode passed by the caller\n * title — required heading (h2, consumer-driven i18n)\n * description — optional supporting text\n * action — optional CTA: { label, onClick, variant? }\n */\nexport const EmptyStatePropsSchema = z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n action: z\n .object({\n label: z.string().min(1),\n variant: z.enum([\"primary\", \"secondary\"]).default(\"primary\"),\n })\n .optional(),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type EmptyStatePropsSchemaInput = z.input<typeof EmptyStatePropsSchema>;\nexport type EmptyStatePropsSchemaOutput = z.output<typeof EmptyStatePropsSchema>;\n\n/**\n * Full EmptyState props including framework-specific node types and callback.\n * `icon` and `action.onClick` are excluded from Zod (functions/nodes are not serializable).\n *\n * Note: action.variant is optional for callers — Zod applies \"primary\" default at parse time.\n */\nexport type EmptyStateProps = Omit<EmptyStatePropsSchemaOutput, \"action\"> & {\n // biome-ignore lint/suspicious/noExplicitAny: cross-runtime ReactNode | VNode\n icon?: any;\n action?: {\n label: string;\n variant?: \"primary\" | \"secondary\";\n onClick: () => void;\n };\n};\n\nexport function validateEmptyStateProps(raw: unknown): EmptyStatePropsSchemaOutput {\n return EmptyStatePropsSchema.parse(raw);\n}\n","/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for the 6\n * v0.1.0 components. Inlined here so that `<Comp>` renderers can resolve\n * `t(key, locale)` without dragging react-i18next into the component runtime\n * (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","\"use client\";\n\n// i18nKeys: EmptyState.error.invalidProps\n\nimport type { ReactNode } from \"react\";\nimport { ACTION_VARIANT_CLASSES } from \"../../../../components/display/EmptyState.logic.js\";\nimport {\n type EmptyStateProps,\n validateEmptyStateProps,\n} from \"../../../../components/display/EmptyState.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\n// ─── Inner (validated props) ──────────────────────────────────────────────────\n\nfunction EmptyStateInner({\n icon,\n title,\n description,\n action,\n locale: _locale,\n}: EmptyStateProps & { icon?: ReactNode }) {\n const variant = action?.variant ?? \"primary\";\n\n return (\n <section\n aria-label={title}\n className=\"flex flex-col items-center justify-center gap-4 px-6 py-12 text-center\"\n >\n {icon && (\n <span aria-hidden=\"true\" className=\"text-slate-400\">\n {icon}\n </span>\n )}\n <h2 className=\"text-base font-semibold text-slate-900\">{title}</h2>\n {description && (\n <p className=\"max-w-sm text-sm leading-relaxed text-slate-500\">{description}</p>\n )}\n {action && (\n <button type=\"button\" onClick={action.onClick} className={ACTION_VARIANT_CLASSES[variant]}>\n {action.label}\n </button>\n )}\n </section>\n );\n}\n\n/**\n * EmptyState — cross-runtime empty-set display primitive (React 19 implementation).\n *\n * Accepts `Record<string, unknown>` for MCP postMessage injection safety.\n * Zod validation narrows before render. Invalid props → accessible error span.\n *\n * WCAG-AA:\n * - <section aria-label={title}> → role=\"region\" landmark (no Biome lint, correct semantics)\n * - heading hierarchy: h2 (title) — caller manages the h1 context\n * - action button is keyboard-accessible (tab + enter/space)\n */\nexport function EmptyState(\n raw: Omit<EmptyStateProps, \"locale\"> &\n Partial<Pick<EmptyStateProps, \"locale\">> & { icon?: ReactNode },\n) {\n try {\n const parsed = validateEmptyStateProps(raw);\n return (\n <EmptyStateInner\n {...parsed}\n icon={raw.icon}\n action={\n parsed.action && raw.action?.onClick\n ? { ...parsed.action, onClick: raw.action.onClick }\n : undefined\n }\n />\n );\n } catch (err) {\n console.error(\"[EmptyState] Invalid props — component will not render.\", err);\n const locale = (raw as Record<string, unknown>).locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"EmptyState.error.invalidProps\", locale)}</span>;\n }\n}\n","/**\n * Skeleton.logic.ts — shared pure logic (no JSX, no runtime dependency).\n *\n * Used by both React 19 and Preact 10 runtime implementations.\n * Tests live in __tests__/Skeleton.logic.test.ts (co-located schema/logic layer).\n */\n\nimport type { SkeletonProps } from \"./Skeleton.schema.js\";\n\nexport type SkeletonAnimation = SkeletonProps[\"animation\"];\nexport type SkeletonVariant = SkeletonProps[\"variant\"];\n\n/**\n * Returns the CSS class name(s) for the shimmer animation.\n *\n * \"pulse\" — Tailwind `animate-pulse` (opacity oscillation, reduced-motion safe via Tailwind)\n * \"wave\" — custom keyframe class `skeleton-wave` (left-to-right gradient sweep)\n * \"none\" — no animation class\n *\n * Note: \"pulse\" uses Tailwind's built-in `animate-pulse` which already respects\n * `prefers-reduced-motion: reduce` via the `motion-safe:` variant — no extra CSS needed.\n * For \"wave\" consumers must include the `.skeleton-wave` keyframe in their CSS.\n */\nexport function getAnimationClass(animation: SkeletonAnimation): string {\n switch (animation) {\n case \"pulse\":\n return \"animate-pulse\";\n case \"wave\":\n return \"skeleton-wave\";\n case \"none\":\n return \"\";\n }\n}\n\n/**\n * Returns the base layout class for the skeleton variant.\n *\n * \"rect\" → rounded rectangle block\n * \"circle\" → rounded-full (perfect circle when width === height)\n * \"text\" → rounded bar, slightly shorter height for text-line appearance\n */\nexport function getVariantClass(variant: SkeletonVariant): string {\n switch (variant) {\n case \"rect\":\n return \"rounded-md\";\n case \"circle\":\n return \"rounded-full\";\n case \"text\":\n return \"rounded\";\n }\n}\n\n/**\n * Base background class applied to all skeleton shapes.\n * Uses a neutral gray that works on light and dark surfaces.\n */\nexport const SKELETON_BG_CLASS = \"bg-gray-200 dark:bg-gray-700\";\n\n/**\n * Generate a stable key for each text-line span using the line index.\n * Using `line-<index>` string is stable (not array index as key directly).\n */\nexport function textLineKey(index: number): string {\n return `skeleton-line-${index}`;\n}\n\n/**\n * For multi-line text skeletons, optionally narrow the last line to ~75%\n * to mimic a natural paragraph end. Returns width override CSS string or undefined.\n */\nexport function lastLineWidth(index: number, total: number, baseWidth: string): string {\n if (total > 1 && index === total - 1) {\n // Last line narrowed to 75% of the container (natural paragraph look)\n return \"75%\";\n }\n return baseWidth;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Skeleton.error.invalidProps\n\n/**\n * Skeleton component props schema.\n *\n * variant — shape of the placeholder:\n * \"rect\" → rectangular block (default)\n * \"circle\" → circular avatar / icon placeholder\n * \"text\" → single or multi-line text placeholder\n *\n * width / height — CSS values (string) or pixels (number).\n * \"rect\" defaults: width=\"100%\", height=100\n * \"circle\" defaults: width=height (equal, square rendered as circle)\n * \"text\" defaults: width=\"100%\", height=16\n *\n * count — number of text line spans (only meaningful for variant=\"text\").\n * Default 1. Ignored for rect/circle.\n *\n * animation — shimmer style:\n * \"pulse\" → opacity pulse (default)\n * \"wave\" → left-to-right gradient sweep\n * \"none\" → static placeholder (auto-selected when prefers-reduced-motion)\n */\nexport const SkeletonPropsSchema = z.object({\n variant: z.enum([\"rect\", \"circle\", \"text\"]).default(\"rect\"),\n width: z.union([z.string().min(1), z.number().positive()]).optional(),\n height: z.union([z.string().min(1), z.number().positive()]).optional(),\n count: z.number().int().min(1).max(20).default(1),\n animation: z.enum([\"pulse\", \"wave\", \"none\"]).default(\"pulse\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type SkeletonProps = z.infer<typeof SkeletonPropsSchema>;\n\nexport function validateSkeletonProps(raw: unknown): SkeletonProps {\n return SkeletonPropsSchema.parse(raw);\n}\n\n/**\n * Resolve final width/height CSS values given the variant and raw props.\n * Centralised here so React + Preact runtimes share identical defaults.\n */\nexport function resolveSkeletonDimensions(\n variant: SkeletonProps[\"variant\"],\n width: SkeletonProps[\"width\"],\n height: SkeletonProps[\"height\"],\n): { widthCss: string; heightCss: string } {\n const toCss = (v: string | number | undefined, fallback: string): string => {\n if (v === undefined) return fallback;\n if (typeof v === \"number\") return `${v}px`;\n return v;\n };\n\n if (variant === \"circle\") {\n const size =\n width !== undefined\n ? toCss(width, \"40px\")\n : height !== undefined\n ? toCss(height, \"40px\")\n : \"40px\";\n return { widthCss: size, heightCss: size };\n }\n\n if (variant === \"text\") {\n return {\n widthCss: toCss(width, \"100%\"),\n heightCss: toCss(height, \"16px\"),\n };\n }\n\n // rect (default)\n return {\n widthCss: toCss(width, \"100%\"),\n heightCss: toCss(height, \"100px\"),\n };\n}\n","// i18nKeys: Skeleton.aria.label, Skeleton.error.invalidProps\n\nimport React from \"react\";\nimport {\n SKELETON_BG_CLASS,\n getAnimationClass,\n getVariantClass,\n lastLineWidth,\n textLineKey,\n} from \"../../../../components/display/Skeleton.logic.js\";\nimport {\n type SkeletonProps,\n resolveSkeletonDimensions,\n validateSkeletonProps,\n} from \"../../../../components/display/Skeleton.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\nfunction SkeletonInner({ variant, width, height, count, animation, locale }: SkeletonProps) {\n const { widthCss, heightCss } = resolveSkeletonDimensions(variant, width, height);\n const animClass = getAnimationClass(animation);\n const variantClass = getVariantClass(variant);\n const ariaLabel = t(\"Skeleton.aria.label\", locale);\n const baseClass = `${SKELETON_BG_CLASS} ${variantClass} ${animClass}`.trim();\n\n if (variant === \"text\") {\n return (\n // biome-ignore lint/a11y/useSemanticElements: role=\"status\" is the correct ARIA pattern for loading indicators; <output> conveys form output semantics which is incorrect here\n <div role=\"status\" aria-label={ariaLabel} aria-busy=\"true\" className=\"flex flex-col gap-2\">\n {Array.from({ length: count }, (_, i) => (\n <span\n key={textLineKey(i)}\n className={`block ${baseClass}`}\n style={{\n width: lastLineWidth(i, count, widthCss),\n height: heightCss,\n }}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n role=\"status\"\n aria-label={ariaLabel}\n aria-busy=\"true\"\n className={`block ${baseClass}`}\n style={{ width: widthCss, height: heightCss }}\n />\n );\n}\n\n/**\n * Skeleton — cross-runtime loading placeholder (React 19 implementation).\n *\n * Accepts `Record<string, unknown>` for MCP postMessage injection safety.\n * Zod validation narrows before render. Invalid props → accessible error span.\n *\n * Animation \"none\" is auto-applied when prefers-reduced-motion is set (via\n * Tailwind's animate-pulse which respects the media query natively), or by\n * passing animation=\"none\" explicitly.\n *\n * WCAG-AA:\n * - role=\"status\" + aria-busy=\"true\" on the container\n * - aria-label resolves via t() in EN/FR\n * - aria-hidden=\"true\" on individual line spans (status role covers the group)\n */\nexport function Skeleton(raw: Record<string, unknown>) {\n try {\n const props = validateSkeletonProps(raw);\n return <SkeletonInner {...props} />;\n } catch {\n const locale = (raw as Record<string, unknown>).locale === \"fr\" ? \"fr\" : \"en\";\n return (\n <span role=\"alert\" className=\"text-red-600 text-sm\">\n {t(\"Skeleton.error.invalidProps\", locale)}\n </span>\n );\n }\n}\n","// i18nKeys: VirtualList.empty.message, VirtualList.error.invalidProps\n\nimport type { ReactNode } from \"react\";\nimport { z } from \"zod\";\n\n/**\n * VirtualList Zod props schema.\n *\n * Runtime functions (renderItem, estimateSize, onRowClick) are excluded from\n * Zod per §18.5 (runtime functions not serialisable). They are typed separately\n * in VirtualListProps<T> below.\n *\n * Serialisable fields validated at render time for safe MCP postMessage injection.\n */\nexport const VirtualListPropsSchema = z.object({\n /** Array of items to render — required, can be empty */\n items: z.array(z.unknown()),\n /** Fixed row height in px — mutually exclusive with estimateSize */\n itemHeight: z.number().positive().optional(),\n /** Variable row height estimator — mutually exclusive with itemHeight */\n estimateSize: z.function().args(z.number()).returns(z.number()).optional(),\n /** Row renderer — required (runtime function, excluded from strict Zod parse but validated for presence) */\n renderItem: z.function().args(z.unknown(), z.number()).returns(z.unknown()).optional(),\n /** Rows to render outside visible area (default: 5) */\n overscan: z.number().int().min(0).optional(),\n /** CSS class applied to the scroll container */\n className: z.string().optional(),\n /** Locale for built-in empty state + error messages */\n locale: z.enum([\"en\", \"fr\"]).optional(),\n /** a11y: when provided, rows become keyboard-activable (role=button + tabIndex=0 + Enter/Space) */\n onRowClick: z.function().args(z.unknown(), z.number()).returns(z.void()).optional(),\n});\n\nexport type VirtualListPropsSchemaInput = z.input<typeof VirtualListPropsSchema>;\nexport type VirtualListPropsSchemaOutput = z.output<typeof VirtualListPropsSchema>;\n\n/**\n * Full typed VirtualList props for JSX consumers.\n * Generic over item type T.\n */\nexport type VirtualListProps<T = unknown> = {\n /** Array of items to render */\n items: T[];\n /** Fixed row height in px — use when all rows are the same height */\n itemHeight?: number;\n /** Variable height estimator — use when rows have different heights */\n estimateSize?: (index: number) => number;\n /** Required: renders one item */\n renderItem: (item: T, index: number) => ReactNode;\n /** Called when a row is clicked/activated — triggers a11y role=button + keyboard */\n onRowClick?: (item: T, index: number) => void;\n /** Rows rendered outside viewport (default: 5) */\n overscan?: number;\n /** CSS class applied to the scroll container */\n className?: string;\n /** Locale for built-in strings (default: \"en\") */\n locale?: \"en\" | \"fr\";\n};\n\n/** Validates serialisable portion of VirtualList props — throws on failure */\nexport function validateVirtualListProps(raw: unknown): VirtualListPropsSchemaOutput {\n return VirtualListPropsSchema.parse(raw);\n}\n","// i18nKeys: VirtualList.empty.message, VirtualList.error.invalidProps\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type React from \"react\";\nimport { useCallback, useRef } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type VirtualListProps, validateVirtualListProps } from \"./VirtualList.schema.js\";\n\nconst DEFAULT_OVERSCAN = 5;\nconst DEFAULT_ITEM_HEIGHT = 40;\n\n/**\n * VirtualList — generic virtualized list component.\n *\n * Cross-runtime: same file used by React 19 and Preact 10 (via preact/compat alias in tsup).\n * Virtualization: @tanstack/react-virtual v3 (already in mosaic deps via TableView).\n * a11y: WCAG-AA — when onRowClick provided, rows get role=button + tabIndex=0 + Enter/Space.\n * Zod-validated serialisable props; renders role=\"alert\" fallback on failure.\n *\n * API:\n * items: T[] — generic item array\n * itemHeight?: number — fixed px height (mutually exclusive with estimateSize)\n * estimateSize?: (index) => number — variable height estimator\n * renderItem: (item, index) => ReactNode — required row renderer\n * onRowClick?: (item, index) => void — a11y click handler\n * overscan?: number — rows outside viewport (default: 5)\n * className?: string — scroll container class\n * locale?: \"en\" | \"fr\" — built-in string locale\n */\nexport function VirtualList<T = unknown>(props: VirtualListProps<T>) {\n // Validate serialisable props — functions excluded per §18.5\n try {\n validateVirtualListProps({\n items: props.items,\n itemHeight: props.itemHeight,\n overscan: props.overscan,\n className: props.className,\n locale: props.locale,\n });\n } catch {\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"VirtualList.error.invalidProps\", locale)}</div>;\n }\n\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n\n if (props.items.length === 0) {\n return <output aria-live=\"polite\">{t(\"VirtualList.empty.message\", locale)}</output>;\n }\n\n return (\n <VirtualListInner<T>\n items={props.items}\n itemHeight={props.itemHeight}\n estimateSize={props.estimateSize}\n renderItem={props.renderItem}\n onRowClick={props.onRowClick}\n overscan={props.overscan ?? DEFAULT_OVERSCAN}\n className={props.className}\n locale={locale}\n />\n );\n}\n\n// ── Inner implementation — rendered after validation passes ───────────────────\n\ntype VirtualListInnerProps<T> = Required<\n Pick<VirtualListProps<T>, \"items\" | \"renderItem\" | \"overscan\">\n> &\n Pick<VirtualListProps<T>, \"itemHeight\" | \"estimateSize\" | \"onRowClick\" | \"className\"> & {\n locale: MosaicLocale;\n };\n\nfunction VirtualListInner<T>({\n items,\n itemHeight,\n estimateSize,\n renderItem,\n onRowClick,\n overscan,\n className,\n}: VirtualListInnerProps<T>) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const resolvedEstimateSize = useCallback(\n (index: number): number => {\n if (estimateSize) return estimateSize(index);\n return itemHeight ?? DEFAULT_ITEM_HEIGHT;\n },\n [estimateSize, itemHeight],\n );\n\n const rowVirtualizer = useVirtualizer({\n count: items.length,\n /* v8 ignore next 1 */\n getScrollElement: () => scrollRef.current,\n estimateSize: resolvedEstimateSize,\n overscan,\n });\n\n const virtualItems = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n return (\n <div\n data-virtual=\"true\"\n ref={scrollRef}\n className={className}\n style={{ height: 400, overflow: \"auto\", position: \"relative\" }}\n >\n <div style={{ height: `${totalSize}px`, position: \"relative\" }}>\n {virtualItems.map((virtualRow) => {\n /* v8 ignore next */\n const item = items[virtualRow.index] as T;\n const index = virtualRow.index;\n\n const rowProps = onRowClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"data-list-row\": true,\n style: {\n position: \"absolute\" as const,\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n cursor: \"pointer\",\n },\n onClick: () => onRowClick(item, index),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(item, index);\n }\n },\n }\n : {\n \"data-list-row\": true,\n style: {\n position: \"absolute\" as const,\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n },\n };\n\n return (\n <div key={virtualRow.key} {...rowProps}>\n {renderItem(item, index)}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/components/display/EmptyState.logic.ts","../../src/components/display/EmptyState.schema.ts","../../src/i18n/strings.ts","../../src/runtimes/react/components/display/EmptyState.tsx","../../src/components/display/Skeleton.logic.ts","../../src/components/display/Skeleton.schema.ts","../../src/runtimes/react/components/display/Skeleton.tsx","../../src/components/display/VirtualList.schema.ts","../../src/components/display/VirtualList.tsx","../../src/components/media/StatusBadge.schema.ts","../../src/runtimes/react/components/display/StatusBadge.tsx","../../src/components/display/TableView.schema.ts","../../src/components/display/TableView.tsx"],"names":["z","jsxs","jsx","locale","useRef","useCallback","useVirtualizer","useState","useEffect"],"mappings":";;;;;;;;AAWO,IAAM,sBAAA,GAAkE;AAAA,EAC7E,OAAA,EACE,uTAAA;AAAA,EACF,SAAA,EACE;AACJ,CAAA;ACDO,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,MAAA,EAAQA,MACL,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,IACvB,OAAA,EAASA,MAAE,IAAA,CAAK,CAAC,WAAW,WAAW,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS;AAAA,GAC5D,EACA,QAAA,EAAS;AAAA,EACZ,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,MAAM,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAI;AAC3C,CAAC;AAqBM,SAAS,wBAAwB,GAAA,EAA2C;AACjF,EAAA,OAAO,qBAAA,CAAsB,MAAM,GAAG,CAAA;AACxC;;;AChCA,IAAM,EAAA,GAAK;AAAA;AAAA,EAET,wBAAA,EAA0B,UAAA;AAAA,EAC1B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,8BAAA,EAAgC,SAAA;AAAA,EAChC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,sBAAA,EAAwB,YAAA;AAAA,EACxB,2BAAA,EAA6B,WAAA;AAAA,EAC7B,2BAAA,EAA6B,eAAA;AAAA,EAC7B,yBAAA,EAA2B,oBAAA;AAAA,EAC3B,8BAAA,EAAgC,0BAAA;AAAA,EAChC,+BAAA,EAAiC,2BAAA;AAAA,EACjC,qCAAA,EAAuC,iCAAA;AAAA,EACvC,gCAAA,EAAkC,gCAAA;AAAA,EAClC,mCAAA,EAAqC,YAAA;AAAA,EACrC,oCAAA,EAAsC,OAAA;AAAA,EACtC,oCAAA,EAAsC,kDAAA;AAAA,EACtC,8BAAA,EAAgC,QAAA;AAAA,EAChC,yBAAA,EAA2B,QAAA;AAAA,EAC3B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,+BAAA,EAAiC,2BAAA;AAAA,EACjC,kBAAA,EAAoB,oBAAA;AAAA,EACpB,0BAAA,EAA4B,sBAAA;AAAA,EAC5B,oBAAA,EAAsB,eAAA;AAAA,EACtB,0BAAA,EAA4B,sBAAA;AAAA,EAC5B,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,qBAAA,EAAuB,SAAA;AAAA,EACvB,6BAAA,EAA+B,yBAAA;AAAA;AAAA,EAE/B,kCAAA,EAAoC,gCAAA;AAAA;AAAA,EAEpC,iCAAA,EAAmC,6BAAA;AAAA;AAAA,EAEnC,8BAAA,EAAgC,0BAAA;AAAA;AAAA,EAEhC,6BAAA,EAA+B,wBAAA;AAAA,EAC/B,wBAAA,EAA0B,4BAAA;AAAA,EAC1B,wBAAA,EAA0B,2BAAA;AAAA,EAC1B,8BAAA,EAAgC,oBAAA;AAAA,EAChC,8BAAA,EAAgC,mBAAA;AAAA,EAChC,4BAAA,EAA8B,gBAAA;AAAA,EAC9B,0BAAA,EAA4B,6BAAA;AAAA,EAC5B,wBAAA,EAA0B,mBAAA;AAAA,EAC1B,4BAAA,EAA8B,eAAA;AAAA;AAAA,EAE9B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,4BAAA,EAA8B,kBAAA;AAAA,EAC9B,iCAAA,EAAmC,6BAAA;AAAA;AAAA,EAEnC,kBAAA,EAAoB,aAAA;AAAA,EACpB,sBAAA,EAAwB,wBAAA;AAAA,EACxB,qBAAA,EAAuB,eAAA;AAAA,EACvB,qBAAA,EAAuB,mBAAA;AAAA,EACvB,sBAAA,EAAwB,oBAAA;AAAA,EACxB,0BAAA,EAA4B,sBAAA;AAAA;AAAA,EAE5B,qBAAA,EAAuB,WAAA;AAAA,EACvB,yBAAA,EAA2B,wBAAA;AAAA,EAC3B,wBAAA,EAA0B,kBAAA;AAAA,EAC1B,4BAAA,EAA8B,sBAAA;AAAA,EAC9B,6BAAA,EAA+B,yBAAA;AAAA;AAAA,EAE/B,sBAAA,EAAwB,eAAA;AAAA,EACxB,yBAAA,EAA2B,UAAA;AAAA,EAC3B,4BAAA,EAA8B,aAAA;AAAA,EAC9B,+BAAA,EAAiC,2BAAA;AAAA;AAAA,EAEjC,qBAAA,EAAuB,UAAA;AAAA,EACvB,yBAAA,EAA2B,4BAAA;AAAA,EAC3B,6BAAA,EAA+B,yBAAA;AAAA;AAAA,EAE/B,wBAAA,EAA0B,oBAAA;AAAA,EAC1B,6BAAA,EAA+B,QAAA;AAAA,EAC/B,4BAAA,EAA8B,4BAAA;AAAA,EAC9B,4BAAA,EAA8B,sCAAA;AAAA,EAC9B,yBAAA,EAA2B,sBAAA;AAAA,EAC3B,gCAAA,EAAkC,cAAA;AAAA,EAClC,mBAAA,EAAqB,sBAAA;AAAA,EACrB,gCAAA,EAAkC,4BAAA;AAAA;AAAA,EAElC,uBAAA,EAAyB,aAAA;AAAA,EACzB,2BAAA,EAA6B,mBAAA;AAAA,EAC7B,+BAAA,EAAiC,2BAAA;AAAA;AAAA,EAEjC,oBAAA,EAAsB,wBAAA;AAAA,EACtB,2BAAA,EAA6B,cAAA;AAAA,EAC7B,cAAA,EAAgB,sBAAA;AAAA,EAChB,uBAAA,EAAyB,kBAAA;AAAA,EACzB,2BAAA,EAA6B;AAC/B,CAAA;AAEA,IAAM,EAAA,GAAsC;AAAA;AAAA,EAE1C,wBAAA,EAA0B,aAAA;AAAA,EAC1B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,8BAAA,EAAgC,WAAA;AAAA,EAChC,6BAAA,EAA+B,SAAA;AAAA,EAC/B,2BAAA,EAA6B,sCAAA;AAAA,EAC7B,sBAAA,EAAwB,uBAAA;AAAA,EACxB,2BAAA,EAA6B,eAAA;AAAA,EAC7B,2BAAA,EAA6B,uBAAA;AAAA,EAC7B,yBAAA,EAA2B,gCAAA;AAAA,EAC3B,8BAAA,EAAgC,wCAAA;AAAA,EAChC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,qCAAA,EAAuC,+CAAA;AAAA,EACvC,gCAAA,EAAkC,4CAAA;AAAA,EAClC,mCAAA,EAAqC,iBAAA;AAAA,EACrC,oCAAA,EAAsC,QAAA;AAAA,EACtC,oCAAA,EACE,sEAAA;AAAA,EACF,8BAAA,EAAgC,UAAA;AAAA,EAChC,yBAAA,EAA2B,QAAA;AAAA,EAC3B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,+BAAA,EAAiC,yCAAA;AAAA,EACjC,kBAAA,EAAoB,wBAAA;AAAA,EACpB,0BAAA,EAA4B,oCAAA;AAAA,EAC5B,oBAAA,EAAsB,iBAAA;AAAA,EACtB,0BAAA,EAA4B,oCAAA;AAAA,EAC5B,2BAAA,EAA6B,mCAAA;AAAA,EAC7B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,qBAAA,EAAuB,YAAA;AAAA,EACvB,6BAAA,EAA+B,uCAAA;AAAA;AAAA,EAE/B,kCAAA,EAAoC,mCAAA;AAAA;AAAA,EAEpC,iCAAA,EAAmC,2CAAA;AAAA;AAAA,EAEnC,8BAAA,EAAgC,wCAAA;AAAA;AAAA,EAEhC,6BAAA,EAA+B,0BAAA;AAAA,EAC/B,wBAAA,EAA0B,wCAAA;AAAA,EAC1B,wBAAA,EAA0B,iCAAA;AAAA,EAC1B,8BAAA,EAAgC,2BAAA;AAAA,EAChC,8BAAA,EAAgC,2BAAA;AAAA,EAChC,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,0BAAA,EAA4B,qCAAA;AAAA,EAC5B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,4BAAA,EAA8B,iBAAA;AAAA;AAAA,EAE9B,0BAAA,EAA4B,yBAAA;AAAA,EAC5B,4BAAA,EAA8B,sBAAA;AAAA,EAC9B,iCAAA,EAAmC,2CAAA;AAAA;AAAA,EAEnC,kBAAA,EAAoB,iBAAA;AAAA,EACpB,sBAAA,EAAwB,0BAAA;AAAA,EACxB,qBAAA,EAAuB,iBAAA;AAAA,EACvB,qBAAA,EAAuB,2BAAA;AAAA,EACvB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,0BAAA,EAA4B,oCAAA;AAAA;AAAA,EAE5B,qBAAA,EAAuB,eAAA;AAAA,EACvB,yBAAA,EAA2B,0BAAA;AAAA,EAC3B,wBAAA,EAA0B,wBAAA;AAAA,EAC1B,4BAAA,EAA8B,wBAAA;AAAA,EAC9B,6BAAA,EAA+B,uCAAA;AAAA;AAAA,EAE/B,sBAAA,EAAwB,wBAAA;AAAA,EACxB,yBAAA,EAA2B,0BAAA;AAAA,EAC3B,4BAAA,EAA8B,2BAAA;AAAA,EAC9B,+BAAA,EAAiC,yCAAA;AAAA;AAAA,EAEjC,qBAAA,EAAuB,kBAAA;AAAA,EACvB,yBAAA,EAA2B,gCAAA;AAAA,EAC3B,6BAAA,EAA+B,uCAAA;AAAA;AAAA,EAE/B,wBAAA,EAA0B,gCAAA;AAAA,EAC1B,6BAAA,EAA+B,SAAA;AAAA,EAC/B,4BAAA,EAA8B,qCAAA;AAAA,EAC9B,4BAAA,EAA8B,yCAAA;AAAA,EAC9B,yBAAA,EAA2B,mCAAA;AAAA,EAC3B,gCAAA,EAAkC,kBAAA;AAAA,EAClC,mBAAA,EAAqB,0BAAA;AAAA,EACrB,gCAAA,EAAkC,0CAAA;AAAA;AAAA,EAElC,uBAAA,EAAyB,yBAAA;AAAA,EACzB,2BAAA,EAA6B,4BAAA;AAAA,EAC7B,+BAAA,EAAiC,yCAAA;AAAA;AAAA,EAEjC,oBAAA,EAAsB,kCAAA;AAAA,EACtB,2BAAA,EAA6B,kBAAA;AAAA,EAC7B,cAAA,EAAgB,0BAAA;AAAA,EAChB,uBAAA,EAAyB,4BAAA;AAAA,EACzB,2BAAA,EAA6B;AAC/B,CAAA;AAIA,IAAM,KAAA,GAA6D;AAAA,EACjE,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAGO,SAAS,CAAA,CAAE,GAAA,EAAoB,MAAA,GAAuB,IAAA,EAAc;AACzE,EAAA,OAAO,MAAM,MAAM,CAAA,GAAI,GAAG,CAAA,IAAK,KAAA,CAAM,GAAG,GAAG,CAAA;AAC7C;ACvMA,SAAS,eAAA,CAAgB;AAAA,EACvB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,EAAQ;AACV,CAAA,EAA2C;AACzC,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,SAAA;AAEnC,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,wEAAA;AAAA,MAET,QAAA,EAAA;AAAA,QAAA,IAAA,mCACE,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,kBAChC,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEFC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAC7D,WAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAmD,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,QAE7E,MAAA,oBACCA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,SAAA,EAAW,sBAAA,CAAuB,OAAO,CAAA,EACrF,iBAAO,KAAA,EACV;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAaO,SAAS,WACd,GAAA,EAEA;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,wBAAwB,GAAG,CAAA;AAC1C,IAAA,uBACEA,cAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACE,GAAG,MAAA;AAAA,QACJ,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAA,EACE,MAAA,CAAO,MAAA,IAAU,GAAA,CAAI,QAAQ,OAAA,GACzB,EAAE,GAAG,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,GAAA,CAAI,MAAA,CAAO,SAAQ,GAChD,KAAA;AAAA;AAAA,KAER;AAAA,EAEJ,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,gEAA2D,GAAG,CAAA;AAC5E,IAAA,MAAM,MAAA,GAAU,GAAA,CAAgC,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AACzE,IAAA,sCAAQ,MAAA,EAAA,EAAK,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,+BAAA,EAAiC,MAAM,CAAA,EAAE,CAAA;AAAA,EACxE;AACF;;;ACxDO,SAAS,kBAAkB,SAAA,EAAsC;AACtE,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,OAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,EAAA;AAAA;AAEb;AASO,SAAS,gBAAgB,OAAA,EAAkC;AAChE,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,MAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,SAAA;AAAA;AAEb;AAMO,IAAM,iBAAA,GAAoB,8BAAA;AAM1B,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,iBAAiB,KAAK,CAAA,CAAA;AAC/B;AAMO,SAAS,aAAA,CAAc,KAAA,EAAe,KAAA,EAAe,SAAA,EAA2B;AACrF,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,KAAU,KAAA,GAAQ,CAAA,EAAG;AAEpC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA;AACT;ACnDO,IAAM,mBAAA,GAAsBF,MAAE,MAAA,CAAO;AAAA,EAC1C,OAAA,EAASA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAU,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EAC1D,OAAOA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAGA,MAAE,MAAA,EAAO,CAAE,UAAU,CAAC,EAAE,QAAA,EAAS;AAAA,EACpE,QAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAGA,MAAE,MAAA,EAAO,CAAE,UAAU,CAAC,EAAE,QAAA,EAAS;AAAA,EACrE,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EAChD,SAAA,EAAWA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,QAAQ,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA;AAAA,EAC5D,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,MAAM,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAI;AAC3C,CAAC;AAIM,SAAS,sBAAsB,GAAA,EAA6B;AACjE,EAAA,OAAO,mBAAA,CAAoB,MAAM,GAAG,CAAA;AACtC;AAMO,SAAS,yBAAA,CACd,OAAA,EACA,KAAA,EACA,MAAA,EACyC;AACzC,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAgC,QAAA,KAA6B;AAC1E,IAAA,IAAI,CAAA,KAAM,QAAW,OAAO,QAAA;AAC5B,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,GAAG,CAAC,CAAA,EAAA,CAAA;AACtC,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAM,IAAA,GACJ,KAAA,KAAU,MAAA,GACN,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA,GACnB,MAAA,KAAW,MAAA,GACT,KAAA,CAAM,MAAA,EAAQ,MAAM,CAAA,GACpB,MAAA;AACR,IAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK;AAAA,EAC3C;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAAA,MAC7B,SAAA,EAAW,KAAA,CAAM,MAAA,EAAQ,MAAM;AAAA,KACjC;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IAC7B,SAAA,EAAW,KAAA,CAAM,MAAA,EAAQ,OAAO;AAAA,GAClC;AACF;AC5DA,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAO,QAAQ,KAAA,EAAO,SAAA,EAAW,QAAO,EAAkB;AAC1F,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,KAAc,yBAAA,CAA0B,OAAA,EAAS,OAAO,MAAM,CAAA;AAChF,EAAA,MAAM,SAAA,GAAY,kBAAkB,SAAS,CAAA;AAC7C,EAAA,MAAM,YAAA,GAAe,gBAAgB,OAAO,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,qBAAA,EAAuB,MAAM,CAAA;AACjD,EAAA,MAAM,SAAA,GAAY,GAAG,iBAAiB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,SAAS,GAAG,IAAA,EAAK;AAE3E,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA;AAAA;AAAA,sBAEEE,eAAC,KAAA,EAAA,EAAI,IAAA,EAAK,UAAS,YAAA,EAAY,SAAA,EAAW,aAAU,MAAA,EAAO,SAAA,EAAU,uBAClE,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,IAAS,CAAC,CAAA,EAAG,sBACjCA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA;AAAA,UAC7B,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,aAAA,CAAc,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AAAA,YACvC,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,aAAA,EAAY;AAAA,SAAA;AAAA,QANP,YAAY,CAAC;AAAA,OAQrB,CAAA,EACH;AAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA;AAAA,MAC7B,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,QAAQ,SAAA;AAAU;AAAA,GAC9C;AAEJ;AAiBO,SAAS,SAAS,GAAA,EAA8B;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,sBAAsB,GAAG,CAAA;AACvC,IAAA,uBAAOA,cAAAA,CAAC,aAAA,EAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,GAAU,GAAA,CAAgC,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AACzE,IAAA,uBACEA,cAAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,WAAU,sBAAA,EAC1B,QAAA,EAAA,CAAA,CAAE,6BAAA,EAA+B,MAAM,CAAA,EAC1C,CAAA;AAAA,EAEJ;AACF;ACnEO,IAAM,sBAAA,GAAyBF,MAAE,MAAA,CAAO;AAAA;AAAA,EAE7C,KAAA,EAAOA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAE1B,YAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA;AAAA,EAE3C,YAAA,EAAcA,KAAAA,CAAE,QAAA,EAAS,CAAE,KAAKA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQA,KAAAA,CAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAEzE,YAAYA,KAAAA,CAAE,QAAA,EAAS,CAAE,IAAA,CAAKA,MAAE,OAAA,EAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQA,MAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA;AAAA,EAErF,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA;AAAA,EAE3C,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE/B,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,MAAM,IAAI,CAAC,EAAE,QAAA,EAAS;AAAA;AAAA,EAEtC,YAAYA,KAAAA,CAAE,QAAA,EAAS,CAAE,IAAA,CAAKA,MAAE,OAAA,EAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQA,MAAE,IAAA,EAAM,EAAE,QAAA;AAC3E,CAAC;AA6BM,SAAS,yBAAyB,GAAA,EAA4C;AACnF,EAAA,OAAO,sBAAA,CAAuB,MAAM,GAAG,CAAA;AACzC;ACtDA,IAAM,gBAAA,GAAmB,CAAA;AACzB,IAAM,mBAAA,GAAsB,EAAA;AAoBrB,SAAS,YAAyB,KAAA,EAA4B;AAEnE,EAAA,IAAI;AACF,IAAA,wBAAA,CAAyB;AAAA,MACvB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM;AAAA,KACf,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAMG,OAAAA,GAAuB,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC5D,IAAA,uBAAOD,eAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,gCAAA,EAAkCC,OAAM,CAAA,EAAE,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,MAAA,GAAuB,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAE5D,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,IAAA,uBAAOD,eAAC,QAAA,EAAA,EAAO,WAAA,EAAU,UAAU,QAAA,EAAA,CAAA,CAAE,2BAAA,EAA6B,MAAM,CAAA,EAAE,CAAA;AAAA,EAC5E;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,QAAA,EAAU,MAAM,QAAA,IAAY,gBAAA;AAAA,MAC5B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB;AAAA;AAAA,GACF;AAEJ;AAWA,SAAS,gBAAA,CAAoB;AAAA,EAC3B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,SAAA,GAAYE,aAAuB,IAAI,CAAA;AAE7C,EAAA,MAAM,oBAAA,GAAuBC,iBAAA;AAAA,IAC3B,CAAC,KAAA,KAA0B;AACzB,MAAA,IAAI,YAAA,EAAc,OAAO,YAAA,CAAa,KAAK,CAAA;AAC3C,MAAA,OAAO,UAAA,IAAc,mBAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc,UAAU;AAAA,GAC3B;AAEA,EAAA,MAAM,iBAAiBC,2BAAA,CAAe;AAAA,IACpC,OAAO,KAAA,CAAM,MAAA;AAAA;AAAA,IAEb,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,IAClC,YAAA,EAAc,oBAAA;AAAA,IACd;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,eAAe,eAAA,EAAgB;AACpD,EAAA,MAAM,SAAA,GAAY,eAAe,YAAA,EAAa;AAE9C,EAAA,uBACEJ,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,MAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,SAAA;AAAA,MACA,OAAO,EAAE,MAAA,EAAQ,KAAK,QAAA,EAAU,MAAA,EAAQ,UAAU,UAAA,EAAW;AAAA,MAE7D,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA,EAAM,UAAU,UAAA,EAAW,EAC1D,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,UAAA,KAAe;AAEhC,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA;AACnC,QAAA,MAAM,QAAQ,UAAA,CAAW,KAAA;AAEzB,QAAA,MAAM,WAAW,UAAA,GACb;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,CAAA;AAAA,UACV,eAAA,EAAiB,IAAA;AAAA,UACjB,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,GAAA,EAAK,CAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,KAAA,EAAO,MAAA;AAAA,YACP,SAAA,EAAW,CAAA,WAAA,EAAc,UAAA,CAAW,KAAK,CAAA,GAAA,CAAA;AAAA,YACzC,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA;AAAA,UACrC,SAAA,EAAW,CAAC,CAAA,KAA2C;AACrD,YAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,YACxB;AAAA,UACF;AAAA,SACF,GACA;AAAA,UACE,eAAA,EAAiB,IAAA;AAAA,UACjB,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,GAAA,EAAK,CAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,KAAA,EAAO,MAAA;AAAA,YACP,SAAA,EAAW,CAAA,WAAA,EAAc,UAAA,CAAW,KAAK,CAAA,GAAA;AAAA;AAC3C,SACF;AAEJ,QAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAA0B,GAAG,QAAA,EAC3B,qBAAW,IAAA,EAAM,KAAK,CAAA,EAAA,EADf,UAAA,CAAW,GAErB,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;AC3JO,IAAM,sBAAA,GAAyBF,MAAE,MAAA,CAAO;AAAA,EAC7C,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAASA,KAAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACtF,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAQA,KAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,IAAI,CAAC;AAC7B,CAAC;AAIM,SAAS,cAAc,GAAA,EAAgC;AAC5D,EAAA,OAAO,sBAAA,CAAuB,MAAM,GAAG,CAAA;AACzC;ACFA,IAAM,cAAA,GAA0C;AAAA,EAC9C,OAAA,EAAS,mDAAA;AAAA,EACT,OAAA,EAAS,mDAAA;AAAA,EACT,MAAA,EAAQ,6CAAA;AAAA,EACR,IAAA,EAAM,gDAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEA,SAAS,iBAAiB,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,QAAO,EAAqB;AAC9E,EAAA,MAAM,YAAY,KAAA,IAAS,MAAA;AAC3B,EAAA,uBACEE,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,EAAW,CAAA,wEAAA,EAA2E,cAAA,CAAe,OAAO,CAAC,CAAA,CAAA;AAAA,MAE5G,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA,GACZ;AAEJ;AAeO,SAAS,YAAY,GAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,cAAc,GAAG,CAAA;AAC/B,IAAA,uBAAOA,cAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,GAAuB,GAAA,CAAI,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC1D,IAAA,uBAAOA,eAAC,MAAA,EAAA,EAAK,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,gCAAA,EAAkC,MAAM,CAAA,EAAE,CAAA;AAAA,EACzE;AACF;AC/CO,IAAM,eAAA,GAAkBF,MAAE,MAAA,CAAO;AAAA,EACtC,GAAA,EAAKA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACrB,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAAA;AAE1B,CAAC,CAAA;AAaM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,SAASA,KAAAA,CAAE,KAAA,CAAM,eAAe,CAAA,CAAE,GAAA,CAAI,GAAG,wCAAwC,CAAA;AAAA,EACjF,mBAAA,EAAqBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC5D,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,MAAM,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAI;AAC3C,CAAC;AAmCM,SAAS,uBAAuB,GAAA,EAA0C;AAC/E,EAAA,OAAO,oBAAA,CAAqB,MAAM,GAAG,CAAA;AACvC;ACxDA,IAAM,QAAA,GAAW,CAAA;AAUV,SAAS,UACd,KAAA,EACA;AAEA,EAAA,IAAI,kBAAA,GAAqB,GAAA;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,sBAAA,CAAuB;AAAA,MACvC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,MAAA,EAAO,MAAO,EAAE,GAAA,EAAK,MAAA,EAAO,CAAE,CAAA;AAAA,MACjE,qBAAqB,KAAA,CAAM,mBAAA;AAAA,MAC3B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM;AAAA,KACf,CAAA;AACD,IAAA,kBAAA,GAAqB,SAAA,CAAU,mBAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,GAAuB,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC5D,IAAA,uBAAOE,eAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,8BAAA,EAAgC,MAAM,CAAA,EAAE,CAAA;AAAA,EACtE;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,kBAAA;AACtC,EAAA,MAAM,cAAA,GAA+B,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAEpE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEA,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,MAAA,EAAQ,cAAA;AAAA,QACR,YAAY,KAAA,CAAM;AAAA;AAAA,KACpB;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA,EAAQ,cAAA;AAAA,MACR,YAAY,KAAA,CAAM;AAAA;AAAA,GACpB;AAEJ;AAYO,SAAS,mBACd,KAAA,EACA;AAEA,EAAA,IAAI,kBAAA,GAAqB,GAAA;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,sBAAA,CAAuB;AAAA,MACvC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,MAAA,EAAO,MAAO,EAAE,GAAA,EAAK,MAAA,EAAO,CAAE,CAAA;AAAA,MACjE,qBAAqB,KAAA,CAAM,mBAAA;AAAA,MAC3B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM;AAAA,KACf,CAAA;AACD,IAAA,kBAAA,GAAqB,SAAA,CAAU,mBAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,GAAuB,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC5D,IAAA,uBAAOA,eAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,8BAAA,EAAgC,MAAM,CAAA,EAAE,CAAA;AAAA,EACtE;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,mBAAA,EAAqB,kBAAA;AAAA,MACrB,YAAY,KAAA,CAAM;AAAA;AAAA,GACpB;AAEJ;AAIA,SAAS,uBAAA,CAAwF;AAAA,EAC/F,OAAA;AAAA,EACA,KAAA;AAAA,EACA,mBAAA,GAAsB,GAAA;AAAA,EACtB,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAoE;AAClE,EAAA,MAAM,cAAA,GAA+B,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC9D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIK,cAAA,CAA0B,EAAE,CAAA;AAGpD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,EAAE,CAAA;AACV,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,CAAC,KAAA,KAAU;AACrC,MAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAC,CAAA;AAAA,IACvC,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,CAAI,WAAA,EAAY;AAAA,IAClB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,GAAS,mBAAA;AAEhC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEN,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA,EAAQ,cAAA;AAAA,QACR;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,cAAA;AAAA,MACR;AAAA;AAAA,GACF;AAEJ;AAaA,SAAS,UAAA,CACP,KACA,GAAA,EACiB;AACjB,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,OAAO,GAAA,CAAI,OAAO,GAAW,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA,CAAQ,GAAA,CAAgC,GAAA,CAAI,GAAG,KAAK,EAAE,CAAA;AAC/D;AAEA,SAAS,WAAA,CAAkD;AAAA,EACzD,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,QAAA,GAAW,CAAA,CAAE,yBAAA,EAA2B,MAAM,CAAA;AACpD,EAAA,uBACED,eAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,iBAAe,IAAA,CAAK,MAAA;AAAA,MACpB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,gBAAgB,UAAA,EAAW;AAAA,MAEnD,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,WACC,QAAA,kBAAAA,cAAAA,CAAC,QACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,eAAC,IAAA,EAAA,EAAiB,KAAA,EAAM,OACrB,QAAA,EAAA,GAAA,CAAI,MAAA,EAAA,EADE,IAAI,GAEb,CACD,GACH,CAAA,EACF,CAAA;AAAA,wBACAA,cAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,MAAA,KAAW,oBACfA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAS,OAAA,CAAQ,MAAA,EAAQ,YAAA,EAAY,QAAA,EACtC,QAAA,EAAA,QAAA,EACH,CAAA,EACF,CAAA,GAEA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,QAAA,qBACbA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAMC,iBAAe,QAAA,GAAW,CAAA;AAAA,YACzB,GAAI,UAAA,GACD;AAAA,cACE,IAAA,EAAM,QAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cACV,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAU;AAAA,cAC3B,OAAA,EAAS,MAAM,UAAA,CAAW,GAAA,EAAa,QAAQ,CAAA;AAAA,cAC/C,SAAA,EAAW,CAAC,CAAA,KAAgD;AAC1D,gBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,UAAA,CAAW,KAAa,QAAQ,CAAA;AAAA,gBAClC;AAAA,cACF;AAAA,gBAEF,EAAC;AAAA,YAEJ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA,CAAC,IAAA,EAAA,EAAkB,QAAA,EAAA,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA,EAAA,EAA7B,GAAA,CAAI,GAA2B,CACzC;AAAA,WAAA;AAAA,UAtBE,GAAA,CAAgC,MAAM,IAAA,GACnC,MAAA,CAAQ,IAAgC,EAAE,CAAA,GAC1C,OAAO,QAAQ,CAAA;AAAA,SAsBxB,CAAA,EAEL;AAAA;AAAA;AAAA,GACF;AAEJ;AAIA,SAAS,YAAA,CAAmD;AAAA,EAC1D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,MAAA,EAAQ,OAAA;AAAA,EACR;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,SAAA,GAAYE,aAAuB,IAAI,CAAA;AAE7C,EAAA,MAAM,iBAAiBE,2BAAAA,CAAe;AAAA,IACpC,OAAO,IAAA,CAAK,MAAA;AAAA;AAAA,IAEZ,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,IAClC,YAAA,EAAcD,iBAAAA,CAAY,MAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IACtC,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,eAAe,eAAA,EAAgB;AACpD,EAAA,MAAM,SAAA,GAAY,eAAe,YAAA,EAAa;AAE9C,EAAA,uBACEH,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,MAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MAOL,QAAA,EAAU,CAAA;AAAA,MAEV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,OAAO,EAAE,MAAA,EAAQ,KAAK,QAAA,EAAU,MAAA,EAAQ,UAAU,UAAA,EAAW;AAAA,MAE7D,QAAA,kBAAAD,eAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAY,SAAA;AAAA,UACZ,iBAAe,IAAA,CAAK,MAAA;AAAA,UACpB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,gBAAgB,UAAA,EAAW;AAAA,UAEnD,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAAC,WACC,QAAA,kBAAAA,cAAAA,CAAC,QACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,eAAC,IAAA,EAAA,EAAiB,KAAA,EAAM,OACrB,QAAA,EAAA,GAAA,CAAI,MAAA,EAAA,EADE,IAAI,GAEb,CACD,GACH,CAAA,EACF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,MAAA,EAAQ,GAAG,SAAS,CAAA,EAAA,CAAA;AAAA,kBACpB,QAAA,EAAU,UAAA;AAAA,kBACV,OAAA,EAAS;AAAA,iBACX;AAAA,gBAEC,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,UAAA,KAAe;AAEhC,kBAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,KAAK,KAAM,EAAC;AACxC,kBAAA,uBACEA,cAAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBAMC,eAAA,EAAe,WAAW,KAAA,GAAQ,CAAA;AAAA,sBAClC,KAAA,EAAO;AAAA,wBACL,QAAA,EAAU,UAAA;AAAA,wBACV,GAAA,EAAK,CAAA;AAAA,wBACL,IAAA,EAAM,CAAA;AAAA,wBACN,KAAA,EAAO,MAAA;AAAA,wBACP,SAAA,EAAW,CAAA,WAAA,EAAc,UAAA,CAAW,KAAK,CAAA,GAAA,CAAA;AAAA,wBACzC,OAAA,EAAS,MAAA;AAAA,wBACT,GAAI,UAAA,GAAa,EAAE,MAAA,EAAQ,SAAA,KAAc;AAAC,uBAC5C;AAAA,sBACC,GAAI,UAAA,GACD;AAAA,wBACE,IAAA,EAAM,QAAA;AAAA,wBACN,QAAA,EAAU,CAAA;AAAA,wBACV,OAAA,EAAS,MAAM,UAAA,CAAW,GAAA,EAAa,WAAW,KAAK,CAAA;AAAA,wBACvD,SAAA,EAAW,CAAC,CAAA,KAAgD;AAC1D,0BAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,4BAAA,CAAA,CAAE,cAAA,EAAe;AACjB,4BAAA,UAAA,CAAW,GAAA,EAAa,WAAW,KAAK,CAAA;AAAA,0BAC1C;AAAA,wBACF;AAAA,0BAEF,EAAC;AAAA,sBAEJ,kBAAQ,GAAA,CAAI,CAAC,wBACZA,cAAAA,CAAC,QAAiB,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,IAC9B,QAAA,EAAA,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA,EAAA,EADb,GAAA,CAAI,GAEb,CACD;AAAA,qBAAA;AAAA,oBAhCE,GAAA,CAAgC,MAAM,IAAA,GACnC,MAAA,CAAQ,IAAgC,EAAE,CAAA,GAC1C,CAAA,KAAA,EAAQ,UAAA,CAAW,KAAK,CAAA;AAAA,mBA+BhC;AAAA,gBAEJ,CAAC;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA,GACF;AAEJ","file":"display.cjs","sourcesContent":["/**\n * EmptyState.logic.ts — pure, framework-agnostic helpers.\n * No JSX here — shared between React 19 and Preact 10 runtimes.\n */\n\nexport type EmptyStateActionVariant = \"primary\" | \"secondary\";\n\n/**\n * Tailwind class maps for CTA button variants.\n * Using slate neutrals (OKLCH-tinted, never pure gray).\n */\nexport const ACTION_VARIANT_CLASSES: Record<EmptyStateActionVariant, string> = {\n primary:\n \"inline-flex items-center justify-center rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-slate-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-900 disabled:pointer-events-none disabled:opacity-50\",\n secondary:\n \"inline-flex items-center justify-center rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 shadow-sm transition-colors hover:bg-slate-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-400 disabled:pointer-events-none disabled:opacity-50\",\n};\n","import { z } from \"zod\";\n\n// i18nKeys: EmptyState.error.invalidProps\n\n/**\n * EmptyState component props schema.\n *\n * Empty-set illustration + title + description + optional CTA.\n * Consumer-driven i18n: caller passes already-localized strings.\n *\n * icon — optional ReactNode / PreactNode passed by the caller\n * title — required heading (h2, consumer-driven i18n)\n * description — optional supporting text\n * action — optional CTA: { label, onClick, variant? }\n */\nexport const EmptyStatePropsSchema = z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n action: z\n .object({\n label: z.string().min(1),\n variant: z.enum([\"primary\", \"secondary\"]).default(\"primary\"),\n })\n .optional(),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type EmptyStatePropsSchemaInput = z.input<typeof EmptyStatePropsSchema>;\nexport type EmptyStatePropsSchemaOutput = z.output<typeof EmptyStatePropsSchema>;\n\n/**\n * Full EmptyState props including framework-specific node types and callback.\n * `icon` and `action.onClick` are excluded from Zod (functions/nodes are not serializable).\n *\n * Note: action.variant is optional for callers — Zod applies \"primary\" default at parse time.\n */\nexport type EmptyStateProps = Omit<EmptyStatePropsSchemaOutput, \"action\"> & {\n // biome-ignore lint/suspicious/noExplicitAny: cross-runtime ReactNode | VNode\n icon?: any;\n action?: {\n label: string;\n variant?: \"primary\" | \"secondary\";\n onClick: () => void;\n };\n};\n\nexport function validateEmptyStateProps(raw: unknown): EmptyStatePropsSchemaOutput {\n return EmptyStatePropsSchema.parse(raw);\n}\n","/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for all\n * Mosaic components (v0.3.0). Inlined here so that `<Comp>` renderers can\n * resolve `t(key, locale)` without dragging react-i18next into the component\n * runtime (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n *\n * Forms keys added — v0.3.0-C-PR1 (Axis 5/6 i18n pass).\n * Convention: Forms.<Component>.<context>.<id>\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n // ─── Non-forms components ──────────────────────────────────────────────────\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm: invalid options\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider: invalid props\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField: invalid props\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"This field is required\",\n \"ErrorDisplay.error.min\": \"Value is below the minimum\",\n \"ErrorDisplay.error.max\": \"Value exceeds the maximum\",\n \"ErrorDisplay.error.minLength\": \"Input is too short\",\n \"ErrorDisplay.error.maxLength\": \"Input is too long\",\n \"ErrorDisplay.error.pattern\": \"Invalid format\",\n \"ErrorDisplay.error.email\": \"Enter a valid email address\",\n \"ErrorDisplay.error.url\": \"Enter a valid URL\",\n \"ErrorDisplay.error.generic\": \"Invalid value\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Submit form\",\n \"SubmitButton.state.loading\": \"Submitting…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton: invalid props\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Input field\",\n \"Input.error.required\": \"This field is required\",\n \"Input.error.invalid\": \"Invalid value\",\n \"Input.error.tooLong\": \"Input is too long\",\n \"Input.error.tooShort\": \"Input is too short\",\n \"Input.error.invalidProps\": \"Input: invalid props\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Text area\",\n \"Textarea.error.required\": \"This field is required\",\n \"Textarea.error.tooLong\": \"Text is too long\",\n \"Textarea.counter.remaining\": \"characters remaining\",\n \"Textarea.error.invalidProps\": \"Textarea: invalid props\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"List of items\",\n \"FieldArray.aria.addItem\": \"Add item\",\n \"FieldArray.aria.removeItem\": \"Remove item\",\n \"FieldArray.error.invalidProps\": \"FieldArray: invalid props\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Checkbox\",\n \"Checkbox.error.required\": \"This field must be checked\",\n \"Checkbox.error.invalidProps\": \"Checkbox: invalid props\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Multi-select field\",\n \"MultiSelect.aria.removeChip\": \"Remove\",\n \"MultiSelect.error.required\": \"Select at least one option\",\n \"MultiSelect.error.maxItems\": \"Maximum number of selections reached\",\n \"MultiSelect.placeholder\": \"Select options…\",\n \"MultiSelect.search.placeholder\": \"Search…\",\n \"MultiSelect.empty\": \"No options available\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect: invalid props\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Radio group\",\n \"RadioGroup.error.required\": \"Select one option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup: invalid props\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Select an option…\",\n \"Select.search.placeholder\": \"Search…\",\n \"Select.empty\": \"No options available\",\n \"Select.error.required\": \"Select an option\",\n \"Select.error.invalidProps\": \"Select: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n // ─── Non-forms components ──────────────────────────────────────────────────\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm : options invalides\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider : propriétés invalides\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField : propriétés invalides\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"Ce champ est obligatoire\",\n \"ErrorDisplay.error.min\": \"La valeur est inférieure au minimum\",\n \"ErrorDisplay.error.max\": \"La valeur dépasse le maximum\",\n \"ErrorDisplay.error.minLength\": \"La saisie est trop courte\",\n \"ErrorDisplay.error.maxLength\": \"La saisie est trop longue\",\n \"ErrorDisplay.error.pattern\": \"Format invalide\",\n \"ErrorDisplay.error.email\": \"Saisissez une adresse e-mail valide\",\n \"ErrorDisplay.error.url\": \"Saisissez une URL valide\",\n \"ErrorDisplay.error.generic\": \"Valeur invalide\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Soumettre le formulaire\",\n \"SubmitButton.state.loading\": \"Envoi en cours…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton : propriétés invalides\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Champ de saisie\",\n \"Input.error.required\": \"Ce champ est obligatoire\",\n \"Input.error.invalid\": \"Valeur invalide\",\n \"Input.error.tooLong\": \"La saisie est trop longue\",\n \"Input.error.tooShort\": \"La saisie est trop courte\",\n \"Input.error.invalidProps\": \"Input : propriétés invalides\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Zone de texte\",\n \"Textarea.error.required\": \"Ce champ est obligatoire\",\n \"Textarea.error.tooLong\": \"Le texte est trop long\",\n \"Textarea.counter.remaining\": \"caractères restants\",\n \"Textarea.error.invalidProps\": \"Textarea : propriétés invalides\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"Liste d'éléments\",\n \"FieldArray.aria.addItem\": \"Ajouter un élément\",\n \"FieldArray.aria.removeItem\": \"Supprimer l'élément\",\n \"FieldArray.error.invalidProps\": \"FieldArray : propriétés invalides\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Case à cocher\",\n \"Checkbox.error.required\": \"Ce champ doit être coché\",\n \"Checkbox.error.invalidProps\": \"Checkbox : propriétés invalides\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Champ de sélection multiple\",\n \"MultiSelect.aria.removeChip\": \"Retirer\",\n \"MultiSelect.error.required\": \"Sélectionnez au moins une option\",\n \"MultiSelect.error.maxItems\": \"Nombre maximum de sélections atteint\",\n \"MultiSelect.placeholder\": \"Sélectionner des options…\",\n \"MultiSelect.search.placeholder\": \"Rechercher…\",\n \"MultiSelect.empty\": \"Aucune option disponible\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect : propriétés invalides\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Groupe de boutons radio\",\n \"RadioGroup.error.required\": \"Sélectionnez une option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup : propriétés invalides\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Sélectionner une option…\",\n \"Select.search.placeholder\": \"Rechercher…\",\n \"Select.empty\": \"Aucune option disponible\",\n \"Select.error.required\": \"Sélectionnez une option\",\n \"Select.error.invalidProps\": \"Select : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","\"use client\";\n\n// i18nKeys: EmptyState.error.invalidProps\n\nimport type { ReactNode } from \"react\";\nimport { ACTION_VARIANT_CLASSES } from \"../../../../components/display/EmptyState.logic.js\";\nimport {\n type EmptyStateProps,\n validateEmptyStateProps,\n} from \"../../../../components/display/EmptyState.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\n// ─── Inner (validated props) ──────────────────────────────────────────────────\n\nfunction EmptyStateInner({\n icon,\n title,\n description,\n action,\n locale: _locale,\n}: EmptyStateProps & { icon?: ReactNode }) {\n const variant = action?.variant ?? \"primary\";\n\n return (\n <section\n aria-label={title}\n className=\"flex flex-col items-center justify-center gap-4 px-6 py-12 text-center\"\n >\n {icon && (\n <span aria-hidden=\"true\" className=\"text-slate-400\">\n {icon}\n </span>\n )}\n <h2 className=\"text-base font-semibold text-slate-900\">{title}</h2>\n {description && (\n <p className=\"max-w-sm text-sm leading-relaxed text-slate-500\">{description}</p>\n )}\n {action && (\n <button type=\"button\" onClick={action.onClick} className={ACTION_VARIANT_CLASSES[variant]}>\n {action.label}\n </button>\n )}\n </section>\n );\n}\n\n/**\n * EmptyState — cross-runtime empty-set display primitive (React 19 implementation).\n *\n * Accepts `Record<string, unknown>` for MCP postMessage injection safety.\n * Zod validation narrows before render. Invalid props → accessible error span.\n *\n * WCAG-AA:\n * - <section aria-label={title}> → role=\"region\" landmark (no Biome lint, correct semantics)\n * - heading hierarchy: h2 (title) — caller manages the h1 context\n * - action button is keyboard-accessible (tab + enter/space)\n */\nexport function EmptyState(\n raw: Omit<EmptyStateProps, \"locale\"> &\n Partial<Pick<EmptyStateProps, \"locale\">> & { icon?: ReactNode },\n) {\n try {\n const parsed = validateEmptyStateProps(raw);\n return (\n <EmptyStateInner\n {...parsed}\n icon={raw.icon}\n action={\n parsed.action && raw.action?.onClick\n ? { ...parsed.action, onClick: raw.action.onClick }\n : undefined\n }\n />\n );\n } catch (err) {\n console.error(\"[EmptyState] Invalid props — component will not render.\", err);\n const locale = (raw as Record<string, unknown>).locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"EmptyState.error.invalidProps\", locale)}</span>;\n }\n}\n","/**\n * Skeleton.logic.ts — shared pure logic (no JSX, no runtime dependency).\n *\n * Used by both React 19 and Preact 10 runtime implementations.\n * Tests live in __tests__/Skeleton.logic.test.ts (co-located schema/logic layer).\n */\n\nimport type { SkeletonProps } from \"./Skeleton.schema.js\";\n\nexport type SkeletonAnimation = SkeletonProps[\"animation\"];\nexport type SkeletonVariant = SkeletonProps[\"variant\"];\n\n/**\n * Returns the CSS class name(s) for the shimmer animation.\n *\n * \"pulse\" — Tailwind `animate-pulse` (opacity oscillation, reduced-motion safe via Tailwind)\n * \"wave\" — custom keyframe class `skeleton-wave` (left-to-right gradient sweep)\n * \"none\" — no animation class\n *\n * Note: \"pulse\" uses Tailwind's built-in `animate-pulse` which already respects\n * `prefers-reduced-motion: reduce` via the `motion-safe:` variant — no extra CSS needed.\n * For \"wave\" consumers must include the `.skeleton-wave` keyframe in their CSS.\n */\nexport function getAnimationClass(animation: SkeletonAnimation): string {\n switch (animation) {\n case \"pulse\":\n return \"animate-pulse\";\n case \"wave\":\n return \"skeleton-wave\";\n case \"none\":\n return \"\";\n }\n}\n\n/**\n * Returns the base layout class for the skeleton variant.\n *\n * \"rect\" → rounded rectangle block\n * \"circle\" → rounded-full (perfect circle when width === height)\n * \"text\" → rounded bar, slightly shorter height for text-line appearance\n */\nexport function getVariantClass(variant: SkeletonVariant): string {\n switch (variant) {\n case \"rect\":\n return \"rounded-md\";\n case \"circle\":\n return \"rounded-full\";\n case \"text\":\n return \"rounded\";\n }\n}\n\n/**\n * Base background class applied to all skeleton shapes.\n * Uses a neutral gray that works on light and dark surfaces.\n */\nexport const SKELETON_BG_CLASS = \"bg-gray-200 dark:bg-gray-700\";\n\n/**\n * Generate a stable key for each text-line span using the line index.\n * Using `line-<index>` string is stable (not array index as key directly).\n */\nexport function textLineKey(index: number): string {\n return `skeleton-line-${index}`;\n}\n\n/**\n * For multi-line text skeletons, optionally narrow the last line to ~75%\n * to mimic a natural paragraph end. Returns width override CSS string or undefined.\n */\nexport function lastLineWidth(index: number, total: number, baseWidth: string): string {\n if (total > 1 && index === total - 1) {\n // Last line narrowed to 75% of the container (natural paragraph look)\n return \"75%\";\n }\n return baseWidth;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Skeleton.error.invalidProps\n\n/**\n * Skeleton component props schema.\n *\n * variant — shape of the placeholder:\n * \"rect\" → rectangular block (default)\n * \"circle\" → circular avatar / icon placeholder\n * \"text\" → single or multi-line text placeholder\n *\n * width / height — CSS values (string) or pixels (number).\n * \"rect\" defaults: width=\"100%\", height=100\n * \"circle\" defaults: width=height (equal, square rendered as circle)\n * \"text\" defaults: width=\"100%\", height=16\n *\n * count — number of text line spans (only meaningful for variant=\"text\").\n * Default 1. Ignored for rect/circle.\n *\n * animation — shimmer style:\n * \"pulse\" → opacity pulse (default)\n * \"wave\" → left-to-right gradient sweep\n * \"none\" → static placeholder (auto-selected when prefers-reduced-motion)\n */\nexport const SkeletonPropsSchema = z.object({\n variant: z.enum([\"rect\", \"circle\", \"text\"]).default(\"rect\"),\n width: z.union([z.string().min(1), z.number().positive()]).optional(),\n height: z.union([z.string().min(1), z.number().positive()]).optional(),\n count: z.number().int().min(1).max(20).default(1),\n animation: z.enum([\"pulse\", \"wave\", \"none\"]).default(\"pulse\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type SkeletonProps = z.infer<typeof SkeletonPropsSchema>;\n\nexport function validateSkeletonProps(raw: unknown): SkeletonProps {\n return SkeletonPropsSchema.parse(raw);\n}\n\n/**\n * Resolve final width/height CSS values given the variant and raw props.\n * Centralised here so React + Preact runtimes share identical defaults.\n */\nexport function resolveSkeletonDimensions(\n variant: SkeletonProps[\"variant\"],\n width: SkeletonProps[\"width\"],\n height: SkeletonProps[\"height\"],\n): { widthCss: string; heightCss: string } {\n const toCss = (v: string | number | undefined, fallback: string): string => {\n if (v === undefined) return fallback;\n if (typeof v === \"number\") return `${v}px`;\n return v;\n };\n\n if (variant === \"circle\") {\n const size =\n width !== undefined\n ? toCss(width, \"40px\")\n : height !== undefined\n ? toCss(height, \"40px\")\n : \"40px\";\n return { widthCss: size, heightCss: size };\n }\n\n if (variant === \"text\") {\n return {\n widthCss: toCss(width, \"100%\"),\n heightCss: toCss(height, \"16px\"),\n };\n }\n\n // rect (default)\n return {\n widthCss: toCss(width, \"100%\"),\n heightCss: toCss(height, \"100px\"),\n };\n}\n","// i18nKeys: Skeleton.aria.label, Skeleton.error.invalidProps\n\nimport React from \"react\";\nimport {\n SKELETON_BG_CLASS,\n getAnimationClass,\n getVariantClass,\n lastLineWidth,\n textLineKey,\n} from \"../../../../components/display/Skeleton.logic.js\";\nimport {\n type SkeletonProps,\n resolveSkeletonDimensions,\n validateSkeletonProps,\n} from \"../../../../components/display/Skeleton.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\nfunction SkeletonInner({ variant, width, height, count, animation, locale }: SkeletonProps) {\n const { widthCss, heightCss } = resolveSkeletonDimensions(variant, width, height);\n const animClass = getAnimationClass(animation);\n const variantClass = getVariantClass(variant);\n const ariaLabel = t(\"Skeleton.aria.label\", locale);\n const baseClass = `${SKELETON_BG_CLASS} ${variantClass} ${animClass}`.trim();\n\n if (variant === \"text\") {\n return (\n // biome-ignore lint/a11y/useSemanticElements: role=\"status\" is the correct ARIA pattern for loading indicators; <output> conveys form output semantics which is incorrect here\n <div role=\"status\" aria-label={ariaLabel} aria-busy=\"true\" className=\"flex flex-col gap-2\">\n {Array.from({ length: count }, (_, i) => (\n <span\n key={textLineKey(i)}\n className={`block ${baseClass}`}\n style={{\n width: lastLineWidth(i, count, widthCss),\n height: heightCss,\n }}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n role=\"status\"\n aria-label={ariaLabel}\n aria-busy=\"true\"\n className={`block ${baseClass}`}\n style={{ width: widthCss, height: heightCss }}\n />\n );\n}\n\n/**\n * Skeleton — cross-runtime loading placeholder (React 19 implementation).\n *\n * Accepts `Record<string, unknown>` for MCP postMessage injection safety.\n * Zod validation narrows before render. Invalid props → accessible error span.\n *\n * Animation \"none\" is auto-applied when prefers-reduced-motion is set (via\n * Tailwind's animate-pulse which respects the media query natively), or by\n * passing animation=\"none\" explicitly.\n *\n * WCAG-AA:\n * - role=\"status\" + aria-busy=\"true\" on the container\n * - aria-label resolves via t() in EN/FR\n * - aria-hidden=\"true\" on individual line spans (status role covers the group)\n */\nexport function Skeleton(raw: Record<string, unknown>) {\n try {\n const props = validateSkeletonProps(raw);\n return <SkeletonInner {...props} />;\n } catch {\n const locale = (raw as Record<string, unknown>).locale === \"fr\" ? \"fr\" : \"en\";\n return (\n <span role=\"alert\" className=\"text-red-600 text-sm\">\n {t(\"Skeleton.error.invalidProps\", locale)}\n </span>\n );\n }\n}\n","// i18nKeys: VirtualList.empty.message, VirtualList.error.invalidProps\n\nimport type { ReactNode } from \"react\";\nimport { z } from \"zod\";\n\n/**\n * VirtualList Zod props schema.\n *\n * Runtime functions (renderItem, estimateSize, onRowClick) are excluded from\n * Zod per §18.5 (runtime functions not serialisable). They are typed separately\n * in VirtualListProps<T> below.\n *\n * Serialisable fields validated at render time for safe MCP postMessage injection.\n */\nexport const VirtualListPropsSchema = z.object({\n /** Array of items to render — required, can be empty */\n items: z.array(z.unknown()),\n /** Fixed row height in px — mutually exclusive with estimateSize */\n itemHeight: z.number().positive().optional(),\n /** Variable row height estimator — mutually exclusive with itemHeight */\n estimateSize: z.function().args(z.number()).returns(z.number()).optional(),\n /** Row renderer — required (runtime function, excluded from strict Zod parse but validated for presence) */\n renderItem: z.function().args(z.unknown(), z.number()).returns(z.unknown()).optional(),\n /** Rows to render outside visible area (default: 5) */\n overscan: z.number().int().min(0).optional(),\n /** CSS class applied to the scroll container */\n className: z.string().optional(),\n /** Locale for built-in empty state + error messages */\n locale: z.enum([\"en\", \"fr\"]).optional(),\n /** a11y: when provided, rows become keyboard-activable (role=button + tabIndex=0 + Enter/Space) */\n onRowClick: z.function().args(z.unknown(), z.number()).returns(z.void()).optional(),\n});\n\nexport type VirtualListPropsSchemaInput = z.input<typeof VirtualListPropsSchema>;\nexport type VirtualListPropsSchemaOutput = z.output<typeof VirtualListPropsSchema>;\n\n/**\n * Full typed VirtualList props for JSX consumers.\n * Generic over item type T.\n */\nexport type VirtualListProps<T = unknown> = {\n /** Array of items to render */\n items: T[];\n /** Fixed row height in px — use when all rows are the same height */\n itemHeight?: number;\n /** Variable height estimator — use when rows have different heights */\n estimateSize?: (index: number) => number;\n /** Required: renders one item */\n renderItem: (item: T, index: number) => ReactNode;\n /** Called when a row is clicked/activated — triggers a11y role=button + keyboard */\n onRowClick?: (item: T, index: number) => void;\n /** Rows rendered outside viewport (default: 5) */\n overscan?: number;\n /** CSS class applied to the scroll container */\n className?: string;\n /** Locale for built-in strings (default: \"en\") */\n locale?: \"en\" | \"fr\";\n};\n\n/** Validates serialisable portion of VirtualList props — throws on failure */\nexport function validateVirtualListProps(raw: unknown): VirtualListPropsSchemaOutput {\n return VirtualListPropsSchema.parse(raw);\n}\n","// i18nKeys: VirtualList.empty.message, VirtualList.error.invalidProps\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type React from \"react\";\nimport { useCallback, useRef } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type VirtualListProps, validateVirtualListProps } from \"./VirtualList.schema.js\";\n\nconst DEFAULT_OVERSCAN = 5;\nconst DEFAULT_ITEM_HEIGHT = 40;\n\n/**\n * VirtualList — generic virtualized list component.\n *\n * Cross-runtime: same file used by React 19 and Preact 10 (via preact/compat alias in tsup).\n * Virtualization: @tanstack/react-virtual v3 (already in mosaic deps via TableView).\n * a11y: WCAG-AA — when onRowClick provided, rows get role=button + tabIndex=0 + Enter/Space.\n * Zod-validated serialisable props; renders role=\"alert\" fallback on failure.\n *\n * API:\n * items: T[] — generic item array\n * itemHeight?: number — fixed px height (mutually exclusive with estimateSize)\n * estimateSize?: (index) => number — variable height estimator\n * renderItem: (item, index) => ReactNode — required row renderer\n * onRowClick?: (item, index) => void — a11y click handler\n * overscan?: number — rows outside viewport (default: 5)\n * className?: string — scroll container class\n * locale?: \"en\" | \"fr\" — built-in string locale\n */\nexport function VirtualList<T = unknown>(props: VirtualListProps<T>) {\n // Validate serialisable props — functions excluded per §18.5\n try {\n validateVirtualListProps({\n items: props.items,\n itemHeight: props.itemHeight,\n overscan: props.overscan,\n className: props.className,\n locale: props.locale,\n });\n } catch {\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"VirtualList.error.invalidProps\", locale)}</div>;\n }\n\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n\n if (props.items.length === 0) {\n return <output aria-live=\"polite\">{t(\"VirtualList.empty.message\", locale)}</output>;\n }\n\n return (\n <VirtualListInner<T>\n items={props.items}\n itemHeight={props.itemHeight}\n estimateSize={props.estimateSize}\n renderItem={props.renderItem}\n onRowClick={props.onRowClick}\n overscan={props.overscan ?? DEFAULT_OVERSCAN}\n className={props.className}\n locale={locale}\n />\n );\n}\n\n// ── Inner implementation — rendered after validation passes ───────────────────\n\ntype VirtualListInnerProps<T> = Required<\n Pick<VirtualListProps<T>, \"items\" | \"renderItem\" | \"overscan\">\n> &\n Pick<VirtualListProps<T>, \"itemHeight\" | \"estimateSize\" | \"onRowClick\" | \"className\"> & {\n locale: MosaicLocale;\n };\n\nfunction VirtualListInner<T>({\n items,\n itemHeight,\n estimateSize,\n renderItem,\n onRowClick,\n overscan,\n className,\n}: VirtualListInnerProps<T>) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const resolvedEstimateSize = useCallback(\n (index: number): number => {\n if (estimateSize) return estimateSize(index);\n return itemHeight ?? DEFAULT_ITEM_HEIGHT;\n },\n [estimateSize, itemHeight],\n );\n\n const rowVirtualizer = useVirtualizer({\n count: items.length,\n /* v8 ignore next 1 */\n getScrollElement: () => scrollRef.current,\n estimateSize: resolvedEstimateSize,\n overscan,\n });\n\n const virtualItems = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n return (\n <div\n data-virtual=\"true\"\n ref={scrollRef}\n className={className}\n style={{ height: 400, overflow: \"auto\", position: \"relative\" }}\n >\n <div style={{ height: `${totalSize}px`, position: \"relative\" }}>\n {virtualItems.map((virtualRow) => {\n /* v8 ignore next */\n const item = items[virtualRow.index] as T;\n const index = virtualRow.index;\n\n const rowProps = onRowClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"data-list-row\": true,\n style: {\n position: \"absolute\" as const,\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n cursor: \"pointer\",\n },\n onClick: () => onRowClick(item, index),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(item, index);\n }\n },\n }\n : {\n \"data-list-row\": true,\n style: {\n position: \"absolute\" as const,\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n },\n };\n\n return (\n <div key={virtualRow.key} {...rowProps}>\n {renderItem(item, index)}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","// i18nKeys: StatusBadge.aria.status, StatusBadge.error.invalidProps\n\nimport React from \"react\";\nimport {\n type StatusBadgeProps,\n validateProps,\n} from \"../../../../components/media/StatusBadge.schema.js\";\nimport { type MosaicLocale, t } from \"../../../../i18n/strings.js\";\n\ntype Variant = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n success: \"bg-green-100 text-green-800 ring-1 ring-green-300\",\n warning: \"bg-amber-100 text-amber-800 ring-1 ring-amber-300\",\n danger: \"bg-red-100 text-red-800 ring-1 ring-red-300\",\n info: \"bg-blue-100 text-blue-800 ring-1 ring-blue-300\",\n neutral: \"bg-slate-100 text-slate-800 ring-1 ring-slate-300\",\n};\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeProps) {\n const ariaLabel = label ?? status;\n return (\n <output\n aria-label={ariaLabel}\n lang={locale}\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {label ?? status}\n </output>\n );\n}\n\n/**\n * StatusBadge — cross-runtime status indicator badge (React 19 implementation).\n *\n * Accepts `Record<string, unknown>` for MCP postMessage injection safety.\n * Zod validation narrows before render. Invalid props → accessible error span.\n *\n * WCAG-AA:\n * - `<output>` has implicit role=\"status\" per ARIA spec §5.3.17\n * - aria-label from `label` prop (falls back to `status` string)\n * - `lang` attribute set to locale for correct AT language announcement\n *\n * Bilingue: EN/FR strings resolved via t() from i18n/strings — no hardcoded literals.\n */\nexport function StatusBadge(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <StatusBadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"StatusBadge.error.invalidProps\", locale)}</span>;\n }\n}\n","import type { ReactNode } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { z } from \"zod\";\n\n// i18nKeys: TableView.aria.table, TableView.pagination.next, TableView.pagination.prev, TableView.empty.message, TableView.error.invalidProps\n\nexport const ColumnDefSchema = z.object({\n key: z.string().min(1),\n header: z.string().min(1),\n // render is a runtime function — excluded from Zod, typed separately\n});\n\nexport type ColumnDef<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n key: string;\n header: string;\n render?: (row: TRow) => ReactNode;\n};\n\n/**\n * Validates the serialisable (non-function) portion of TableView props.\n * The `rows$` Observable and `render` callbacks are not Zod-parseable and\n * must be validated at the call-site type level.\n */\nexport const TableViewPropsSchema = z.object({\n columns: z.array(ColumnDefSchema).min(1, \"TableView requires at least one column\"),\n virtualizeThreshold: z.number().int().positive().default(100),\n ariaLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TableViewPropsSchemaInput = z.input<typeof TableViewPropsSchema>;\nexport type TableViewPropsSchemaOutput = z.output<typeof TableViewPropsSchema>;\n\n/**\n * Props for the static TableView — accepts a plain array of rows.\n * Primary API for already-fetched data (no rxjs required).\n */\nexport type TableViewProps<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n columns: ColumnDef<TRow>[];\n rows: Partial<TRow>[];\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: when provided, rows become keyboard-activable (role=button + tabIndex=0 + Enter/Space). 5-BU ABSOLUTE blocker fix. */\n onRowClick?: (row: TRow, index: number) => void;\n};\n\n/**\n * Props for StreamingTableView — accepts an RxJS Observable for incremental row appending.\n * Consumers using this variant MUST install rxjs ^7.8.0 in their project.\n */\nexport type StreamingTableViewProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> = {\n columns: ColumnDef<TRow>[];\n rows$: Observable<Partial<TRow>[]>;\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: same semantics as static TableView. */\n onRowClick?: (row: TRow, index: number) => void;\n};\n\nexport function validateTableViewProps(raw: unknown): TableViewPropsSchemaOutput {\n return TableViewPropsSchema.parse(raw);\n}\n","// i18nKeys: TableView.aria.table, TableView.pagination.next, TableView.pagination.prev, TableView.empty.message, TableView.error.invalidProps\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { validateTableViewProps } from \"./TableView.schema\";\nimport type { StreamingTableViewProps, TableViewProps } from \"./TableView.schema\";\n\nconst OVERSCAN = 5;\n\n/**\n * TableView — Static rows variant (primary API).\n *\n * Accepts `rows: Row[]` for already-fetched data — no rxjs required.\n * Activates TanStack Virtual v3 windowing when rows.length > virtualizeThreshold.\n * Zod-validates serialisable props; renders role=\"alert\" fallback on failure.\n * Fully accessible: aria-rowcount, aria-label, scope=\"col\".\n */\nexport function TableView<TRow extends Record<string, unknown> = Record<string, unknown>>(\n props: TableViewProps<TRow>,\n) {\n // ── Zod validation (serialisable props only) ───────────────────────────────\n let validatedThreshold = 100;\n try {\n const validated = validateTableViewProps({\n columns: props.columns.map(({ key, header }) => ({ key, header })),\n virtualizeThreshold: props.virtualizeThreshold,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n });\n validatedThreshold = validated.virtualizeThreshold;\n } catch {\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"TableView.error.invalidProps\", locale)}</div>;\n }\n\n const isVirtual = props.rows.length > validatedThreshold;\n const resolvedLocale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n\n if (isVirtual) {\n return (\n <VirtualTable<TRow>\n rows={props.rows}\n columns={props.columns}\n ariaLabel={props.ariaLabel}\n locale={resolvedLocale}\n onRowClick={props.onRowClick}\n />\n );\n }\n\n return (\n <StaticTable<TRow>\n rows={props.rows}\n columns={props.columns}\n ariaLabel={props.ariaLabel}\n locale={resolvedLocale}\n onRowClick={props.onRowClick}\n />\n );\n}\n\n/**\n * StreamingTableView — Streaming rows variant (advanced, opt-in).\n *\n * Pattern 4 Streaming Hydration reference implementation.\n * Consumes an RxJS Observable<Row[]> for incremental row appending.\n * Consumers MUST install rxjs ^7.8.0 in their project.\n * Activates TanStack Virtual v3 windowing when rows.length > virtualizeThreshold.\n * Zod-validates serialisable props; renders role=\"alert\" fallback on failure.\n * Fully accessible: aria-rowcount, aria-label, scope=\"col\".\n */\nexport function StreamingTableView<TRow extends Record<string, unknown> = Record<string, unknown>>(\n props: StreamingTableViewProps<TRow>,\n) {\n // ── Zod validation (serialisable props only) ───────────────────────────────\n let validatedThreshold = 100;\n try {\n const validated = validateTableViewProps({\n columns: props.columns.map(({ key, header }) => ({ key, header })),\n virtualizeThreshold: props.virtualizeThreshold,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n });\n validatedThreshold = validated.virtualizeThreshold;\n } catch {\n const locale: MosaicLocale = props.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"TableView.error.invalidProps\", locale)}</div>;\n }\n\n return (\n <StreamingTableViewInner<TRow>\n {...props}\n virtualizeThreshold={validatedThreshold}\n onRowClick={props.onRowClick}\n />\n );\n}\n\n// ── Inner implementation for streaming (rendered only after validation passes) ──\n\nfunction StreamingTableViewInner<TRow extends Record<string, unknown> = Record<string, unknown>>({\n columns,\n rows$,\n virtualizeThreshold = 100,\n ariaLabel,\n locale,\n onRowClick,\n}: StreamingTableViewProps<TRow> & { virtualizeThreshold: number }) {\n const resolvedLocale: MosaicLocale = locale === \"fr\" ? \"fr\" : \"en\";\n const [rows, setRows] = useState<Partial<TRow>[]>([]);\n\n // Subscribe to the Observable and accumulate chunks\n useEffect(() => {\n setRows([]);\n const sub = rows$.subscribe((chunk) => {\n setRows((prev) => [...prev, ...chunk]);\n });\n return () => {\n sub.unsubscribe();\n };\n }, [rows$]);\n\n const isVirtual = rows.length > virtualizeThreshold;\n\n if (isVirtual) {\n return (\n <VirtualTable<TRow>\n rows={rows}\n columns={columns}\n ariaLabel={ariaLabel}\n locale={resolvedLocale}\n onRowClick={onRowClick}\n />\n );\n }\n\n return (\n <StaticTable<TRow>\n rows={rows}\n columns={columns}\n ariaLabel={ariaLabel}\n locale={resolvedLocale}\n onRowClick={onRowClick}\n />\n );\n}\n\n// ── Static table (rows <= virtualizeThreshold) ────────────────────────────────\n\ntype TableContentProps<TRow extends Record<string, unknown>> = {\n rows: Partial<TRow>[];\n columns: TableViewProps<TRow>[\"columns\"];\n ariaLabel: string;\n locale: MosaicLocale;\n onRowClick?: (row: TRow, index: number) => void;\n};\n\n/** Renders a single cell — uses col.render if provided, else converts to string */\nfunction renderCell<TRow extends Record<string, unknown>>(\n col: TableViewProps<TRow>[\"columns\"][number],\n row: Partial<TRow>,\n): React.ReactNode {\n if (col.render) {\n return col.render(row as TRow);\n }\n return String((row as Record<string, unknown>)[col.key] ?? \"\");\n}\n\nfunction StaticTable<TRow extends Record<string, unknown>>({\n rows,\n columns,\n ariaLabel,\n locale,\n onRowClick,\n}: TableContentProps<TRow>) {\n const emptyMsg = t(\"TableView.empty.message\", locale);\n return (\n <table\n aria-label={ariaLabel}\n aria-rowcount={rows.length}\n style={{ width: \"100%\", borderCollapse: \"collapse\" }}\n >\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={col.key} scope=\"col\">\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} aria-label={emptyMsg}>\n {emptyMsg}\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => (\n <tr\n key={\n (row as Record<string, unknown>).id != null\n ? String((row as Record<string, unknown>).id)\n : `row-${rowIndex}`\n }\n aria-rowindex={rowIndex + 2}\n {...(onRowClick\n ? {\n role: \"button\",\n tabIndex: 0,\n style: { cursor: \"pointer\" },\n onClick: () => onRowClick(row as TRow, rowIndex),\n onKeyDown: (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row as TRow, rowIndex);\n }\n },\n }\n : {})}\n >\n {columns.map((col) => (\n <td key={col.key}>{renderCell(col, row)}</td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n );\n}\n\n// ── Virtual table (rows > virtualizeThreshold) — TanStack Virtual v3 ─────────\n\nfunction VirtualTable<TRow extends Record<string, unknown>>({\n rows,\n columns,\n ariaLabel,\n // locale reserved for future virtual-mode empty/pagination strings\n locale: _locale,\n onRowClick,\n}: TableContentProps<TRow>) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n /* v8 ignore next 1 */\n getScrollElement: () => scrollRef.current,\n estimateSize: useCallback(() => 40, []),\n overscan: OVERSCAN,\n });\n\n const virtualItems = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n return (\n <div\n data-virtual=\"true\"\n ref={scrollRef}\n // WCAG 2.1.1 / 2.1.3 (axe scrollable-region-focusable, serious): a\n // scrollable container must be keyboard-operable. tabIndex={0} puts the\n // virtualized viewport in the tab order so keyboard users can scroll it;\n // role=region + aria-label expose it as a named landmark so the focusable\n // element is announced. Verified axe 0 violations (tests/a11y/TableView.spec.ts).\n // biome-ignore lint/a11y/noNoninteractiveTabindex: WCAG 2.1.1 — the virtual-scroll viewport is scrollable and must be in the tab order for keyboard scroll access (axe scrollable-region-focusable)\n tabIndex={0}\n // biome-ignore lint/a11y/useSemanticElements: the scroll viewport wraps a <table>; converting it to <section> would nest sectioning content inside the table wrapper and break the virtualizer's ref-bound div — role=region is the correct, non-structural a11y annotation here\n role=\"region\"\n aria-label={ariaLabel}\n style={{ height: 400, overflow: \"auto\", position: \"relative\" }}\n >\n <table\n aria-label={ariaLabel}\n aria-rowcount={rows.length}\n style={{ width: \"100%\", borderCollapse: \"collapse\" }}\n >\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={col.key} scope=\"col\">\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n style={{\n height: `${totalSize}px`,\n position: \"relative\",\n display: \"block\",\n }}\n >\n {virtualItems.map((virtualRow) => {\n /* v8 ignore next */\n const row = rows[virtualRow.index] ?? ({} as Partial<TRow>);\n return (\n <tr\n key={\n (row as Record<string, unknown>).id != null\n ? String((row as Record<string, unknown>).id)\n : `vrow-${virtualRow.index}`\n }\n aria-rowindex={virtualRow.index + 2}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualRow.start}px)`,\n display: \"flex\",\n ...(onRowClick ? { cursor: \"pointer\" } : {}),\n }}\n {...(onRowClick\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onRowClick(row as TRow, virtualRow.index),\n onKeyDown: (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row as TRow, virtualRow.index);\n }\n },\n }\n : {})}\n >\n {columns.map((col) => (\n <td key={col.key} style={{ flex: 1 }}>\n {renderCell(col, row)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -1,8 +1,10 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { E as EmptyStateProps } from '../Skeleton.schema-BO0ca2UX.cjs';
4
- export { a as EmptyStatePropsSchema, S as Skeleton, d as SkeletonProps, e as SkeletonPropsSchema, r as resolveSkeletonDimensions, v as validateEmptyStateProps, f as validateSkeletonProps } from '../Skeleton.schema-BO0ca2UX.cjs';
3
+ import { EmptyStateProps } from '../display.cjs';
4
+ export { EmptyStatePropsSchema, Skeleton, SkeletonProps, SkeletonPropsSchema, StreamingTableView, StreamingTableViewProps, TableView, TableViewProps, TableViewPropsSchema, resolveSkeletonDimensions, validateEmptyStateProps, validateSkeletonProps, validateTableViewProps } from '../display.cjs';
5
5
  import { z } from 'zod';
6
+ export { S as StatusBadgeProps, a as StatusBadgePropsSchema, v as validateStatusBadgeProps } from '../StatusBadge.schema-1tOjB4Ir.cjs';
7
+ import 'rxjs';
6
8
 
7
9
  /**
8
10
  * EmptyState — cross-runtime empty-set display primitive (React 19 implementation).
@@ -110,4 +112,19 @@ declare function validateVirtualListProps(raw: unknown): VirtualListPropsSchemaO
110
112
  */
111
113
  declare function VirtualList<T = unknown>(props: VirtualListProps<T>): react_jsx_runtime.JSX.Element;
112
114
 
113
- export { EmptyState, EmptyStateProps, VirtualList, type VirtualListProps, VirtualListPropsSchema, validateVirtualListProps };
115
+ /**
116
+ * StatusBadge — cross-runtime status indicator badge (React 19 implementation).
117
+ *
118
+ * Accepts `Record<string, unknown>` for MCP postMessage injection safety.
119
+ * Zod validation narrows before render. Invalid props → accessible error span.
120
+ *
121
+ * WCAG-AA:
122
+ * - `<output>` has implicit role="status" per ARIA spec §5.3.17
123
+ * - aria-label from `label` prop (falls back to `status` string)
124
+ * - `lang` attribute set to locale for correct AT language announcement
125
+ *
126
+ * Bilingue: EN/FR strings resolved via t() from i18n/strings — no hardcoded literals.
127
+ */
128
+ declare function StatusBadge(raw: Record<string, unknown>): react_jsx_runtime.JSX.Element;
129
+
130
+ export { EmptyState, EmptyStateProps, StatusBadge, VirtualList, type VirtualListProps, VirtualListPropsSchema, validateVirtualListProps };
@@ -1,8 +1,10 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { E as EmptyStateProps } from '../Skeleton.schema-BO0ca2UX.js';
4
- export { a as EmptyStatePropsSchema, S as Skeleton, d as SkeletonProps, e as SkeletonPropsSchema, r as resolveSkeletonDimensions, v as validateEmptyStateProps, f as validateSkeletonProps } from '../Skeleton.schema-BO0ca2UX.js';
3
+ import { EmptyStateProps } from '../display.js';
4
+ export { EmptyStatePropsSchema, Skeleton, SkeletonProps, SkeletonPropsSchema, StreamingTableView, StreamingTableViewProps, TableView, TableViewProps, TableViewPropsSchema, resolveSkeletonDimensions, validateEmptyStateProps, validateSkeletonProps, validateTableViewProps } from '../display.js';
5
5
  import { z } from 'zod';
6
+ export { S as StatusBadgeProps, a as StatusBadgePropsSchema, v as validateStatusBadgeProps } from '../StatusBadge.schema-1tOjB4Ir.js';
7
+ import 'rxjs';
6
8
 
7
9
  /**
8
10
  * EmptyState — cross-runtime empty-set display primitive (React 19 implementation).
@@ -110,4 +112,19 @@ declare function validateVirtualListProps(raw: unknown): VirtualListPropsSchemaO
110
112
  */
111
113
  declare function VirtualList<T = unknown>(props: VirtualListProps<T>): react_jsx_runtime.JSX.Element;
112
114
 
113
- export { EmptyState, EmptyStateProps, VirtualList, type VirtualListProps, VirtualListPropsSchema, validateVirtualListProps };
115
+ /**
116
+ * StatusBadge — cross-runtime status indicator badge (React 19 implementation).
117
+ *
118
+ * Accepts `Record<string, unknown>` for MCP postMessage injection safety.
119
+ * Zod validation narrows before render. Invalid props → accessible error span.
120
+ *
121
+ * WCAG-AA:
122
+ * - `<output>` has implicit role="status" per ARIA spec §5.3.17
123
+ * - aria-label from `label` prop (falls back to `status` string)
124
+ * - `lang` attribute set to locale for correct AT language announcement
125
+ *
126
+ * Bilingue: EN/FR strings resolved via t() from i18n/strings — no hardcoded literals.
127
+ */
128
+ declare function StatusBadge(raw: Record<string, unknown>): react_jsx_runtime.JSX.Element;
129
+
130
+ export { EmptyState, EmptyStateProps, StatusBadge, VirtualList, type VirtualListProps, VirtualListPropsSchema, validateVirtualListProps };