@vantageos/mosaic 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -15
- package/README.md +114 -5
- package/dist/PipelineBoard-FucyGArR.d.cts +759 -0
- package/dist/PipelineBoard-FucyGArR.d.ts +759 -0
- package/dist/PipelineBoard.markdown-DIcvrS-2.d.cts +16 -0
- package/dist/PipelineBoard.markdown-DIcvrS-2.d.ts +16 -0
- package/dist/{StatusBadge.schema-1tOjB4Ir.d.cts → StatusBadge.schema-BEjSH2_4.d.cts} +2 -2
- package/dist/{StatusBadge.schema-1tOjB4Ir.d.ts → StatusBadge.schema-BEjSH2_4.d.ts} +2 -2
- package/dist/{Tabs.schema-BzcEyeq8.d.cts → Tabs.schema-Dqr6vwV3.d.cts} +2 -2
- package/dist/{Tabs.schema-BzcEyeq8.d.ts → Tabs.schema-Dqr6vwV3.d.ts} +2 -2
- package/dist/Timeline-Coo_3tA_.d.cts +114 -0
- package/dist/Timeline-Coo_3tA_.d.ts +114 -0
- package/dist/Timeline.markdown-C6UPDv1H.d.cts +4 -0
- package/dist/Timeline.markdown-C6UPDv1H.d.ts +4 -0
- package/dist/TransactionPreview-BzWDn8kE.d.cts +391 -0
- package/dist/TransactionPreview-BzWDn8kE.d.ts +391 -0
- package/dist/TransactionPreview.markdown-Dpb0VYgN.d.cts +7 -0
- package/dist/TransactionPreview.markdown-Dpb0VYgN.d.ts +7 -0
- package/dist/artifacts.cjs +186 -2
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +186 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/confirmation.cjs +724 -2
- package/dist/confirmation.cjs.map +1 -1
- package/dist/confirmation.d.cts +2 -1
- package/dist/confirmation.d.ts +2 -1
- package/dist/confirmation.js +722 -4
- package/dist/confirmation.js.map +1 -1
- package/dist/display.cjs +1551 -203
- package/dist/display.cjs.map +1 -1
- package/dist/display.d.cts +6 -229
- package/dist/display.d.ts +6 -229
- package/dist/display.js +1535 -206
- package/dist/display.js.map +1 -1
- package/dist/forms.cjs +139 -46
- package/dist/forms.cjs.map +1 -1
- package/dist/forms.d.cts +2 -2
- package/dist/forms.d.ts +2 -2
- package/dist/forms.js +139 -46
- package/dist/forms.js.map +1 -1
- package/dist/host.cjs +822 -0
- package/dist/host.cjs.map +1 -0
- package/dist/host.d.cts +287 -0
- package/dist/host.d.ts +287 -0
- package/dist/host.js +794 -0
- package/dist/host.js.map +1 -0
- package/dist/{index-CwXVgtGb.d.cts → index-BadRcCbm.d.cts} +28 -11
- package/dist/{index-CwXVgtGb.d.ts → index-BadRcCbm.d.ts} +28 -11
- package/dist/index.cjs +2198 -247
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -8
- package/dist/index.d.ts +42 -8
- package/dist/index.js +2163 -251
- package/dist/index.js.map +1 -1
- package/dist/input.d.cts +2 -2
- package/dist/input.d.ts +2 -2
- package/dist/media.cjs +186 -2
- package/dist/media.cjs.map +1 -1
- package/dist/media.d.cts +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/media.js +186 -2
- package/dist/media.js.map +1 -1
- package/dist/preact/artifacts.js +186 -2
- package/dist/preact/artifacts.js.map +1 -1
- package/dist/preact/confirmation.d.ts +321 -1
- package/dist/preact/confirmation.js +625 -4
- package/dist/preact/confirmation.js.map +1 -1
- package/dist/preact/display.d.ts +544 -47
- package/dist/preact/display.js +1190 -126
- package/dist/preact/display.js.map +1 -1
- package/dist/preact/forms.d.ts +32 -15
- package/dist/preact/forms.js +139 -46
- package/dist/preact/forms.js.map +1 -1
- package/dist/preact/host.d.ts +307 -0
- package/dist/preact/host.js +875 -0
- package/dist/preact/host.js.map +1 -0
- package/dist/preact/media.d.ts +37 -1
- package/dist/preact/media.js +423 -0
- package/dist/preact/media.js.map +1 -1
- package/dist/preact/progress.d.ts +92 -1
- package/dist/preact/progress.js +465 -3
- package/dist/preact/progress.js.map +1 -1
- package/dist/progress.cjs +521 -2
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.d.cts +2 -1
- package/dist/progress.d.ts +2 -1
- package/dist/progress.js +518 -3
- package/dist/progress.js.map +1 -1
- package/dist/react/artifacts.cjs +186 -2
- package/dist/react/artifacts.cjs.map +1 -1
- package/dist/react/artifacts.js +186 -2
- package/dist/react/artifacts.js.map +1 -1
- package/dist/react/confirmation.cjs +626 -2
- package/dist/react/confirmation.cjs.map +1 -1
- package/dist/react/confirmation.d.cts +3 -3
- package/dist/react/confirmation.d.ts +3 -3
- package/dist/react/confirmation.js +625 -4
- package/dist/react/confirmation.js.map +1 -1
- package/dist/react/display.cjs +1076 -123
- package/dist/react/display.cjs.map +1 -1
- package/dist/react/display.d.cts +13 -27
- package/dist/react/display.d.ts +13 -27
- package/dist/react/display.js +1064 -126
- package/dist/react/display.js.map +1 -1
- package/dist/react/forms.cjs +139 -46
- package/dist/react/forms.cjs.map +1 -1
- package/dist/react/forms.d.cts +1 -1
- package/dist/react/forms.d.ts +1 -1
- package/dist/react/forms.js +139 -46
- package/dist/react/forms.js.map +1 -1
- package/dist/react/host.cjs +910 -0
- package/dist/react/host.cjs.map +1 -0
- package/dist/react/host.d.cts +24 -0
- package/dist/react/host.d.ts +24 -0
- package/dist/react/host.js +875 -0
- package/dist/react/host.js.map +1 -0
- package/dist/react/input.d.cts +1 -1
- package/dist/react/input.d.ts +1 -1
- package/dist/react/media.cjs +426 -0
- package/dist/react/media.cjs.map +1 -1
- package/dist/react/media.d.cts +19 -1
- package/dist/react/media.d.ts +19 -1
- package/dist/react/media.js +423 -0
- package/dist/react/media.js.map +1 -1
- package/dist/react/progress.cjs +467 -2
- package/dist/react/progress.cjs.map +1 -1
- package/dist/react/progress.d.cts +1 -1
- package/dist/react/progress.d.ts +1 -1
- package/dist/react/progress.js +465 -3
- package/dist/react/progress.js.map +1 -1
- package/dist/server/resource.cjs +151 -0
- package/dist/server/resource.cjs.map +1 -0
- package/dist/server/resource.d.cts +90 -0
- package/dist/server/resource.d.ts +90 -0
- package/dist/server/resource.js +147 -0
- package/dist/server/resource.js.map +1 -0
- package/dist/server.cjs +1100 -25
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +84 -5
- package/dist/server.d.ts +84 -5
- package/dist/server.js +1087 -27
- package/dist/server.js.map +1 -1
- package/package.json +250 -233
- package/registry.yaml +44 -2
- package/dist/Alert.schema-LPJE5gFP.d.cts +0 -71
- package/dist/Alert.schema-LPJE5gFP.d.ts +0 -71
- package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +0 -22
- package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +0 -22
- package/dist/{ConfirmDialog-B3CQQGmJ.d.cts → ConfirmDialog-BCtOcmHe.d.cts} +1 -1
- package/dist/{ConfirmDialog-B3CQQGmJ.d.ts → ConfirmDialog-BCtOcmHe.d.ts} +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/progress/ProgressBar.schema.ts","../src/components/progress/ProgressBar.tsx","../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx","../src/components/input/Tabs.schema.ts","../src/components/display/TableView.schema.ts","../src/components/display/TableView.tsx","../src/components/display/EmptyState.schema.ts","../src/components/display/Skeleton.logic.ts","../src/components/display/Skeleton.schema.ts","../src/runtimes/react/components/display/Skeleton.tsx","../src/components/artifacts/MarkdownRenderer.schema.ts","../src/components/artifacts/MarkdownRenderer.tsx","../src/components/confirmation/TokenDisplayOnceModal.schema.ts","../src/components/confirmation/TokenDisplayOnceModal.tsx","../src/components/confirmation/Toast.schema.ts","../src/components/confirmation/Alert.schema.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx","../src/hooks/useStreamingHydration.ts","../src/adapters/postMessageAdapter.ts","../src/server/create-mosaic-resource.ts"],"names":["z","jsx","jsxs","useEffect","useRef","validateProps","useId","useState"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge: 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 \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge : 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","import { z } from \"zod\";\n\nexport const ProgressBarPropsSchema = z.object({\n value: z.number().min(0).max(100),\n label: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n colorVariant: z.enum([\"default\", \"warning\", \"danger\"]).default(\"default\"),\n});\n\nexport type ProgressBarProps = z.infer<typeof ProgressBarPropsSchema>;\n\nexport function validateProps(raw: unknown): ProgressBarProps {\n return ProgressBarPropsSchema.parse(raw);\n}\n","import React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type ProgressBarProps, validateProps } from \"./ProgressBar.schema.js\";\n\nfunction pickLocale(raw: Record<string, unknown>): MosaicLocale {\n return raw.locale === \"fr\" ? \"fr\" : \"en\";\n}\n\nconst colorVariantClasses: Record<ProgressBarProps[\"colorVariant\"], string> = {\n default: \"bg-blue-600\",\n warning: \"bg-amber-500\",\n danger: \"bg-red-600\",\n};\n\nconst containerVariantClasses: Record<ProgressBarProps[\"colorVariant\"], string> = {\n default: \"progressbar-default\",\n warning: \"progressbar-warning\",\n danger: \"progressbar-danger\",\n};\n\nfunction ProgressBarInner(props: ProgressBarProps) {\n const { value, label, colorVariant } = props;\n const fillClass = colorVariantClasses[colorVariant];\n const containerClass = containerVariantClasses[colorVariant];\n\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n tabIndex={0}\n className={`mosaic-progress ${containerClass}`}\n style={{ width: \"100%\" }}\n >\n <div\n data-testid=\"progress-fill\"\n className={`mosaic-progress-fill ${fillClass}`}\n style={{ width: `${value}%` }}\n />\n <span className=\"mosaic-progress-label\">\n {label}: {value}%\n </span>\n </div>\n );\n}\n\n/**\n * ProgressBar accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function ProgressBar(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <ProgressBarInner {...props} />;\n } catch {\n return (\n <div role=\"alert\" className=\"mosaic-progress-error\">\n {t(\"ProgressBar.error.invalidProps\", pickLocale(raw))}\n </div>\n );\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Tabs.error.invalidProps\n\n/**\n * Tabs component props schema.\n *\n * Supports controlled (value + onValueChange) and uncontrolled (defaultValue) modes.\n * orientation — \"horizontal\" (default) or \"vertical\" — affects ArrowLeft/Right vs ArrowUp/Down nav.\n * tabs — ordered list of tab descriptors (id must be unique within the instance).\n */\nexport const TabItemSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n /** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */\n content: z.unknown(),\n disabled: z.boolean().optional().default(false),\n});\n\nexport type TabItem = z.infer<typeof TabItemSchema>;\n\nexport const TabsPropsSchema = z.object({\n tabs: z.array(TabItemSchema).min(1),\n value: z.string().optional(),\n defaultValue: z.string().optional(),\n orientation: z.enum([\"horizontal\", \"vertical\"]).default(\"horizontal\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\n/** Runtime props — onValueChange is a function (not serialisable via Zod, kept outside schema). */\nexport type TabsProps = z.infer<typeof TabsPropsSchema> & {\n onValueChange?: (id: string) => void;\n};\n\nexport function validateTabsProps(raw: unknown): z.infer<typeof TabsPropsSchema> {\n return TabsPropsSchema.parse(raw);\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","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 * 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","import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","import DOMPurify from \"dompurify\";\nimport { marked } from \"marked\";\n// i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps, MarkdownRenderer.error.tooLong\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type MarkdownRendererProps, validateProps } from \"./MarkdownRenderer.schema\";\n\ninterface MarkdownRendererInnerProps {\n content: string;\n locale: \"en\" | \"fr\";\n maxLength: number;\n allowHtml: boolean;\n}\n\nconst tooLongMessages: Record<\"en\" | \"fr\", string> = {\n en: \"Content exceeds maximum length.\",\n fr: \"Le contenu dépasse la longueur maximale.\",\n};\n\nfunction MarkdownRendererInner({\n content,\n locale,\n maxLength,\n allowHtml,\n}: MarkdownRendererInnerProps) {\n if (content.length > maxLength) {\n return (\n <div role=\"alert\" lang={locale}>\n {tooLongMessages[locale]}\n </div>\n );\n }\n\n // When allowHtml=false, strip raw HTML tags from source before parsing,\n // so user-supplied HTML is neutralised before marked converts markdown to HTML.\n const source = allowHtml ? content : content.replace(/<[^>]*>/g, \"\");\n const rawHtml = marked.parse(source, { async: false }) as string;\n // Always sanitize the marked output to prevent XSS from markdown-injected HTML.\n const cleanHtml = DOMPurify.sanitize(rawHtml);\n\n const ariaLabel = locale === \"fr\" ? \"Contenu formaté\" : \"Formatted content\";\n\n return (\n <article\n aria-label={ariaLabel}\n lang={locale}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitized by DOMPurify\n dangerouslySetInnerHTML={{ __html: cleanHtml }}\n />\n );\n}\n\n/**\n * MarkdownRenderer accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function MarkdownRenderer(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <MarkdownRendererInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"MarkdownRenderer.error.invalidProps\", locale)}</div>;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nexport const TokenDisplayOnceModalPropsSchema = z.object({\n token: z.string().min(1),\n title: z.string().min(1),\n warningMessage: z.string().min(1),\n copyLabel: z.string().min(1),\n closeLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TokenDisplayOnceModalProps = z.infer<typeof TokenDisplayOnceModalPropsSchema> & {\n onClose: () => void;\n};\n\nexport function validateTokenDisplayOnceModalProps(\n raw: unknown,\n): z.infer<typeof TokenDisplayOnceModalPropsSchema> {\n return TokenDisplayOnceModalPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef, useState } from \"react\";\nimport { t } from \"../../i18n/strings.js\";\nimport {\n type TokenDisplayOnceModalProps,\n validateTokenDisplayOnceModalProps,\n} from \"./TokenDisplayOnceModal.schema\";\n\nfunction TokenDisplayOnceModalInner({\n token,\n title,\n warningMessage,\n copyLabel,\n closeLabel,\n locale,\n onClose,\n}: TokenDisplayOnceModalProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const warningId = useId();\n const [copied, setCopied] = useState(false);\n // Security: token is held only in this useState — on unmount, released by React GC.\n // NEVER logged, NEVER stored in data-*, NEVER written to innerHTML.\n const [secureToken] = useState<string>(token);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n async function handleCopy() {\n try {\n await navigator.clipboard.writeText(secureToken);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Copy failed — do not leak token in error message\n setCopied(false);\n }\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onClose();\n }\n }\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={warningId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-lg mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p\n id={warningId}\n className=\"text-sm text-amber-700 bg-amber-50 border border-amber-200 rounded-md px-3 py-2\"\n >\n {warningMessage}\n </p>\n <div className=\"flex items-center gap-2 bg-gray-50 border border-gray-200 rounded-md px-3 py-2\">\n <code className=\"flex-1 text-sm font-mono text-gray-800 break-all select-all\">\n {secureToken}\n </code>\n </div>\n {/* Ephemeral \"Copied\" toast — aria-live polite, no token text */}\n <output aria-live=\"polite\" aria-atomic=\"true\" className=\"min-h-[1.25rem] block\">\n {copied && (\n <span className=\"text-sm text-green-700 font-medium\">\n {t(\"TokenDisplayOnceModal.copied\", locale)}\n </span>\n )}\n </output>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"px-4 py-2 rounded-md text-sm font-medium bg-gray-100 text-gray-800 hover:bg-gray-200 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {copyLabel}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2 rounded-md text-sm font-medium bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-900 transition-colors\"\n >\n {closeLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function TokenDisplayOnceModal(\n raw: Omit<TokenDisplayOnceModalProps, \"locale\"> &\n Partial<Pick<TokenDisplayOnceModalProps, \"locale\">>,\n) {\n try {\n const parsed = validateTokenDisplayOnceModalProps(raw);\n return <TokenDisplayOnceModalInner {...parsed} onClose={raw.onClose} />;\n } catch (err) {\n // Security: use console.warn (not console.error) and do not expose token value in log\n console.warn(\"[TokenDisplayOnceModal] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Toast.aria.close, Toast.error.invalidProps\n\n/**\n * Toast component props schema.\n *\n * variant — controls visual style + ARIA role:\n * \"error\" → role=\"alert\" (assertive), all others → role=\"status\" (polite)\n * title — consumer-driven; caller passes already-localized string (no i18n key needed)\n * duration — 0 = persistent (never auto-dismiss)\n */\nexport const ToastPropsSchema = z.object({\n variant: z.enum([\"success\", \"error\", \"info\", \"warning\"]),\n title: z.string().min(1),\n description: z.string().optional(),\n duration: z.number().int().nonnegative().default(5000),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ToastProps = z.infer<typeof ToastPropsSchema> & {\n onClose?: () => void;\n};\n\nexport function validateToastProps(raw: unknown): z.infer<typeof ToastPropsSchema> {\n return ToastPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Alert.aria.dismiss, Alert.error.invalidProps\n\n/**\n * Alert component props schema.\n *\n * Persistent inline banner (vs Toast which is ephemeral + auto-dismissing).\n *\n * variant — controls visual style + ARIA role auto-assignment:\n * \"error\" → role=\"alert\" (assertive, interrupts screen reader)\n * all others → role=\"status\" (polite, non-intrusive)\n * title — consumer-driven; caller passes already-localized string\n * description — optional supporting text beneath the title\n * dismissible — when true, renders a dismiss button (default: false)\n * onDismiss — callback fired when dismiss button is clicked\n * locale — controls dismiss button aria-label language\n */\nexport const AlertPropsSchema = z.object({\n variant: z.enum([\"success\", \"error\", \"info\", \"warning\"]),\n title: z.string().min(1),\n description: z.string().optional(),\n dismissible: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type AlertProps = z.infer<typeof AlertPropsSchema> & {\n onDismiss?: () => void;\n};\n\nexport function validateAlertProps(raw: unknown): z.infer<typeof AlertPropsSchema> {\n return AlertPropsSchema.parse(raw);\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\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\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\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\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 accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\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 { useEffect, useState } from \"react\";\nimport type { Observable } from \"rxjs\";\n\n/**\n * Subscribes to an Observable stream of partial prop updates and merges them\n * into local state. Used for MCP App streaming hydration (SEP-1865 host-context\n * change notifications, TableView large dataset chunking, etc).\n *\n * @param props$ Observable emitting partial prop chunks.\n * @returns merged state accumulated across emissions.\n */\nexport function useStreamingHydration<T>(props$: Observable<Partial<T>>): Partial<T> {\n const [state, setState] = useState<Partial<T>>({});\n useEffect(() => {\n const sub = props$.subscribe((chunk) => {\n setState((prev) => ({ ...prev, ...chunk }));\n });\n return () => {\n sub.unsubscribe();\n };\n }, [props$]);\n return state;\n}\n","import { type Observable, Subject } from \"rxjs\";\n\n/**\n * MCP App postMessage adapter (mosaic-architecture-standard-v1 §3.4 streaming).\n * Listens for `mosaic.stream.chunk` messages and emits their `data` payload\n * into an RxJS Observable so components can consume them via {@link useStreamingHydration}.\n *\n * Canonical envelope per StreamChunkSchema:\n * { type: 'mosaic.stream.chunk', componentKey, chunkId, data, isLast }\n */\nexport const MOSAIC_STREAM_CHUNK_TYPE = \"mosaic.stream.chunk\" as const;\n\nexport function createPostMessageObservable<T>(): Observable<Partial<T>> {\n const subject = new Subject<Partial<T>>();\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", (event: MessageEvent) => {\n const data = event.data as { type?: string; data?: unknown; params?: unknown } | undefined;\n if (data?.type === MOSAIC_STREAM_CHUNK_TYPE) {\n subject.next((data.data ?? data.params) as Partial<T>);\n }\n });\n }\n return subject.asObservable();\n}\n","import { type UIResource, createUIResource } from \"@mcp-ui/server\";\nimport { MarkdownRendererPropsSchema } from \"../components/artifacts/MarkdownRenderer.schema.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"../components/confirmation/TokenDisplayOnceModal.schema.js\";\nimport { TableViewPropsSchema } from \"../components/display/TableView.schema.js\";\nimport { ConfirmDialogPropsSchema } from \"../components/input/ConfirmDialog.schema.js\";\nimport { StatusBadgePropsSchema } from \"../components/media/StatusBadge.schema.js\";\nimport { ProgressBarPropsSchema } from \"../components/progress/ProgressBar.schema.js\";\n\n/**\n * MCP capability key used by hosts to discover that this server emits\n * MCP UI Apps resources (mosaic-architecture-standard-v1 §2.1).\n */\nexport const MCP_UI_CAPABILITY_KEY = \"io.modelcontextprotocol/ui\" as const;\n\n/**\n * Canonical Mosaic MIME type — every UIResource produced by this server\n * advertises the MCP Apps profile (`text/html;profile=mcp-app`).\n */\nexport const MOSAIC_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\ntype SupportedComponent =\n | \"ProgressBar\"\n | \"ConfirmDialog\"\n | \"TableView\"\n | \"MarkdownRenderer\"\n | \"TokenDisplayOnceModal\"\n | \"StatusBadge\";\n\nconst SCHEMA_BY_NAME = {\n ProgressBar: ProgressBarPropsSchema,\n ConfirmDialog: ConfirmDialogPropsSchema,\n TableView: TableViewPropsSchema,\n MarkdownRenderer: MarkdownRendererPropsSchema,\n TokenDisplayOnceModal: TokenDisplayOnceModalPropsSchema,\n StatusBadge: StatusBadgePropsSchema,\n} as const;\n\nconst COMPONENT_KEYS = Object.keys(SCHEMA_BY_NAME) as SupportedComponent[];\n\nconst I18N_TITLE: Record<SupportedComponent, { en: string; fr: string }> = {\n ProgressBar: { en: \"Progress\", fr: \"Progression\" },\n ConfirmDialog: { en: \"Confirmation\", fr: \"Confirmation\" },\n TableView: { en: \"Data table\", fr: \"Tableau de données\" },\n MarkdownRenderer: { en: \"Markdown content\", fr: \"Contenu Markdown\" },\n TokenDisplayOnceModal: { en: \"Token (shown once)\", fr: \"Jeton (affiché une fois)\" },\n StatusBadge: { en: \"Status\", fr: \"Statut\" },\n};\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction fallbackMarkdown(componentName: SupportedComponent, locale: \"en\" | \"fr\"): string {\n const heading = I18N_TITLE[componentName][locale];\n const note =\n locale === \"fr\"\n ? \"Rendu Markdown de secours — composant Mosaic chargé via MCP UI.\"\n : \"Markdown fallback — Mosaic component rendered via MCP UI.\";\n return `# ${heading}\\n\\n${note}\\n`;\n}\n\nfunction buildHtml(componentName: SupportedComponent, props: unknown, locale: \"en\" | \"fr\"): string {\n const propsJson = escapeHtml(JSON.stringify(props));\n const title = escapeHtml(I18N_TITLE[componentName][locale]);\n return `<!DOCTYPE html><html lang=\"${locale}\"><head><meta charset=\"utf-8\"><title>${title}</title></head><body><div id=\"mosaic-root\" data-component=\"${componentName}\" data-props='${propsJson}'></div></body></html>`;\n}\n\nexport interface CreateMosaicResourceOptions {\n /** Optional override for the generated `ui://` URI. */\n uri?: `ui://${string}`;\n /** Optional override of the markdown fallback emitted under `_meta.ui.fallback`. */\n markdownFallback?: string;\n}\n\n/**\n * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.\n *\n * - Runtime-validates `props` with the component's Zod schema (throws on failure).\n * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.\n * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`.\n * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).\n *\n * @throws ZodError when `props` fails validation for `componentName`.\n */\nexport function createMosaicResource(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n): UIResource {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props);\n const uri: `ui://${string}` = `ui://mosaic/${componentName.toLowerCase()}`;\n const html = buildHtml(componentName, validated, locale);\n const fallback = fallbackMarkdown(componentName, locale);\n\n const resource = createUIResource({\n uri,\n content: { type: \"rawHtml\", htmlString: html },\n encoding: \"text\",\n metadata: {\n ui: {\n resourceUri: uri,\n locale,\n componentName,\n fallback,\n },\n },\n });\n\n // createUIResource may itself default the MIME type; ensure it matches the\n // Mosaic canonical profile regardless of upstream defaults.\n resource.resource.mimeType = MOSAIC_MIME_TYPE;\n return resource;\n}\n\nexport const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[] = COMPONENT_KEYS;\nexport type { SupportedComponent };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/progress/ProgressBar.schema.ts","../src/components/progress/ProgressBar.tsx","../src/components/display/EmptyState.logic.ts","../src/components/display/EmptyState.schema.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/shared/datetime.ts","../src/components/progress/Timeline.logic.ts","../src/components/progress/Timeline.schema.ts","../src/components/progress/Timeline.tsx","../src/components/shared/markdown.ts","../src/components/progress/Timeline.markdown.ts","../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx","../src/components/input/Tabs.schema.ts","../src/components/display/TableView.logic.ts","../src/components/display/TableView.schema.ts","../src/components/display/TableView.tsx","../src/components/display/StatCard.schema.ts","../src/components/display/StatCard.tsx","../src/components/display/StatCard.markdown.ts","../src/components/display/Badge.schema.ts","../src/runtimes/react/components/display/Badge.tsx","../src/components/shared/decimal.ts","../src/components/display/BalanceCard.schema.ts","../src/components/display/BalanceCard.tsx","../src/components/display/BalanceCard.markdown.ts","../src/components/display/VirtualList.schema.ts","../src/components/display/VirtualList.tsx","../src/components/shared/url.ts","../src/components/display/MessageFeed.schema.ts","../src/components/display/MessageFeed.tsx","../src/components/display/MessageFeed.markdown.ts","../src/components/forms/RadioGroup.logic.ts","../src/components/display/PipelineBoard.logic.ts","../src/components/display/PipelineBoard.schema.ts","../src/components/display/PipelineBoard.tsx","../src/components/display/PipelineBoard.markdown.ts","../src/components/artifacts/MarkdownRenderer.schema.ts","../src/components/artifacts/MarkdownRenderer.tsx","../src/components/confirmation/TokenDisplayOnceModal.schema.ts","../src/components/confirmation/TokenDisplayOnceModal.tsx","../src/components/confirmation/Toast.schema.ts","../src/components/confirmation/Alert.schema.ts","../src/components/confirmation/TransactionPreview.schema.ts","../src/components/confirmation/TransactionPreview.tsx","../src/components/confirmation/TransactionPreview.markdown.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx","../src/hooks/useStreamingHydration.ts","../src/adapters/postMessageAdapter.ts","../src/components/artifacts/MarkdownRenderer.markdown.ts","../src/components/confirmation/TokenDisplayOnceModal.markdown.ts","../src/components/display/TableView.markdown.ts","../src/components/input/ConfirmDialog.markdown.ts","../src/components/media/StatusBadge.markdown.ts","../src/components/progress/ProgressBar.markdown.ts","../src/server/create-mosaic-resource.ts"],"names":["z","jsxs","jsx","useEffect","useRef","DECIMAL","frac","useState","locale","useCallback","useVirtualizer","validateProps","useId","Fragment","variantClasses"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge: 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 \"ModelContext.selection.one\": \"1 row selected\",\n \"ModelContext.selection.many\": \"{n} rows selected\",\n \"ModelContext.selection.none\": \"No rows selected\",\n \"TableView.sort.by\": \"Sort by\",\n \"TableView.select.row\": \"Select row\",\n \"TableView.select.all\": \"Select all rows\",\n \"TableView.loading\": \"Loading table\",\n \"StatCard.title\": \"Statistic\",\n \"StatCard.trend.up\": \"Up\",\n \"StatCard.trend.down\": \"Down\",\n \"StatCard.trend.flat\": \"Flat\",\n \"StatCard.empty.message\": \"No statistic to display\",\n \"StatCard.loading\": \"Loading statistic\",\n \"StatCard.error.invalidProps\": \"StatCard: invalid props\",\n \"BalanceCard.title\": \"Balance\",\n \"BalanceCard.network\": \"Network\",\n \"BalanceCard.testnet\": \"Testnet\",\n \"BalanceCard.address\": \"Address\",\n \"BalanceCard.contract\": \"Token contract\",\n \"BalanceCard.value\": \"Value\",\n \"BalanceCard.copy\": \"Copy address\",\n \"BalanceCard.copied\": \"Address copied\",\n \"BalanceCard.empty.message\": \"No balance to display\",\n \"BalanceCard.loading\": \"Loading balance\",\n \"BalanceCard.error.invalidProps\": \"BalanceCard: invalid props\",\n \"Timeline.title\": \"Timeline\",\n \"Timeline.status.done\": \"Done\",\n \"Timeline.status.current\": \"In progress\",\n \"Timeline.status.pending\": \"Pending\",\n \"Timeline.status.blocked\": \"Blocked\",\n \"Timeline.completed\": \"{n} completed\",\n \"Timeline.more\": \"{n} more\",\n \"Timeline.empty.message\": \"No steps to display\",\n \"Timeline.loading\": \"Loading timeline\",\n \"Timeline.error.invalidProps\": \"Timeline: invalid props\",\n \"MessageFeed.title\": \"Messages\",\n \"MessageFeed.unread\": \"Unread\",\n \"MessageFeed.attachment\": \"Attachment\",\n \"MessageFeed.showing\": \"Showing the latest {n} of {total}\",\n \"MessageFeed.empty.message\": \"No messages\",\n \"MessageFeed.loading\": \"Loading messages\",\n \"MessageFeed.error.invalidProps\": \"MessageFeed: invalid props\",\n \"PipelineBoard.title\": \"Pipeline\",\n \"PipelineBoard.deals.one\": \"1 deal\",\n \"PipelineBoard.deals.many\": \"{n} deals\",\n \"PipelineBoard.total\": \"Total\",\n \"PipelineBoard.stage.empty\": \"No deals\",\n \"PipelineBoard.filter.label\": \"Show stages\",\n \"PipelineBoard.summary.open\": \"Open full board\",\n \"PipelineBoard.more\": \"{n} more stages\",\n \"PipelineBoard.empty.message\": \"No pipeline to display\",\n \"PipelineBoard.loading\": \"Loading pipeline\",\n \"PipelineBoard.error.invalidProps\": \"PipelineBoard: invalid props\",\n \"PipelineBoard.col.stage\": \"Stage\",\n \"PipelineBoard.col.deals\": \"Deals\",\n \"TransactionPreview.title\": \"Transaction preview\",\n \"TransactionPreview.notice\": \"NOT SIGNED - preparation only\",\n \"TransactionPreview.kind.transfer\": \"Transfer\",\n \"TransactionPreview.kind.swap\": \"Swap\",\n \"TransactionPreview.testnet\": \"Testnet\",\n \"TransactionPreview.field.network\": \"Network\",\n \"TransactionPreview.field.from\": \"From\",\n \"TransactionPreview.field.to\": \"To\",\n \"TransactionPreview.field.amount\": \"Amount\",\n \"TransactionPreview.field.fee\": \"Network fee\",\n \"TransactionPreview.field.sell\": \"Sell\",\n \"TransactionPreview.field.buy\": \"Buy\",\n \"TransactionPreview.field.minReceived\": \"Minimum received\",\n \"TransactionPreview.field.route\": \"Route\",\n \"TransactionPreview.field.priceImpact\": \"Price impact\",\n \"TransactionPreview.field.expires\": \"Quote expires\",\n \"TransactionPreview.priceImpact.high\": \"High price impact\",\n \"TransactionPreview.simulation.success\": \"Simulation succeeded\",\n \"TransactionPreview.simulation.failed\": \"Simulation failed\",\n \"TransactionPreview.simulation.unavailable\": \"Simulation unavailable\",\n \"TransactionPreview.warnings\": \"Warnings\",\n \"TransactionPreview.handoff\": \"Open in wallet\",\n \"TransactionPreview.empty.message\": \"No transaction to preview\",\n \"TransactionPreview.loading\": \"Loading preview\",\n \"TransactionPreview.error.invalidProps\": \"TransactionPreview: invalid props\",\n \"ProgressBar.title\": \"Progress\",\n \"ConfirmDialog.title\": \"Confirmation\",\n \"ConfirmDialog.options\": \"Answers\",\n \"TableView.title\": \"Data table\",\n \"TableView.markdown.more\": \"{n} more rows\",\n \"MarkdownRenderer.title\": \"Markdown content\",\n \"TokenDisplayOnceModal.title\": \"Token (shown once)\",\n \"StatusBadge.title\": \"Status\",\n \"TokenDisplayOnceModal.notice.once\": \"The value is shown once, in the app view only.\",\n \"TokenDisplayOnceModal.field.scope\": \"Scope\",\n \"TokenDisplayOnceModal.field.expires\": \"Expires\",\n \"TokenDisplayOnceModal.field.fingerprint\": \"Fingerprint\",\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 \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge : 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 \"ModelContext.selection.one\": \"1 ligne sélectionnée\",\n \"ModelContext.selection.many\": \"{n} lignes sélectionnées\",\n \"ModelContext.selection.none\": \"Aucune ligne sélectionnée\",\n \"TableView.sort.by\": \"Trier par\",\n \"TableView.select.row\": \"Sélectionner la ligne\",\n \"TableView.select.all\": \"Tout sélectionner\",\n \"TableView.loading\": \"Chargement du tableau\",\n \"StatCard.title\": \"Statistique\",\n \"StatCard.trend.up\": \"En hausse\",\n \"StatCard.trend.down\": \"En baisse\",\n \"StatCard.trend.flat\": \"Stable\",\n \"StatCard.empty.message\": \"Aucune statistique à afficher\",\n \"StatCard.loading\": \"Chargement de la statistique\",\n \"StatCard.error.invalidProps\": \"StatCard : propriétés invalides\",\n \"BalanceCard.title\": \"Solde\",\n \"BalanceCard.network\": \"Réseau\",\n \"BalanceCard.testnet\": \"Réseau de test\",\n \"BalanceCard.address\": \"Adresse\",\n \"BalanceCard.contract\": \"Contrat du jeton\",\n \"BalanceCard.value\": \"Valeur\",\n \"BalanceCard.copy\": \"Copier l'adresse\",\n \"BalanceCard.copied\": \"Adresse copiée\",\n \"BalanceCard.empty.message\": \"Aucun solde à afficher\",\n \"BalanceCard.loading\": \"Chargement du solde\",\n \"BalanceCard.error.invalidProps\": \"BalanceCard : propriétés invalides\",\n \"Timeline.title\": \"Chronologie\",\n \"Timeline.status.done\": \"Terminé\",\n \"Timeline.status.current\": \"En cours\",\n \"Timeline.status.pending\": \"À venir\",\n \"Timeline.status.blocked\": \"Bloqué\",\n \"Timeline.completed\": \"{n} terminé(s)\",\n \"Timeline.more\": \"{n} de plus\",\n \"Timeline.empty.message\": \"Aucune étape à afficher\",\n \"Timeline.loading\": \"Chargement de la chronologie\",\n \"Timeline.error.invalidProps\": \"Timeline : propriétés invalides\",\n \"MessageFeed.title\": \"Messages\",\n \"MessageFeed.unread\": \"Non lu\",\n \"MessageFeed.attachment\": \"Pièce jointe\",\n \"MessageFeed.showing\": \"Affichage des {n} derniers sur {total}\",\n \"MessageFeed.empty.message\": \"Aucun message\",\n \"MessageFeed.loading\": \"Chargement des messages\",\n \"MessageFeed.error.invalidProps\": \"MessageFeed : propriétés invalides\",\n \"PipelineBoard.title\": \"Pipeline\",\n \"PipelineBoard.deals.one\": \"1 affaire\",\n \"PipelineBoard.deals.many\": \"{n} affaires\",\n \"PipelineBoard.total\": \"Total\",\n \"PipelineBoard.stage.empty\": \"Aucune affaire\",\n \"PipelineBoard.filter.label\": \"Afficher les étapes\",\n \"PipelineBoard.summary.open\": \"Ouvrir le tableau complet\",\n \"PipelineBoard.more\": \"{n} étapes de plus\",\n \"PipelineBoard.empty.message\": \"Aucun pipeline à afficher\",\n \"PipelineBoard.loading\": \"Chargement du pipeline\",\n \"PipelineBoard.error.invalidProps\": \"PipelineBoard : propriétés invalides\",\n \"PipelineBoard.col.stage\": \"Étape\",\n \"PipelineBoard.col.deals\": \"Affaires\",\n \"TransactionPreview.title\": \"Aperçu de transaction\",\n \"TransactionPreview.notice\": \"NON SIGNÉ - préparation uniquement\",\n \"TransactionPreview.kind.transfer\": \"Transfert\",\n \"TransactionPreview.kind.swap\": \"Échange\",\n \"TransactionPreview.testnet\": \"Réseau de test\",\n \"TransactionPreview.field.network\": \"Réseau\",\n \"TransactionPreview.field.from\": \"De\",\n \"TransactionPreview.field.to\": \"À\",\n \"TransactionPreview.field.amount\": \"Montant\",\n \"TransactionPreview.field.fee\": \"Frais de réseau\",\n \"TransactionPreview.field.sell\": \"Vendre\",\n \"TransactionPreview.field.buy\": \"Acheter\",\n \"TransactionPreview.field.minReceived\": \"Minimum reçu\",\n \"TransactionPreview.field.route\": \"Itinéraire\",\n \"TransactionPreview.field.priceImpact\": \"Impact sur le prix\",\n \"TransactionPreview.field.expires\": \"Expiration du devis\",\n \"TransactionPreview.priceImpact.high\": \"Impact sur le prix élevé\",\n \"TransactionPreview.simulation.success\": \"Simulation réussie\",\n \"TransactionPreview.simulation.failed\": \"Simulation échouée\",\n \"TransactionPreview.simulation.unavailable\": \"Simulation indisponible\",\n \"TransactionPreview.warnings\": \"Avertissements\",\n \"TransactionPreview.handoff\": \"Ouvrir dans le portefeuille\",\n \"TransactionPreview.empty.message\": \"Aucune transaction à prévisualiser\",\n \"TransactionPreview.loading\": \"Chargement de l'aperçu\",\n \"TransactionPreview.error.invalidProps\": \"TransactionPreview : propriétés invalides\",\n \"ProgressBar.title\": \"Progression\",\n \"ConfirmDialog.title\": \"Confirmation\",\n \"ConfirmDialog.options\": \"Réponses\",\n \"TableView.title\": \"Tableau de données\",\n \"TableView.markdown.more\": \"{n} lignes de plus\",\n \"MarkdownRenderer.title\": \"Contenu Markdown\",\n \"TokenDisplayOnceModal.title\": \"Jeton (affiché une fois)\",\n \"StatusBadge.title\": \"Statut\",\n \"TokenDisplayOnceModal.notice.once\":\n \"La valeur n'est affichée qu'une fois, dans la vue de l'application uniquement.\",\n \"TokenDisplayOnceModal.field.scope\": \"Portée\",\n \"TokenDisplayOnceModal.field.expires\": \"Expire le\",\n \"TokenDisplayOnceModal.field.fingerprint\": \"Empreinte\",\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","import { z } from \"zod\";\n\nexport const ProgressBarPropsSchema = z.object({\n value: z.number().min(0).max(100),\n label: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n colorVariant: z.enum([\"default\", \"warning\", \"danger\"]).default(\"default\"),\n});\n\nexport type ProgressBarProps = z.infer<typeof ProgressBarPropsSchema>;\n\nexport function validateProps(raw: unknown): ProgressBarProps {\n return ProgressBarPropsSchema.parse(raw);\n}\n","import React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type ProgressBarProps, validateProps } from \"./ProgressBar.schema.js\";\n\nfunction pickLocale(raw: Record<string, unknown>): MosaicLocale {\n return raw.locale === \"fr\" ? \"fr\" : \"en\";\n}\n\nconst colorVariantClasses: Record<ProgressBarProps[\"colorVariant\"], string> = {\n default: \"bg-blue-600\",\n warning: \"bg-amber-500\",\n danger: \"bg-red-600\",\n};\n\nconst containerVariantClasses: Record<ProgressBarProps[\"colorVariant\"], string> = {\n default: \"progressbar-default\",\n warning: \"progressbar-warning\",\n danger: \"progressbar-danger\",\n};\n\nfunction ProgressBarInner(props: ProgressBarProps) {\n const { value, label, colorVariant } = props;\n const fillClass = colorVariantClasses[colorVariant];\n const containerClass = containerVariantClasses[colorVariant];\n\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n tabIndex={0}\n className={`mosaic-progress ${containerClass}`}\n style={{ width: \"100%\" }}\n >\n <div\n data-testid=\"progress-fill\"\n className={`mosaic-progress-fill ${fillClass}`}\n style={{ width: `${value}%` }}\n />\n <span className=\"mosaic-progress-label\">\n {label}: {value}%\n </span>\n </div>\n );\n}\n\n/**\n * ProgressBar accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function ProgressBar(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <ProgressBarInner {...props} />;\n } catch {\n return (\n <div role=\"alert\" className=\"mosaic-progress-error\">\n {t(\"ProgressBar.error.invalidProps\", pickLocale(raw))}\n </div>\n );\n }\n}\n","/**\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","\"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","/**\n * Locale date-time formatting for views. An unparseable timestamp is returned unchanged (visible,\n * not replaced by a guess). `timeZone` is passed through so output is reproducible in tests and\n * follows the host's `hostContext.timeZone` (MCP Apps spec l.570).\n */\nexport function formatTimestamp(iso: string, locale: string, timeZone?: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n ...(timeZone ? { timeZone } : {}),\n }).format(d);\n } catch {\n return iso;\n }\n}\n","/** Timeline pure logic (no React): which steps an inline (compact) card shows. */\nexport type StepStatus = \"done\" | \"current\" | \"pending\" | \"blocked\";\n\nexport interface StepLike {\n status: StepStatus;\n}\n\n/**\n * Compact (Claude inline card: collapsed to the current step and the next one, no drill-in)\n * keeps the current step and its successor. With no current step it anchors on the first\n * unfinished one; with everything done, on the last step. Not compact: every step.\n */\nexport function visibleSteps<T extends StepLike>(\n steps: readonly T[],\n compact: boolean,\n): { visible: T[]; hiddenBefore: number; hiddenAfter: number } {\n if (!compact || steps.length === 0) {\n return { visible: [...steps], hiddenBefore: 0, hiddenAfter: 0 };\n }\n let anchor = steps.findIndex((s) => s.status === \"current\");\n if (anchor < 0) anchor = steps.findIndex((s) => s.status !== \"done\");\n if (anchor < 0) anchor = steps.length - 1;\n const end = Math.min(anchor + 2, steps.length);\n return {\n visible: steps.slice(anchor, end),\n hiddenBefore: anchor,\n hiddenAfter: steps.length - end,\n };\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Timeline.title, Timeline.status.done, Timeline.status.current, Timeline.status.pending, Timeline.status.blocked, Timeline.completed, Timeline.more, Timeline.empty.message, Timeline.loading, Timeline.error.invalidProps\n\nexport const TimelineStepSchema = z.object({\n id: z.string().optional(),\n title: z.string().min(1),\n status: z.enum([\"done\", \"current\", \"pending\", \"blocked\"]),\n description: z.string().optional(),\n /** ISO 8601. */\n timestamp: z.string().optional(),\n});\n\nexport type TimelineStep = z.infer<typeof TimelineStepSchema>;\n\n/**\n * Timeline (R02): missions as status steps — vertical or horizontal. `compact` is the Claude\n * inline form (current + next step); fullscreen shows all. `{}` parses (ChatGPT entrypoint\n * default).\n */\nexport const TimelinePropsSchema = z.object({\n steps: z.array(TimelineStepSchema).default([]),\n orientation: z.enum([\"vertical\", \"horizontal\"]).default(\"vertical\"),\n compact: z.boolean().default(false),\n /** IANA timezone for timestamps (e.g. `hostContext.timeZone`). Default: the viewer's. */\n timeZone: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TimelineProps = z.input<typeof TimelinePropsSchema>;\nexport type TimelinePropsOutput = z.output<typeof TimelinePropsSchema>;\n\nexport function validateTimelineProps(raw: unknown): TimelinePropsOutput {\n return TimelinePropsSchema.parse(raw);\n}\n","// i18nKeys: Timeline.title, Timeline.status.done, Timeline.status.current, Timeline.status.pending, Timeline.status.blocked, Timeline.completed, Timeline.more, Timeline.empty.message, Timeline.loading, Timeline.error.invalidProps\n\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { visibleSteps } from \"./Timeline.logic.js\";\nimport { type TimelineProps, TimelinePropsSchema } from \"./Timeline.schema.js\";\n\nconst MARKER = { done: \"✓\", current: \"●\", pending: \"○\", blocked: \"!\" } as const;\nconst MARKER_TONE = {\n done: \"text-green-700\",\n current: \"text-blue-700\",\n pending: \"text-slate-400\",\n blocked: \"text-red-700\",\n} as const;\n\n/**\n * Timeline — mission steps as an ordered list (vertical or horizontal). Status is stated in words\n * next to a marker (never colour alone); the current step carries `aria-current=\"step\"`.\n * `compact` is the Claude inline form: current + next step with counts of what is hidden.\n */\nexport function Timeline(raw: TimelineProps = {}) {\n const parsed = TimelinePropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"Timeline.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"Timeline.loading\", p.locale)}>\n <Skeleton variant=\"text\" count={4} locale={p.locale} />\n </div>\n );\n }\n if (p.steps.length === 0) {\n return <EmptyState title={t(\"Timeline.empty.message\", p.locale)} locale={p.locale} />;\n }\n const { visible, hiddenBefore, hiddenAfter } = visibleSteps(p.steps, p.compact);\n const horizontal = p.orientation === \"horizontal\";\n return (\n <section\n aria-label={t(\"Timeline.title\", p.locale)}\n lang={p.locale}\n className=\"flex flex-col gap-2\"\n >\n {hiddenBefore > 0 ? (\n <span className=\"text-sm text-slate-500\">\n {t(\"Timeline.completed\", p.locale).replace(\"{n}\", String(hiddenBefore))}\n </span>\n ) : null}\n <ol\n data-orientation={p.orientation}\n className={`m-0 flex list-none gap-3 p-0 ${horizontal ? \"flex-row overflow-x-auto\" : \"flex-col\"}`}\n style={{\n scrollPaddingLeft: \"var(--mosaic-safe-area-left, 0px)\",\n scrollPaddingRight: \"var(--mosaic-safe-area-right, 0px)\",\n }}\n >\n {visible.map((s, i) => (\n <li\n key={s.id ?? `${s.title}-${i}`}\n aria-current={s.status === \"current\" ? \"step\" : undefined}\n className=\"flex min-w-0 gap-2\"\n >\n <span aria-hidden=\"true\" className={`font-bold ${MARKER_TONE[s.status]}`}>\n {MARKER[s.status]}\n </span>\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"font-medium text-slate-900\">{s.title}</span>\n <span className=\"text-xs text-slate-500\">\n {t(`Timeline.status.${s.status}`, p.locale)}\n </span>\n {s.description ? (\n <span className=\"text-sm text-slate-600\">{s.description}</span>\n ) : null}\n {s.timestamp ? (\n <span className=\"text-xs text-slate-500\">\n {formatTimestamp(s.timestamp, p.locale, p.timeZone)}\n </span>\n ) : null}\n </span>\n </li>\n ))}\n </ol>\n {hiddenAfter > 0 ? (\n <span className=\"text-sm text-slate-500\">\n {t(\"Timeline.more\", p.locale).replace(\"{n}\", String(hiddenAfter))}\n </span>\n ) : null}\n </section>\n );\n}\n","/**\n * Markdown building blocks for the A-1 fallback of every view (pure strings, no React).\n * The text goes into a tool result `content[]` block that the MODEL reads: every untrusted\n * string must come out as inert text. Newlines collapse, markdown and HTML significant\n * characters are backslash-escaped, block markers at the start are neutralised, and URLs go\n * through {@link mdUrl} after being parsed (see `normalizeHttpUrl`).\n */\n\n// Backslash-escaped (CommonMark: each renders as the literal character): \\ ` * _ [ ] ( ) < > & ! | ~\nconst SPECIAL = /([\\\\`*_[\\]()<>&!|~])/g;\nconst BREAKS = new Set([10, 11, 12, 13, 0x85, 0x2028, 0x2029]);\n\n/**\n * One pass: every run of line breaks becomes a single space; other C0 controls (tab kept) and\n * DEL are dropped. Done by code point so no control character sits in a regular expression.\n */\nfunction flatten(text: string): string {\n let out = \"\";\n let gap = false;\n for (const c of text) {\n const n = c.codePointAt(0) ?? 0;\n if (BREAKS.has(n)) {\n gap = true;\n continue;\n }\n if (n < 32 && n !== 9) continue;\n if (n === 127) continue;\n if (gap) out += \" \";\n gap = false;\n out += c;\n }\n return gap ? `${out} ` : out;\n}\n\n/** Inert inline text: safe in a table cell, a list item, a link label or a blockquote. */\nexport function mdEscape(text: string): string {\n const flat = flatten(text)\n .replace(SPECIAL, \"\\\\$1\")\n // break GFM autolink literals: a scheme or www. in plain text must not become a live link\n .replace(/\\b(https?|ftp):\\/\\//gi, \"$1:\\\\/\\\\/\")\n .replace(/\\bwww\\./gi, (m) => `${m.slice(0, 3)}\\\\.`);\n return flat.replace(/^(\\s*)([#>+-])/, \"$1\\\\$2\").replace(/^(\\s*\\d+)([.)])(?=\\s|$)/, \"$1\\\\$2\");\n}\n\n/** A link destination: parentheses, brackets, backslash, angle brackets, backtick, whitespace encoded. */\nexport function mdUrl(href: string): string {\n return href.replace(\n /[()[\\]\\\\<>`\\s]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase().padStart(2, \"0\")}`,\n );\n}\n\n/** An inline code span that survives backticks inside the text; newlines collapse. */\nexport function mdCode(text: string): string {\n const flat = flatten(text);\n const longest = Math.max(0, ...(flat.match(/`+/g) ?? []).map((r) => r.length));\n const fence = \"`\".repeat(longest + 1);\n return `${fence} ${flat} ${fence}`;\n}\n\nexport function mdTable(headers: readonly string[], rows: readonly (readonly string[])[]): string {\n const line = (cells: readonly string[]) => `| ${cells.join(\" | \")} |`;\n return [line(headers), line(headers.map(() => \"---\")), ...rows.map(line)].join(\"\\n\");\n}\n\nexport function mdHeading(text: string, level = 1): string {\n return `${\"#\".repeat(level)} ${text}`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { TimelinePropsSchema } from \"./Timeline.schema.js\";\n\n/** A-1 fallback: every step as an ordered list with its status, description and time. */\nexport function timelineToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = TimelinePropsSchema.safeParse(props);\n const title = mdHeading(t(\"Timeline.title\", locale));\n if (!parsed.success || parsed.data.steps.length === 0) {\n return `${title}\\n\\n${t(\"Timeline.empty.message\", locale)}\\n`;\n }\n const { steps, timeZone } = parsed.data;\n const lines = steps.map((s, i) => {\n const status = t(`Timeline.status.${s.status}`, locale);\n const extras = [\n s.description ? mdEscape(s.description) : \"\",\n s.timestamp ? mdEscape(formatTimestamp(s.timestamp, locale, timeZone)) : \"\",\n ].filter(Boolean);\n return `${i + 1}. [${status}] ${mdEscape(s.title)}${extras.length ? ` - ${extras.join(\" - \")}` : \"\"}`;\n });\n return `${title}\\n\\n${lines.join(\"\\n\")}\\n`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Tabs.error.invalidProps\n\n/**\n * Tabs component props schema.\n *\n * Supports controlled (value + onValueChange) and uncontrolled (defaultValue) modes.\n * orientation — \"horizontal\" (default) or \"vertical\" — affects ArrowLeft/Right vs ArrowUp/Down nav.\n * tabs — ordered list of tab descriptors (id must be unique within the instance).\n */\nexport const TabItemSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n /** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */\n content: z.unknown(),\n disabled: z.boolean().optional().default(false),\n});\n\nexport type TabItem = z.infer<typeof TabItemSchema>;\n\nexport const TabsPropsSchema = z.object({\n tabs: z.array(TabItemSchema).min(1),\n value: z.string().optional(),\n defaultValue: z.string().optional(),\n orientation: z.enum([\"horizontal\", \"vertical\"]).default(\"horizontal\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\n/** Runtime props — onValueChange is a function (not serialisable via Zod, kept outside schema). */\nexport type TabsProps = z.infer<typeof TabsPropsSchema> & {\n onValueChange?: (id: string) => void;\n};\n\nexport function validateTabsProps(raw: unknown): z.infer<typeof TabsPropsSchema> {\n return TabsPropsSchema.parse(raw);\n}\n","/**\n * TableView pure logic (R01 / R10): sorting, selection and cell-kind rules. No React, no DOM.\n * Shared by the React and Preact runtimes through the shared TableView implementation.\n */\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface SortState {\n key: string;\n direction: SortDirection;\n}\n\n/** How a column's cells are compared and rendered. */\nexport type ColumnKind = \"text\" | \"number\" | \"amount\" | \"icon\";\n\nexport type SelectionMode = \"none\" | \"single\" | \"multiple\";\n\n/** `null`, `undefined` and the empty string carry no value: they sort last in both directions. */\nexport function isMissing(v: unknown): boolean {\n return v === null || v === undefined || v === \"\";\n}\n\nconst DECIMAL = /^(-)?(\\d+)(?:\\.(\\d+))?$/;\n\nfunction parseDecimal(s: string): { neg: boolean; int: string; frac: string } | undefined {\n const m = DECIMAL.exec(s.trim());\n if (!m) return undefined;\n const int = (m[2] ?? \"0\").replace(/^0+(?=\\d)/, \"\");\n const frac = (m[3] ?? \"\").replace(/0+$/, \"\");\n const zero = int === \"0\" && frac === \"\";\n return { neg: m[1] === \"-\" && !zero, int, frac };\n}\n\n/**\n * Exact comparison of decimal strings (token amounts): no Number() round trip, so values\n * beyond 2^53 or with 18 decimals compare correctly. Unparseable input compares as equal.\n */\nexport function compareDecimalStrings(a: string, b: string): number {\n const x = parseDecimal(a);\n const y = parseDecimal(b);\n if (!x || !y) return 0;\n if (x.neg !== y.neg) return x.neg ? -1 : 1;\n const sign = x.neg ? -1 : 1;\n if (x.int.length !== y.int.length) return sign * (x.int.length < y.int.length ? -1 : 1);\n if (x.int !== y.int) return sign * (x.int < y.int ? -1 : 1);\n const len = Math.max(x.frac.length, y.frac.length);\n const fx = x.frac.padEnd(len, \"0\");\n const fy = y.frac.padEnd(len, \"0\");\n if (fx === fy) return 0;\n return sign * (fx < fy ? -1 : 1);\n}\n\nconst collators = new Map<string, Intl.Collator>();\nfunction collator(locale: string): Intl.Collator {\n let c = collators.get(locale);\n if (!c) {\n c = new Intl.Collator(locale, { numeric: true, sensitivity: \"base\" });\n collators.set(locale, c);\n }\n return c;\n}\n\n/** Ascending comparison of two non-missing cell values for a column kind. */\nexport function compareCells(a: unknown, b: unknown, kind: ColumnKind, locale: string): number {\n if (kind === \"amount\") return compareDecimalStrings(String(a), String(b));\n if (kind === \"number\") {\n const x = Number(a);\n const y = Number(b);\n if (Number.isNaN(x) || Number.isNaN(y)) return collator(locale).compare(String(a), String(b));\n return x === y ? 0 : x < y ? -1 : 1;\n }\n return collator(locale).compare(String(a), String(b));\n}\n\n/** Stable sort; missing values last in both directions. Never mutates `items`. */\nexport function sortItems<T>(\n items: readonly T[],\n getValue: (item: T) => unknown,\n kind: ColumnKind,\n direction: SortDirection,\n locale: string,\n): T[] {\n const sign = direction === \"asc\" ? 1 : -1;\n return items\n .map((item, index) => ({ item, index, value: getValue(item) }))\n .sort((p, q) => {\n const pm = isMissing(p.value);\n const qm = isMissing(q.value);\n if (pm || qm) return pm && qm ? p.index - q.index : pm ? 1 : -1;\n const c = compareCells(p.value, q.value, kind, locale);\n return c !== 0 ? sign * c : p.index - q.index;\n })\n .map((e) => e.item);\n}\n\n/** Header click cycle on a column: none -> asc -> desc -> none; another column restarts at asc. */\nexport function nextSort(current: SortState | undefined, key: string): SortState | undefined {\n if (!current || current.key !== key) return { key, direction: \"asc\" };\n return current.direction === \"asc\" ? { key, direction: \"desc\" } : undefined;\n}\n\nexport function toggleSelection(\n current: ReadonlySet<string>,\n key: string,\n mode: SelectionMode,\n): Set<string> {\n if (mode === \"none\") return new Set(current);\n if (mode === \"single\") return current.has(key) ? new Set() : new Set([key]);\n const next = new Set(current);\n if (!next.delete(key)) next.add(key);\n return next;\n}\n\nexport function toggleAll(current: ReadonlySet<string>, allKeys: readonly string[]): Set<string> {\n return allKeys.length > 0 && allKeys.every((k) => current.has(k)) ? new Set() : new Set(allKeys);\n}\n","import type { ReactNode } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { z } from \"zod\";\nimport type { SelectionMode, SortState } from \"./TableView.logic\";\n\n// i18nKeys: TableView.aria.table, TableView.pagination.next, TableView.pagination.prev, TableView.empty.message, TableView.error.invalidProps, TableView.sort.by, TableView.select.row, TableView.select.all, TableView.loading\n\nconst ColumnKindSchema = z.enum([\"text\", \"number\", \"amount\", \"icon\"]);\nconst AlignSchema = z.enum([\"start\", \"center\", \"end\"]);\n\nexport const ColumnDefSchema = z.object({\n key: z.string().min(1),\n header: z.string().min(1),\n /** Cell kind: drives comparison and rendering. `amount` = decimal STRING, never a float. */\n type: ColumnKindSchema.default(\"text\"),\n /** Defaults to `end` for `number` / `amount` columns, `start` otherwise. */\n align: AlignSchema.optional(),\n /** CSS width: a number is pixels. */\n width: z.union([z.string().min(1), z.number().positive()]).optional(),\n sortable: z.boolean().default(false),\n /**\n * Values of this column are masked in the A-1 markdown fallback and kept out of the HTML\n * props of a tool result (delivered via the result `_meta`), never written to `content[]`.\n */\n sensitive: z.boolean().default(false),\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 type?: \"text\" | \"number\" | \"amount\" | \"icon\";\n align?: \"start\" | \"center\" | \"end\";\n width?: string | number;\n sortable?: boolean;\n sensitive?: boolean;\n render?: (row: TRow) => ReactNode;\n};\n\nconst SortSchema = z.object({ key: z.string().min(1), direction: z.enum([\"asc\", \"desc\"]) });\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 /**\n * Serialisable rows, for views built through `createMosaicResource` (the React props carry\n * `rows` separately).\n */\n rows: z.array(z.record(z.unknown())).default([]),\n virtualizeThreshold: z.number().int().positive().default(100),\n ariaLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n selectionMode: z.enum([\"none\", \"single\", \"multiple\"]).default(\"none\"),\n /** Initial sort. */\n sort: SortSchema.optional(),\n stickyHeader: z.boolean().default(false),\n /** Scroll region height when `stickyHeader` is on (pixels). */\n maxHeight: z.number().int().positive().default(400),\n density: z.enum([\"comfortable\", \"compact\"]).default(\"comfortable\"),\n loading: z.boolean().default(false),\n});\n\nexport type TableViewPropsSchemaInput = z.input<typeof TableViewPropsSchema>;\nexport type TableViewPropsSchemaOutput = z.output<typeof TableViewPropsSchema>;\n\n/** Options shared by the static and streaming variants (R01 / R10 extension). */\nexport type TableViewOptions<TRow extends Record<string, unknown>> = {\n /** `none` (default) adds no selection column. `single` renders radios, `multiple` checkboxes. */\n selectionMode?: SelectionMode;\n /** Controlled selection: row keys (`id` when present, else `row-<original index>`). */\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n /** Selected rows in table order, plus their keys. Feed it to `selectionModelContext`. */\n onSelectionChange?: (rows: Partial<TRow>[], keys: string[]) => void;\n /** Controlled sort; `null` = unsorted. */\n sort?: SortState | null;\n defaultSort?: SortState;\n onSortChange?: (sort: SortState | undefined) => void;\n stickyHeader?: boolean;\n /** Scroll region height in pixels when `stickyHeader` is on. Default 400. */\n maxHeight?: number;\n density?: \"comfortable\" | \"compact\";\n /** Shows a Skeleton table instead of rows. */\n loading?: boolean;\n};\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} & TableViewOptions<TRow>;\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} & TableViewOptions<TRow>;\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, TableView.sort.by, TableView.select.row, TableView.select.all, TableView.loading\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport {\n type ColumnKind,\n type SortState,\n nextSort,\n sortItems,\n toggleAll,\n toggleSelection,\n} from \"./TableView.logic\";\nimport { validateTableViewProps } from \"./TableView.schema\";\nimport type { StreamingTableViewProps, TableViewProps } from \"./TableView.schema\";\n\nconst OVERSCAN = 5;\nconst SKELETON_ROWS = [\"head\", \"r1\", \"r2\", \"r3\", \"r4\", \"r5\"] as const;\n\ntype AnyRow = Record<string, unknown>;\n\n/** Shared prop surface after validation: everything the table core needs. */\ntype CoreProps<TRow extends AnyRow> = Pick<\n TableViewProps<TRow>,\n | \"columns\"\n | \"ariaLabel\"\n | \"onRowClick\"\n | \"selectionMode\"\n | \"selectedKeys\"\n | \"defaultSelectedKeys\"\n | \"onSelectionChange\"\n | \"sort\"\n | \"defaultSort\"\n | \"onSortChange\"\n | \"stickyHeader\"\n | \"maxHeight\"\n | \"density\"\n | \"loading\"\n> & {\n rows: Partial<TRow>[];\n virtualizeThreshold: number;\n locale: MosaicLocale;\n};\n\nfunction resolveLocale(l: string | undefined): MosaicLocale {\n return l === \"fr\" ? \"fr\" : \"en\";\n}\n\nfunction validate<TRow extends AnyRow>(\n props: Pick<\n TableViewProps<TRow>,\n \"columns\" | \"virtualizeThreshold\" | \"ariaLabel\" | \"locale\" | \"selectionMode\" | \"density\"\n >,\n): number | undefined {\n try {\n const validated = validateTableViewProps({\n columns: props.columns.map(({ key, header, type, align, width, sortable }) => ({\n key,\n header,\n type,\n align,\n width,\n sortable,\n })),\n virtualizeThreshold: props.virtualizeThreshold,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n selectionMode: props.selectionMode,\n density: props.density,\n });\n return validated.virtualizeThreshold;\n } catch {\n return undefined;\n }\n}\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\", aria-sort on sortable headers.\n *\n * R01 / R10 extension (additive, every new prop optional): sortable columns, single / multiple\n * selection, sticky header, compact density, column align / width, `amount` and `icon` cell kinds\n * and a Skeleton loading state. Claude inline cards want few rows and no nested scrolling:\n * keep inline summaries short and offer fullscreen for the full set.\n */\nexport function TableView<TRow extends AnyRow = AnyRow>(props: TableViewProps<TRow>) {\n const threshold = validate(props);\n if (threshold === undefined) {\n return <div role=\"alert\">{t(\"TableView.error.invalidProps\", resolveLocale(props.locale))}</div>;\n }\n return (\n <TableCore<TRow>\n {...props}\n rows={props.rows}\n virtualizeThreshold={threshold}\n locale={resolveLocale(props.locale)}\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 * Same extension props as TableView.\n */\nexport function StreamingTableView<TRow extends AnyRow = AnyRow>(\n props: StreamingTableViewProps<TRow>,\n) {\n const threshold = validate(props);\n if (threshold === undefined) {\n return <div role=\"alert\">{t(\"TableView.error.invalidProps\", resolveLocale(props.locale))}</div>;\n }\n return <StreamingTableViewInner<TRow> {...props} virtualizeThreshold={threshold} />;\n}\n\n// ── Inner implementation for streaming (rendered only after validation passes) ──\n\nfunction StreamingTableViewInner<TRow extends AnyRow = AnyRow>({\n rows$,\n ...rest\n}: StreamingTableViewProps<TRow> & { virtualizeThreshold: number }) {\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 return <TableCore<TRow> {...rest} rows={rows} locale={resolveLocale(rest.locale)} />;\n}\n\n// ── Table core: sort + selection state, then static or virtual rendering ──────\n\n/** A row with its stable key (id, else ORIGINAL index) so selection survives re-sorting. */\ntype Item<TRow extends AnyRow> = { row: Partial<TRow>; key: string };\n\nfunction kindOf(col: { type?: ColumnKind }): ColumnKind {\n return col.type ?? \"text\";\n}\n\nfunction alignOf(col: { type?: ColumnKind; align?: \"start\" | \"center\" | \"end\" }) {\n return col.align ?? (col.type === \"amount\" || col.type === \"number\" ? \"end\" : \"start\");\n}\n\nfunction cellText(row: AnyRow, key: string): string {\n return String(row[key] ?? \"\");\n}\n\n/** Only http(s) and data:image sources are rendered as icons. */\nfunction safeIconSrc(v: unknown): string | undefined {\n if (typeof v !== \"string\") return undefined;\n return /^(https?:\\/\\/|data:image\\/)/i.test(v) ? v : undefined;\n}\n\nfunction renderCell<TRow extends AnyRow>(\n col: CoreProps<TRow>[\"columns\"][number],\n row: Partial<TRow>,\n): React.ReactNode {\n if (col.render) {\n return col.render(row as TRow);\n }\n const value = (row as AnyRow)[col.key];\n if (col.type === \"icon\") {\n const src = safeIconSrc(value);\n return src ? (\n <img src={src} alt=\"\" width={20} height={20} style={{ verticalAlign: \"middle\" }} />\n ) : null;\n }\n if (col.type === \"amount\" || col.type === \"number\") {\n return <span style={{ fontVariantNumeric: \"tabular-nums\" }}>{String(value ?? \"\")}</span>;\n }\n return String(value ?? \"\");\n}\n\nfunction TableCore<TRow extends AnyRow>(props: CoreProps<TRow>) {\n const {\n columns,\n rows,\n ariaLabel,\n locale,\n selectionMode = \"none\",\n stickyHeader = false,\n density = \"comfortable\",\n } = props;\n\n // ── sort (controlled when `sort` is passed; null = controlled \"unsorted\") ──\n const [innerSort, setInnerSort] = useState<SortState | undefined>(props.defaultSort);\n const sort = props.sort === undefined ? innerSort : (props.sort ?? undefined);\n const onSort = (key: string) => {\n const next = nextSort(sort, key);\n if (props.sort === undefined) setInnerSort(next);\n props.onSortChange?.(next);\n };\n\n const items = useMemo<Item<TRow>[]>(\n () =>\n rows.map((row, i) => {\n const id = (row as AnyRow).id;\n return { row, key: id != null ? String(id) : `row-${i}` };\n }),\n [rows],\n );\n const sorted = useMemo(() => {\n const col = sort ? columns.find((c) => c.key === sort.key) : undefined;\n if (!sort || !col) return items;\n return sortItems(\n items,\n (it) => (it.row as AnyRow)[col.key],\n kindOf(col),\n sort.direction,\n locale,\n );\n }, [items, sort, columns, locale]);\n\n // ── selection (controlled when `selectedKeys` is passed) ──\n const [innerSelected, setInnerSelected] = useState<ReadonlySet<string>>(\n () => new Set(props.defaultSelectedKeys ?? []),\n );\n const selected: ReadonlySet<string> = props.selectedKeys\n ? new Set(props.selectedKeys)\n : innerSelected;\n const commit = (next: Set<string>) => {\n if (!props.selectedKeys) setInnerSelected(next);\n const chosen = sorted.filter((it) => next.has(it.key));\n props.onSelectionChange?.(\n chosen.map((it) => it.row),\n chosen.map((it) => it.key),\n );\n };\n const selection =\n selectionMode === \"none\"\n ? undefined\n : {\n mode: selectionMode,\n selected,\n toggle: (key: string) => commit(toggleSelection(selected, key, selectionMode)),\n toggleAll: () =>\n commit(\n toggleAll(\n selected,\n sorted.map((it) => it.key),\n ),\n ),\n };\n\n if (props.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"TableView.loading\", locale)} lang={locale}>\n {SKELETON_ROWS.map((_, i) => (\n <Skeleton\n key={SKELETON_ROWS[i]}\n variant=\"rect\"\n height={i === 0 ? 24 : 36}\n locale={locale}\n />\n ))}\n </div>\n );\n }\n\n const content: TableContentProps<TRow> = {\n items: sorted,\n columns,\n ariaLabel,\n locale,\n onRowClick: props.onRowClick,\n sort,\n onSort,\n selection,\n sticky: stickyHeader,\n density,\n };\n\n const isVirtual = rows.length > props.virtualizeThreshold;\n if (isVirtual) return <VirtualTable<TRow> {...content} />;\n if (stickyHeader) {\n return (\n <div\n // biome-ignore lint/a11y/noNoninteractiveTabindex: WCAG 2.1.1 — the sticky-header scroll region is scrollable and must be keyboard reachable (axe scrollable-region-focusable)\n tabIndex={0}\n // biome-ignore lint/a11y/useSemanticElements: the region wraps a <table>; role=region + aria-label is the non-structural annotation (same as the virtual viewport)\n role=\"region\"\n aria-label={ariaLabel}\n style={{ maxHeight: props.maxHeight ?? 400, overflow: \"auto\" }}\n >\n <StaticTable<TRow> {...content} />\n </div>\n );\n }\n return <StaticTable<TRow> {...content} />;\n}\n\n// ── Shared pieces ─────────────────────────────────────────────────────────────\n\ntype SelectionApi = {\n mode: \"single\" | \"multiple\";\n selected: ReadonlySet<string>;\n toggle: (key: string) => void;\n toggleAll: () => void;\n};\n\ntype TableContentProps<TRow extends AnyRow> = {\n items: Item<TRow>[];\n columns: CoreProps<TRow>[\"columns\"];\n ariaLabel: string;\n locale: MosaicLocale;\n onRowClick?: (row: TRow, index: number) => void;\n sort: SortState | undefined;\n onSort: (key: string) => void;\n selection: SelectionApi | undefined;\n sticky: boolean;\n density: \"comfortable\" | \"compact\";\n};\n\nconst CELL_PADDING = { comfortable: undefined, compact: \"2px 6px\" } as const;\n\nfunction HeaderRow<TRow extends AnyRow>({\n columns,\n locale,\n sort,\n onSort,\n selection,\n sticky,\n density,\n items,\n}: TableContentProps<TRow>) {\n const padding = CELL_PADDING[density];\n const stickyStyle = sticky\n ? { position: \"sticky\" as const, top: 0, background: \"var(--mosaic-color-background, Canvas)\" }\n : {};\n const allSelected = items.length > 0 && items.every((it) => selection?.selected.has(it.key));\n const someSelected = items.some((it) => selection?.selected.has(it.key));\n return (\n <tr>\n {selection ? (\n <th scope=\"col\" style={{ ...stickyStyle, padding, width: 32 }}>\n {selection.mode === \"multiple\" ? (\n <input\n type=\"checkbox\"\n aria-label={t(\"TableView.select.all\", locale)}\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected && !allSelected;\n }}\n onChange={selection.toggleAll}\n />\n ) : null}\n </th>\n ) : null}\n {columns.map((col) => {\n const dir = sort?.key === col.key ? sort.direction : undefined;\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={\n col.sortable\n ? dir === \"asc\"\n ? \"ascending\"\n : dir === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined\n }\n style={{\n ...stickyStyle,\n padding,\n textAlign: alignOf(col),\n ...(col.width !== undefined ? { width: col.width } : {}),\n }}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n aria-label={`${t(\"TableView.sort.by\", locale)} ${col.header}`}\n onClick={() => onSort(col.key)}\n style={{ all: \"inherit\", cursor: \"pointer\", padding: 0 }}\n >\n {col.header}\n <span aria-hidden=\"true\">{dir === \"asc\" ? \" ▲\" : dir === \"desc\" ? \" ▼\" : \"\"}</span>\n </button>\n ) : (\n col.header\n )}\n </th>\n );\n })}\n </tr>\n );\n}\n\nfunction SelectCell<TRow extends AnyRow>({\n item,\n columns,\n selection,\n locale,\n padding,\n}: {\n item: Item<TRow>;\n columns: CoreProps<TRow>[\"columns\"];\n selection: SelectionApi;\n locale: MosaicLocale;\n padding: string | undefined;\n}) {\n const first = columns[0];\n const label = `${t(\"TableView.select.row\", locale)}: ${first ? cellText(item.row as AnyRow, first.key) : item.key}`;\n return (\n <td\n style={{ padding, width: 32 }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <input\n type={selection.mode === \"multiple\" ? \"checkbox\" : \"radio\"}\n name={selection.mode === \"single\" ? \"mosaic-table-selection\" : undefined}\n aria-label={label}\n checked={selection.selected.has(item.key)}\n onChange={() => selection.toggle(item.key)}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </td>\n );\n}\n\nfunction rowActivation<TRow extends AnyRow>(\n onRowClick: TableContentProps<TRow>[\"onRowClick\"],\n row: Partial<TRow>,\n index: number,\n) {\n if (!onRowClick) return {};\n return {\n role: \"button\" as const,\n tabIndex: 0,\n onClick: () => onRowClick(row as TRow, index),\n onKeyDown: (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row as TRow, index);\n }\n },\n };\n}\n\n// ── Static table (rows <= virtualizeThreshold) ────────────────────────────────\n\nfunction StaticTable<TRow extends AnyRow>(props: TableContentProps<TRow>) {\n const { items, columns, ariaLabel, locale, onRowClick, selection, density } = props;\n const emptyMsg = t(\"TableView.empty.message\", locale);\n const padding = CELL_PADDING[density];\n const colSpan = columns.length + (selection ? 1 : 0);\n return (\n <table\n aria-label={ariaLabel}\n aria-rowcount={items.length}\n data-density={density}\n style={{ width: \"100%\", borderCollapse: \"collapse\" }}\n >\n <thead>\n <HeaderRow<TRow> {...props} />\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td colSpan={colSpan} aria-label={emptyMsg}>\n {emptyMsg}\n </td>\n </tr>\n ) : (\n items.map((item, rowIndex) => (\n <tr\n key={item.key}\n aria-rowindex={rowIndex + 2}\n data-selected={selection?.selected.has(item.key) ? \"true\" : undefined}\n {...(onRowClick ? { style: { cursor: \"pointer\" } } : {})}\n {...rowActivation(onRowClick, item.row, rowIndex)}\n >\n {selection ? (\n <SelectCell<TRow>\n item={item}\n columns={columns}\n selection={selection}\n locale={locale}\n padding={padding}\n />\n ) : null}\n {columns.map((col) => (\n <td key={col.key} style={{ padding, textAlign: alignOf(col) }}>\n {renderCell(col, item.row)}\n </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 AnyRow>(props: TableContentProps<TRow>) {\n const { items, columns, ariaLabel, locale, onRowClick, selection, density } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const padding = CELL_PADDING[density];\n\n const rowVirtualizer = useVirtualizer({\n count: items.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/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 // 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 aria-label={ariaLabel}\n style={{ height: 400, overflow: \"auto\", position: \"relative\" }}\n >\n <table\n aria-label={ariaLabel}\n aria-rowcount={items.length}\n data-density={density}\n style={{ width: \"100%\", borderCollapse: \"collapse\" }}\n >\n <thead>\n <HeaderRow<TRow> {...props} sticky />\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 item = items[virtualRow.index] ?? { row: {} as Partial<TRow>, key: \"\" };\n return (\n <tr\n key={item.key || `vrow-${virtualRow.index}`}\n aria-rowindex={virtualRow.index + 2}\n data-selected={selection?.selected.has(item.key) ? \"true\" : undefined}\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 {...rowActivation(onRowClick, item.row, virtualRow.index)}\n >\n {selection ? (\n <SelectCell<TRow>\n item={item}\n columns={columns}\n selection={selection}\n locale={locale}\n padding={padding}\n />\n ) : null}\n {columns.map((col) => (\n <td key={col.key} style={{ flex: 1, padding, textAlign: alignOf(col) }}>\n {renderCell(col, item.row)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import { z } from \"zod\";\n\n// i18nKeys: StatCard.title, StatCard.trend.up, StatCard.trend.down, StatCard.trend.flat, StatCard.empty.message, StatCard.loading, StatCard.error.invalidProps\n\n/**\n * StatCard (R08): one metric — label, value, optional trend and change.\n *\n * Every field has a default so `{}` parses: a ChatGPT global entrypoint opens with empty\n * arguments (openai/mcp-extensions docs/spec.md, entrypoints) and the view then shows an empty\n * state instead of failing. `value` is a STRING (a decimal string for money, never a float).\n * Claude inline cards count each stat toward the \"4-5 data points\" cap: keep few per card.\n */\nexport const StatCardPropsSchema = z.object({\n label: z.string().default(\"\"),\n value: z.string().default(\"\"),\n unit: z.string().optional(),\n trend: z.enum([\"up\", \"down\", \"flat\"]).optional(),\n /** Pre-formatted change, e.g. \"+4.2%\". */\n change: z.string().optional(),\n tone: z.enum([\"neutral\", \"success\", \"warning\", \"danger\"]).default(\"neutral\"),\n description: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type StatCardProps = z.input<typeof StatCardPropsSchema>;\nexport type StatCardPropsOutput = z.output<typeof StatCardPropsSchema>;\n\nexport function validateStatCardProps(raw: unknown): StatCardPropsOutput {\n return StatCardPropsSchema.parse(raw);\n}\n","// i18nKeys: StatCard.title, StatCard.trend.up, StatCard.trend.down, StatCard.trend.flat, StatCard.empty.message, StatCard.loading, StatCard.error.invalidProps\n\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { type StatCardProps, StatCardPropsSchema } from \"./StatCard.schema.js\";\n\nconst TONE_CLASSES = {\n neutral: \"text-slate-900\",\n success: \"text-green-700\",\n warning: \"text-amber-700\",\n danger: \"text-red-700\",\n} as const;\n\nconst TREND_ARROW = { up: \"▲\", down: \"▼\", flat: \"▬\" } as const;\n\n/**\n * StatCard — one KPI: label, value, optional unit, trend (word + arrow, never colour alone) and\n * change. Skeleton while `loading`; an empty state for `{}` (ChatGPT entrypoint default).\n * WCAG-AA: a labelled region; the trend is stated in text.\n */\nexport function StatCard(raw: StatCardProps) {\n const parsed = StatCardPropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"StatCard.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"StatCard.loading\", p.locale)}>\n <Skeleton variant=\"rect\" height={72} locale={p.locale} />\n </div>\n );\n }\n if (p.label === \"\" && p.value === \"\") {\n return <EmptyState title={t(\"StatCard.empty.message\", p.locale)} locale={p.locale} />;\n }\n return (\n <section\n aria-label={`${t(\"StatCard.title\", p.locale)}: ${p.label}`}\n lang={p.locale}\n className=\"flex flex-col gap-1 rounded-lg border border-slate-200 bg-white p-4\"\n >\n <span className=\"text-sm text-slate-500\">{p.label}</span>\n <span className={`text-2xl font-semibold tabular-nums ${TONE_CLASSES[p.tone]}`}>\n {p.value}\n {p.unit ? (\n <span className=\"ml-1 text-base font-normal text-slate-500\">{p.unit}</span>\n ) : null}\n </span>\n {p.trend || p.change ? (\n <span className=\"flex items-center gap-1 text-sm text-slate-600\">\n {p.trend ? (\n <>\n <span aria-hidden=\"true\">{TREND_ARROW[p.trend]}</span>\n <span>{t(`StatCard.trend.${p.trend}`, p.locale)}</span>\n </>\n ) : null}\n {p.change ? <span className=\"tabular-nums\">{p.change}</span> : null}\n </span>\n ) : null}\n {p.description ? <span className=\"text-sm text-slate-500\">{p.description}</span> : null}\n </section>\n );\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { StatCardPropsSchema } from \"./StatCard.schema.js\";\n\n/**\n * A-1 fallback: the metric as markdown (label, value, unit, trend in words, change), for clients\n * with no UI layer. Pure; shares the schema defaults with the view.\n */\nexport function statCardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = StatCardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"StatCard.title\", locale));\n if (!parsed.success || (parsed.data.label === \"\" && parsed.data.value === \"\")) {\n return `${title}\\n\\n${t(\"StatCard.empty.message\", locale)}\\n`;\n }\n const { label, value, unit, trend, change, description } = parsed.data;\n const amount = unit ? `${value} ${unit}` : value;\n const movement = [trend ? t(`StatCard.trend.${trend}`, locale) : \"\", change ?? \"\"]\n .filter(Boolean)\n .join(\" \");\n const line = `- **${mdEscape(label)}**: ${mdEscape(amount)}${movement ? ` (${mdEscape(movement)})` : \"\"}`;\n return `${title}\\n\\n${line}\\n${description ? `\\n${mdEscape(description)}\\n` : \"\"}`;\n}\n","import { z } from \"zod\";\n\nexport const BadgePropsSchema = z.object({\n label: z.string(),\n variant: z\n .enum([\"default\", \"primary\", \"success\", \"warning\", \"danger\", \"info\", \"neutral\"])\n .default(\"default\"),\n dot: z.boolean().optional(),\n count: z.number().int().nonnegative().optional(),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type BadgeProps = z.infer<typeof BadgePropsSchema>;\n\nexport function validateBadgeProps(raw: unknown): BadgeProps {\n return BadgePropsSchema.parse(raw);\n}\n","// i18nKeys: Badge.aria.label, Badge.error.invalidProps\n\nimport React from \"react\";\nimport {\n type BadgeProps,\n validateBadgeProps,\n} from \"../../../../components/display/Badge.schema.js\";\nimport { type MosaicLocale, t } from \"../../../../i18n/strings.js\";\n\ntype Variant = \"default\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n default: \"bg-slate-100 text-slate-700 ring-1 ring-slate-200\",\n primary: \"bg-indigo-100 text-indigo-800 ring-1 ring-indigo-300\",\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\nconst dotClasses: Record<Variant, string> = {\n default: \"bg-slate-400\",\n primary: \"bg-indigo-500\",\n success: \"bg-green-500\",\n warning: \"bg-amber-500\",\n danger: \"bg-red-500\",\n info: \"bg-blue-500\",\n neutral: \"bg-slate-400\",\n};\n\nfunction BadgeInner({ label, variant, dot, count, locale }: BadgeProps) {\n const ariaLabel = t(\"Badge.aria.label\", locale);\n const displayCount = count !== undefined ? ` (${count})` : \"\";\n return (\n <span\n aria-label={`${ariaLabel}: ${label}${displayCount}`}\n lang={locale}\n className={`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {dot && (\n <span aria-hidden=\"true\" className={`h-1.5 w-1.5 rounded-full ${dotClasses[variant]}`} />\n )}\n {label}\n {count !== undefined && (\n <span aria-hidden=\"true\" className=\"font-semibold tabular-nums\">\n {count}\n </span>\n )}\n </span>\n );\n}\n\n/**\n * Badge — cross-runtime generic visual label 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 * - `<span>` with explicit aria-label combining Badge label + locale\n * - Optional dot indicator is aria-hidden (decorative)\n * - Optional count is aria-hidden (included in aria-label via label string)\n * - `lang` attribute set to locale for correct AT language announcement\n *\n * Badge vs StatusBadge: Badge is the generic visual label primitive (variant + optional\n * dot/count); StatusBadge is the status-specific semantic one using <output>.\n *\n * Bilingue: EN/FR strings resolved via t() from i18n/strings — no hardcoded literals.\n * Target: 0.3.2 patch release.\n */\nexport function Badge(raw: Record<string, unknown>) {\n try {\n const props = validateBadgeProps(raw);\n return <BadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"Badge.error.invalidProps\", locale)}</span>;\n }\n}\n","/**\n * Decimal-string helpers. Token amounts and prices travel as decimal STRINGS (the Fuse tools\n * return `balanceFormatted` / `balanceRaw` strings): converting through `Number` loses digits\n * beyond 2^53 and rounds 18-decimal values. Everything here works on the digits.\n */\nconst DECIMAL = /^(-)?(\\d+)(?:\\.(\\d+))?$/;\n\n/** Exact sum; `undefined` when ANY input is not a plain decimal string (no silent skipping). */\nexport function sumDecimalStrings(values: readonly string[]): string | undefined {\n let scale = 0;\n const parsed: Array<{ neg: boolean; int: string; frac: string }> = [];\n for (const v of values) {\n const m = DECIMAL.exec(v);\n if (!m) return undefined;\n const frac = m[3] ?? \"\";\n scale = Math.max(scale, frac.length);\n parsed.push({ neg: m[1] === \"-\", int: m[2] ?? \"0\", frac });\n }\n let total = 0n;\n for (const p of parsed) {\n const n = BigInt(p.int + p.frac.padEnd(scale, \"0\"));\n total += p.neg ? -n : n;\n }\n const neg = total < 0n;\n const digits = (neg ? -total : total).toString().padStart(scale + 1, \"0\");\n const int = digits.slice(0, digits.length - scale);\n const frac = digits.slice(digits.length - scale).replace(/0+$/, \"\");\n return `${neg ? \"-\" : \"\"}${int}${frac ? `.${frac}` : \"\"}`;\n}\n\n/**\n * Locale formatting of a decimal string for DISPLAY. The input is parsed from its digits (no\n * float round trip), but the OUTPUT IS ROUNDED to the currency's fraction digits (`0.125` USD\n * shows `$0.13`); amounts that must stay exact are shown as the raw string, not through this.\n * On anything unformattable the raw string is returned unchanged, so a bad value is visible.\n */\nexport function formatDecimalString(value: string, locale: string, currency?: string): string {\n if (!DECIMAL.test(value)) return value;\n try {\n const nf = new Intl.NumberFormat(\n locale,\n currency ? { style: \"currency\", currency } : { maximumFractionDigits: 20 },\n );\n return nf.format(value as unknown as number);\n } catch {\n return value;\n }\n}\n\n/** `0x1234…5678`: first `head` and last `tail` characters; short strings are returned whole. */\nexport function truncateAddress(address: string, head = 6, tail = 4): string {\n return address.length <= head + tail + 1\n ? address\n : `${address.slice(0, head)}…${address.slice(address.length - tail)}`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: BalanceCard.title, BalanceCard.network, BalanceCard.testnet, BalanceCard.address, BalanceCard.contract, BalanceCard.value, BalanceCard.copy, BalanceCard.copied, BalanceCard.empty.message, BalanceCard.loading, BalanceCard.error.invalidProps\n\n/**\n * BalanceCard (R09): a wallet balance for the Fuse server views.\n *\n * Source shape: fuse-mcp-server `src/tools/getBalance.ts` returns `{ address, token,\n * tokenAddress?, decimals, balanceRaw?, balanceWei?, balanceFormatted }`. `balance` is the\n * `balanceFormatted` DECIMAL STRING — shown as given, never routed through a float. Read-only.\n * `{}` parses (ChatGPT entrypoint default).\n */\nexport const BalanceCardPropsSchema = z.object({\n token: z.string().default(\"\"),\n balance: z.string().default(\"\"),\n address: z.string().default(\"\"),\n tokenAddress: z.string().optional(),\n decimals: z.number().int().nonnegative().optional(),\n network: z.string().optional(),\n testnet: z.boolean().default(false),\n /** Decimal string in `currency`. */\n usdValue: z.string().optional(),\n currency: z.string().default(\"USD\"),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type BalanceCardProps = z.input<typeof BalanceCardPropsSchema>;\nexport type BalanceCardPropsOutput = z.output<typeof BalanceCardPropsSchema>;\n\nexport function validateBalanceCardProps(raw: unknown): BalanceCardPropsOutput {\n return BalanceCardPropsSchema.parse(raw);\n}\n","// i18nKeys: BalanceCard.title, BalanceCard.network, BalanceCard.testnet, BalanceCard.address, BalanceCard.contract, BalanceCard.value, BalanceCard.copy, BalanceCard.copied, BalanceCard.empty.message, BalanceCard.loading, BalanceCard.error.invalidProps\n\nimport React, { useState } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { Badge } from \"../../runtimes/react/components/display/Badge.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { formatDecimalString, truncateAddress } from \"../shared/decimal.js\";\nimport { type BalanceCardProps, BalanceCardPropsSchema } from \"./BalanceCard.schema.js\";\nimport { StatCard } from \"./StatCard.js\";\n\n/**\n * BalanceCard — composition of {@link StatCard} (amount + token) with the network badge, a\n * testnet badge, the truncated address (full address in `title`) and, when the sandbox exposes\n * the async clipboard, a copy button. Read-only; no wallet action.\n */\nexport function BalanceCard(raw: BalanceCardProps) {\n const parsed = BalanceCardPropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n const [copied, setCopied] = useState(false);\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"BalanceCard.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"BalanceCard.loading\", p.locale)}>\n <Skeleton variant=\"rect\" height={120} locale={p.locale} />\n </div>\n );\n }\n if (p.token === \"\" && p.balance === \"\") {\n return <EmptyState title={t(\"BalanceCard.empty.message\", p.locale)} locale={p.locale} />;\n }\n const canCopy =\n typeof navigator !== \"undefined\" && typeof navigator.clipboard?.writeText === \"function\";\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(p.address);\n setCopied(true);\n } catch {\n // clipboard-write may be denied by the host sandbox: the address stays selectable\n }\n };\n return (\n <section\n aria-label={`${t(\"BalanceCard.title\", p.locale)}: ${p.token}`}\n lang={p.locale}\n className=\"flex flex-col gap-2\"\n >\n <StatCard\n label={t(\"BalanceCard.title\", p.locale)}\n value={p.balance}\n unit={p.token}\n locale={p.locale}\n />\n <div className=\"flex flex-wrap items-center gap-2\">\n {p.network ? <Badge label={p.network} variant=\"info\" locale={p.locale} /> : null}\n {p.testnet ? (\n <Badge label={t(\"BalanceCard.testnet\", p.locale)} variant=\"warning\" locale={p.locale} />\n ) : null}\n </div>\n {p.usdValue ? (\n <span className=\"text-sm text-slate-600\">\n {t(\"BalanceCard.value\", p.locale)}:{\" \"}\n {formatDecimalString(p.usdValue, p.locale, p.currency)}\n </span>\n ) : null}\n {p.address ? (\n <div className=\"flex items-center gap-2 text-sm text-slate-600\">\n <span className=\"font-mono\" title={p.address}>\n {truncateAddress(p.address)}\n </span>\n {canCopy ? (\n <button\n type=\"button\"\n onClick={copy}\n className=\"rounded border border-slate-300 px-2 py-0.5 text-xs hover:bg-slate-50\"\n >\n {t(\"BalanceCard.copy\", p.locale)}\n </button>\n ) : null}\n {copied ? <output>{t(\"BalanceCard.copied\", p.locale)}</output> : null}\n </div>\n ) : null}\n </section>\n );\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatDecimalString } from \"../shared/decimal.js\";\nimport { mdCode, mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { BalanceCardPropsSchema } from \"./BalanceCard.schema.js\";\n\n/** A-1 fallback: `token: balance (network, testnet)` plus the full address, as markdown. */\nexport function balanceCardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = BalanceCardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"BalanceCard.title\", locale));\n if (!parsed.success || (parsed.data.token === \"\" && parsed.data.balance === \"\")) {\n return `${title}\\n\\n${t(\"BalanceCard.empty.message\", locale)}\\n`;\n }\n const p = parsed.data;\n const where = [p.network, p.testnet ? t(\"BalanceCard.testnet\", locale) : \"\"].filter(Boolean);\n const lines = [\n `- ${mdEscape(p.token)}: ${mdEscape(p.balance)}${where.length ? ` (${mdEscape(where.join(\", \"))})` : \"\"}`,\n ];\n if (p.usdValue) {\n lines.push(\n `- ${t(\"BalanceCard.value\", locale)}: ${mdEscape(formatDecimalString(p.usdValue, locale, p.currency))}`,\n );\n }\n if (p.address) lines.push(`- ${t(\"BalanceCard.address\", locale)}: ${mdCode(p.address)}`);\n if (p.tokenAddress)\n lines.push(`- ${t(\"BalanceCard.contract\", locale)}: ${mdCode(p.tokenAddress)}`);\n return `${title}\\n\\n${lines.join(\"\\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","/**\n * The parsed, normalised form of an http(s) URL (`new URL(x).href`), or `undefined`. Emit THIS,\n * never the raw input: the parser strips tabs/newlines and percent-encodes spaces, so a raw\n * string with an embedded newline cannot reach a fallback or the host as a second line.\n */\nexport function normalizeHttpUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n try {\n const u = new URL(value);\n return u.protocol === \"https:\" || u.protocol === \"http:\" ? u.href : undefined;\n } catch {\n return undefined;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: MessageFeed.title, MessageFeed.unread, MessageFeed.attachment, MessageFeed.showing, MessageFeed.empty.message, MessageFeed.loading, MessageFeed.error.invalidProps\n\nexport const FeedMessageSchema = z.object({\n id: z.string().optional(),\n sender: z.string().min(1),\n channel: z.string().optional(),\n /** Plain text. Rendered as text, never as HTML. */\n content: z.string(),\n /** ISO 8601. */\n timestamp: z.string(),\n attachmentUrl: z.string().optional(),\n attachmentLabel: z.string().optional(),\n unread: z.boolean().optional(),\n});\n\nexport type FeedMessage = z.infer<typeof FeedMessageSchema>;\n\n/**\n * MessageFeed (R03): VantagePeers messages as a READ-ONLY feed — not a chat input (Claude's\n * design guidelines list chat inputs under patterns to avoid; the host composer exists).\n * Messages are ordered oldest first; `maxItems` keeps the latest N (Claude inline: last few).\n * `{}` parses (ChatGPT entrypoint default).\n */\nexport const MessageFeedPropsSchema = z.object({\n messages: z.array(FeedMessageSchema).default([]),\n maxItems: z.number().int().positive().optional(),\n /** IANA timezone for timestamps (e.g. `hostContext.timeZone`). */\n timeZone: z.string().optional(),\n /** Above this many shown messages the feed is virtualised through VirtualList. */\n virtualizeThreshold: z.number().int().positive().default(50),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type MessageFeedProps = z.input<typeof MessageFeedPropsSchema>;\nexport type MessageFeedPropsOutput = z.output<typeof MessageFeedPropsSchema>;\n\nexport function validateMessageFeedProps(raw: unknown): MessageFeedPropsOutput {\n return MessageFeedPropsSchema.parse(raw);\n}\n\n/** The latest `maxItems` messages (all when unset) and how many exist. */\nexport function latestMessages(\n messages: readonly FeedMessage[],\n maxItems: number | undefined,\n): { shown: FeedMessage[]; total: number } {\n const shown = maxItems === undefined ? [...messages] : messages.slice(-maxItems);\n return { shown, total: messages.length };\n}\n","// i18nKeys: MessageFeed.title, MessageFeed.unread, MessageFeed.attachment, MessageFeed.showing, MessageFeed.empty.message, MessageFeed.loading, MessageFeed.error.invalidProps\n\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { Badge } from \"../../runtimes/react/components/display/Badge.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { VirtualList } from \"../../runtimes/react/components/display/VirtualList.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport {\n type FeedMessage,\n type MessageFeedProps,\n MessageFeedPropsSchema,\n latestMessages,\n} from \"./MessageFeed.schema.js\";\n\nexport type MessageFeedViewProps = MessageFeedProps & {\n /**\n * Route attachment links through the host (`ui/open-link`, see `openLink` in ./host) —\n * sandboxed views cannot navigate. Without it an http(s) attachment is a plain anchor.\n */\n onOpenLink?: (url: string) => void;\n};\n\nfunction Attachment({\n m,\n locale,\n onOpenLink,\n}: { m: FeedMessage; locale: MosaicLocale; onOpenLink?: (url: string) => void }) {\n if (!m.attachmentUrl) return null;\n const label = m.attachmentLabel ?? t(\"MessageFeed.attachment\", locale);\n const url = normalizeHttpUrl(m.attachmentUrl);\n if (!url) return <span className=\"text-sm text-slate-500\">{label}</span>;\n return onOpenLink ? (\n <button\n type=\"button\"\n onClick={() => onOpenLink(url)}\n className=\"text-left text-sm text-blue-700 underline\"\n >\n {label}\n </button>\n ) : (\n <a\n href={url}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n className=\"text-sm text-blue-700 underline\"\n >\n {label}\n </a>\n );\n}\n\nfunction Message({\n m,\n locale,\n timeZone,\n onOpenLink,\n}: {\n m: FeedMessage;\n locale: MosaicLocale;\n timeZone?: string;\n onOpenLink?: (url: string) => void;\n}) {\n return (\n <article className=\"flex flex-col gap-1 border-b border-slate-100 py-2\">\n <header className=\"flex flex-wrap items-center gap-2 text-sm\">\n <strong className=\"text-slate-900\">{m.sender}</strong>\n {m.channel ? <Badge label={m.channel} variant=\"neutral\" locale={locale} /> : null}\n <time dateTime={m.timestamp} className=\"text-xs text-slate-500\">\n {formatTimestamp(m.timestamp, locale, timeZone)}\n </time>\n {m.unread ? (\n <span className=\"text-xs font-semibold text-blue-700\">\n {t(\"MessageFeed.unread\", locale)}\n </span>\n ) : null}\n </header>\n <p className=\"m-0 whitespace-pre-wrap text-sm text-slate-800\">{m.content}</p>\n <Attachment m={m} locale={locale} onOpenLink={onOpenLink} />\n </article>\n );\n}\n\n/**\n * MessageFeed — read-only message feed (R03). Plain-text content, safe attachment links, the\n * latest `maxItems` for inline cards, VirtualList above `virtualizeThreshold`. Not a chat input.\n */\nexport function MessageFeed(raw: MessageFeedViewProps = {}) {\n const parsed = MessageFeedPropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"MessageFeed.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"MessageFeed.loading\", p.locale)}>\n <Skeleton variant=\"text\" count={5} locale={p.locale} />\n </div>\n );\n }\n if (p.messages.length === 0) {\n return <EmptyState title={t(\"MessageFeed.empty.message\", p.locale)} locale={p.locale} />;\n }\n const { shown, total } = latestMessages(p.messages, p.maxItems);\n const virtual = shown.length > p.virtualizeThreshold;\n return (\n <section aria-label={t(\"MessageFeed.title\", p.locale)} lang={p.locale}>\n {shown.length < total ? (\n <p className=\"m-0 pb-1 text-xs text-slate-500\">\n {t(\"MessageFeed.showing\", p.locale)\n .replace(\"{n}\", String(shown.length))\n .replace(\"{total}\", String(total))}\n </p>\n ) : null}\n {virtual ? (\n <VirtualList\n items={shown}\n itemHeight={96}\n locale={p.locale}\n renderItem={(m) => (\n <Message m={m} locale={p.locale} timeZone={p.timeZone} onOpenLink={raw.onOpenLink} />\n )}\n />\n ) : (\n <ol className=\"m-0 list-none p-0\">\n {shown.map((m, i) => (\n <li key={m.id ?? `msg-${i}`}>\n <Message m={m} locale={p.locale} timeZone={p.timeZone} onOpenLink={raw.onOpenLink} />\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading, mdUrl } from \"../shared/markdown.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport { MessageFeedPropsSchema, latestMessages } from \"./MessageFeed.schema.js\";\n\n/** A-1 fallback: each message as a blockquote with sender, time, channel, content, attachment. */\nexport function messageFeedToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = MessageFeedPropsSchema.safeParse(props);\n const title = mdHeading(t(\"MessageFeed.title\", locale));\n if (!parsed.success || parsed.data.messages.length === 0) {\n return `${title}\\n\\n${t(\"MessageFeed.empty.message\", locale)}\\n`;\n }\n const { messages, maxItems, timeZone } = parsed.data;\n const { shown, total } = latestMessages(messages, maxItems);\n const lines = shown.map((m) => {\n const when = [formatTimestamp(m.timestamp, locale, timeZone), m.channel ?? \"\"]\n .filter(Boolean)\n .join(\", \");\n const href = normalizeHttpUrl(m.attachmentUrl);\n const label = mdEscape(m.attachmentLabel ?? t(\"MessageFeed.attachment\", locale));\n const attachment = m.attachmentUrl ? (href ? ` [${label}](${mdUrl(href)})` : ` ${label}`) : \"\";\n return `> **${mdEscape(m.sender)}** (${mdEscape(when)}): ${mdEscape(m.content)}${attachment}`;\n });\n const cut =\n shown.length < total\n ? `${t(\"MessageFeed.showing\", locale).replace(\"{n}\", String(shown.length)).replace(\"{total}\", String(total))}\\n\\n`\n : \"\";\n return `${title}\\n\\n${cut}${lines.join(\"\\n>\\n\")}\\n`;\n}\n","/**\n * RadioGroup.logic.ts — pure, framework-agnostic logic.\n * No JSX here — shared between React 19 and Preact 10 runtimes.\n *\n * WCAG-AA ARIA + roving tabindex spec (WAI-ARIA Authoring Practices §3.10):\n *\n * - role=\"radiogroup\" on container\n * - role=\"radio\" + aria-checked on each radio\n * - aria-labelledby on container points to the visible group label id\n * - aria-labelledby on each radio points to its own option label span id\n * - aria-describedby on a radio points to its description span id (if present)\n * - Roving tabindex:\n * * If a value is selected → the SELECTED radio has tabIndex 0, all\n * others tabIndex -1.\n * * If nothing is selected → the FIRST enabled radio has tabIndex 0,\n * all others tabIndex -1 (so Tab can enter the group).\n * - Arrow keys (Up/Down vertical, Left/Right horizontal) MOVE focus to the\n * next/previous enabled radio AND select it (focus + selection sync — this\n * is the radiogroup pattern, distinct from tabs).\n * - Home / End jump to first / last enabled radio AND select it.\n * - Space / Enter on a non-selected focused radio selects it (no-op when\n * already selected).\n * - Disabled radios are skipped during arrow nav (findNextEnabledIndex).\n */\n\nimport type { RadioGroupOption } from \"./RadioGroup.schema.js\";\n\nexport type RadioOrientation = \"vertical\" | \"horizontal\";\n\n/**\n * Returns the prev/next key pair for the given orientation.\n *\n * Vertical group → ArrowUp/ArrowDown.\n * Horizontal group → ArrowLeft/ArrowRight.\n *\n * (Per WAI-ARIA radiogroup pattern, only one axis is used; the perpendicular\n * arrow keys are NOT intercepted — they let the user move out of the group.)\n */\nexport function getNavKeys(orientation: RadioOrientation): {\n prev: string;\n next: string;\n} {\n return orientation === \"vertical\"\n ? { prev: \"ArrowUp\", next: \"ArrowDown\" }\n : { prev: \"ArrowLeft\", next: \"ArrowRight\" };\n}\n\n/**\n * Finds the next enabled (non-disabled) option index in `direction`,\n * wrapping around at boundaries. Returns `currentIndex` if every option\n * is disabled (defensive — Zod schema requires options.length ≥ 1 but does\n * not forbid all-disabled).\n */\nexport function findNextEnabledIndex(\n options: Array<Pick<RadioGroupOption, \"disabled\">>,\n currentIndex: number,\n direction: 1 | -1,\n): number {\n const len = options.length;\n if (len === 0) return currentIndex;\n let i = (currentIndex + direction + len) % len;\n for (let tries = 0; tries < len; tries++) {\n if (!options[i]?.disabled) return i;\n i = (i + direction + len) % len;\n }\n return currentIndex;\n}\n\n/** First enabled option index, or 0 if all are disabled. */\nexport function findFirstEnabledIndex(options: Array<Pick<RadioGroupOption, \"disabled\">>): number {\n const idx = options.findIndex((o) => !o.disabled);\n return idx === -1 ? 0 : idx;\n}\n\n/** Last enabled option index, or `options.length - 1` if all are disabled. */\nexport function findLastEnabledIndex(options: Array<Pick<RadioGroupOption, \"disabled\">>): number {\n for (let i = options.length - 1; i >= 0; i--) {\n if (!options[i]?.disabled) return i;\n }\n return options.length - 1;\n}\n\n/**\n * Returns the index of the option whose `value` matches `selectedValue`,\n * or -1 if no option is selected (or the selected value points to a disabled\n * option — selected-but-disabled is a valid state, so we DON'T filter here).\n */\nexport function findSelectedIndex(\n options: Array<Pick<RadioGroupOption, \"value\">>,\n selectedValue: string | undefined,\n): number {\n if (selectedValue === undefined || selectedValue === \"\") return -1;\n return options.findIndex((o) => o.value === selectedValue);\n}\n\n/**\n * Roving tabindex resolver — returns the index that should carry tabIndex=0.\n *\n * - If something is selected → the selected index (focus follows selection).\n * - Otherwise → the first enabled option (so Tab can enter the group).\n */\nexport function getRovingTabIndex(\n options: Array<Pick<RadioGroupOption, \"value\" | \"disabled\">>,\n selectedValue: string | undefined,\n): number {\n const selectedIdx = findSelectedIndex(options, selectedValue);\n if (selectedIdx >= 0) return selectedIdx;\n return findFirstEnabledIndex(options);\n}\n\n/** Stable DOM id for the group label (linked by container aria-labelledby). */\nexport function getGroupLabelId(instanceId: string, name: string): string {\n return `${instanceId}-${name}-label`;\n}\n\n/** Stable DOM id for an option label span (linked by radio aria-labelledby). */\nexport function getOptionLabelId(instanceId: string, name: string, optionValue: string): string {\n return `${instanceId}-${name}-${optionValue}-label`;\n}\n\n/** Stable DOM id for an option description span (linked by radio aria-describedby). */\nexport function getOptionDescriptionId(\n instanceId: string,\n name: string,\n optionValue: string,\n): string {\n return `${instanceId}-${name}-${optionValue}-desc`;\n}\n\n/** Tailwind classes for the root radiogroup container. */\nexport type RadioAppearance = \"default\" | \"segmented\" | \"chips\";\n\nexport function getGroupClasses(\n orientation: RadioOrientation,\n appearance: RadioAppearance = \"default\",\n): string {\n if (appearance === \"segmented\") {\n return \"inline-flex flex-row overflow-hidden rounded-md border border-slate-300\";\n }\n if (appearance === \"chips\") return \"flex flex-row flex-wrap gap-2\";\n return orientation === \"vertical\" ? \"flex flex-col gap-2\" : \"flex flex-row flex-wrap gap-4\";\n}\n\n/** Tailwind classes for a single radio row (label + control + description). */\nexport function getOptionRowClasses(\n isDisabled: boolean,\n orientation: RadioOrientation,\n appearance: RadioAppearance = \"default\",\n): string {\n const state0 = isDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\";\n if (appearance !== \"default\") {\n // the native input is visually hidden: the focus ring is drawn on the row\n return [\n \"relative inline-flex items-center focus-within:outline focus-within:outline-2 focus-within:outline-blue-600\",\n state0,\n ].join(\" \");\n }\n const base = \"flex items-start gap-2\";\n const orient = orientation === \"vertical\" ? \"flex-row\" : \"flex-row\";\n const state = isDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\";\n return [base, orient, state].join(\" \");\n}\n\n/** Tailwind classes for the visible radio control (the round dot). */\nexport function getRadioControlClasses(isSelected: boolean, isDisabled: boolean): string {\n const base =\n \"inline-flex items-center justify-center w-4 h-4 mt-0.5 rounded-full border-2 transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600 shrink-0\";\n const state = isDisabled\n ? \"border-slate-300 bg-slate-100\"\n : isSelected\n ? \"border-blue-600 bg-white\"\n : \"border-slate-400 bg-white hover:border-slate-600\";\n return [base, state].join(\" \");\n}\n\n/** Whether a keyboard event should activate the focused radio (Space / Enter). */\nexport function isActivationKey(key: string): boolean {\n return key === \" \" || key === \"Space\" || key === \"Enter\";\n}\n\n/** Classes of the visible option label in the segmented / chips appearances. */\nexport function getOptionLabelClasses(appearance: RadioAppearance, isSelected: boolean): string {\n if (appearance === \"default\") return \"mosaic-forms-radiogroup-option-label\";\n const base = \"mosaic-forms-radiogroup-option-label inline-flex items-center px-3 py-1 text-sm\";\n const shape = appearance === \"chips\" ? \"rounded-full border\" : \"\";\n const tone = isSelected\n ? \"bg-slate-900 text-white border-slate-900\"\n : \"bg-white text-slate-700 border-slate-300 hover:bg-slate-50\";\n return [base, shape, tone].filter(Boolean).join(\" \");\n}\n","/** PipelineBoard pure logic (no React). */\nimport { sumDecimalStrings } from \"../shared/decimal.js\";\n\nexport type BoardDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\nexport type BoardLayout = \"board\" | \"summary\";\n\n/**\n * Fullscreen-first: Claude allows the board only fullscreen (inline = stage totals, within the\n * 4-5 data-point cap) and ChatGPT opens entrypoints fullscreen. Inline and pip get the summary.\n */\nexport function layoutForDisplayMode(mode: BoardDisplayMode): BoardLayout {\n return mode === \"fullscreen\" ? \"board\" : \"summary\";\n}\n\nexport interface DealLike {\n amount?: string;\n}\n\n/**\n * Deal count and exact total of a stage. Deals without an amount are counted but not summed; an\n * amount that is not a decimal string makes the total `undefined` (shown as unknown, never a\n * partial sum presented as the total).\n */\nexport function stageSummary(deals: readonly DealLike[]): {\n count: number;\n total: string | undefined;\n} {\n const amounts = deals.flatMap((d) => (d.amount === undefined ? [] : [d.amount]));\n return { count: deals.length, total: sumDecimalStrings(amounts) };\n}\n\n/** Claude inline card guideline: at most 4-5 data points, so at most 5 stages in the summary. */\nexport const SUMMARY_STAGE_LIMIT = 5;\n","import { z } from \"zod\";\n\n// i18nKeys: PipelineBoard.title, PipelineBoard.deals.one, PipelineBoard.deals.many, PipelineBoard.total, PipelineBoard.stage.empty, PipelineBoard.filter.label, PipelineBoard.summary.open, PipelineBoard.more, PipelineBoard.empty.message, PipelineBoard.loading, PipelineBoard.error.invalidProps, PipelineBoard.col.stage, PipelineBoard.col.deals\n\nexport const PipelineDealSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n /** Decimal STRING (never a float), in the board currency. */\n amount: z.string().optional(),\n contact: z.string().optional(),\n url: z.string().optional(),\n});\n\nexport const PipelineStageSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n deals: z.array(PipelineDealSchema).default([]),\n});\n\nexport type PipelineDeal = z.infer<typeof PipelineDealSchema>;\nexport type PipelineStage = z.infer<typeof PipelineStageSchema>;\n\n/**\n * PipelineBoard (R06): deals by stage, READ-ONLY (no drag, no stage change), fullscreen-first.\n * `layout: \"board\"` is the fullscreen columns view; `\"summary\"` is the inline stage-totals card\n * (see `layoutForDisplayMode`). `{}` parses: ChatGPT opens entrypoints fullscreen with empty\n * arguments (openai/mcp-extensions docs/spec.md).\n */\nexport const PipelineBoardPropsSchema = z.object({\n stages: z.array(PipelineStageSchema).default([]),\n /** ISO 4217 code used to format amounts. */\n currency: z.string().default(\"EUR\"),\n layout: z.enum([\"board\", \"summary\"]).default(\"board\"),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type PipelineBoardProps = z.input<typeof PipelineBoardPropsSchema>;\nexport type PipelineBoardPropsOutput = z.output<typeof PipelineBoardPropsSchema>;\n\nexport function validatePipelineBoardProps(raw: unknown): PipelineBoardPropsOutput {\n return PipelineBoardPropsSchema.parse(raw);\n}\n","// i18nKeys: PipelineBoard.title, PipelineBoard.deals.one, PipelineBoard.deals.many, PipelineBoard.total, PipelineBoard.stage.empty, PipelineBoard.filter.label, PipelineBoard.summary.open, PipelineBoard.more, PipelineBoard.empty.message, PipelineBoard.loading, PipelineBoard.error.invalidProps, PipelineBoard.col.stage, PipelineBoard.col.deals\n\nimport React, { useState } from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { Badge } from \"../../runtimes/react/components/display/Badge.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { getOptionLabelClasses } from \"../forms/RadioGroup.logic.js\";\nimport { formatDecimalString } from \"../shared/decimal.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport { SUMMARY_STAGE_LIMIT, stageSummary } from \"./PipelineBoard.logic.js\";\nimport {\n type PipelineBoardProps,\n PipelineBoardPropsSchema,\n type PipelineStage,\n} from \"./PipelineBoard.schema.js\";\n\nexport type PipelineBoardViewProps = PipelineBoardProps & {\n /** Summary layout: ask the host for fullscreen (`requestDisplayMode` in ./host). */\n onRequestFullscreen?: () => void;\n /** Deal links go through the host (`ui/open-link`); without it deals with a url are plain text. */\n onOpenLink?: (url: string) => void;\n};\n\nfunction dealsLabel(n: number, locale: MosaicLocale): string {\n return n === 1\n ? t(\"PipelineBoard.deals.one\", locale)\n : t(\"PipelineBoard.deals.many\", locale).replace(\"{n}\", String(n));\n}\n\nfunction Totals({\n stage,\n currency,\n locale,\n}: { stage: PipelineStage; currency: string; locale: MosaicLocale }) {\n const { count, total } = stageSummary(stage.deals);\n return (\n <span className=\"flex flex-col text-sm text-slate-600\">\n <span>{dealsLabel(count, locale)}</span>\n <span className=\"tabular-nums\">\n {total === undefined ? \"—\" : formatDecimalString(total, locale, currency)}\n </span>\n </span>\n );\n}\n\n/**\n * PipelineBoard — deals by stage, READ-ONLY. `board`: one labelled column per stage with stage\n * filter chips (R25); `summary`: the inline stage-totals card. No drag-and-drop and no stage\n * change (R07 deferred). Horizontal pan only; scroll padding honours the host safe-area insets.\n */\nexport function PipelineBoard(raw: PipelineBoardViewProps = {}) {\n const parsed = PipelineBoardPropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n const [hidden, setHidden] = useState<ReadonlySet<string>>(new Set());\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"PipelineBoard.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"PipelineBoard.loading\", p.locale)}>\n <Skeleton variant=\"rect\" height={160} locale={p.locale} />\n </div>\n );\n }\n if (p.stages.length === 0) {\n return <EmptyState title={t(\"PipelineBoard.empty.message\", p.locale)} locale={p.locale} />;\n }\n\n if (p.layout === \"summary\") {\n const shown = p.stages.slice(0, SUMMARY_STAGE_LIMIT);\n const rest = p.stages.length - shown.length;\n return (\n <section\n aria-label={t(\"PipelineBoard.title\", p.locale)}\n lang={p.locale}\n className=\"flex flex-col gap-2\"\n >\n <ul className=\"m-0 flex list-none flex-col gap-2 p-0\">\n {shown.map((s) => (\n <li key={s.id} className=\"flex items-center justify-between gap-2\">\n <span className=\"font-medium text-slate-900\">{s.name}</span>\n <Totals stage={s} currency={p.currency} locale={p.locale} />\n </li>\n ))}\n </ul>\n {rest > 0 ? (\n <span className=\"text-sm text-slate-500\">\n {t(\"PipelineBoard.more\", p.locale).replace(\"{n}\", String(rest))}\n </span>\n ) : null}\n {raw.onRequestFullscreen ? (\n <button\n type=\"button\"\n onClick={raw.onRequestFullscreen}\n className=\"self-start rounded border border-slate-300 px-3 py-1 text-sm hover:bg-slate-50\"\n >\n {t(\"PipelineBoard.summary.open\", p.locale)}\n </button>\n ) : null}\n </section>\n );\n }\n\n const visible = p.stages.filter((s) => !hidden.has(s.id));\n const toggle = (id: string) => {\n const next = new Set(hidden);\n if (next.has(id)) next.delete(id);\n else if (visible.length > 1) next.add(id); // keep at least one stage on screen\n setHidden(next);\n };\n return (\n <section\n aria-label={t(\"PipelineBoard.title\", p.locale)}\n lang={p.locale}\n className=\"flex flex-col gap-3\"\n >\n <fieldset className=\"m-0 flex min-w-0 flex-wrap gap-2 border-0 p-0\">\n <legend className=\"sr-only\">{t(\"PipelineBoard.filter.label\", p.locale)}</legend>\n {p.stages.map((s) => {\n const on = !hidden.has(s.id);\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n onClick={() => toggle(s.id)}\n className={getOptionLabelClasses(\"chips\", on)}\n >\n {s.name}\n </button>\n );\n })}\n </fieldset>\n <div\n className=\"flex flex-row gap-3 overflow-x-auto\"\n style={{\n scrollPaddingLeft: \"var(--mosaic-safe-area-left, 0px)\",\n scrollPaddingRight: \"var(--mosaic-safe-area-right, 0px)\",\n }}\n >\n {visible.map((s) => (\n <section\n key={s.id}\n aria-label={s.name}\n className=\"flex w-64 shrink-0 flex-col gap-2 rounded-lg border border-slate-200 bg-slate-50 p-3\"\n >\n <header className=\"flex items-start justify-between gap-2\">\n <strong className=\"text-slate-900\">{s.name}</strong>\n <Totals stage={s} currency={p.currency} locale={p.locale} />\n </header>\n {s.deals.length === 0 ? (\n <span className=\"text-sm text-slate-500\">\n {t(\"PipelineBoard.stage.empty\", p.locale)}\n </span>\n ) : (\n <ul className=\"m-0 flex list-none flex-col gap-2 p-0\">\n {s.deals.map((d) => (\n <li key={d.id} className=\"rounded border border-slate-200 bg-white p-2\">\n {raw.onOpenLink && normalizeHttpUrl(d.url) ? (\n <button\n type=\"button\"\n onClick={() => raw.onOpenLink?.(normalizeHttpUrl(d.url) as string)}\n className=\"text-left font-medium text-blue-700 underline\"\n >\n {d.title}\n </button>\n ) : (\n <span className=\"font-medium text-slate-900\">{d.title}</span>\n )}\n {d.amount !== undefined ? (\n <span className=\"block text-sm tabular-nums text-slate-700\">\n {formatDecimalString(d.amount, p.locale, p.currency)}\n </span>\n ) : null}\n {d.contact ? (\n <Badge label={d.contact} variant=\"neutral\" locale={p.locale} />\n ) : null}\n </li>\n ))}\n </ul>\n )}\n </section>\n ))}\n </div>\n </section>\n );\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatDecimalString } from \"../shared/decimal.js\";\nimport { mdEscape, mdHeading, mdTable } from \"../shared/markdown.js\";\nimport { stageSummary } from \"./PipelineBoard.logic.js\";\nimport { PipelineBoardPropsSchema } from \"./PipelineBoard.schema.js\";\n\n/** A-1 fallback: a stage x deal-count x total table, then the deals of each stage. */\nexport function pipelineBoardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = PipelineBoardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"PipelineBoard.title\", locale));\n if (!parsed.success || parsed.data.stages.length === 0) {\n return `${title}\\n\\n${t(\"PipelineBoard.empty.message\", locale)}\\n`;\n }\n const { stages, currency } = parsed.data;\n const money = (v: string) => mdEscape(formatDecimalString(v, locale, currency));\n const table = mdTable(\n [\n t(\"PipelineBoard.col.stage\", locale),\n t(\"PipelineBoard.col.deals\", locale),\n t(\"PipelineBoard.total\", locale),\n ],\n stages.map((s) => {\n const sum = stageSummary(s.deals);\n return [\n mdEscape(s.name),\n String(sum.count),\n sum.total === undefined ? \"-\" : money(sum.total),\n ];\n }),\n );\n const sections = stages\n .filter((s) => s.deals.length > 0)\n .map((s) => {\n const lines = s.deals.map((d) => {\n const amount = d.amount === undefined ? \"\" : ` (${money(d.amount)})`;\n const contact = d.contact ? ` - ${mdEscape(d.contact)}` : \"\";\n return `- ${mdEscape(d.title)}${amount}${contact}`;\n });\n return `${mdHeading(mdEscape(s.name), 2)}\\n\\n${lines.join(\"\\n\")}`;\n });\n return `${title}\\n\\n${table}\\n${sections.length ? `\\n${sections.join(\"\\n\\n\")}\\n` : \"\"}`;\n}\n","import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","import DOMPurify from \"dompurify\";\nimport { marked } from \"marked\";\n// i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps, MarkdownRenderer.error.tooLong\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type MarkdownRendererProps, validateProps } from \"./MarkdownRenderer.schema\";\n\ninterface MarkdownRendererInnerProps {\n content: string;\n locale: \"en\" | \"fr\";\n maxLength: number;\n allowHtml: boolean;\n}\n\nconst tooLongMessages: Record<\"en\" | \"fr\", string> = {\n en: \"Content exceeds maximum length.\",\n fr: \"Le contenu dépasse la longueur maximale.\",\n};\n\nfunction MarkdownRendererInner({\n content,\n locale,\n maxLength,\n allowHtml,\n}: MarkdownRendererInnerProps) {\n if (content.length > maxLength) {\n return (\n <div role=\"alert\" lang={locale}>\n {tooLongMessages[locale]}\n </div>\n );\n }\n\n // When allowHtml=false, strip raw HTML tags from source before parsing,\n // so user-supplied HTML is neutralised before marked converts markdown to HTML.\n const source = allowHtml ? content : content.replace(/<[^>]*>/g, \"\");\n const rawHtml = marked.parse(source, { async: false }) as string;\n // Always sanitize the marked output to prevent XSS from markdown-injected HTML.\n const cleanHtml = DOMPurify.sanitize(rawHtml);\n\n const ariaLabel = locale === \"fr\" ? \"Contenu formaté\" : \"Formatted content\";\n\n return (\n <article\n aria-label={ariaLabel}\n lang={locale}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitized by DOMPurify\n dangerouslySetInnerHTML={{ __html: cleanHtml }}\n />\n );\n}\n\n/**\n * MarkdownRenderer accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function MarkdownRenderer(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <MarkdownRendererInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"MarkdownRenderer.error.invalidProps\", locale)}</div>;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nexport const TokenDisplayOnceModalPropsSchema = z.object({\n token: z.string().min(1),\n title: z.string().min(1),\n warningMessage: z.string().min(1),\n copyLabel: z.string().min(1),\n closeLabel: z.string().min(1),\n /** Non-secret metadata, shown in the view AND carried by the A-1 fallback. */\n scope: z.string().optional(),\n expiresAt: z.string().optional(),\n /** Supplied by the issuer; NEVER derived from the secret. */\n fingerprint: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TokenDisplayOnceModalProps = z.infer<typeof TokenDisplayOnceModalPropsSchema> & {\n onClose: () => void;\n};\n\nexport function validateTokenDisplayOnceModalProps(\n raw: unknown,\n): z.infer<typeof TokenDisplayOnceModalPropsSchema> {\n return TokenDisplayOnceModalPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef, useState } from \"react\";\nimport { t } from \"../../i18n/strings.js\";\nimport {\n type TokenDisplayOnceModalProps,\n validateTokenDisplayOnceModalProps,\n} from \"./TokenDisplayOnceModal.schema\";\n\nfunction TokenDisplayOnceModalInner({\n token,\n title,\n warningMessage,\n copyLabel,\n closeLabel,\n scope,\n expiresAt,\n fingerprint,\n locale,\n onClose,\n}: TokenDisplayOnceModalProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const warningId = useId();\n const [copied, setCopied] = useState(false);\n // Security: token is held only in this useState — on unmount, released by React GC.\n // NEVER logged, NEVER stored in data-*, NEVER written to innerHTML.\n const [secureToken] = useState<string>(token);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n async function handleCopy() {\n try {\n await navigator.clipboard.writeText(secureToken);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Copy failed — do not leak token in error message\n setCopied(false);\n }\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onClose();\n }\n }\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={warningId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-lg mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p\n id={warningId}\n className=\"text-sm text-amber-700 bg-amber-50 border border-amber-200 rounded-md px-3 py-2\"\n >\n {warningMessage}\n </p>\n {scope || expiresAt || fingerprint ? (\n <dl className=\"m-0 text-sm text-gray-700\">\n {scope ? (\n <div>\n <dt className=\"inline\">{t(\"TokenDisplayOnceModal.field.scope\", locale)}: </dt>\n <dd className=\"m-0 inline\">{scope}</dd>\n </div>\n ) : null}\n {expiresAt ? (\n <div>\n <dt className=\"inline\">{t(\"TokenDisplayOnceModal.field.expires\", locale)}: </dt>\n <dd className=\"m-0 inline\">{expiresAt}</dd>\n </div>\n ) : null}\n {fingerprint ? (\n <div>\n <dt className=\"inline\">{t(\"TokenDisplayOnceModal.field.fingerprint\", locale)}: </dt>\n <dd className=\"m-0 inline font-mono\">{fingerprint}</dd>\n </div>\n ) : null}\n </dl>\n ) : null}\n <div className=\"flex items-center gap-2 bg-gray-50 border border-gray-200 rounded-md px-3 py-2\">\n <code className=\"flex-1 text-sm font-mono text-gray-800 break-all select-all\">\n {secureToken}\n </code>\n </div>\n {/* Ephemeral \"Copied\" toast — aria-live polite, no token text */}\n <output aria-live=\"polite\" aria-atomic=\"true\" className=\"min-h-[1.25rem] block\">\n {copied && (\n <span className=\"text-sm text-green-700 font-medium\">\n {t(\"TokenDisplayOnceModal.copied\", locale)}\n </span>\n )}\n </output>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"px-4 py-2 rounded-md text-sm font-medium bg-gray-100 text-gray-800 hover:bg-gray-200 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {copyLabel}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2 rounded-md text-sm font-medium bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-900 transition-colors\"\n >\n {closeLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function TokenDisplayOnceModal(\n raw: Omit<TokenDisplayOnceModalProps, \"locale\"> &\n Partial<Pick<TokenDisplayOnceModalProps, \"locale\">>,\n) {\n try {\n const parsed = validateTokenDisplayOnceModalProps(raw);\n return <TokenDisplayOnceModalInner {...parsed} onClose={raw.onClose} />;\n } catch (err) {\n // Security: use console.warn (not console.error) and do not expose token value in log\n console.warn(\"[TokenDisplayOnceModal] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Toast.aria.close, Toast.error.invalidProps\n\n/**\n * Toast component props schema.\n *\n * variant — controls visual style + ARIA role:\n * \"error\" → role=\"alert\" (assertive), all others → role=\"status\" (polite)\n * title — consumer-driven; caller passes already-localized string (no i18n key needed)\n * duration — 0 = persistent (never auto-dismiss)\n */\nexport const ToastPropsSchema = z.object({\n variant: z.enum([\"success\", \"error\", \"info\", \"warning\"]),\n title: z.string().min(1),\n description: z.string().optional(),\n duration: z.number().int().nonnegative().default(5000),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ToastProps = z.infer<typeof ToastPropsSchema> & {\n onClose?: () => void;\n};\n\nexport function validateToastProps(raw: unknown): z.infer<typeof ToastPropsSchema> {\n return ToastPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Alert.aria.dismiss, Alert.error.invalidProps\n\n/**\n * Alert component props schema.\n *\n * Persistent inline banner (vs Toast which is ephemeral + auto-dismissing).\n *\n * variant — controls visual style + ARIA role auto-assignment:\n * \"error\" → role=\"alert\" (assertive, interrupts screen reader)\n * all others → role=\"status\" (polite, non-intrusive)\n * title — consumer-driven; caller passes already-localized string\n * description — optional supporting text beneath the title\n * dismissible — when true, renders a dismiss button (default: false)\n * onDismiss — callback fired when dismiss button is clicked\n * locale — controls dismiss button aria-label language\n */\nexport const AlertPropsSchema = z.object({\n variant: z.enum([\"success\", \"error\", \"info\", \"warning\"]),\n title: z.string().min(1),\n description: z.string().optional(),\n dismissible: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type AlertProps = z.infer<typeof AlertPropsSchema> & {\n onDismiss?: () => void;\n};\n\nexport function validateAlertProps(raw: unknown): z.infer<typeof AlertPropsSchema> {\n return AlertPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TransactionPreview.title, TransactionPreview.notice, TransactionPreview.kind.transfer, TransactionPreview.kind.swap, TransactionPreview.testnet, TransactionPreview.field.network, TransactionPreview.field.from, TransactionPreview.field.to, TransactionPreview.field.amount, TransactionPreview.field.fee, TransactionPreview.field.sell, TransactionPreview.field.buy, TransactionPreview.field.minReceived, TransactionPreview.field.route, TransactionPreview.field.priceImpact, TransactionPreview.field.expires, TransactionPreview.priceImpact.high, TransactionPreview.simulation.success, TransactionPreview.simulation.failed, TransactionPreview.simulation.unavailable, TransactionPreview.warnings, TransactionPreview.handoff, TransactionPreview.empty.message, TransactionPreview.loading, TransactionPreview.error.invalidProps\n\nconst AmountSchema = z.object({\n /** Decimal STRING (never a float). */\n value: z.string().min(1),\n symbol: z.string().min(1),\n});\n\nconst QuoteSchema = z.object({\n sell: AmountSchema,\n buy: AmountSchema,\n minReceived: AmountSchema.optional(),\n route: z.array(z.string().min(1)).optional(),\n /** Percent as a decimal string, e.g. \"0.42\". */\n priceImpact: z.string().optional(),\n});\n\nexport type TransactionAmount = z.infer<typeof AmountSchema>;\nexport type TransactionQuote = z.infer<typeof QuoteSchema>;\n\n/**\n * TransactionPreview (R11): a transaction the server PREPARED and never signs — shape follows\n * fuse-mcp-server `getTradeQuote.ts` (expected output, route, price impact; read-only). There\n * is deliberately no field for a signature, a signer, a raw transaction or an execute action\n * (R12 refused): the only exit is an optional `handoff` link to the user's wallet. OpenAI's\n * public directory prohibits executing crypto transfers, so the view stops at the preview.\n * `{}` parses (empty state).\n */\nexport const TransactionPreviewPropsSchema = z.object({\n kind: z.enum([\"transfer\", \"swap\"]).default(\"transfer\"),\n network: z.string().optional(),\n testnet: z.boolean().default(false),\n from: z.string().optional(),\n to: z.string().optional(),\n amount: AmountSchema.optional(),\n fee: AmountSchema.optional(),\n quote: QuoteSchema.optional(),\n simulation: z\n .object({\n status: z.enum([\"success\", \"failed\", \"unavailable\"]),\n message: z.string().optional(),\n })\n .optional(),\n warnings: z.array(z.string()).default([]),\n /** ISO 8601 expiry of the quote. */\n expiresAt: z.string().optional(),\n /** Wallet link-out. Only http(s) urls are ever rendered. */\n handoff: z.object({ url: z.string().min(1) }).optional(),\n timeZone: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TransactionPreviewProps = z.input<typeof TransactionPreviewPropsSchema>;\nexport type TransactionPreviewPropsOutput = z.output<typeof TransactionPreviewPropsSchema>;\n\nexport function validateTransactionPreviewProps(raw: unknown): TransactionPreviewPropsOutput {\n return TransactionPreviewPropsSchema.parse(raw);\n}\n\n/** True when the transaction has anything to preview. */\nexport function hasPreviewContent(p: TransactionPreviewPropsOutput): boolean {\n return Boolean(p.from || p.to || p.amount || p.quote || p.fee);\n}\n","// i18nKeys: TransactionPreview.title, TransactionPreview.notice, TransactionPreview.kind.transfer, TransactionPreview.kind.swap, TransactionPreview.testnet, TransactionPreview.field.network, TransactionPreview.field.from, TransactionPreview.field.to, TransactionPreview.field.amount, TransactionPreview.field.fee, TransactionPreview.field.sell, TransactionPreview.field.buy, TransactionPreview.field.minReceived, TransactionPreview.field.route, TransactionPreview.field.priceImpact, TransactionPreview.field.expires, TransactionPreview.priceImpact.high, TransactionPreview.simulation.success, TransactionPreview.simulation.failed, TransactionPreview.simulation.unavailable, TransactionPreview.warnings, TransactionPreview.handoff, TransactionPreview.empty.message, TransactionPreview.loading, TransactionPreview.error.invalidProps\n\nimport type React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { Badge } from \"../../runtimes/react/components/display/Badge.js\";\nimport { EmptyState } from \"../../runtimes/react/components/display/EmptyState.js\";\nimport { Skeleton } from \"../../runtimes/react/components/display/Skeleton.js\";\nimport { compareDecimalStrings } from \"../display/TableView.logic.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport {\n type TransactionAmount,\n type TransactionPreviewProps,\n TransactionPreviewPropsSchema,\n hasPreviewContent,\n} from \"./TransactionPreview.schema.js\";\n\nexport type TransactionPreviewViewProps = TransactionPreviewProps & {\n /** Hand the user to their wallet (host `ui/open-link`, see `openLink` in ./host). */\n onHandoff?: (url: string) => void;\n};\n\nconst amountText = (a: TransactionAmount) => `${a.value} ${a.symbol}`;\n\nfunction Row({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex flex-col gap-0.5 py-1 sm:flex-row sm:gap-3\">\n <dt className=\"w-36 shrink-0 text-sm text-slate-500\">{label}</dt>\n <dd className=\"m-0 min-w-0 break-all text-sm text-slate-900\">{children}</dd>\n </div>\n );\n}\n\n/**\n * TransactionPreview — a PREPARED transaction, never signed. Full addresses are shown (a user\n * verifies the whole address). The view has no sign, send, approve or confirm control — the only\n * action is an optional hand-off to the user's wallet, at most one (Claude allows two actions).\n */\nexport function TransactionPreview(raw: TransactionPreviewViewProps = {}) {\n const parsed = TransactionPreviewPropsSchema.safeParse(raw);\n const locale: MosaicLocale =\n (raw as { locale?: string } | undefined)?.locale === \"fr\" ? \"fr\" : \"en\";\n if (!parsed.success) {\n return <div role=\"alert\">{t(\"TransactionPreview.error.invalidProps\", locale)}</div>;\n }\n const p = parsed.data;\n if (p.loading) {\n return (\n <div aria-busy=\"true\" aria-label={t(\"TransactionPreview.loading\", p.locale)}>\n <Skeleton variant=\"text\" count={6} locale={p.locale} />\n </div>\n );\n }\n if (!hasPreviewContent(p)) {\n return <EmptyState title={t(\"TransactionPreview.empty.message\", p.locale)} locale={p.locale} />;\n }\n const highImpact =\n p.quote?.priceImpact !== undefined && compareDecimalStrings(p.quote.priceImpact, \"1\") >= 0;\n const handoff = normalizeHttpUrl(p.handoff?.url);\n return (\n <section\n aria-label={t(\"TransactionPreview.title\", p.locale)}\n lang={p.locale}\n className=\"flex flex-col gap-3 rounded-lg border border-slate-200 bg-white p-4\"\n >\n <header className=\"flex flex-wrap items-center gap-2\">\n <strong className=\"text-slate-900\">\n {t(`TransactionPreview.kind.${p.kind}`, p.locale)}\n </strong>\n {p.testnet ? (\n <Badge\n label={t(\"TransactionPreview.testnet\", p.locale)}\n variant=\"warning\"\n locale={p.locale}\n />\n ) : null}\n </header>\n <p\n role=\"note\"\n className=\"m-0 rounded bg-amber-50 px-3 py-2 text-sm font-semibold text-amber-900\"\n >\n {t(\"TransactionPreview.notice\", p.locale)}\n </p>\n <dl className=\"m-0\">\n {p.network ? (\n <Row label={t(\"TransactionPreview.field.network\", p.locale)}>{p.network}</Row>\n ) : null}\n {p.from ? (\n <Row label={t(\"TransactionPreview.field.from\", p.locale)}>\n <span className=\"font-mono\">{p.from}</span>\n </Row>\n ) : null}\n {p.to ? (\n <Row label={t(\"TransactionPreview.field.to\", p.locale)}>\n <span className=\"font-mono\">{p.to}</span>\n </Row>\n ) : null}\n {p.amount ? (\n <Row label={t(\"TransactionPreview.field.amount\", p.locale)}>{amountText(p.amount)}</Row>\n ) : null}\n {p.quote ? (\n <>\n <Row label={t(\"TransactionPreview.field.sell\", p.locale)}>\n {amountText(p.quote.sell)}\n </Row>\n <Row label={t(\"TransactionPreview.field.buy\", p.locale)}>{amountText(p.quote.buy)}</Row>\n {p.quote.minReceived ? (\n <Row label={t(\"TransactionPreview.field.minReceived\", p.locale)}>\n {amountText(p.quote.minReceived)}\n </Row>\n ) : null}\n {p.quote.route ? (\n <Row label={t(\"TransactionPreview.field.route\", p.locale)}>\n {p.quote.route.join(\" > \")}\n </Row>\n ) : null}\n {p.quote.priceImpact !== undefined ? (\n <Row label={t(\"TransactionPreview.field.priceImpact\", p.locale)}>\n <span>{`${p.quote.priceImpact}%`}</span>\n {highImpact ? (\n <strong className=\"ml-2 text-red-700\">\n {t(\"TransactionPreview.priceImpact.high\", p.locale)}\n </strong>\n ) : null}\n </Row>\n ) : null}\n </>\n ) : null}\n {p.fee ? (\n <Row label={t(\"TransactionPreview.field.fee\", p.locale)}>{amountText(p.fee)}</Row>\n ) : null}\n {p.expiresAt ? (\n <Row label={t(\"TransactionPreview.field.expires\", p.locale)}>\n {formatTimestamp(p.expiresAt, p.locale, p.timeZone)}\n </Row>\n ) : null}\n </dl>\n {p.simulation ? (\n <div className=\"text-sm\">\n <strong className={p.simulation.status === \"failed\" ? \"text-red-700\" : \"text-slate-800\"}>\n {t(`TransactionPreview.simulation.${p.simulation.status}`, p.locale)}\n </strong>\n {p.simulation.message ? (\n <span className=\"block text-slate-600\">{p.simulation.message}</span>\n ) : null}\n </div>\n ) : null}\n {p.warnings.length > 0 ? (\n <div className=\"text-sm\">\n <strong className=\"text-amber-800\">{t(\"TransactionPreview.warnings\", p.locale)}</strong>\n <ul className=\"m-0 pl-5\">\n {p.warnings.map((w) => (\n <li key={w}>{w}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {handoff ? (\n raw.onHandoff ? (\n <button\n type=\"button\"\n onClick={() => raw.onHandoff?.(handoff)}\n className=\"self-start rounded border border-slate-300 px-3 py-1 text-sm hover:bg-slate-50\"\n >\n {t(\"TransactionPreview.handoff\", p.locale)}\n </button>\n ) : (\n <a\n href={handoff}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n className=\"self-start text-sm text-blue-700 underline\"\n >\n {t(\"TransactionPreview.handoff\", p.locale)}\n </a>\n )\n ) : null}\n </section>\n );\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading, mdTable, mdUrl } from \"../shared/markdown.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport {\n type TransactionAmount,\n TransactionPreviewPropsSchema,\n hasPreviewContent,\n} from \"./TransactionPreview.schema.js\";\n\nconst amt = (a: TransactionAmount) => `${a.value} ${a.symbol}`;\n\n/**\n * A-1 fallback (mandatory for this view): the field table plus the sentence \"NOT SIGNED -\n * preparation only\". The sentence is present even when there is nothing to preview.\n */\nexport function transactionPreviewToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const title = mdHeading(t(\"TransactionPreview.title\", locale));\n const notice = `**${t(\"TransactionPreview.notice\", locale)}**`;\n const parsed = TransactionPreviewPropsSchema.safeParse(props);\n if (!parsed.success || !hasPreviewContent(parsed.data)) {\n return `${title}\\n\\n${notice}\\n\\n${t(\"TransactionPreview.empty.message\", locale)}\\n`;\n }\n const p = parsed.data;\n const rows: string[][] = [];\n const add = (key: Parameters<typeof t>[0], value: string | undefined) => {\n if (value) rows.push([t(key, locale), mdEscape(value)]);\n };\n add(\n \"TransactionPreview.field.network\",\n [p.network, p.testnet ? t(\"TransactionPreview.testnet\", locale) : \"\"]\n .filter(Boolean)\n .join(\", \"),\n );\n add(\"TransactionPreview.field.from\", p.from);\n add(\"TransactionPreview.field.to\", p.to);\n if (p.amount) add(\"TransactionPreview.field.amount\", amt(p.amount));\n if (p.quote) {\n add(\"TransactionPreview.field.sell\", amt(p.quote.sell));\n add(\"TransactionPreview.field.buy\", amt(p.quote.buy));\n if (p.quote.minReceived) add(\"TransactionPreview.field.minReceived\", amt(p.quote.minReceived));\n if (p.quote.route) add(\"TransactionPreview.field.route\", p.quote.route.join(\" → \"));\n if (p.quote.priceImpact) add(\"TransactionPreview.field.priceImpact\", `${p.quote.priceImpact}%`);\n }\n if (p.fee) add(\"TransactionPreview.field.fee\", amt(p.fee));\n if (p.expiresAt) {\n add(\"TransactionPreview.field.expires\", formatTimestamp(p.expiresAt, locale, p.timeZone));\n }\n const sections = [\n `${title}\\n\\n${notice}`,\n mdTable([t(`TransactionPreview.kind.${p.kind}`, locale), \"\"], rows),\n ];\n if (p.simulation) {\n const msg = p.simulation.message ? ` - ${mdEscape(p.simulation.message)}` : \"\";\n sections.push(`${t(`TransactionPreview.simulation.${p.simulation.status}`, locale)}${msg}`);\n }\n if (p.warnings.length > 0) {\n sections.push(\n `${t(\"TransactionPreview.warnings\", locale)}:\\n${p.warnings.map((w) => `- ${mdEscape(w)}`).join(\"\\n\")}`,\n );\n }\n const handoff = normalizeHttpUrl(p.handoff?.url);\n if (handoff) sections.push(`${t(\"TransactionPreview.handoff\", locale)}: <${mdUrl(handoff)}>`);\n return `${sections.join(\"\\n\\n\")}\\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\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\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\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\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 accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\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 { useEffect, useState } from \"react\";\nimport type { Observable } from \"rxjs\";\n\n/**\n * Subscribes to an Observable stream of partial prop updates and merges them\n * into local state. Used for MCP App streaming hydration (SEP-1865 host-context\n * change notifications, TableView large dataset chunking, etc).\n *\n * @param props$ Observable emitting partial prop chunks.\n * @returns merged state accumulated across emissions.\n */\nexport function useStreamingHydration<T>(props$: Observable<Partial<T>>): Partial<T> {\n const [state, setState] = useState<Partial<T>>({});\n useEffect(() => {\n const sub = props$.subscribe((chunk) => {\n setState((prev) => ({ ...prev, ...chunk }));\n });\n return () => {\n sub.unsubscribe();\n };\n }, [props$]);\n return state;\n}\n","import { type Observable, Subject } from \"rxjs\";\n\n/**\n * MCP App postMessage adapter (mosaic-architecture-standard-v1 §3.4 streaming).\n * Listens for `mosaic.stream.chunk` messages and emits their `data` payload\n * into an RxJS Observable so components can consume them via {@link useStreamingHydration}.\n *\n * Canonical envelope per StreamChunkSchema:\n * { type: 'mosaic.stream.chunk', componentKey, chunkId, data, isLast }\n */\nexport const MOSAIC_STREAM_CHUNK_TYPE = \"mosaic.stream.chunk\" as const;\n\nexport function createPostMessageObservable<T>(): Observable<Partial<T>> {\n const subject = new Subject<Partial<T>>();\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", (event: MessageEvent) => {\n const data = event.data as { type?: string; data?: unknown; params?: unknown } | undefined;\n if (data?.type === MOSAIC_STREAM_CHUNK_TYPE) {\n subject.next((data.data ?? data.params) as Partial<T>);\n }\n });\n }\n return subject.asObservable();\n}\n\n/**\n * Size reporting for views that talk to the host through this raw adapter instead of the\n * ext-apps `App` (whose `autoResize` does the same, ext-apps-spec.mdx l.733).\n *\n * Spec: MCP Apps 2026-01-26 ext-apps-spec.mdx l.1204-1215, `ui/notifications/size-changed`\n * with params `{ width: number, height: number }`; \"The View SHOULD send this notification when\n * rendered content body size changes (e.g. using ResizeObserver API)\". Hosts MUST resize the\n * iframe on it when dimensions are flexible (l.718), which Claude's inline \"height auto-fits to\n * content\" rule relies on.\n */\nexport const SIZE_CHANGED_METHOD = \"ui/notifications/size-changed\" as const;\n\nexport interface ReportedSize {\n width: number;\n height: number;\n}\n\n/** Posts the JSON-RPC notification to the host (the parent window by default). */\nexport function postSizeChanged(size: ReportedSize, target: Window = window.parent): void {\n target.postMessage(\n {\n jsonrpc: \"2.0\",\n method: SIZE_CHANGED_METHOD,\n params: { width: size.width, height: size.height },\n },\n \"*\",\n );\n}\n\nexport interface SizeReportingOptions {\n /** Element whose rendered size is reported. Default: `document.documentElement`. */\n element?: Element;\n /** Default: {@link postSizeChanged} to `window.parent`. */\n send?: (size: ReportedSize) => void;\n /** Injection point; `null` simulates an environment with none. Default: the global. */\n ResizeObserverImpl?: typeof ResizeObserver | null;\n}\n\n/**\n * Sends the current size now, then again whenever it changes (consecutive identical sizes are\n * not re-sent). Returns the stop function. Throws when there is no ResizeObserver: a view that\n * silently never reports its height renders clipped in the host.\n */\nexport function startSizeReporting(options: SizeReportingOptions = {}): () => void {\n const RO =\n options.ResizeObserverImpl === undefined\n ? typeof ResizeObserver === \"undefined\"\n ? null\n : ResizeObserver\n : options.ResizeObserverImpl;\n if (RO === null) throw new Error(\"startSizeReporting: ResizeObserver is unavailable\");\n const element = options.element ?? document.documentElement;\n const send = options.send ?? ((s: ReportedSize) => postSizeChanged(s));\n let last: ReportedSize | undefined;\n const report = () => {\n const rect = element.getBoundingClientRect();\n const size = {\n width: Math.ceil(rect.width),\n height: Math.ceil(Math.max(rect.height, (element as HTMLElement).scrollHeight ?? 0)),\n };\n if (last && last.width === size.width && last.height === size.height) return;\n last = size;\n send(size);\n };\n const observer = new RO(report);\n observer.observe(element);\n report();\n return () => observer.disconnect();\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdHeading } from \"../shared/markdown.js\";\nimport { MarkdownRendererPropsSchema } from \"./MarkdownRenderer.schema.js\";\n\n/** A-1 fallback: the content IS markdown, so it is passed through (capped at `maxLength`). */\nexport function markdownRendererToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = MarkdownRendererPropsSchema.parse({ locale, ...(props as object) });\n return `${mdHeading(t(\"MarkdownRenderer.title\", locale))}\\n\\n${p.content.slice(0, p.maxLength)}\\n`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"./TokenDisplayOnceModal.schema.js\";\n\n/**\n * A-1 fallback for a one-time secret. `content[]` text reaches the model's context, and an\n * audience annotation is only a hint hosts may ignore, so the VALUE IS NEVER WRITTEN HERE: the\n * fallback carries the name, scope, expiry and an issuer-supplied fingerprint, plus a fixed\n * sentence that the value is shown once in the app view only. (`token` is declared in\n * MOSAIC_NEVER_SERIALISE and asserted absent by createMosaicToolResult.)\n */\nexport function tokenDisplayOnceModalToMarkdown(\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n): string {\n // `token` is omitted on purpose: the renderer never needs it and is fed props without it.\n const p = TokenDisplayOnceModalPropsSchema.omit({ token: true }).parse(props);\n const rows = [\n p.scope ? `- ${t(\"TokenDisplayOnceModal.field.scope\", locale)}: ${mdEscape(p.scope)}` : \"\",\n p.expiresAt\n ? `- ${t(\"TokenDisplayOnceModal.field.expires\", locale)}: ${mdEscape(p.expiresAt)}`\n : \"\",\n p.fingerprint\n ? `- ${t(\"TokenDisplayOnceModal.field.fingerprint\", locale)}: ${mdEscape(p.fingerprint)}`\n : \"\",\n ].filter(Boolean);\n return `${mdHeading(t(\"TokenDisplayOnceModal.title\", locale))}\\n\\n**${mdEscape(p.title)}**\\n\\n${rows.length ? `${rows.join(\"\\n\")}\\n\\n` : \"\"}${t(\"TokenDisplayOnceModal.notice.once\", locale)}\\n`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading, mdTable } from \"../shared/markdown.js\";\nimport { TableViewPropsSchema } from \"./TableView.schema.js\";\n\n/** Rows beyond this are summarised, not listed (a text client gets a readable table). */\nexport const MARKDOWN_MAX_ROWS = 50;\n\n/** Shown in place of a `sensitive` column's values. */\nconst MASK = \"••••\";\n\n/** A-1 fallback: the table as GFM (headers + the first rows) with the count of the rest. */\nexport function tableViewToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = TableViewPropsSchema.parse(props);\n const shown = p.rows.slice(0, MARKDOWN_MAX_ROWS);\n const table = mdTable(\n p.columns.map((c) => mdEscape(c.header)),\n shown.map((r) => p.columns.map((c) => (c.sensitive ? MASK : mdEscape(String(r[c.key] ?? \"\"))))),\n );\n const rest = p.rows.length - shown.length;\n const more =\n rest > 0 ? `\\n${t(\"TableView.markdown.more\", locale).replace(\"{n}\", String(rest))}\\n` : \"\";\n const empty = p.rows.length === 0 ? `\\n${t(\"TableView.empty.message\", locale)}\\n` : \"\";\n return `${mdHeading(t(\"TableView.title\", locale))}\\n\\n${table}\\n${more}${empty}`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { ConfirmDialogPropsSchema } from \"./ConfirmDialog.schema.js\";\n\n/** A-1 fallback: the question, then the two answers the dialog would have offered. */\nexport function confirmDialogToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = ConfirmDialogPropsSchema.parse(props);\n return `${mdHeading(t(\"ConfirmDialog.title\", locale))}\\n\\n**${mdEscape(p.title)}**\\n\\n${mdEscape(p.message)}\\n\\n${t(\"ConfirmDialog.options\", locale)}: ${mdEscape(p.confirmLabel)} / ${mdEscape(p.cancelLabel)}\\n`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { StatusBadgePropsSchema } from \"./StatusBadge.schema.js\";\n\n/** A-1 fallback: the status text and its variant in words. */\nexport function statusBadgeToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = StatusBadgePropsSchema.parse({ locale, ...(props as object) });\n return `${mdHeading(t(\"StatusBadge.title\", locale))}\\n\\n- ${mdEscape(p.label ?? p.status)} (${p.variant})\\n`;\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { ProgressBarPropsSchema } from \"./ProgressBar.schema.js\";\n\n/** A-1 fallback: the label and the percentage (plus a non-default colour variant in words). */\nexport function progressBarToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = ProgressBarPropsSchema.parse(props);\n const variant = p.colorVariant === \"default\" ? \"\" : ` (${p.colorVariant})`;\n return `${mdHeading(t(\"ProgressBar.title\", locale))}\\n\\n- ${mdEscape(p.label)}: ${p.value}%${variant}\\n`;\n}\n","import { type UIResource, createUIResource } from \"@mcp-ui/server\";\nimport { ZodError } from \"zod\";\nimport { markdownRendererToMarkdown } from \"../components/artifacts/MarkdownRenderer.markdown.js\";\nimport { MarkdownRendererPropsSchema } from \"../components/artifacts/MarkdownRenderer.schema.js\";\nimport { tokenDisplayOnceModalToMarkdown } from \"../components/confirmation/TokenDisplayOnceModal.markdown.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"../components/confirmation/TokenDisplayOnceModal.schema.js\";\nimport { transactionPreviewToMarkdown } from \"../components/confirmation/TransactionPreview.markdown.js\";\nimport { TransactionPreviewPropsSchema } from \"../components/confirmation/TransactionPreview.schema.js\";\nimport { balanceCardToMarkdown } from \"../components/display/BalanceCard.markdown.js\";\nimport { BalanceCardPropsSchema } from \"../components/display/BalanceCard.schema.js\";\nimport { messageFeedToMarkdown } from \"../components/display/MessageFeed.markdown.js\";\nimport { MessageFeedPropsSchema } from \"../components/display/MessageFeed.schema.js\";\nimport { pipelineBoardToMarkdown } from \"../components/display/PipelineBoard.markdown.js\";\nimport { PipelineBoardPropsSchema } from \"../components/display/PipelineBoard.schema.js\";\nimport { statCardToMarkdown } from \"../components/display/StatCard.markdown.js\";\nimport { StatCardPropsSchema } from \"../components/display/StatCard.schema.js\";\nimport { tableViewToMarkdown } from \"../components/display/TableView.markdown.js\";\nimport { TableViewPropsSchema } from \"../components/display/TableView.schema.js\";\nimport { confirmDialogToMarkdown } from \"../components/input/ConfirmDialog.markdown.js\";\nimport { ConfirmDialogPropsSchema } from \"../components/input/ConfirmDialog.schema.js\";\nimport { statusBadgeToMarkdown } from \"../components/media/StatusBadge.markdown.js\";\nimport { StatusBadgePropsSchema } from \"../components/media/StatusBadge.schema.js\";\nimport { progressBarToMarkdown } from \"../components/progress/ProgressBar.markdown.js\";\nimport { ProgressBarPropsSchema } from \"../components/progress/ProgressBar.schema.js\";\nimport { timelineToMarkdown } from \"../components/progress/Timeline.markdown.js\";\nimport { TimelinePropsSchema } from \"../components/progress/Timeline.schema.js\";\nimport { t } from \"../i18n/strings.js\";\n\n/**\n * MCP capability key used by hosts to discover that this server emits\n * MCP UI Apps resources (mosaic-architecture-standard-v1 §2.1).\n */\nexport const MCP_UI_CAPABILITY_KEY = \"io.modelcontextprotocol/ui\" as const;\n\n/**\n * Canonical Mosaic MIME type — every UIResource produced by this server\n * advertises the MCP Apps profile (`text/html;profile=mcp-app`).\n */\nexport const MOSAIC_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\ntype SupportedComponent =\n | \"ProgressBar\"\n | \"ConfirmDialog\"\n | \"TableView\"\n | \"MarkdownRenderer\"\n | \"TokenDisplayOnceModal\"\n | \"StatusBadge\"\n | \"StatCard\"\n | \"BalanceCard\"\n | \"Timeline\"\n | \"MessageFeed\"\n | \"PipelineBoard\"\n | \"TransactionPreview\";\n\nconst SCHEMA_BY_NAME = {\n ProgressBar: ProgressBarPropsSchema,\n ConfirmDialog: ConfirmDialogPropsSchema,\n TableView: TableViewPropsSchema,\n MarkdownRenderer: MarkdownRendererPropsSchema,\n TokenDisplayOnceModal: TokenDisplayOnceModalPropsSchema,\n StatusBadge: StatusBadgePropsSchema,\n StatCard: StatCardPropsSchema,\n BalanceCard: BalanceCardPropsSchema,\n Timeline: TimelinePropsSchema,\n MessageFeed: MessageFeedPropsSchema,\n PipelineBoard: PipelineBoardPropsSchema,\n TransactionPreview: TransactionPreviewPropsSchema,\n} as const;\n\n/**\n * Per-view `toMarkdown(props, locale)` (App standard A-1): the DATA of the view as markdown, for\n * clients with no UI layer. Keyed by component so a view without one fails to compile.\n */\nconst MARKDOWN_BY_NAME: Record<\n SupportedComponent,\n (props: unknown, locale: \"en\" | \"fr\") => string\n> = {\n ProgressBar: progressBarToMarkdown,\n ConfirmDialog: confirmDialogToMarkdown,\n TableView: tableViewToMarkdown,\n MarkdownRenderer: markdownRendererToMarkdown,\n TokenDisplayOnceModal: tokenDisplayOnceModalToMarkdown,\n StatusBadge: statusBadgeToMarkdown,\n StatCard: statCardToMarkdown,\n BalanceCard: balanceCardToMarkdown,\n Timeline: timelineToMarkdown,\n MessageFeed: messageFeedToMarkdown,\n PipelineBoard: pipelineBoardToMarkdown,\n TransactionPreview: transactionPreviewToMarkdown,\n};\n\nconst COMPONENT_KEYS = Object.keys(SCHEMA_BY_NAME) as SupportedComponent[];\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction buildHtml(componentName: SupportedComponent, props: unknown, locale: \"en\" | \"fr\"): string {\n const propsJson = escapeHtml(JSON.stringify(props));\n const title = escapeHtml(t(`${componentName}.title`, locale));\n return `<!DOCTYPE html><html lang=\"${locale === \"fr\" ? \"fr\" : \"en\"}\"><head><meta charset=\"utf-8\"><title>${title}</title></head><body><div id=\"mosaic-root\" data-component=\"${componentName}\" data-props='${propsJson}'></div></body></html>`;\n}\n\nexport interface CreateMosaicResourceOptions {\n /** Optional override for the generated `ui://` URI. */\n uri?: `ui://${string}`;\n /**\n * Optional override of the markdown fallback emitted under `_meta.ui.fallback`. Default: the\n * view's own `toMarkdown`, which carries the data.\n */\n markdownFallback?: string;\n /**\n * Keep declared secret fields in the embedded HTML props. Default false: a secret never goes\n * into a resource that may be placed in `content[]` (see {@link MOSAIC_NEVER_SERIALISE}).\n */\n includeSecrets?: boolean;\n}\n\n/**\n * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.\n *\n * - Runtime-validates `props` with the component's Zod schema (throws on failure).\n * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.\n * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`; `fallback`\n * is kept (published contract) and now carries the view's data as markdown (it was a title and a\n * note). The A-1 conformant place is the tool result `content[]`: see {@link createMosaicToolResult}.\n * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).\n *\n * @throws ZodError when `props` fails validation for `componentName`.\n */\nexport function createMosaicResource(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n options: CreateMosaicResourceOptions = {},\n): UIResource {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props) as Record<string, unknown>;\n const embedded = options.includeSecrets\n ? validated\n : splitSecrets(componentName, validated, []).publicProps;\n const fallback = options.markdownFallback ?? MARKDOWN_BY_NAME[componentName](embedded, locale);\n return buildResource(componentName, embedded, locale, fallback, options.uri);\n}\n\n/** Builds the UIResource from props that are ALREADY validated (and already split). */\nfunction buildResource(\n componentName: SupportedComponent,\n embedded: unknown,\n locale: \"en\" | \"fr\",\n fallback: string,\n uriOverride?: `ui://${string}`,\n): UIResource {\n const uri: `ui://${string}` = uriOverride ?? `ui://mosaic/${componentName.toLowerCase()}`;\n const html = buildHtml(componentName, embedded, locale);\n\n const resource = createUIResource({\n uri,\n content: { type: \"rawHtml\", htmlString: html },\n encoding: \"text\",\n metadata: {\n ui: {\n resourceUri: uri,\n locale,\n componentName,\n fallback,\n },\n },\n });\n\n // createUIResource may itself default the MIME type; ensure it matches the\n // Mosaic canonical profile regardless of upstream defaults.\n resource.resource.mimeType = MOSAIC_MIME_TYPE;\n return resource;\n}\n\n/**\n * Fields whose VALUE must never be serialised into a tool result's `content[]` (text block or\n * ui:// resource): that text reaches the model's context, and `annotations.audience` is only a\n * hint hosts may ignore. Exhaustive by type: a new view cannot be added without answering. The\n * value reaches the view through the tool result `_meta[\"mosaic/secrets\"]` instead.\n * (TableView additionally honours per-column `sensitive`.)\n */\nexport const MOSAIC_NEVER_SERIALISE: Record<SupportedComponent, readonly string[]> = {\n ProgressBar: [],\n ConfirmDialog: [],\n TableView: [],\n MarkdownRenderer: [],\n TokenDisplayOnceModal: [\"token\"],\n StatusBadge: [],\n StatCard: [],\n BalanceCard: [],\n Timeline: [],\n MessageFeed: [],\n PipelineBoard: [],\n TransactionPreview: [],\n};\n\n/**\n * Thrown when a declared never-serialise field would reach `content[]`, or the fallback cannot be\n * rendered once the field is removed. Names the field; never prints the value.\n */\nexport class MosaicSecretLeakError extends Error {\n readonly field: string;\n constructor(field: string, reason = \"would be serialised into content[]\") {\n super(`createMosaicToolResult: the value of \"${field}\" ${reason}`);\n this.name = \"MosaicSecretLeakError\";\n this.field = field;\n }\n}\n\ntype Secrets = Record<string, unknown>;\n\n/**\n * Splits validated props into the public props (what may be embedded) and the secrets: declared\n * top-level fields, plus the cells of TableView columns flagged `sensitive`.\n */\nfunction splitSecrets(\n name: SupportedComponent,\n validated: Record<string, unknown>,\n extraFields: readonly string[],\n): { publicProps: Record<string, unknown>; secrets: Secrets } {\n const publicProps: Record<string, unknown> = { ...validated };\n const secrets: Secrets = {};\n for (const f of extraFields) {\n if (!(f in validated))\n throw new Error(`createMosaicToolResult: unknown field \"${f}\" for ${name}`);\n }\n for (const field of [...MOSAIC_NEVER_SERIALISE[name], ...extraFields]) {\n if (field in publicProps) {\n secrets[field] = publicProps[field];\n delete publicProps[field];\n }\n }\n if (name === \"TableView\") {\n const columns = (validated.columns ?? []) as Array<{ key: string; sensitive?: boolean }>;\n const sensitive = columns.filter((c) => c.sensitive).map((c) => c.key);\n if (sensitive.length > 0) {\n const cells: Record<string, unknown> = {};\n publicProps.rows = ((validated.rows ?? []) as Array<Record<string, unknown>>).map(\n (row, i) => {\n const rest = { ...row };\n for (const k of sensitive) {\n if (k in rest) {\n cells[`${i}.${k}`] = rest[k];\n delete rest[k];\n }\n }\n return rest;\n },\n );\n secrets.cells = cells;\n }\n }\n return { publicProps, secrets };\n}\n\n/**\n * Comparison form for the leak check: Unicode NFKC (compatibility forms such as full-width\n * letters collapse) then lower case, applied to BOTH sides. A secret echoed as \"ABCD\", \"abcd\" or\n * \"ABCD\" is the same secret. Cost, accepted: a short secret can also match differently-cased\n * unrelated text and then REFUSES loudly (the issuer keeps it out of the other props); there is no\n * case in which a case-folded match is silently allowed.\n */\nfunction fold(text: string): string {\n return text.normalize(\"NFKC\").toLowerCase();\n}\n\n/**\n * EVERY declared secret value, whatever its length (a one-time code is 4-6 characters). Only an\n * empty value carries nothing to look for. A short value that collides with other text makes the\n * call REFUSE (loudly): the issuer keeps it out of the other props. Never a skip.\n */\nfunction secretNeedles(secrets: Secrets): Array<{ field: string; needle: string }> {\n const out: Array<{ field: string; needle: string }> = [];\n for (const [field, v] of Object.entries(secrets)) {\n const values = field === \"cells\" && v && typeof v === \"object\" ? Object.values(v) : [v];\n for (const x of values) {\n const needle =\n typeof x === \"string\"\n ? x\n : typeof x === \"number\" || typeof x === \"boolean\"\n ? String(x)\n : x === null || x === undefined\n ? \"\"\n : JSON.stringify(x);\n if (needle.length > 0) out.push({ field, needle });\n }\n }\n return out;\n}\n\nexport const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[] = COMPONENT_KEYS;\nexport type { SupportedComponent };\n\n/**\n * MCP tool result for a view, App standard A-1: a markdown text block carrying the view's DATA,\n * next to the `ui://` resource, in `content[]` (reference handler, standard l.136-138):\n * `{ content: [ { type: \"text\", text }, { type: \"resource\", resource } ] }`.\n *\n * FAIL CLOSED on secrets: `content[]` reaches the model, so the fields declared in\n * {@link MOSAIC_NEVER_SERIALISE} (plus the caller's `neverSerialise`, plus TableView `sensitive`\n * columns) are removed from the embedded props, delivered to the view through\n * `_meta[\"mosaic/secrets\"]`, and asserted absent from the serialised `content[]`; a leak throws\n * {@link MosaicSecretLeakError}. A declared field the view does not have throws (a typo would\n * otherwise assert nothing). The fallback is RENDERED FROM THE PUBLIC PROPS (declared secrets\n * removed first), and every non-empty declared value is then checked at any length.\n */\nexport function createMosaicToolResult(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n options: { neverSerialise?: readonly string[] } = {},\n): {\n content: [{ type: \"text\"; text: string }, UIResource];\n _meta?: { \"mosaic/secrets\": Secrets };\n} {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props) as Record<string, unknown>;\n const { publicProps, secrets } = splitSecrets(\n componentName,\n validated,\n options.neverSerialise ?? [],\n );\n let markdown: string;\n try {\n markdown = MARKDOWN_BY_NAME[componentName](publicProps, locale);\n } catch (err) {\n const declared = Object.keys(secrets).filter((k) => k !== \"cells\")[0];\n if (declared && err instanceof ZodError) {\n throw new MosaicSecretLeakError(\n declared,\n \"is required by the fallback renderer and cannot be declared secret\",\n );\n }\n throw err;\n }\n const ui = buildResource(componentName, publicProps, locale, markdown);\n const content: [{ type: \"text\"; text: string }, UIResource] = [\n { type: \"text\", text: markdown },\n ui,\n ];\n const serialised = fold(JSON.stringify(content));\n for (const { field, needle } of secretNeedles(secrets)) {\n if (\n serialised.includes(fold(needle)) ||\n serialised.includes(fold(JSON.stringify(needle).slice(1, -1)))\n ) {\n throw new MosaicSecretLeakError(field);\n }\n }\n return Object.keys(secrets).length > 0\n ? { content, _meta: { \"mosaic/secrets\": secrets } }\n : { content };\n}\n\n// The per-view A-1 builders, importable by a server that renders no UI.\nexport {\n progressBarToMarkdown,\n confirmDialogToMarkdown,\n tableViewToMarkdown,\n markdownRendererToMarkdown,\n tokenDisplayOnceModalToMarkdown,\n statusBadgeToMarkdown,\n statCardToMarkdown,\n balanceCardToMarkdown,\n timelineToMarkdown,\n messageFeedToMarkdown,\n pipelineBoardToMarkdown,\n transactionPreviewToMarkdown,\n};\n"]}
|