@vantageos/mosaic 0.3.1 → 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 +88 -2
- package/LICENSE +110 -0
- package/README.md +193 -21
- 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 +190 -2
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +190 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/confirmation.cjs +728 -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 +726 -4
- package/dist/confirmation.js.map +1 -1
- package/dist/display.cjs +1555 -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 +1539 -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 +2202 -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 +2167 -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 +190 -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 +190 -2
- package/dist/media.js.map +1 -1
- package/dist/preact/artifacts.js +190 -2
- package/dist/preact/artifacts.js.map +1 -1
- package/dist/preact/confirmation.d.ts +321 -1
- package/dist/preact/confirmation.js +629 -4
- package/dist/preact/confirmation.js.map +1 -1
- package/dist/preact/display.d.ts +570 -31
- package/dist/preact/display.js +1248 -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 +469 -3
- package/dist/preact/progress.js.map +1 -1
- package/dist/progress.cjs +525 -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 +522 -3
- package/dist/progress.js.map +1 -1
- package/dist/react/artifacts.cjs +190 -2
- package/dist/react/artifacts.cjs.map +1 -1
- package/dist/react/artifacts.js +190 -2
- package/dist/react/artifacts.js.map +1 -1
- package/dist/react/confirmation.cjs +630 -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 +629 -4
- package/dist/react/confirmation.js.map +1 -1
- package/dist/react/display.cjs +1137 -123
- package/dist/react/display.cjs.map +1 -1
- package/dist/react/display.d.cts +42 -14
- package/dist/react/display.d.ts +42 -14
- package/dist/react/display.js +1122 -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 +471 -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 +469 -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/dist/tokens.cjs +73 -22
- package/dist/tokens.cjs.map +1 -1
- package/dist/tokens.d.cts +23 -3
- package/dist/tokens.d.ts +23 -3
- package/dist/tokens.js +73 -22
- package/dist/tokens.js.map +1 -1
- package/package.json +250 -231
- package/registry.yaml +51 -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/confirmation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/confirmation/TokenDisplayOnceModal.schema.ts","../src/components/confirmation/TokenDisplayOnceModal.tsx","../src/components/confirmation/Toast.schema.ts","../src/components/confirmation/Alert.schema.ts"],"names":["z"],"mappings":"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","file":"confirmation.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 \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm: invalid options\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider: invalid props\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField: invalid props\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"This field is required\",\n \"ErrorDisplay.error.min\": \"Value is below the minimum\",\n \"ErrorDisplay.error.max\": \"Value exceeds the maximum\",\n \"ErrorDisplay.error.minLength\": \"Input is too short\",\n \"ErrorDisplay.error.maxLength\": \"Input is too long\",\n \"ErrorDisplay.error.pattern\": \"Invalid format\",\n \"ErrorDisplay.error.email\": \"Enter a valid email address\",\n \"ErrorDisplay.error.url\": \"Enter a valid URL\",\n \"ErrorDisplay.error.generic\": \"Invalid value\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Submit form\",\n \"SubmitButton.state.loading\": \"Submitting…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton: invalid props\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Input field\",\n \"Input.error.required\": \"This field is required\",\n \"Input.error.invalid\": \"Invalid value\",\n \"Input.error.tooLong\": \"Input is too long\",\n \"Input.error.tooShort\": \"Input is too short\",\n \"Input.error.invalidProps\": \"Input: invalid props\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Text area\",\n \"Textarea.error.required\": \"This field is required\",\n \"Textarea.error.tooLong\": \"Text is too long\",\n \"Textarea.counter.remaining\": \"characters remaining\",\n \"Textarea.error.invalidProps\": \"Textarea: invalid props\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"List of items\",\n \"FieldArray.aria.addItem\": \"Add item\",\n \"FieldArray.aria.removeItem\": \"Remove item\",\n \"FieldArray.error.invalidProps\": \"FieldArray: invalid props\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Checkbox\",\n \"Checkbox.error.required\": \"This field must be checked\",\n \"Checkbox.error.invalidProps\": \"Checkbox: invalid props\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Multi-select field\",\n \"MultiSelect.aria.removeChip\": \"Remove\",\n \"MultiSelect.error.required\": \"Select at least one option\",\n \"MultiSelect.error.maxItems\": \"Maximum number of selections reached\",\n \"MultiSelect.placeholder\": \"Select options…\",\n \"MultiSelect.search.placeholder\": \"Search…\",\n \"MultiSelect.empty\": \"No options available\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect: invalid props\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Radio group\",\n \"RadioGroup.error.required\": \"Select one option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup: invalid props\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Select an option…\",\n \"Select.search.placeholder\": \"Search…\",\n \"Select.empty\": \"No options available\",\n \"Select.error.required\": \"Select an option\",\n \"Select.error.invalidProps\": \"Select: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n // ─── Non-forms components ──────────────────────────────────────────────────\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm : options invalides\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider : propriétés invalides\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField : propriétés invalides\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"Ce champ est obligatoire\",\n \"ErrorDisplay.error.min\": \"La valeur est inférieure au minimum\",\n \"ErrorDisplay.error.max\": \"La valeur dépasse le maximum\",\n \"ErrorDisplay.error.minLength\": \"La saisie est trop courte\",\n \"ErrorDisplay.error.maxLength\": \"La saisie est trop longue\",\n \"ErrorDisplay.error.pattern\": \"Format invalide\",\n \"ErrorDisplay.error.email\": \"Saisissez une adresse e-mail valide\",\n \"ErrorDisplay.error.url\": \"Saisissez une URL valide\",\n \"ErrorDisplay.error.generic\": \"Valeur invalide\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Soumettre le formulaire\",\n \"SubmitButton.state.loading\": \"Envoi en cours…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton : propriétés invalides\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Champ de saisie\",\n \"Input.error.required\": \"Ce champ est obligatoire\",\n \"Input.error.invalid\": \"Valeur invalide\",\n \"Input.error.tooLong\": \"La saisie est trop longue\",\n \"Input.error.tooShort\": \"La saisie est trop courte\",\n \"Input.error.invalidProps\": \"Input : propriétés invalides\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Zone de texte\",\n \"Textarea.error.required\": \"Ce champ est obligatoire\",\n \"Textarea.error.tooLong\": \"Le texte est trop long\",\n \"Textarea.counter.remaining\": \"caractères restants\",\n \"Textarea.error.invalidProps\": \"Textarea : propriétés invalides\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"Liste d'éléments\",\n \"FieldArray.aria.addItem\": \"Ajouter un élément\",\n \"FieldArray.aria.removeItem\": \"Supprimer l'élément\",\n \"FieldArray.error.invalidProps\": \"FieldArray : propriétés invalides\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Case à cocher\",\n \"Checkbox.error.required\": \"Ce champ doit être coché\",\n \"Checkbox.error.invalidProps\": \"Checkbox : propriétés invalides\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Champ de sélection multiple\",\n \"MultiSelect.aria.removeChip\": \"Retirer\",\n \"MultiSelect.error.required\": \"Sélectionnez au moins une option\",\n \"MultiSelect.error.maxItems\": \"Nombre maximum de sélections atteint\",\n \"MultiSelect.placeholder\": \"Sélectionner des options…\",\n \"MultiSelect.search.placeholder\": \"Rechercher…\",\n \"MultiSelect.empty\": \"Aucune option disponible\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect : propriétés invalides\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Groupe de boutons radio\",\n \"RadioGroup.error.required\": \"Sélectionnez une option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup : propriétés invalides\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Sélectionner une option…\",\n \"Select.search.placeholder\": \"Rechercher…\",\n \"Select.empty\": \"Aucune option disponible\",\n \"Select.error.required\": \"Sélectionnez une option\",\n \"Select.error.invalidProps\": \"Select : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/strings.ts","../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/display/Badge.schema.ts","../src/runtimes/react/components/display/Badge.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/display/TableView.logic.ts","../src/components/shared/datetime.ts","../src/components/shared/url.ts","../src/components/confirmation/TransactionPreview.schema.ts","../src/components/confirmation/TransactionPreview.tsx","../src/components/shared/markdown.ts","../src/components/confirmation/TransactionPreview.markdown.ts"],"names":["z","jsxs","jsx"],"mappings":"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","file":"confirmation.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\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\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 * 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 * 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","/**\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","/**\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: 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","/**\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, 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"]}
|