@vantageos/mosaic 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -15
- package/README.md +114 -5
- package/dist/PipelineBoard-FucyGArR.d.cts +759 -0
- package/dist/PipelineBoard-FucyGArR.d.ts +759 -0
- package/dist/PipelineBoard.markdown-DIcvrS-2.d.cts +16 -0
- package/dist/PipelineBoard.markdown-DIcvrS-2.d.ts +16 -0
- package/dist/{StatusBadge.schema-1tOjB4Ir.d.cts → StatusBadge.schema-BEjSH2_4.d.cts} +2 -2
- package/dist/{StatusBadge.schema-1tOjB4Ir.d.ts → StatusBadge.schema-BEjSH2_4.d.ts} +2 -2
- package/dist/{Tabs.schema-BzcEyeq8.d.cts → Tabs.schema-Dqr6vwV3.d.cts} +2 -2
- package/dist/{Tabs.schema-BzcEyeq8.d.ts → Tabs.schema-Dqr6vwV3.d.ts} +2 -2
- package/dist/Timeline-Coo_3tA_.d.cts +114 -0
- package/dist/Timeline-Coo_3tA_.d.ts +114 -0
- package/dist/Timeline.markdown-C6UPDv1H.d.cts +4 -0
- package/dist/Timeline.markdown-C6UPDv1H.d.ts +4 -0
- package/dist/TransactionPreview-BzWDn8kE.d.cts +391 -0
- package/dist/TransactionPreview-BzWDn8kE.d.ts +391 -0
- package/dist/TransactionPreview.markdown-Dpb0VYgN.d.cts +7 -0
- package/dist/TransactionPreview.markdown-Dpb0VYgN.d.ts +7 -0
- package/dist/artifacts.cjs +186 -2
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +186 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/confirmation.cjs +724 -2
- package/dist/confirmation.cjs.map +1 -1
- package/dist/confirmation.d.cts +2 -1
- package/dist/confirmation.d.ts +2 -1
- package/dist/confirmation.js +722 -4
- package/dist/confirmation.js.map +1 -1
- package/dist/display.cjs +1551 -203
- package/dist/display.cjs.map +1 -1
- package/dist/display.d.cts +6 -229
- package/dist/display.d.ts +6 -229
- package/dist/display.js +1535 -206
- package/dist/display.js.map +1 -1
- package/dist/forms.cjs +139 -46
- package/dist/forms.cjs.map +1 -1
- package/dist/forms.d.cts +2 -2
- package/dist/forms.d.ts +2 -2
- package/dist/forms.js +139 -46
- package/dist/forms.js.map +1 -1
- package/dist/host.cjs +822 -0
- package/dist/host.cjs.map +1 -0
- package/dist/host.d.cts +287 -0
- package/dist/host.d.ts +287 -0
- package/dist/host.js +794 -0
- package/dist/host.js.map +1 -0
- package/dist/{index-CwXVgtGb.d.cts → index-BadRcCbm.d.cts} +28 -11
- package/dist/{index-CwXVgtGb.d.ts → index-BadRcCbm.d.ts} +28 -11
- package/dist/index.cjs +2198 -247
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -8
- package/dist/index.d.ts +42 -8
- package/dist/index.js +2163 -251
- package/dist/index.js.map +1 -1
- package/dist/input.d.cts +2 -2
- package/dist/input.d.ts +2 -2
- package/dist/media.cjs +186 -2
- package/dist/media.cjs.map +1 -1
- package/dist/media.d.cts +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/media.js +186 -2
- package/dist/media.js.map +1 -1
- package/dist/preact/artifacts.js +186 -2
- package/dist/preact/artifacts.js.map +1 -1
- package/dist/preact/confirmation.d.ts +321 -1
- package/dist/preact/confirmation.js +625 -4
- package/dist/preact/confirmation.js.map +1 -1
- package/dist/preact/display.d.ts +544 -47
- package/dist/preact/display.js +1190 -126
- package/dist/preact/display.js.map +1 -1
- package/dist/preact/forms.d.ts +32 -15
- package/dist/preact/forms.js +139 -46
- package/dist/preact/forms.js.map +1 -1
- package/dist/preact/host.d.ts +307 -0
- package/dist/preact/host.js +875 -0
- package/dist/preact/host.js.map +1 -0
- package/dist/preact/media.d.ts +37 -1
- package/dist/preact/media.js +423 -0
- package/dist/preact/media.js.map +1 -1
- package/dist/preact/progress.d.ts +92 -1
- package/dist/preact/progress.js +465 -3
- package/dist/preact/progress.js.map +1 -1
- package/dist/progress.cjs +521 -2
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.d.cts +2 -1
- package/dist/progress.d.ts +2 -1
- package/dist/progress.js +518 -3
- package/dist/progress.js.map +1 -1
- package/dist/react/artifacts.cjs +186 -2
- package/dist/react/artifacts.cjs.map +1 -1
- package/dist/react/artifacts.js +186 -2
- package/dist/react/artifacts.js.map +1 -1
- package/dist/react/confirmation.cjs +626 -2
- package/dist/react/confirmation.cjs.map +1 -1
- package/dist/react/confirmation.d.cts +3 -3
- package/dist/react/confirmation.d.ts +3 -3
- package/dist/react/confirmation.js +625 -4
- package/dist/react/confirmation.js.map +1 -1
- package/dist/react/display.cjs +1076 -123
- package/dist/react/display.cjs.map +1 -1
- package/dist/react/display.d.cts +13 -27
- package/dist/react/display.d.ts +13 -27
- package/dist/react/display.js +1064 -126
- package/dist/react/display.js.map +1 -1
- package/dist/react/forms.cjs +139 -46
- package/dist/react/forms.cjs.map +1 -1
- package/dist/react/forms.d.cts +1 -1
- package/dist/react/forms.d.ts +1 -1
- package/dist/react/forms.js +139 -46
- package/dist/react/forms.js.map +1 -1
- package/dist/react/host.cjs +910 -0
- package/dist/react/host.cjs.map +1 -0
- package/dist/react/host.d.cts +24 -0
- package/dist/react/host.d.ts +24 -0
- package/dist/react/host.js +875 -0
- package/dist/react/host.js.map +1 -0
- package/dist/react/input.d.cts +1 -1
- package/dist/react/input.d.ts +1 -1
- package/dist/react/media.cjs +426 -0
- package/dist/react/media.cjs.map +1 -1
- package/dist/react/media.d.cts +19 -1
- package/dist/react/media.d.ts +19 -1
- package/dist/react/media.js +423 -0
- package/dist/react/media.js.map +1 -1
- package/dist/react/progress.cjs +467 -2
- package/dist/react/progress.cjs.map +1 -1
- package/dist/react/progress.d.cts +1 -1
- package/dist/react/progress.d.ts +1 -1
- package/dist/react/progress.js +465 -3
- package/dist/react/progress.js.map +1 -1
- package/dist/server/resource.cjs +151 -0
- package/dist/server/resource.cjs.map +1 -0
- package/dist/server/resource.d.cts +90 -0
- package/dist/server/resource.d.ts +90 -0
- package/dist/server/resource.js +147 -0
- package/dist/server/resource.js.map +1 -0
- package/dist/server.cjs +1100 -25
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +84 -5
- package/dist/server.d.ts +84 -5
- package/dist/server.js +1087 -27
- package/dist/server.js.map +1 -1
- package/package.json +250 -233
- package/registry.yaml +44 -2
- package/dist/Alert.schema-LPJE5gFP.d.cts +0 -71
- package/dist/Alert.schema-LPJE5gFP.d.ts +0 -71
- package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +0 -22
- package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +0 -22
- package/dist/{ConfirmDialog-B3CQQGmJ.d.cts → ConfirmDialog-BCtOcmHe.d.cts} +1 -1
- package/dist/{ConfirmDialog-B3CQQGmJ.d.ts → ConfirmDialog-BCtOcmHe.d.ts} +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/strings.ts","../../src/host/model-context.ts","../../src/host/safe-area.ts","../../src/host/style-variables.ts","../../src/components/shared/url.ts","../../src/host/messaging.ts","../../src/host/host-context.ts","../../src/runtimes/react/host/index.ts"],"names":[],"mappings":"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","file":"host.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","/**\n * Typed `ui/update-model-context` content blocks (H03) and the `openai/modelContext` reader.\n *\n * Spec: openai/mcp-extensions docs/spec.md, \"ui/update-model-context Extensions\"\n * (local copy openai-mcp-ext-spec.md):\n * l.1022 `_meta[\"openai/title\"]`: non-empty string on `text` and `image` blocks.\n * l.1042 `_meta[\"openai/thumbnail\"]`: an `MCP.Icon` on `text` blocks (not yet on iOS, l.1046).\n * l.1070 `annotations.audience: [\"assistant\"]` hides a block from the user (the model still\n * receives it).\n * l.1072 serialized `structuredContent` in a text block SHOULD set audience `[\"assistant\"]`.\n * l.945 `ui/update-model-context` is idempotent: each call replaces the app's previous context,\n * so an empty `content` array is how a cleared selection is expressed.\n * l.962-975 `hostContext[\"openai/modelContext\"]` = `{ updateId, content?, structuredContent? }`\n * or `null` once the user removed it.\n * Everything here is additive: a host that ignores `_meta` loses only the label.\n */\nimport { type MosaicLocale, t } from \"../i18n/strings.js\";\nimport type { ModelContextParams } from \"./host-context.js\";\n\n/** `MCP.Icon` (the fields a thumbnail needs). */\nexport interface IconLike {\n src: string;\n mimeType?: string;\n sizes?: string[];\n}\n\nexport type ModelContextBlock = { type: string; [key: string]: unknown };\n\nexport interface TextBlockOptions {\n /** `_meta[\"openai/title\"]`: a human-readable label for the attachment. */\n title?: string;\n /** `_meta[\"openai/thumbnail\"]`. */\n thumbnail?: IconLike;\n /** `annotations.audience: [\"assistant\"]`: context for the model, no composer attachment. */\n background?: boolean;\n}\n\nexport type ModelContextHostState = {\n updateId: string;\n content?: ModelContextBlock[];\n structuredContent?: Record<string, unknown>;\n} | null;\n\nexport function textBlock(text: string, options: TextBlockOptions = {}): ModelContextBlock {\n const { title, thumbnail, background } = options;\n if (title !== undefined && title.trim() === \"\") {\n throw new Error('textBlock: \"openai/title\" must be a non-empty string');\n }\n if (thumbnail !== undefined && !thumbnail.src) {\n throw new Error('textBlock: \"openai/thumbnail\" needs a src (MCP.Icon)');\n }\n const meta: Record<string, unknown> = {};\n if (title !== undefined) meta[\"openai/title\"] = title;\n if (thumbnail !== undefined) meta[\"openai/thumbnail\"] = thumbnail;\n return {\n type: \"text\",\n text,\n ...(Object.keys(meta).length > 0 ? { _meta: meta } : {}),\n ...(background ? { annotations: { audience: [\"assistant\"] } } : {}),\n };\n}\n\n/** Backward-compatible serialization of `structuredContent`, hidden from the user (spec l.1072). */\nexport function structuredContentBlock(value: Record<string, unknown>): ModelContextBlock {\n return textBlock(JSON.stringify(value), { background: true });\n}\n\nexport function buildModelContext(input: {\n blocks?: ModelContextBlock[];\n structuredContent?: Record<string, unknown>;\n}): ModelContextParams {\n return {\n ...(input.blocks !== undefined ? { content: input.blocks } : {}),\n ...(input.structuredContent !== undefined\n ? { structuredContent: input.structuredContent }\n : {}),\n };\n}\n\n/**\n * Reads `hostContext[\"openai/modelContext\"]`. `undefined`: key absent or malformed; `null`:\n * the host reports the context cleared.\n */\nexport function readModelContextState(raw: unknown): ModelContextHostState | undefined {\n if (raw === null || typeof raw !== \"object\") return undefined;\n const v = (raw as Record<string, unknown>)[\"openai/modelContext\"];\n if (v === null) return null;\n if (typeof v !== \"object\") return undefined;\n const state = v as Record<string, unknown>;\n if (typeof state.updateId !== \"string\" || state.updateId === \"\") return undefined;\n return {\n updateId: state.updateId,\n ...(Array.isArray(state.content) ? { content: state.content as ModelContextBlock[] } : {}),\n ...(state.structuredContent !== null && typeof state.structuredContent === \"object\"\n ? { structuredContent: state.structuredContent as Record<string, unknown> }\n : {}),\n };\n}\n\n/**\n * What the model should know about a table selection: one titled block listing each selected row\n * as `header: value` pairs. An empty selection yields an empty `content`, which replaces (clears)\n * the previous context because the call is idempotent per app instance.\n */\nexport function selectionModelContext(\n rows: Array<Record<string, unknown>>,\n columns: Array<{ key: string; header: string }>,\n locale: MosaicLocale = \"en\",\n): ModelContextParams {\n if (rows.length === 0) return { content: [] };\n const title =\n rows.length === 1\n ? t(\"ModelContext.selection.one\", locale)\n : t(\"ModelContext.selection.many\", locale).replace(\"{n}\", String(rows.length));\n const text = rows\n .map((row) => columns.map((c) => `${c.header}: ${String(row[c.key] ?? \"\")}`).join(\", \"))\n .join(\"\\n\");\n return { content: [textBlock(text, { title })] };\n}\n","/**\n * Safe-area insets (H01).\n *\n * Spec: MCP Apps 2026-01-26 (ext-apps-spec.mdx l.582-587) `HostContext.safeAreaInsets`\n * = `{ top, right, bottom, left }` in pixels. Claude design guidelines: apply them as padding on\n * the root container (or as `scroll-padding` on scroll-snap containers). Pure and DOM-free\n * except `applySafeAreaInsets`, which takes its target element explicitly.\n */\nexport interface SafeAreaInsets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nconst SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n\n/** Reads `hostContext.safeAreaInsets`; `undefined` unless all four sides are finite px >= 0. */\nexport function readSafeAreaInsets(raw: unknown): SafeAreaInsets | undefined {\n if (raw === null || typeof raw !== \"object\") return undefined;\n const v = (raw as Record<string, unknown>).safeAreaInsets;\n if (v === null || typeof v !== \"object\") return undefined;\n const rec = v as Record<string, unknown>;\n const out = {} as SafeAreaInsets;\n for (const side of SIDES) {\n const n = rec[side];\n if (typeof n !== \"number\" || !Number.isFinite(n) || n < 0) return undefined;\n out[side] = n;\n }\n return out;\n}\n\n/** CSS padding shorthand (top right bottom left). */\nexport function safeAreaPadding(insets: SafeAreaInsets): string {\n return SIDES.map((s) => `${insets[s]}px`).join(\" \");\n}\n\n/**\n * Applies the insets as padding on `root` and exposes them as `--mosaic-safe-area-<side>` for\n * scroll-padding. `undefined` clears both (the host reported none).\n */\nexport function applySafeAreaInsets(insets: SafeAreaInsets | undefined, root: HTMLElement): void {\n if (!insets) {\n root.style.padding = \"\";\n for (const s of SIDES) root.style.removeProperty(`--mosaic-safe-area-${s}`);\n return;\n }\n root.style.padding = safeAreaPadding(insets);\n for (const s of SIDES) root.style.setProperty(`--mosaic-safe-area-${s}`, `${insets[s]}px`);\n}\n","/**\n * Host style variables and fonts (H02) — framework-agnostic, structural (no ext-apps import).\n *\n * Spec: MCP Apps 2026-01-26 (ext-apps-spec.mdx):\n * l.547-555 `HostContext.styles = { variables?: Record<McpUiStyleVariableKey, string|undefined>,\n * css?: { fonts?: string } }`\n * l.799-888 `McpUiStyleVariableKey`, the 76 standardized keys below (extracted from the spec\n * block by command, not retyped)\n * l.895-905 \"Views should set default fallback values ... to account for hosts who don't pass\n * some or all style variables\": here the mosaic-tokens defaults are the fallback,\n * because only the variables the host passes are written.\n * Claude transparent-theming page: fonts need `https://assets.claude.ai` in `resourceDomains`;\n * html and body backgrounds are set to `transparent`.\n * Composes with ext-apps `applyHostStyleVariables` / `applyDocumentTheme` structurally; either can\n * be used instead, nothing here imports them.\n */\nexport const MCP_STYLE_VARIABLE_KEYS = [\n \"--color-background-primary\",\n \"--color-background-secondary\",\n \"--color-background-tertiary\",\n \"--color-background-inverse\",\n \"--color-background-ghost\",\n \"--color-background-info\",\n \"--color-background-danger\",\n \"--color-background-success\",\n \"--color-background-warning\",\n \"--color-background-disabled\",\n \"--color-text-primary\",\n \"--color-text-secondary\",\n \"--color-text-tertiary\",\n \"--color-text-inverse\",\n \"--color-text-info\",\n \"--color-text-danger\",\n \"--color-text-success\",\n \"--color-text-warning\",\n \"--color-text-disabled\",\n \"--color-text-ghost\",\n \"--color-border-primary\",\n \"--color-border-secondary\",\n \"--color-border-tertiary\",\n \"--color-border-inverse\",\n \"--color-border-ghost\",\n \"--color-border-info\",\n \"--color-border-danger\",\n \"--color-border-success\",\n \"--color-border-warning\",\n \"--color-border-disabled\",\n \"--color-ring-primary\",\n \"--color-ring-secondary\",\n \"--color-ring-inverse\",\n \"--color-ring-info\",\n \"--color-ring-danger\",\n \"--color-ring-success\",\n \"--color-ring-warning\",\n \"--font-sans\",\n \"--font-mono\",\n \"--font-weight-normal\",\n \"--font-weight-medium\",\n \"--font-weight-semibold\",\n \"--font-weight-bold\",\n \"--font-text-xs-size\",\n \"--font-text-sm-size\",\n \"--font-text-md-size\",\n \"--font-text-lg-size\",\n \"--font-heading-xs-size\",\n \"--font-heading-sm-size\",\n \"--font-heading-md-size\",\n \"--font-heading-lg-size\",\n \"--font-heading-xl-size\",\n \"--font-heading-2xl-size\",\n \"--font-heading-3xl-size\",\n \"--font-text-xs-line-height\",\n \"--font-text-sm-line-height\",\n \"--font-text-md-line-height\",\n \"--font-text-lg-line-height\",\n \"--font-heading-xs-line-height\",\n \"--font-heading-sm-line-height\",\n \"--font-heading-md-line-height\",\n \"--font-heading-lg-line-height\",\n \"--font-heading-xl-line-height\",\n \"--font-heading-2xl-line-height\",\n \"--font-heading-3xl-line-height\",\n \"--border-radius-xs\",\n \"--border-radius-sm\",\n \"--border-radius-md\",\n \"--border-radius-lg\",\n \"--border-radius-xl\",\n \"--border-radius-full\",\n \"--border-width-regular\",\n \"--shadow-hairline\",\n \"--shadow-sm\",\n \"--shadow-md\",\n \"--shadow-lg\",\n] as const;\nexport type McpStyleVariableKey = (typeof MCP_STYLE_VARIABLE_KEYS)[number];\nexport interface HostStyles {\n variables: Partial<Record<McpStyleVariableKey, string>>;\n fonts: string | undefined;\n}\n\n/**\n * Host variable -> mosaic-tokens custom properties it drives. Declared mapping (a design\n * decision, not a spec fact); `style-variables.test.ts` asserts every target exists in\n * `mosaic-tokens/src/tokens.css`.\n */\nexport const HOST_TO_MOSAIC_TOKENS: Partial<Record<McpStyleVariableKey, readonly string[]>> = {\n \"--color-background-primary\": [\n \"--mosaic-color-background\",\n \"--mosaic-color-card\",\n \"--mosaic-color-popover\",\n ],\n \"--color-background-secondary\": [\n \"--mosaic-color-muted\",\n \"--mosaic-color-secondary\",\n \"--mosaic-color-accent\",\n ],\n \"--color-text-primary\": [\n \"--mosaic-color-foreground\",\n \"--mosaic-color-card-foreground\",\n \"--mosaic-color-popover-foreground\",\n \"--mosaic-color-secondary-foreground\",\n \"--mosaic-color-accent-foreground\",\n ],\n \"--color-text-secondary\": [\"--mosaic-color-muted-foreground\"],\n \"--color-border-primary\": [\"--mosaic-color-border\", \"--mosaic-color-input\"],\n \"--color-ring-primary\": [\"--mosaic-color-ring\"],\n \"--color-background-danger\": [\"--mosaic-color-danger-50\"],\n \"--color-text-danger\": [\"--mosaic-color-danger-700\"],\n \"--color-border-danger\": [\"--mosaic-color-danger-500\"],\n \"--color-background-success\": [\"--mosaic-color-success-50\"],\n \"--color-text-success\": [\"--mosaic-color-success-700\"],\n \"--color-border-success\": [\"--mosaic-color-success-500\"],\n \"--color-background-warning\": [\"--mosaic-color-warning-50\"],\n \"--color-text-warning\": [\"--mosaic-color-warning-700\"],\n \"--color-border-warning\": [\"--mosaic-color-warning-500\"],\n \"--color-background-info\": [\"--mosaic-color-info-50\"],\n \"--color-text-info\": [\"--mosaic-color-info-700\"],\n \"--color-border-info\": [\"--mosaic-color-info-500\"],\n \"--font-sans\": [\"--mosaic-font-sans\"],\n \"--font-mono\": [\"--mosaic-font-mono\"],\n \"--border-radius-xs\": [\"--mosaic-radius-xs\"],\n \"--border-radius-sm\": [\"--mosaic-radius-sm\"],\n \"--border-radius-md\": [\"--mosaic-radius-md\"],\n \"--border-radius-lg\": [\"--mosaic-radius-lg\"],\n \"--border-radius-xl\": [\"--mosaic-radius-xl\"],\n \"--border-radius-full\": [\"--mosaic-radius-full\"],\n};\n\n/** Origin Claude serves host fonts from; add it to `resourceDomains` to load `styles.css.fonts`. */\nexport const CLAUDE_HOST_FONT_ORIGIN = \"https://assets.claude.ai\";\n\nconst KNOWN = new Set<string>(MCP_STYLE_VARIABLE_KEYS);\n\n/** Reads `hostContext.styles`; unknown keys and non-string values are dropped. */\nexport function readHostStyles(raw: unknown): HostStyles | undefined {\n if (raw === null || typeof raw !== \"object\") return undefined;\n const styles = (raw as Record<string, unknown>).styles;\n if (styles === null || typeof styles !== \"object\") return undefined;\n const s = styles as { variables?: unknown; css?: unknown };\n const variables: HostStyles[\"variables\"] = {};\n if (s.variables !== null && typeof s.variables === \"object\") {\n for (const [k, v] of Object.entries(s.variables as Record<string, unknown>)) {\n if (KNOWN.has(k) && typeof v === \"string\") variables[k as McpStyleVariableKey] = v;\n }\n }\n const css = s.css !== null && typeof s.css === \"object\" ? (s.css as { fonts?: unknown }) : {};\n return { variables, fonts: typeof css.fonts === \"string\" ? css.fonts : undefined };\n}\n\nconst applied = new WeakMap<HTMLElement, string[]>();\n\n/**\n * Writes the host variables on `root`, and the mosaic-tokens custom properties they drive.\n * Variables a previous call set and this one no longer carries are cleared; `undefined` clears\n * all. Variables the host never passed are not written, so mosaic-tokens defaults remain.\n */\nexport function applyHostStyleVariables(styles: HostStyles | undefined, root: HTMLElement): void {\n for (const name of applied.get(root) ?? []) root.style.removeProperty(name);\n const written: string[] = [];\n for (const [host, value] of Object.entries(styles?.variables ?? {})) {\n root.style.setProperty(host, value);\n written.push(host);\n for (const target of HOST_TO_MOSAIC_TOKENS[host as McpStyleVariableKey] ?? []) {\n root.style.setProperty(target, value);\n written.push(target);\n }\n }\n applied.set(root, written);\n}\n\nconst FONT_ATTR = \"data-mosaic-host-fonts\";\n\n/** Injects `styles.css.fonts` as one `<style>` in `<head>`; replaced on change, removed when absent. */\nexport function applyHostFonts(css: string | undefined, doc: Document): void {\n const existing = doc.head.querySelector(`style[${FONT_ATTR}]`);\n if (css === undefined) {\n existing?.remove();\n return;\n }\n const el = existing ?? doc.head.appendChild(doc.createElement(\"style\"));\n el.setAttribute(FONT_ATTR, \"\");\n el.textContent = css;\n}\n\n/** Claude transparent theming: html and body backgrounds are explicitly `transparent`. */\nexport function applyTransparentBackground(doc: Document): void {\n doc.documentElement.style.background = \"transparent\";\n doc.body.style.background = \"transparent\";\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","/**\n * `ui/message` (H04) and `ui/open-link` (H18) helpers over the structural ext-apps `App`.\n *\n * Spec: MCP Apps 2026-01-26 (ext-apps-spec.mdx)\n * l.965-995 `ui/open-link`: params `{ url: string }`, empty result, error -32000 with\n * \"Link opening denied by user\" | \"Invalid URL\" | \"Policy violation\".\n * l.998-1030 `ui/message`: params `{ role: \"user\", content }`, error -32000 with\n * \"Message sending denied\" | \"Invalid message format\".\n * DECLARED DIVERGENCE: the spec text shows `content` as one block; ext-apps 1.7.3\n * (`McpUiMessageRequest`, spec.types.d.ts) and the OpenAI extension (`content:\n * MCP.ContentBlock[]`, openai-mcp-ext-spec.md l.1153-1160) both use an ARRAY, so an array is sent.\n * OpenAI extension (openai-mcp-ext-spec.md l.1100-1235):\n * capability `hostCapabilities.experimental[\"openai/message\"]` (l.1106);\n * `params._meta[\"openai/message\"] = { target?: \"active\" | \"new\", send?: boolean }` (l.1153-1170);\n * defaults `{ target: \"active\", send: true }` (l.1147); on iOS and Android only the defaults are\n * supported (l.1148). `hostContext.platform: \"web\" | \"desktop\" | \"mobile\"` is MCP Apps spec l.573.\n * A non-default option the host cannot honour is REFUSED, never silently dropped: dropping\n * `send: false` would send the message the caller meant to leave as a draft.\n */\nimport { normalizeHttpUrl } from \"../components/shared/url.js\";\nimport type { HostAppLike } from \"./host-context.js\";\n\n/** Failure of a host request (`ui/message`, `ui/open-link`): carries the method and the reason. */\nexport class HostRequestError extends Error {\n readonly method: string;\n readonly reason: string;\n constructor(method: string, reason: string) {\n super(`${method}: ${reason}`);\n this.name = \"HostRequestError\";\n this.method = method;\n this.reason = reason;\n }\n}\n\nexport interface SendMessageOptions {\n target?: \"active\" | \"new\";\n send?: boolean;\n}\n\nexport type MessagingAppLike = Pick<\n HostAppLike,\n \"getHostContext\" | \"getHostCapabilities\" | \"sendMessage\" | \"openLink\"\n>;\n\nfunction reasonOf(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n\n/** Sends `text` as a user message. Options need `openai/message` and a non-mobile platform. */\nexport async function sendMessage(\n app: MessagingAppLike,\n text: string,\n options?: SendMessageOptions,\n): Promise<void> {\n const method = \"ui/message\";\n if (typeof app.sendMessage !== \"function\") {\n throw new HostRequestError(method, \"the host app exposes no sendMessage\");\n }\n if (text.trim() === \"\") throw new HostRequestError(method, \"empty message\");\n const params: {\n role: \"user\";\n content: Array<{ type: \"text\"; text: string }>;\n _meta?: { \"openai/message\": SendMessageOptions };\n } = { role: \"user\", content: [{ type: \"text\", text }] };\n\n const isDefault =\n options === undefined ||\n ((options.target === undefined || options.target === \"active\") &&\n (options.send === undefined || options.send === true));\n if (!isDefault) {\n const experimental = app.getHostCapabilities?.()?.experimental;\n if (experimental === undefined || !(\"openai/message\" in experimental)) {\n throw new HostRequestError(\n method,\n 'the host does not advertise \"openai/message\": target/send options are unsupported',\n );\n }\n if (app.getHostContext()?.platform === \"mobile\") {\n throw new HostRequestError(\n method,\n \"on mobile only { target: active, send: true } is supported\",\n );\n }\n params._meta = { \"openai/message\": { ...options } };\n }\n\n let result: { isError?: boolean };\n try {\n result = await app.sendMessage(params);\n } catch (err) {\n throw new HostRequestError(method, reasonOf(err));\n }\n if (result?.isError) throw new HostRequestError(method, \"the host rejected the message\");\n}\n\n/** Asks the host to open an http(s) URL. A denial is thrown with the host's own reason. */\nexport async function openLink(app: MessagingAppLike, url: string): Promise<void> {\n const method = \"ui/open-link\";\n if (typeof app.openLink !== \"function\") {\n throw new HostRequestError(method, \"the host app exposes no openLink\");\n }\n // Hand the host the PARSED href: a raw string may embed newlines or spaces the parser normalises.\n const href = normalizeHttpUrl(url);\n if (!href) throw new HostRequestError(method, \"Invalid URL\");\n let result: { isError?: boolean };\n try {\n result = await app.openLink({ url: href });\n } catch (err) {\n throw new HostRequestError(method, reasonOf(err));\n }\n if (result?.isError) throw new HostRequestError(method, \"Link opening denied\");\n}\n","/**\n * Host-context layer — framework-agnostic core.\n *\n * Reads the MCP Apps host context (spec 2026-01-26, `ui/notifications/host-context-changed`)\n * through the `@modelcontextprotocol/ext-apps` `App` API, and layers the OpenAI Apps SDK\n * additions on top, strictly additive: a view works with no `openai/*` key at all.\n *\n * The `App` is typed STRUCTURALLY (`HostAppLike`): this module imports nothing at runtime, so\n * mosaic takes no dependency on ext-apps and any `App` instance satisfies the shape. No DOM\n * access happens at import time; `applyMosaicTheme` takes the target element explicitly.\n */\n\nimport { type ModelContextHostState, readModelContextState } from \"./model-context.js\";\n/** Display modes the MCP Apps spec defines. */\nimport { type SafeAreaInsets, readSafeAreaInsets } from \"./safe-area.js\";\nimport { type HostStyles, readHostStyles } from \"./style-variables.js\";\n\nexport * from \"./safe-area.js\";\nexport * from \"./style-variables.js\";\nexport * from \"./messaging.js\";\nexport * from \"./model-context.js\";\n\nexport type HostDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n/** Display modes a mosaic view may request. `pip` is typed out: it is never requested. */\nexport type RequestableDisplayMode = \"inline\" | \"fullscreen\";\n/** The two themes mosaic-tokens styles (`[data-theme=\"dark\"]` overrides the light `:root`). */\nexport type MosaicTheme = \"light\" | \"dark\";\n\nexport type HostContainerDimensions = {\n height?: number;\n maxHeight?: number;\n width?: number;\n maxWidth?: number;\n};\n\n/** Raw host context: the spec's open `[key: string]: unknown` record. */\nexport type RawHostContext = Record<string, unknown>;\n\nexport interface MosaicHostContext {\n theme: MosaicTheme;\n displayMode: HostDisplayMode;\n availableDisplayModes: HostDisplayMode[];\n locale: string | undefined;\n containerDimensions: HostContainerDimensions | undefined;\n /**\n * `hostContext[\"openai/deepLink\"]` when the host provides it: `{ url }`, an app-relative URL\n * (openai/mcp-extensions docs/spec.md l.149-210, `DeepLinkHostState`).\n */\n deepLink: { url: string } | undefined;\n /** `hostContext.safeAreaInsets` (MCP Apps spec l.582-587), pixels; undefined when absent. */\n safeAreaInsets: SafeAreaInsets | undefined;\n /** `hostContext.styles` (MCP Apps spec l.547-555); undefined when the host passes none. */\n styles: HostStyles | undefined;\n /** `hostContext[\"openai/modelContext\"]`: the attached context; null = cleared, undefined = absent. */\n modelContext: ModelContextHostState | undefined;\n isChatGpt: boolean;\n raw: RawHostContext;\n}\n\nexport interface ModelContextParams {\n content?: Array<{ type: string; [key: string]: unknown }>;\n structuredContent?: Record<string, unknown>;\n}\n\nexport type HostCapabilitiesLike = { experimental?: Record<string, unknown> };\n\n/** The slice of the ext-apps `App` this layer uses. */\nexport interface HostAppLike {\n getHostContext(): RawHostContext | undefined;\n requestDisplayMode(params: { mode: HostDisplayMode }): Promise<{ mode: HostDisplayMode }>;\n updateModelContext(params: ModelContextParams): Promise<unknown>;\n getHostCapabilities?(): HostCapabilitiesLike | undefined;\n /** ext-apps `App.sendMessage` (`ui/message`, spec l.998-1030). */\n sendMessage?(params: {\n role: \"user\";\n content: Array<{ type: string; [key: string]: unknown }>;\n _meta?: Record<string, unknown>;\n }): Promise<{ isError?: boolean }>;\n /** ext-apps `App.openLink` (`ui/open-link`, spec l.965-995). */\n openLink?(params: { url: string }): Promise<{ isError?: boolean }>;\n onhostcontextchanged?: ((params: RawHostContext) => void) | undefined;\n}\n\n/** Thrown when a display mode is requested that mosaic refuses for the current host. */\nexport class DisplayModeRefusedError extends Error {\n readonly mode: string;\n constructor(mode: string) {\n super(`Display mode \"${mode}\" is refused for a ChatGPT host (inline | fullscreen only).`);\n this.name = \"DisplayModeRefusedError\";\n this.mode = mode;\n }\n}\n\nconst DISPLAY_MODES: readonly HostDisplayMode[] = [\"inline\", \"fullscreen\", \"pip\"];\n\nfunction asRecord(raw: unknown): RawHostContext {\n return raw !== null && typeof raw === \"object\" ? (raw as RawHostContext) : {};\n}\n\n/** host theme -> mosaic-tokens theme. Anything that is not \"dark\" renders light. */\nexport function mapHostTheme(theme: unknown): MosaicTheme {\n return theme === \"dark\" ? \"dark\" : \"light\";\n}\n\n/**\n * ChatGPT host detection.\n *\n * DECLARED DIVERGENCE: the OpenAI spec defines no host-identification value (`hostInfo.name` is\n * free-form, e.g. \"example-host\"), so there is no spec signal to read. The best available\n * evidence is the vendor namespace the spec reserves for ChatGPT: any `openai/*` key in the\n * host context (e.g. `openai/deepLink`, `openai/modelContext`) or in\n * `hostCapabilities.experimental` (e.g. `openai/files`, `openai/message`). No user-agent\n * sniffing. A ChatGPT host that sends neither is not detected; `pip` is typed out regardless,\n * so the runtime refusal is a second line, not the only one.\n */\nexport function isChatGptHost(raw: unknown, capabilities?: HostCapabilitiesLike | null): boolean {\n const inNamespace = (o: object | undefined) =>\n o !== undefined && Object.keys(o).some((k) => k.startsWith(\"openai/\"));\n return inNamespace(asRecord(raw)) || inNamespace(capabilities?.experimental);\n}\n\nexport function readHostContext(\n raw: unknown,\n capabilities?: HostCapabilitiesLike | null,\n): MosaicHostContext {\n const ctx = asRecord(raw);\n const mode = ctx.displayMode;\n const displayMode: HostDisplayMode = DISPLAY_MODES.includes(mode as HostDisplayMode)\n ? (mode as HostDisplayMode)\n : \"inline\";\n const available = Array.isArray(ctx.availableDisplayModes)\n ? (ctx.availableDisplayModes.filter((m) =>\n DISPLAY_MODES.includes(m as HostDisplayMode),\n ) as HostDisplayMode[])\n : [];\n const rawLink = ctx[\"openai/deepLink\"];\n const linkUrl = asRecord(rawLink).url;\n return {\n theme: mapHostTheme(ctx.theme),\n displayMode,\n availableDisplayModes: available,\n locale: typeof ctx.locale === \"string\" ? ctx.locale : undefined,\n containerDimensions:\n ctx.containerDimensions && typeof ctx.containerDimensions === \"object\"\n ? (ctx.containerDimensions as HostContainerDimensions)\n : undefined,\n deepLink: typeof linkUrl === \"string\" ? { url: linkUrl } : undefined,\n safeAreaInsets: readSafeAreaInsets(ctx),\n styles: readHostStyles(ctx),\n modelContext: readModelContextState(ctx),\n isChatGpt: isChatGptHost(ctx, capabilities),\n raw: ctx,\n };\n}\n\n/** Sets `data-theme` on `root`: the attribute mosaic-tokens' dark overrides key on. */\nexport function applyMosaicTheme(theme: MosaicTheme, root: Element): void {\n root.setAttribute(\"data-theme\", theme);\n}\n\n/**\n * Request a display mode. `pip` is excluded by the type and refused at runtime for a ChatGPT\n * host (a caller that casts past the type still cannot reach the host with it).\n */\nexport async function requestDisplayMode(\n app: HostAppLike,\n mode: RequestableDisplayMode,\n): Promise<{ mode: HostDisplayMode }> {\n if (\n (mode as string) === \"pip\" &&\n isChatGptHost(app.getHostContext(), app.getHostCapabilities?.())\n ) {\n throw new DisplayModeRefusedError(mode);\n }\n return app.requestDisplayMode({ mode });\n}\n\n/** `ui/update-model-context`: tell the model what the user is looking at. */\nexport function updateModelContext(app: HostAppLike, params: ModelContextParams): Promise<unknown> {\n return app.updateModelContext(params);\n}\n\n/** Read the live context of an app, with the same ChatGPT detection `requestDisplayMode` uses. */\nexport function readAppHostContext(app: HostAppLike): MosaicHostContext {\n return readHostContext(app.getHostContext(), app.getHostCapabilities?.());\n}\n\ninterface Dispatcher {\n /** The handler that was in the slot before the first subscriber. */\n previous: HostAppLike[\"onhostcontextchanged\"];\n listeners: Set<(ctx: MosaicHostContext) => void>;\n handler: (params: RawHostContext) => void;\n}\n\n// One dispatcher per app: the ext-apps `onhostcontextchanged` slot holds a single handler, so\n// subscribers must not chain through it (unsubscribing out of order would reinstall a dead\n// listener). The dispatcher is installed on the first subscribe and removed on the last\n// unsubscribe, restoring whatever handler the slot held before.\nconst dispatchers = new WeakMap<HostAppLike, Dispatcher>();\n\n/**\n * Subscribe to host context changes. Any number of subscribers, unsubscribed in any order.\n * Notifications carry a partial context, merged over what the app already holds.\n */\nexport function subscribeHostContext(\n app: HostAppLike,\n listener: (ctx: MosaicHostContext) => void,\n): () => void {\n let d = dispatchers.get(app);\n if (!d) {\n const created: Dispatcher = {\n previous: app.onhostcontextchanged,\n listeners: new Set(),\n handler: (params) => {\n created.previous?.(params);\n const ctx = readHostContext(\n { ...asRecord(app.getHostContext()), ...asRecord(params) },\n app.getHostCapabilities?.(),\n );\n for (const l of [...created.listeners]) l(ctx);\n },\n };\n d = created;\n dispatchers.set(app, d);\n app.onhostcontextchanged = d.handler;\n }\n // Foreign code overwrote the single ext-apps slot after we installed our dispatcher: adopt what\n // it holds now as `previous` (so it stays chained and is what we restore) and reinstall ours.\n // Only a LIVE dispatcher (>= 1 listener) is re-armed: an emptied one is removed from the map on\n // the last unsubscribe (`dispatchers.delete`), and is never revived from here.\n if (d.listeners.size > 0 && app.onhostcontextchanged !== d.handler) {\n d.previous = app.onhostcontextchanged;\n app.onhostcontextchanged = d.handler;\n }\n const active = d;\n // a fresh wrapper per subscription keeps two subscriptions of the same function distinct\n const entry = (ctx: MosaicHostContext) => listener(ctx);\n active.listeners.add(entry);\n return () => {\n if (!active.listeners.delete(entry)) return; // idempotent\n if (active.listeners.size === 0) {\n if (app.onhostcontextchanged === active.handler) app.onhostcontextchanged = active.previous;\n dispatchers.delete(app);\n }\n };\n}\n","/**\n * @vantageos/mosaic/react/host — React hooks over the framework-agnostic host-context core.\n */\nimport { useCallback, useEffect, useState } from \"react\";\nimport {\n type HostAppLike,\n type ModelContextParams,\n type MosaicHostContext,\n type RequestableDisplayMode,\n type SendMessageOptions,\n applyHostFonts,\n applyHostStyleVariables,\n applyMosaicTheme,\n applySafeAreaInsets,\n openLink,\n readAppHostContext,\n readHostContext,\n requestDisplayMode,\n sendMessage,\n subscribeHostContext,\n updateModelContext,\n} from \"../../../host/host-context.js\";\n\nexport * from \"../../../host/host-context.js\";\n\n/** Live host context for an ext-apps `App` (re-renders on `host-context-changed`). */\nexport function useHostContext(app: HostAppLike | null | undefined): MosaicHostContext {\n const [ctx, setCtx] = useState<MosaicHostContext>(() =>\n app ? readAppHostContext(app) : readHostContext(undefined),\n );\n useEffect(() => {\n if (!app) return undefined;\n setCtx(readAppHostContext(app));\n return subscribeHostContext(app, setCtx);\n }, [app]);\n return ctx;\n}\n\n/** Keeps `data-theme` on `root` (default: `<html>`) in step with the host theme. */\nexport function useMosaicHostTheme(\n app: HostAppLike | null | undefined,\n root?: Element,\n): MosaicHostContext {\n const ctx = useHostContext(app);\n useEffect(() => {\n const target = root ?? (typeof document === \"undefined\" ? undefined : document.documentElement);\n if (target) applyMosaicTheme(ctx.theme, target);\n }, [ctx.theme, root]);\n return ctx;\n}\n\nexport function useRequestDisplayMode(app: HostAppLike | null | undefined) {\n return useCallback(\n (mode: RequestableDisplayMode) => {\n if (!app) return Promise.reject(new Error(\"useRequestDisplayMode: no app connected\"));\n return requestDisplayMode(app, mode);\n },\n [app],\n );\n}\n\nexport function useUpdateModelContext(app: HostAppLike | null | undefined) {\n return useCallback(\n (params: ModelContextParams) => {\n if (!app) return Promise.reject(new Error(\"useUpdateModelContext: no app connected\"));\n return updateModelContext(app, params);\n },\n [app],\n );\n}\n\n/**\n * One hook for everything the host context styles: `data-theme` (mosaic-tokens dark overrides),\n * safe-area insets as padding + CSS variables (H01), host style variables bridged onto\n * mosaic-tokens and host fonts (H02). Follows `host-context-changed`; cleans up on unmount.\n * `root` defaults to `<html>`.\n */\nexport function useMosaicHostLayout(\n app: HostAppLike | null | undefined,\n root?: HTMLElement,\n): MosaicHostContext {\n const ctx = useHostContext(app);\n useEffect(() => {\n const target = root ?? (typeof document === \"undefined\" ? undefined : document.documentElement);\n if (!target) return undefined;\n applyMosaicTheme(ctx.theme, target);\n applySafeAreaInsets(ctx.safeAreaInsets, target);\n applyHostStyleVariables(ctx.styles, target);\n return () => {\n applySafeAreaInsets(undefined, target);\n applyHostStyleVariables(undefined, target);\n };\n }, [ctx.theme, ctx.safeAreaInsets, ctx.styles, root]);\n useEffect(() => {\n if (typeof document === \"undefined\") return undefined;\n applyHostFonts(ctx.styles?.fonts, document);\n return () => applyHostFonts(undefined, document);\n }, [ctx.styles?.fonts]);\n return ctx;\n}\n\n/** `ui/message` (H04): send a user message; options need `openai/message` (see core). */\nexport function useSendMessage(app: HostAppLike | null | undefined) {\n return useCallback(\n (text: string, options?: SendMessageOptions) => {\n if (!app) return Promise.reject(new Error(\"useSendMessage: no app connected\"));\n return sendMessage(app, text, options);\n },\n [app],\n );\n}\n\n/** `ui/open-link` (H18): ask the host to open an http(s) URL (wallet hand-off, deep links). */\nexport function useOpenLink(app: HostAppLike | null | undefined) {\n return useCallback(\n (url: string) => {\n if (!app) return Promise.reject(new Error(\"useOpenLink: no app connected\"));\n return openLink(app, url);\n },\n [app],\n );\n}\n"]}
|
package/dist/react/input.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from '../Tabs.schema-
|
|
2
|
+
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from '../Tabs.schema-Dqr6vwV3.cjs';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/react/input.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from '../Tabs.schema-
|
|
2
|
+
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from '../Tabs.schema-Dqr6vwV3.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
/**
|