@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.
Files changed (157) hide show
  1. package/CHANGELOG.md +88 -2
  2. package/LICENSE +110 -0
  3. package/README.md +193 -21
  4. package/dist/PipelineBoard-FucyGArR.d.cts +759 -0
  5. package/dist/PipelineBoard-FucyGArR.d.ts +759 -0
  6. package/dist/PipelineBoard.markdown-DIcvrS-2.d.cts +16 -0
  7. package/dist/PipelineBoard.markdown-DIcvrS-2.d.ts +16 -0
  8. package/dist/{StatusBadge.schema-1tOjB4Ir.d.cts → StatusBadge.schema-BEjSH2_4.d.cts} +2 -2
  9. package/dist/{StatusBadge.schema-1tOjB4Ir.d.ts → StatusBadge.schema-BEjSH2_4.d.ts} +2 -2
  10. package/dist/{Tabs.schema-BzcEyeq8.d.cts → Tabs.schema-Dqr6vwV3.d.cts} +2 -2
  11. package/dist/{Tabs.schema-BzcEyeq8.d.ts → Tabs.schema-Dqr6vwV3.d.ts} +2 -2
  12. package/dist/Timeline-Coo_3tA_.d.cts +114 -0
  13. package/dist/Timeline-Coo_3tA_.d.ts +114 -0
  14. package/dist/Timeline.markdown-C6UPDv1H.d.cts +4 -0
  15. package/dist/Timeline.markdown-C6UPDv1H.d.ts +4 -0
  16. package/dist/TransactionPreview-BzWDn8kE.d.cts +391 -0
  17. package/dist/TransactionPreview-BzWDn8kE.d.ts +391 -0
  18. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.cts +7 -0
  19. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.ts +7 -0
  20. package/dist/artifacts.cjs +190 -2
  21. package/dist/artifacts.cjs.map +1 -1
  22. package/dist/artifacts.js +190 -2
  23. package/dist/artifacts.js.map +1 -1
  24. package/dist/confirmation.cjs +728 -2
  25. package/dist/confirmation.cjs.map +1 -1
  26. package/dist/confirmation.d.cts +2 -1
  27. package/dist/confirmation.d.ts +2 -1
  28. package/dist/confirmation.js +726 -4
  29. package/dist/confirmation.js.map +1 -1
  30. package/dist/display.cjs +1555 -203
  31. package/dist/display.cjs.map +1 -1
  32. package/dist/display.d.cts +6 -229
  33. package/dist/display.d.ts +6 -229
  34. package/dist/display.js +1539 -206
  35. package/dist/display.js.map +1 -1
  36. package/dist/forms.cjs +139 -46
  37. package/dist/forms.cjs.map +1 -1
  38. package/dist/forms.d.cts +2 -2
  39. package/dist/forms.d.ts +2 -2
  40. package/dist/forms.js +139 -46
  41. package/dist/forms.js.map +1 -1
  42. package/dist/host.cjs +822 -0
  43. package/dist/host.cjs.map +1 -0
  44. package/dist/host.d.cts +287 -0
  45. package/dist/host.d.ts +287 -0
  46. package/dist/host.js +794 -0
  47. package/dist/host.js.map +1 -0
  48. package/dist/{index-CwXVgtGb.d.cts → index-BadRcCbm.d.cts} +28 -11
  49. package/dist/{index-CwXVgtGb.d.ts → index-BadRcCbm.d.ts} +28 -11
  50. package/dist/index.cjs +2202 -247
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +42 -8
  53. package/dist/index.d.ts +42 -8
  54. package/dist/index.js +2167 -251
  55. package/dist/index.js.map +1 -1
  56. package/dist/input.d.cts +2 -2
  57. package/dist/input.d.ts +2 -2
  58. package/dist/media.cjs +190 -2
  59. package/dist/media.cjs.map +1 -1
  60. package/dist/media.d.cts +1 -1
  61. package/dist/media.d.ts +1 -1
  62. package/dist/media.js +190 -2
  63. package/dist/media.js.map +1 -1
  64. package/dist/preact/artifacts.js +190 -2
  65. package/dist/preact/artifacts.js.map +1 -1
  66. package/dist/preact/confirmation.d.ts +321 -1
  67. package/dist/preact/confirmation.js +629 -4
  68. package/dist/preact/confirmation.js.map +1 -1
  69. package/dist/preact/display.d.ts +570 -31
  70. package/dist/preact/display.js +1248 -126
  71. package/dist/preact/display.js.map +1 -1
  72. package/dist/preact/forms.d.ts +32 -15
  73. package/dist/preact/forms.js +139 -46
  74. package/dist/preact/forms.js.map +1 -1
  75. package/dist/preact/host.d.ts +307 -0
  76. package/dist/preact/host.js +875 -0
  77. package/dist/preact/host.js.map +1 -0
  78. package/dist/preact/media.d.ts +37 -1
  79. package/dist/preact/media.js +423 -0
  80. package/dist/preact/media.js.map +1 -1
  81. package/dist/preact/progress.d.ts +92 -1
  82. package/dist/preact/progress.js +469 -3
  83. package/dist/preact/progress.js.map +1 -1
  84. package/dist/progress.cjs +525 -2
  85. package/dist/progress.cjs.map +1 -1
  86. package/dist/progress.d.cts +2 -1
  87. package/dist/progress.d.ts +2 -1
  88. package/dist/progress.js +522 -3
  89. package/dist/progress.js.map +1 -1
  90. package/dist/react/artifacts.cjs +190 -2
  91. package/dist/react/artifacts.cjs.map +1 -1
  92. package/dist/react/artifacts.js +190 -2
  93. package/dist/react/artifacts.js.map +1 -1
  94. package/dist/react/confirmation.cjs +630 -2
  95. package/dist/react/confirmation.cjs.map +1 -1
  96. package/dist/react/confirmation.d.cts +3 -3
  97. package/dist/react/confirmation.d.ts +3 -3
  98. package/dist/react/confirmation.js +629 -4
  99. package/dist/react/confirmation.js.map +1 -1
  100. package/dist/react/display.cjs +1137 -123
  101. package/dist/react/display.cjs.map +1 -1
  102. package/dist/react/display.d.cts +42 -14
  103. package/dist/react/display.d.ts +42 -14
  104. package/dist/react/display.js +1122 -126
  105. package/dist/react/display.js.map +1 -1
  106. package/dist/react/forms.cjs +139 -46
  107. package/dist/react/forms.cjs.map +1 -1
  108. package/dist/react/forms.d.cts +1 -1
  109. package/dist/react/forms.d.ts +1 -1
  110. package/dist/react/forms.js +139 -46
  111. package/dist/react/forms.js.map +1 -1
  112. package/dist/react/host.cjs +910 -0
  113. package/dist/react/host.cjs.map +1 -0
  114. package/dist/react/host.d.cts +24 -0
  115. package/dist/react/host.d.ts +24 -0
  116. package/dist/react/host.js +875 -0
  117. package/dist/react/host.js.map +1 -0
  118. package/dist/react/input.d.cts +1 -1
  119. package/dist/react/input.d.ts +1 -1
  120. package/dist/react/media.cjs +426 -0
  121. package/dist/react/media.cjs.map +1 -1
  122. package/dist/react/media.d.cts +19 -1
  123. package/dist/react/media.d.ts +19 -1
  124. package/dist/react/media.js +423 -0
  125. package/dist/react/media.js.map +1 -1
  126. package/dist/react/progress.cjs +471 -2
  127. package/dist/react/progress.cjs.map +1 -1
  128. package/dist/react/progress.d.cts +1 -1
  129. package/dist/react/progress.d.ts +1 -1
  130. package/dist/react/progress.js +469 -3
  131. package/dist/react/progress.js.map +1 -1
  132. package/dist/server/resource.cjs +151 -0
  133. package/dist/server/resource.cjs.map +1 -0
  134. package/dist/server/resource.d.cts +90 -0
  135. package/dist/server/resource.d.ts +90 -0
  136. package/dist/server/resource.js +147 -0
  137. package/dist/server/resource.js.map +1 -0
  138. package/dist/server.cjs +1100 -25
  139. package/dist/server.cjs.map +1 -1
  140. package/dist/server.d.cts +84 -5
  141. package/dist/server.d.ts +84 -5
  142. package/dist/server.js +1087 -27
  143. package/dist/server.js.map +1 -1
  144. package/dist/tokens.cjs +73 -22
  145. package/dist/tokens.cjs.map +1 -1
  146. package/dist/tokens.d.cts +23 -3
  147. package/dist/tokens.d.ts +23 -3
  148. package/dist/tokens.js +73 -22
  149. package/dist/tokens.js.map +1 -1
  150. package/package.json +250 -231
  151. package/registry.yaml +51 -2
  152. package/dist/Alert.schema-LPJE5gFP.d.cts +0 -71
  153. package/dist/Alert.schema-LPJE5gFP.d.ts +0 -71
  154. package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +0 -22
  155. package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +0 -22
  156. package/dist/{ConfirmDialog-B3CQQGmJ.d.cts → ConfirmDialog-BCtOcmHe.d.cts} +1 -1
  157. package/dist/{ConfirmDialog-B3CQQGmJ.d.ts → ConfirmDialog-BCtOcmHe.d.ts} +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/artifacts/MarkdownRenderer.schema.ts","../../src/i18n/strings.ts","../../src/runtimes/preact/components/artifacts/MarkdownRenderer.tsx"],"names":[],"mappings":"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","file":"artifacts.js","sourcesContent":["import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","/**\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","// i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps, MarkdownRenderer.error.tooLong\n/** @jsxImportSource preact */\n\nimport DOMPurify from \"dompurify\";\nimport { marked } from \"marked\";\nimport {\n type MarkdownRendererProps,\n validateProps,\n} from \"../../../../components/artifacts/MarkdownRenderer.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\n// ─── Inner (validated props) ──────────────────────────────────────────────────\n\nfunction MarkdownRendererInner({ content, locale, maxLength, allowHtml }: MarkdownRendererProps) {\n if (content.length > maxLength) {\n return (\n <div role=\"alert\" lang={locale}>\n {t(\"MarkdownRenderer.error.tooLong\", locale)}\n </div>\n );\n }\n\n // When allowHtml=false, strip raw HTML tags from source before parsing,\n // so user-supplied HTML is neutralised before marked converts markdown to HTML.\n const source = allowHtml ? content : content.replace(/<[^>]*>/g, \"\");\n const rawHtml = marked.parse(source, { async: false }) as string;\n // Always sanitize the marked output to prevent XSS from markdown-injected HTML.\n const cleanHtml = DOMPurify.sanitize(rawHtml);\n\n return (\n <article\n aria-label={t(\"MarkdownRenderer.aria.content\", locale)}\n lang={locale}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitized by DOMPurify\n dangerouslySetInnerHTML={{ __html: cleanHtml }}\n />\n );\n}\n\n/**\n * MarkdownRenderer — cross-runtime markdown-to-HTML renderer (Preact 10 implementation).\n *\n * Accepts `Record<string, unknown>` for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n *\n * WCAG-AA:\n * - <article aria-label> — landmark with i18n label (EN/FR)\n * - <div role=\"alert\" lang> — tooLong + invalidProps errors announce to screen readers\n * - DOMPurify sanitization prevents XSS; allowHtml=false (default) strips raw HTML first\n *\n * i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps,\n * MarkdownRenderer.error.tooLong\n */\nexport function MarkdownRenderer(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <MarkdownRendererInner {...props} />;\n } catch {\n const locale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"MarkdownRenderer.error.invalidProps\", locale)}</div>;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/components/artifacts/MarkdownRenderer.schema.ts","../../src/i18n/strings.ts","../../src/runtimes/preact/components/artifacts/MarkdownRenderer.tsx"],"names":[],"mappings":"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","file":"artifacts.js","sourcesContent":["import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","/**\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","// i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps, MarkdownRenderer.error.tooLong\n/** @jsxImportSource preact */\n\nimport DOMPurify from \"dompurify\";\nimport { marked } from \"marked\";\nimport {\n type MarkdownRendererProps,\n validateProps,\n} from \"../../../../components/artifacts/MarkdownRenderer.schema.js\";\nimport { t } from \"../../../../i18n/strings.js\";\n\n// ─── Inner (validated props) ──────────────────────────────────────────────────\n\nfunction MarkdownRendererInner({ content, locale, maxLength, allowHtml }: MarkdownRendererProps) {\n if (content.length > maxLength) {\n return (\n <div role=\"alert\" lang={locale}>\n {t(\"MarkdownRenderer.error.tooLong\", locale)}\n </div>\n );\n }\n\n // When allowHtml=false, strip raw HTML tags from source before parsing,\n // so user-supplied HTML is neutralised before marked converts markdown to HTML.\n const source = allowHtml ? content : content.replace(/<[^>]*>/g, \"\");\n const rawHtml = marked.parse(source, { async: false }) as string;\n // Always sanitize the marked output to prevent XSS from markdown-injected HTML.\n const cleanHtml = DOMPurify.sanitize(rawHtml);\n\n return (\n <article\n aria-label={t(\"MarkdownRenderer.aria.content\", locale)}\n lang={locale}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitized by DOMPurify\n dangerouslySetInnerHTML={{ __html: cleanHtml }}\n />\n );\n}\n\n/**\n * MarkdownRenderer — cross-runtime markdown-to-HTML renderer (Preact 10 implementation).\n *\n * Accepts `Record<string, unknown>` for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n *\n * WCAG-AA:\n * - <article aria-label> — landmark with i18n label (EN/FR)\n * - <div role=\"alert\" lang> — tooLong + invalidProps errors announce to screen readers\n * - DOMPurify sanitization prevents XSS; allowHtml=false (default) strips raw HTML first\n *\n * i18nKeys: MarkdownRenderer.aria.content, MarkdownRenderer.error.invalidProps,\n * MarkdownRenderer.error.tooLong\n */\nexport function MarkdownRenderer(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <MarkdownRendererInner {...props} />;\n } catch {\n const locale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <div role=\"alert\">{t(\"MarkdownRenderer.error.invalidProps\", locale)}</div>;\n }\n}\n"]}
@@ -90,6 +90,11 @@ declare const TokenDisplayOnceModalPropsSchema: z.ZodObject<{
90
90
  warningMessage: z.ZodString;
91
91
  copyLabel: z.ZodString;
92
92
  closeLabel: z.ZodString;
93
+ /** Non-secret metadata, shown in the view AND carried by the A-1 fallback. */
94
+ scope: z.ZodOptional<z.ZodString>;
95
+ expiresAt: z.ZodOptional<z.ZodString>;
96
+ /** Supplied by the issuer; NEVER derived from the secret. */
97
+ fingerprint: z.ZodOptional<z.ZodString>;
93
98
  locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
94
99
  }, "strip", z.ZodTypeAny, {
95
100
  title: string;
@@ -98,6 +103,9 @@ declare const TokenDisplayOnceModalPropsSchema: z.ZodObject<{
98
103
  warningMessage: string;
99
104
  copyLabel: string;
100
105
  closeLabel: string;
106
+ scope?: string | undefined;
107
+ expiresAt?: string | undefined;
108
+ fingerprint?: string | undefined;
101
109
  }, {
102
110
  title: string;
103
111
  token: string;
@@ -105,6 +113,9 @@ declare const TokenDisplayOnceModalPropsSchema: z.ZodObject<{
105
113
  copyLabel: string;
106
114
  closeLabel: string;
107
115
  locale?: "en" | "fr" | undefined;
116
+ scope?: string | undefined;
117
+ expiresAt?: string | undefined;
118
+ fingerprint?: string | undefined;
108
119
  }>;
109
120
  type TokenDisplayOnceModalProps = z.infer<typeof TokenDisplayOnceModalPropsSchema> & {
110
121
  onClose: () => void;
@@ -113,4 +124,313 @@ declare function validateTokenDisplayOnceModalProps(raw: unknown): z.infer<typeo
113
124
 
114
125
  declare function TokenDisplayOnceModal(raw: Omit<TokenDisplayOnceModalProps, "locale"> & Partial<Pick<TokenDisplayOnceModalProps, "locale">>): react_jsx_runtime.JSX.Element | null;
115
126
 
116
- export { Alert, type AlertProps, AlertPropsSchema, ConfirmDialog, type ConfirmDialogProps, ConfirmDialogPropsSchema, ConfirmDialog as ConfirmModal, type ConfirmDialogProps as ConfirmModalProps, TokenDisplayOnceModal, type TokenDisplayOnceModalProps, TokenDisplayOnceModalPropsSchema, validateAlertProps, validateConfirmDialogProps, validateTokenDisplayOnceModalProps };
127
+ declare const AmountSchema: z.ZodObject<{
128
+ /** Decimal STRING (never a float). */
129
+ value: z.ZodString;
130
+ symbol: z.ZodString;
131
+ }, "strip", z.ZodTypeAny, {
132
+ symbol: string;
133
+ value: string;
134
+ }, {
135
+ symbol: string;
136
+ value: string;
137
+ }>;
138
+ declare const QuoteSchema: z.ZodObject<{
139
+ sell: z.ZodObject<{
140
+ /** Decimal STRING (never a float). */
141
+ value: z.ZodString;
142
+ symbol: z.ZodString;
143
+ }, "strip", z.ZodTypeAny, {
144
+ symbol: string;
145
+ value: string;
146
+ }, {
147
+ symbol: string;
148
+ value: string;
149
+ }>;
150
+ buy: z.ZodObject<{
151
+ /** Decimal STRING (never a float). */
152
+ value: z.ZodString;
153
+ symbol: z.ZodString;
154
+ }, "strip", z.ZodTypeAny, {
155
+ symbol: string;
156
+ value: string;
157
+ }, {
158
+ symbol: string;
159
+ value: string;
160
+ }>;
161
+ minReceived: z.ZodOptional<z.ZodObject<{
162
+ /** Decimal STRING (never a float). */
163
+ value: z.ZodString;
164
+ symbol: z.ZodString;
165
+ }, "strip", z.ZodTypeAny, {
166
+ symbol: string;
167
+ value: string;
168
+ }, {
169
+ symbol: string;
170
+ value: string;
171
+ }>>;
172
+ route: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
173
+ /** Percent as a decimal string, e.g. "0.42". */
174
+ priceImpact: z.ZodOptional<z.ZodString>;
175
+ }, "strip", z.ZodTypeAny, {
176
+ sell: {
177
+ symbol: string;
178
+ value: string;
179
+ };
180
+ buy: {
181
+ symbol: string;
182
+ value: string;
183
+ };
184
+ minReceived?: {
185
+ symbol: string;
186
+ value: string;
187
+ } | undefined;
188
+ route?: string[] | undefined;
189
+ priceImpact?: string | undefined;
190
+ }, {
191
+ sell: {
192
+ symbol: string;
193
+ value: string;
194
+ };
195
+ buy: {
196
+ symbol: string;
197
+ value: string;
198
+ };
199
+ minReceived?: {
200
+ symbol: string;
201
+ value: string;
202
+ } | undefined;
203
+ route?: string[] | undefined;
204
+ priceImpact?: string | undefined;
205
+ }>;
206
+ type TransactionAmount = z.infer<typeof AmountSchema>;
207
+ type TransactionQuote = z.infer<typeof QuoteSchema>;
208
+ /**
209
+ * TransactionPreview (R11): a transaction the server PREPARED and never signs — shape follows
210
+ * fuse-mcp-server `getTradeQuote.ts` (expected output, route, price impact; read-only). There
211
+ * is deliberately no field for a signature, a signer, a raw transaction or an execute action
212
+ * (R12 refused): the only exit is an optional `handoff` link to the user's wallet. OpenAI's
213
+ * public directory prohibits executing crypto transfers, so the view stops at the preview.
214
+ * `{}` parses (empty state).
215
+ */
216
+ declare const TransactionPreviewPropsSchema: z.ZodObject<{
217
+ kind: z.ZodDefault<z.ZodEnum<["transfer", "swap"]>>;
218
+ network: z.ZodOptional<z.ZodString>;
219
+ testnet: z.ZodDefault<z.ZodBoolean>;
220
+ from: z.ZodOptional<z.ZodString>;
221
+ to: z.ZodOptional<z.ZodString>;
222
+ amount: z.ZodOptional<z.ZodObject<{
223
+ /** Decimal STRING (never a float). */
224
+ value: z.ZodString;
225
+ symbol: z.ZodString;
226
+ }, "strip", z.ZodTypeAny, {
227
+ symbol: string;
228
+ value: string;
229
+ }, {
230
+ symbol: string;
231
+ value: string;
232
+ }>>;
233
+ fee: z.ZodOptional<z.ZodObject<{
234
+ /** Decimal STRING (never a float). */
235
+ value: z.ZodString;
236
+ symbol: z.ZodString;
237
+ }, "strip", z.ZodTypeAny, {
238
+ symbol: string;
239
+ value: string;
240
+ }, {
241
+ symbol: string;
242
+ value: string;
243
+ }>>;
244
+ quote: z.ZodOptional<z.ZodObject<{
245
+ sell: z.ZodObject<{
246
+ /** Decimal STRING (never a float). */
247
+ value: z.ZodString;
248
+ symbol: z.ZodString;
249
+ }, "strip", z.ZodTypeAny, {
250
+ symbol: string;
251
+ value: string;
252
+ }, {
253
+ symbol: string;
254
+ value: string;
255
+ }>;
256
+ buy: z.ZodObject<{
257
+ /** Decimal STRING (never a float). */
258
+ value: z.ZodString;
259
+ symbol: z.ZodString;
260
+ }, "strip", z.ZodTypeAny, {
261
+ symbol: string;
262
+ value: string;
263
+ }, {
264
+ symbol: string;
265
+ value: string;
266
+ }>;
267
+ minReceived: z.ZodOptional<z.ZodObject<{
268
+ /** Decimal STRING (never a float). */
269
+ value: z.ZodString;
270
+ symbol: z.ZodString;
271
+ }, "strip", z.ZodTypeAny, {
272
+ symbol: string;
273
+ value: string;
274
+ }, {
275
+ symbol: string;
276
+ value: string;
277
+ }>>;
278
+ route: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
279
+ /** Percent as a decimal string, e.g. "0.42". */
280
+ priceImpact: z.ZodOptional<z.ZodString>;
281
+ }, "strip", z.ZodTypeAny, {
282
+ sell: {
283
+ symbol: string;
284
+ value: string;
285
+ };
286
+ buy: {
287
+ symbol: string;
288
+ value: string;
289
+ };
290
+ minReceived?: {
291
+ symbol: string;
292
+ value: string;
293
+ } | undefined;
294
+ route?: string[] | undefined;
295
+ priceImpact?: string | undefined;
296
+ }, {
297
+ sell: {
298
+ symbol: string;
299
+ value: string;
300
+ };
301
+ buy: {
302
+ symbol: string;
303
+ value: string;
304
+ };
305
+ minReceived?: {
306
+ symbol: string;
307
+ value: string;
308
+ } | undefined;
309
+ route?: string[] | undefined;
310
+ priceImpact?: string | undefined;
311
+ }>>;
312
+ simulation: z.ZodOptional<z.ZodObject<{
313
+ status: z.ZodEnum<["success", "failed", "unavailable"]>;
314
+ message: z.ZodOptional<z.ZodString>;
315
+ }, "strip", z.ZodTypeAny, {
316
+ status: "success" | "failed" | "unavailable";
317
+ message?: string | undefined;
318
+ }, {
319
+ status: "success" | "failed" | "unavailable";
320
+ message?: string | undefined;
321
+ }>>;
322
+ warnings: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
323
+ /** ISO 8601 expiry of the quote. */
324
+ expiresAt: z.ZodOptional<z.ZodString>;
325
+ /** Wallet link-out. Only http(s) urls are ever rendered. */
326
+ handoff: z.ZodOptional<z.ZodObject<{
327
+ url: z.ZodString;
328
+ }, "strip", z.ZodTypeAny, {
329
+ url: string;
330
+ }, {
331
+ url: string;
332
+ }>>;
333
+ timeZone: z.ZodOptional<z.ZodString>;
334
+ loading: z.ZodDefault<z.ZodBoolean>;
335
+ locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
336
+ }, "strip", z.ZodTypeAny, {
337
+ locale: "en" | "fr";
338
+ kind: "transfer" | "swap";
339
+ testnet: boolean;
340
+ warnings: string[];
341
+ loading: boolean;
342
+ expiresAt?: string | undefined;
343
+ amount?: {
344
+ symbol: string;
345
+ value: string;
346
+ } | undefined;
347
+ timeZone?: string | undefined;
348
+ network?: string | undefined;
349
+ from?: string | undefined;
350
+ to?: string | undefined;
351
+ fee?: {
352
+ symbol: string;
353
+ value: string;
354
+ } | undefined;
355
+ quote?: {
356
+ sell: {
357
+ symbol: string;
358
+ value: string;
359
+ };
360
+ buy: {
361
+ symbol: string;
362
+ value: string;
363
+ };
364
+ minReceived?: {
365
+ symbol: string;
366
+ value: string;
367
+ } | undefined;
368
+ route?: string[] | undefined;
369
+ priceImpact?: string | undefined;
370
+ } | undefined;
371
+ simulation?: {
372
+ status: "success" | "failed" | "unavailable";
373
+ message?: string | undefined;
374
+ } | undefined;
375
+ handoff?: {
376
+ url: string;
377
+ } | undefined;
378
+ }, {
379
+ locale?: "en" | "fr" | undefined;
380
+ expiresAt?: string | undefined;
381
+ amount?: {
382
+ symbol: string;
383
+ value: string;
384
+ } | undefined;
385
+ timeZone?: string | undefined;
386
+ kind?: "transfer" | "swap" | undefined;
387
+ network?: string | undefined;
388
+ testnet?: boolean | undefined;
389
+ from?: string | undefined;
390
+ to?: string | undefined;
391
+ fee?: {
392
+ symbol: string;
393
+ value: string;
394
+ } | undefined;
395
+ quote?: {
396
+ sell: {
397
+ symbol: string;
398
+ value: string;
399
+ };
400
+ buy: {
401
+ symbol: string;
402
+ value: string;
403
+ };
404
+ minReceived?: {
405
+ symbol: string;
406
+ value: string;
407
+ } | undefined;
408
+ route?: string[] | undefined;
409
+ priceImpact?: string | undefined;
410
+ } | undefined;
411
+ simulation?: {
412
+ status: "success" | "failed" | "unavailable";
413
+ message?: string | undefined;
414
+ } | undefined;
415
+ warnings?: string[] | undefined;
416
+ handoff?: {
417
+ url: string;
418
+ } | undefined;
419
+ loading?: boolean | undefined;
420
+ }>;
421
+ type TransactionPreviewProps = z.input<typeof TransactionPreviewPropsSchema>;
422
+ type TransactionPreviewPropsOutput = z.output<typeof TransactionPreviewPropsSchema>;
423
+ declare function validateTransactionPreviewProps(raw: unknown): TransactionPreviewPropsOutput;
424
+
425
+ type TransactionPreviewViewProps = TransactionPreviewProps & {
426
+ /** Hand the user to their wallet (host `ui/open-link`, see `openLink` in ./host). */
427
+ onHandoff?: (url: string) => void;
428
+ };
429
+ /**
430
+ * TransactionPreview — a PREPARED transaction, never signed. Full addresses are shown (a user
431
+ * verifies the whole address). The view has no sign, send, approve or confirm control — the only
432
+ * action is an optional hand-off to the user's wallet, at most one (Claude allows two actions).
433
+ */
434
+ declare function TransactionPreview(raw?: TransactionPreviewViewProps): react_jsx_runtime.JSX.Element;
435
+
436
+ export { Alert, type AlertProps, AlertPropsSchema, ConfirmDialog, type ConfirmDialogProps, ConfirmDialogPropsSchema, ConfirmDialog as ConfirmModal, type ConfirmDialogProps as ConfirmModalProps, TokenDisplayOnceModal, type TokenDisplayOnceModalProps, TokenDisplayOnceModalPropsSchema, type TransactionAmount, TransactionPreview, type TransactionPreviewProps, type TransactionPreviewPropsOutput, TransactionPreviewPropsSchema, type TransactionPreviewViewProps, type TransactionQuote, validateAlertProps, validateConfirmDialogProps, validateTokenDisplayOnceModalProps, validateTransactionPreviewProps };