@alfadocs/ui-kit-debug 1.66.0 → 1.67.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/dist/_chunks/ai-credits-exhausted-notice-DfAgfZDF.js +287 -0
- package/dist/_chunks/ai-credits-exhausted-notice-DfAgfZDF.js.map +1 -0
- package/dist/_chunks/ai-credits-exhausted-notice.agent-DgTSTgez.js +43 -0
- package/dist/_chunks/ai-credits-exhausted-notice.agent-DgTSTgez.js.map +1 -0
- package/dist/_chunks/ai-credits-notice-DQ-r3iQU.js +191 -0
- package/dist/_chunks/ai-credits-notice-DQ-r3iQU.js.map +1 -0
- package/dist/_chunks/{ai-permission-notice-DpRmZ9Q3.js → ai-permission-notice-qsdm4Sx4.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-DpRmZ9Q3.js.map → ai-permission-notice-qsdm4Sx4.js.map} +1 -1
- package/dist/_chunks/{alert-DdDpOi-P.js → alert-DjsJMGRE.js} +3 -2
- package/dist/_chunks/{alert-DdDpOi-P.js.map → alert-DjsJMGRE.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-BIfw890v.js → anamnesis-summary-rows-BQ_EokKz.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-BIfw890v.js.map → anamnesis-summary-rows-BQ_EokKz.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-DR-u1qbl.js → audio-recorder-B11RR-rC.js} +2 -2
- package/dist/_chunks/{audio-recorder-DR-u1qbl.js.map → audio-recorder-B11RR-rC.js.map} +1 -1
- package/dist/_chunks/{auth-form-parts-Cmb41LSQ.js → auth-form-parts-DwUTH6YN.js} +2 -2
- package/dist/_chunks/{auth-form-parts-Cmb41LSQ.js.map → auth-form-parts-DwUTH6YN.js.map} +1 -1
- package/dist/_chunks/{booking-DkjatiXc.js → booking-tTVxKPQY.js} +2 -2
- package/dist/_chunks/{booking-DkjatiXc.js.map → booking-tTVxKPQY.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-Cp8yTZ1g.js → calendar-workspace-MRrzcxAy.js} +6 -6
- package/dist/_chunks/{calendar-workspace-Cp8yTZ1g.js.map → calendar-workspace-MRrzcxAy.js.map} +1 -1
- package/dist/_chunks/{document-preview-B1dQm292.js → document-preview-VyQOjFVL.js} +2 -2
- package/dist/_chunks/{document-preview-B1dQm292.js.map → document-preview-VyQOjFVL.js.map} +1 -1
- package/dist/_chunks/{document-scanner-CVPVLK7z.js → document-scanner-CXH_GYh4.js} +2 -2
- package/dist/_chunks/{document-scanner-CVPVLK7z.js.map → document-scanner-CXH_GYh4.js.map} +1 -1
- package/dist/_chunks/{entity-summary-BQ9_KA8S.js → entity-summary-Bj-Wxq7Y.js} +2 -2
- package/dist/_chunks/{entity-summary-BQ9_KA8S.js.map → entity-summary-Bj-Wxq7Y.js.map} +1 -1
- package/dist/_chunks/{error-summary-DrUfuKu1.js → error-summary-PUE5Zxp9.js} +2 -2
- package/dist/_chunks/{error-summary-DrUfuKu1.js.map → error-summary-PUE5Zxp9.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-CgZkEvZy.js → forgot-password-form-CPOfRE0C.js} +4 -4
- package/dist/_chunks/{forgot-password-form-CgZkEvZy.js.map → forgot-password-form-CPOfRE0C.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-DKJHRFpp.js → freemium-paywall-6DO7noHX.js} +2 -2
- package/dist/_chunks/{freemium-paywall-DKJHRFpp.js.map → freemium-paywall-6DO7noHX.js.map} +1 -1
- package/dist/_chunks/help-me-write-templates-Bw3Q58x-.js +687 -0
- package/dist/_chunks/help-me-write-templates-Bw3Q58x-.js.map +1 -0
- package/dist/_chunks/hourglass-BEAzW1wE.js +26 -0
- package/dist/_chunks/hourglass-BEAzW1wE.js.map +1 -0
- package/dist/_chunks/{login-dev-card-PnADNcI9.js → login-dev-card-A-CL3mjt.js} +3 -3
- package/dist/_chunks/{login-dev-card-PnADNcI9.js.map → login-dev-card-A-CL3mjt.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-C-2e4eCD.js → marketplace-app-shell-DtSX8sYb.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-C-2e4eCD.js.map → marketplace-app-shell-DtSX8sYb.js.map} +1 -1
- package/dist/_chunks/{notes-panel-uEGIL7mi.js → notes-panel-IdsmqRFC.js} +3 -3
- package/dist/_chunks/{notes-panel-uEGIL7mi.js.map → notes-panel-IdsmqRFC.js.map} +1 -1
- package/dist/_chunks/{patient-details-4P1vA9Ls.js → patient-details-C-EWQTms.js} +2 -2
- package/dist/_chunks/{patient-details-4P1vA9Ls.js.map → patient-details-C-EWQTms.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-CBXhlfGD.js → patient-field-row-lY-Tb5Mo.js} +155 -176
- package/dist/_chunks/patient-field-row-lY-Tb5Mo.js.map +1 -0
- package/dist/_chunks/{patient-search-DOnDUVsl.js → patient-search-DpAKidZ5.js} +2 -2
- package/dist/_chunks/{patient-search-DOnDUVsl.js.map → patient-search-DpAKidZ5.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-CuDLo8MP.js → patient-summary-card-Bpto_VCD.js} +2 -2
- package/dist/_chunks/{patient-summary-card-CuDLo8MP.js.map → patient-summary-card-Bpto_VCD.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-C8MEu0t6.js → payment-automation-upsell-BQ307qEX.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-C8MEu0t6.js.map → payment-automation-upsell-BQ307qEX.js.map} +1 -1
- package/dist/_chunks/{payment-form-C3dGY7v4.js → payment-form-XKtinW8r.js} +2 -2
- package/dist/_chunks/{payment-form-C3dGY7v4.js.map → payment-form-XKtinW8r.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-DJ9VN7cu.js → pdf-viewer-BvoVMjH4.js} +2 -2
- package/dist/_chunks/{pdf-viewer-DJ9VN7cu.js.map → pdf-viewer-BvoVMjH4.js.map} +1 -1
- package/dist/_chunks/{practice-results-8h2Utpt3.js → practice-results-BrUDDMXC.js} +2 -2
- package/dist/_chunks/{practice-results-8h2Utpt3.js.map → practice-results-BrUDDMXC.js.map} +1 -1
- package/dist/_chunks/{registration-form-BQyT_kBX.js → registration-form-BxwqUZzk.js} +3 -3
- package/dist/_chunks/{registration-form-BQyT_kBX.js.map → registration-form-BxwqUZzk.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-M2gT_E7f.js → rich-text-editor-aCIoptbg.js} +1653 -1743
- package/dist/_chunks/{rich-text-editor-M2gT_E7f.js.map → rich-text-editor-aCIoptbg.js.map} +1 -1
- package/dist/_chunks/{sign-document-CY7xTXbm.js → sign-document-D1P1nUQA.js} +2 -2
- package/dist/_chunks/{sign-document-CY7xTXbm.js.map → sign-document-D1P1nUQA.js.map} +1 -1
- package/dist/_chunks/{signature-request-BMCHy2ZO.js → signature-request-3u6TvRt2.js} +2 -2
- package/dist/_chunks/{signature-request-BMCHy2ZO.js.map → signature-request-3u6TvRt2.js.map} +1 -1
- package/dist/_chunks/{task-editor-CifOznfq.js → task-editor-Bb5MMcid.js} +2 -2
- package/dist/_chunks/{task-editor-CifOznfq.js.map → task-editor-Bb5MMcid.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-8nLwBw6P.js → tasks-panel-BOb57Ysw.js} +2 -2
- package/dist/_chunks/{tasks-panel-8nLwBw6P.js.map → tasks-panel-BOb57Ysw.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-B-FEWbQM.js → use-appointment-details-read-CVSPoP5j.js} +4 -4
- package/dist/_chunks/{use-appointment-details-read-B-FEWbQM.js.map → use-appointment-details-read-CVSPoP5j.js.map} +1 -1
- package/dist/_chunks/voice-control-panel-BJIEbDq6.js +1148 -0
- package/dist/_chunks/voice-control-panel-BJIEbDq6.js.map +1 -0
- package/dist/_chunks/{warning-stack-HYWAytZV.js → warning-stack-BdY-0bd3.js} +2 -2
- package/dist/_chunks/{warning-stack-HYWAytZV.js.map → warning-stack-BdY-0bd3.js.map} +1 -1
- package/dist/_chunks/{workflow-map-C2B2qIr1.js → workflow-map-CYbRD9ek.js} +2 -2
- package/dist/_chunks/{workflow-map-C2B2qIr1.js.map → workflow-map-CYbRD9ek.js.map} +1 -1
- package/dist/agent-catalog.json +50 -3
- package/dist/agent-i18n/en.json +7 -4
- package/dist/components/ai-credits-notice/ai-credits-exhausted-notice.agent.d.ts +4 -0
- package/dist/components/ai-credits-notice/ai-credits-exhausted-notice.agent.d.ts.map +1 -0
- package/dist/components/ai-credits-notice/ai-credits-exhausted-notice.d.ts +96 -0
- package/dist/components/ai-credits-notice/ai-credits-exhausted-notice.d.ts.map +1 -0
- package/dist/components/ai-credits-notice/ai-credits-notice.d.ts +30 -4
- package/dist/components/ai-credits-notice/ai-credits-notice.d.ts.map +1 -1
- package/dist/components/ai-credits-notice/index.d.ts +3 -0
- package/dist/components/ai-credits-notice/index.d.ts.map +1 -1
- package/dist/components/ai-credits-notice/index.js +10 -4
- package/dist/components/ai-credits-notice/index.js.map +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/document-scanner/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/error-summary/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/tasks-panel/index.js +1 -1
- package/dist/components/voice-control-panel/index.d.ts +2 -1
- package/dist/components/voice-control-panel/index.d.ts.map +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/voice-control-panel/voice-control-panel.agent.d.ts.map +1 -1
- package/dist/components/voice-control-panel/voice-control-panel.d.ts +43 -3
- package/dist/components/voice-control-panel/voice-control-panel.d.ts.map +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/i18n/locales/ar.d.ts +27 -12
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +27 -12
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +27 -12
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +27 -12
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +27 -12
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +27 -12
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +27 -12
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +27 -12
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +27 -12
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +27 -12
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +27 -12
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +27 -12
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +27 -12
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +27 -12
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +27 -12
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +27 -12
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +27 -12
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +27 -12
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +27 -12
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +27 -12
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +27 -12
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +27 -12
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +27 -12
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +27 -12
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +27 -12
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +27 -12
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +27 -12
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +27 -12
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +27 -12
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +27 -12
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +27 -12
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +27 -12
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +27 -12
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +27 -12
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +27 -12
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +27 -12
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +814 -809
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +27 -12
- package/dist/locales/de.json +27 -12
- package/dist/locales/el.json +27 -12
- package/dist/locales/en.json +27 -12
- package/dist/locales/es.json +27 -12
- package/dist/locales/fr.json +27 -12
- package/dist/locales/hi.json +27 -12
- package/dist/locales/it.json +27 -12
- package/dist/locales/ja.json +27 -12
- package/dist/locales/nl.json +27 -12
- package/dist/locales/pl.json +27 -12
- package/dist/locales/pt.json +27 -12
- package/dist/locales/ro.json +27 -12
- package/dist/locales/ru.json +27 -12
- package/dist/locales/sq.json +27 -12
- package/dist/locales/sv.json +27 -12
- package/dist/locales/tr.json +27 -12
- package/dist/locales/zh.json +27 -12
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +6 -23
- package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts.map +1 -1
- package/dist/patterns/help-me-write-templates/index.js +8 -7
- package/dist/patterns/help-me-write-templates/index.js.map +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/ai-credits-notice-pK9BOmEz.js +0 -90
- package/dist/_chunks/ai-credits-notice-pK9BOmEz.js.map +0 -1
- package/dist/_chunks/ai-credits-notice.agent-C9L7orrP.js +0 -17
- package/dist/_chunks/ai-credits-notice.agent-C9L7orrP.js.map +0 -1
- package/dist/_chunks/help-me-write-templates-DFmqnsAa.js +0 -747
- package/dist/_chunks/help-me-write-templates-DFmqnsAa.js.map +0 -1
- package/dist/_chunks/patient-field-row-CBXhlfGD.js.map +0 -1
- package/dist/_chunks/voice-control-panel-C0BfY23Y.js +0 -1009
- package/dist/_chunks/voice-control-panel-C0BfY23Y.js.map +0 -1
|
@@ -6,7 +6,7 @@ import { B as G } from "./button-D-MQxsA_.js";
|
|
|
6
6
|
import { I as D } from "./icon-button-C_1TgRiK.js";
|
|
7
7
|
import { S as pe } from "./select-k4gBdS8N.js";
|
|
8
8
|
import { A as le } from "./audio-visualiser-CK2JyQW1.js";
|
|
9
|
-
import { A as F } from "./alert-
|
|
9
|
+
import { A as F } from "./alert-DjsJMGRE.js";
|
|
10
10
|
import { u as me } from "./registry-DvAUVLHh.js";
|
|
11
11
|
import { M as fe } from "./mic-CUklMZGF.js";
|
|
12
12
|
import { c as J } from "./createLucideIcon-DhHxpK9K.js";
|
|
@@ -446,4 +446,4 @@ export {
|
|
|
446
446
|
De as A,
|
|
447
447
|
Re as a
|
|
448
448
|
};
|
|
449
|
-
//# sourceMappingURL=audio-recorder-
|
|
449
|
+
//# sourceMappingURL=audio-recorder-B11RR-rC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-recorder-DR-u1qbl.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pause.mjs","../../node_modules/lucide-react/dist/esm/icons/play.mjs","../../src/components/audio-recorder/audio-recorder.agent.ts","../../src/components/audio-recorder/audio-recorder.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\",\n key: \"10ikf1\"\n }\n ]\n];\nconst Play = createLucideIcon(\"play\", __iconNode);\n\nexport { __iconNode, Play as default };\n//# sourceMappingURL=play.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — AudioRecorder. */\n/* */\n/* Multi-step media-capture lifecycle (request → record → stop → submit / */\n/* discard). Exposes `capture` for the start/stop steps and `submit` for */\n/* the final commit via onRecordingComplete. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AudioRecorderHandle } from './audio-recorder';\n\nexport const audioRecorderAgent: AgentAdapter<AudioRecorderHandle> = {\n id: 'audio-recorder',\n capabilities: ['capture', 'submit'],\n state: {\n isRecording: {\n type: 'boolean',\n descriptionKey: 'ui.agent.audioRecorder.state.isRecording',\n description: 'True while actively capturing audio (not paused).',\n read: (handle) => handle.isRecording(),\n },\n duration: {\n type: 'number',\n descriptionKey: 'ui.agent.audioRecorder.state.duration',\n description:\n 'Elapsed recording time in milliseconds (paused time excluded).',\n read: (handle) => handle.getDuration(),\n },\n hasRecording: {\n type: 'boolean',\n descriptionKey: 'ui.agent.audioRecorder.state.hasRecording',\n description:\n 'True when a completed recording is available for submission.',\n read: (handle) => handle.hasRecording(),\n },\n },\n actions: {\n start_recording: {\n safety: 'write',\n returns: 'void',\n descriptionKey: 'ui.agent.audioRecorder.actions.startRecording',\n description: 'Request microphone permission and begin recording.',\n errors: ['Microphone permission denied', 'No audio input device'],\n invoke: (handle) => handle.startRecording(),\n },\n stop_recording: {\n safety: 'write',\n descriptionKey: 'ui.agent.audioRecorder.actions.stopRecording',\n description: 'Stop the current recording and finalise the blob.',\n invoke: (handle) => {\n handle.stopRecording();\n },\n },\n discard: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.audioRecorder.actions.discard',\n description:\n 'Cancel the recording. Irreversible — the captured audio is dropped.',\n invoke: (handle) => {\n handle.discard();\n },\n },\n submit: {\n safety: 'write',\n descriptionKey: 'ui.agent.audioRecorder.actions.submit',\n description:\n 'Stop the active recording, finalising it via onRecordingComplete.',\n invoke: (handle) => {\n handle.stopRecording();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'audio-recorder',\n description: 'Marks the AudioRecorder wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useReducer,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Mic, Pause, Play, Square, X } from 'lucide-react';\nimport { IconButton, Button } from '../button';\nimport { Select, type SelectOption } from '../select/select';\nimport { AudioVisualiser } from '../audio-visualiser';\nimport { Alert } from '../alert';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { audioRecorderAgent } from './audio-recorder.agent';\n\ntype State =\n | { kind: 'idle' }\n | { kind: 'requesting' }\n | { kind: 'recording'; startedAt: number; pausedMs: number }\n | { kind: 'paused'; startedAt: number; pausedMs: number; pausedAt: number }\n | { kind: 'stopped'; duration: number }\n | {\n kind: 'error';\n type:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed';\n };\n\ntype Action =\n | { type: 'request' }\n | { type: 'start' }\n | { type: 'pause' }\n | { type: 'resume' }\n | { type: 'stop'; duration: number }\n | { type: 'cancel' }\n | {\n type: 'error';\n kind:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed';\n }\n | { type: 'reset' };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'request':\n return { kind: 'requesting' };\n case 'start':\n return { kind: 'recording', startedAt: Date.now(), pausedMs: 0 };\n case 'pause':\n if (state.kind !== 'recording') return state;\n return {\n kind: 'paused',\n startedAt: state.startedAt,\n pausedMs: state.pausedMs,\n pausedAt: Date.now(),\n };\n case 'resume':\n if (state.kind !== 'paused') return state;\n return {\n kind: 'recording',\n startedAt: state.startedAt,\n pausedMs: state.pausedMs + (Date.now() - state.pausedAt),\n };\n case 'stop':\n return { kind: 'stopped', duration: action.duration };\n case 'cancel':\n return { kind: 'idle' };\n case 'error':\n return { kind: 'error', type: action.kind };\n case 'reset':\n return { kind: 'idle' };\n default:\n return state;\n }\n}\n\nconst rootVariants = cva(\n [\n 'ds:inline-flex ds:flex-col ds:items-stretch ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:bg-background',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst MIME_PREFERENCES = [\n 'audio/webm;codecs=opus',\n 'audio/webm',\n 'audio/mp4',\n 'audio/ogg;codecs=opus',\n];\n\nfunction pickMimeType(): string | undefined {\n if (typeof MediaRecorder === 'undefined') return undefined;\n for (const mime of MIME_PREFERENCES) {\n if (MediaRecorder.isTypeSupported(mime)) return mime;\n }\n return undefined;\n}\n\nfunction formatTimer(ms: number, locale: string): string {\n const total = Math.max(0, Math.floor(ms / 1000));\n const minutes = Math.floor(total / 60);\n const seconds = total % 60;\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale, { minimumIntegerDigits: 2 }).format(n);\n return `${fmt(minutes)}:${fmt(seconds)}`;\n}\n\n/** Curated imperative handle for agent / external automation. */\nexport interface AudioRecorderHandle {\n isRecording: () => boolean;\n getDuration: () => number;\n hasRecording: () => boolean;\n startRecording: () => Promise<void> | void;\n stopRecording: () => void;\n discard: () => void;\n}\n\nexport interface AudioRecorderProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onError'>,\n VariantProps<typeof rootVariants> {\n /** Called on stop with the final blob + duration in ms. */\n onRecordingComplete?: (blob: Blob, durationMs: number) => void;\n /** Called when recording is cancelled. */\n onCancel?: () => void;\n /** Called when an error occurs. */\n onError?: (\n error:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed'\n | 'max-duration'\n | 'max-size',\n ) => void;\n /**\n * Auto-stop after this many milliseconds of active recording. Default\n * 30 minutes. Set `null` to disable.\n */\n maxDurationMs?: number | null;\n /**\n * Auto-stop when the accumulated blob chunks exceed this many bytes.\n * Default 250 MB. Set `null` to disable.\n */\n maxBytes?: number | null;\n}\n\nexport const AudioRecorder = forwardRef<\n AudioRecorderHandle,\n AudioRecorderProps\n>(\n (\n {\n size = 'md',\n onRecordingComplete,\n onCancel,\n onError,\n maxDurationMs = 30 * 60 * 1000,\n maxBytes = 250 * 1024 * 1024,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const [state, dispatch] = useReducer(reducer, { kind: 'idle' });\n const [stream, setStream] = useState<MediaStream | null>(null);\n const [now, setNow] = useState<number>(Date.now());\n const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n const [selectedDeviceId, setSelectedDeviceId] = useState<string>('');\n\n const recorderRef = useRef<MediaRecorder | null>(null);\n const chunksRef = useRef<Blob[]>([]);\n // Running total of bytes accumulated in `chunksRef` — reading\n // `chunksRef.current.reduce(...)` on every ondataavailable scales\n // poorly; maintain the sum incrementally instead.\n const byteCountRef = useRef<number>(0);\n const durationAtStopRef = useRef<number>(0);\n // Tracks the *currently-held* MediaStream in a ref so the unmount\n // cleanup effect (which closes over [] deps) sees the latest value.\n // Without this, a unmount while getUserMedia is pending would never\n // stop() tracks and the browser mic indicator stays on.\n const streamRef = useRef<MediaStream | null>(null);\n // Flips to true on unmount; consulted inside the getUserMedia promise\n // resolution so we don't try to setStream() on a dead component and\n // so the freshly-acquired tracks get released immediately.\n const unmountedRef = useRef<boolean>(false);\n // Flips to true when cancel() is called; the onstop handler reads it\n // so `onRecordingComplete` is NOT invoked on a cancel path with a blank\n // blob. Reset on each recording start.\n const cancelledRef = useRef<boolean>(false);\n // Monotonic `performance.now()` start timestamp for the max-duration\n // timer. Wall-clock `Date.now()` jumps on NTP / timezone changes.\n const perfStartRef = useRef<number>(0);\n\n const supported = typeof MediaRecorder !== 'undefined';\n\n /* ── Enumerate devices once (after any prior permission grant) ── */\n useEffect(() => {\n if (!supported || !navigator.mediaDevices?.enumerateDevices) return;\n navigator.mediaDevices\n .enumerateDevices()\n .then((list) => {\n const mics = list.filter((d) => d.kind === 'audioinput');\n setDevices(mics);\n })\n .catch(() => {\n /* ignore */\n });\n }, [supported]);\n\n /* ── Timer tick ── */\n useEffect(() => {\n if (state.kind !== 'recording') return;\n const handle = window.setInterval(() => setNow(Date.now()), 250);\n return () => window.clearInterval(handle);\n }, [state.kind]);\n\n const cleanupStream = useCallback(() => {\n const held = streamRef.current ?? stream;\n held?.getTracks().forEach((t) => t.stop());\n streamRef.current = null;\n setStream(null);\n }, [stream]);\n\n const requestAndStart = useCallback(async () => {\n if (!supported) {\n dispatch({ type: 'error', kind: 'unsupported' });\n onError?.('unsupported');\n return;\n }\n dispatch({ type: 'request' });\n cancelledRef.current = false;\n try {\n const nextStream = await navigator.mediaDevices.getUserMedia({\n audio: selectedDeviceId\n ? { deviceId: { exact: selectedDeviceId } }\n : true,\n });\n // Guard against unmount OR a cancel() between the permission prompt\n // and resolution — otherwise the freshly-acquired tracks leak and the\n // browser's mic indicator stays live, secretly capturing audio.\n if (unmountedRef.current || cancelledRef.current) {\n nextStream.getTracks().forEach((tr) => tr.stop());\n return;\n }\n streamRef.current = nextStream;\n setStream(nextStream);\n const mimeType = pickMimeType();\n const recorder = new MediaRecorder(\n nextStream,\n mimeType ? { mimeType } : undefined,\n );\n recorderRef.current = recorder;\n chunksRef.current = [];\n byteCountRef.current = 0;\n recorder.ondataavailable = (event) => {\n if (event.data && event.data.size > 0) {\n chunksRef.current.push(event.data);\n byteCountRef.current += event.data.size;\n // Byte-cap: auto-stop if the recording would exceed maxBytes.\n // Cheaper than summing on every tick; stop once and bail.\n if (\n typeof maxBytes === 'number' &&\n byteCountRef.current >= maxBytes &&\n recorderRef.current?.state === 'recording'\n ) {\n onError?.('max-size');\n try {\n recorderRef.current.stop();\n } catch {\n /* ignore */\n }\n }\n }\n };\n recorder.onstop = () => {\n // Cancel path: drop the blob on the floor — consumers who called\n // cancel() must not receive a silent empty recording.\n if (!cancelledRef.current) {\n const blob = new Blob(chunksRef.current, {\n type: mimeType ?? 'audio/webm',\n });\n onRecordingComplete?.(blob, durationAtStopRef.current);\n }\n chunksRef.current = [];\n recorderRef.current = null;\n nextStream.getTracks().forEach((tr) => tr.stop());\n streamRef.current = null;\n setStream(null);\n cancelledRef.current = false;\n };\n perfStartRef.current = performance.now();\n recorder.start(1000);\n dispatch({ type: 'start' });\n } catch (err: unknown) {\n const errorName = err instanceof Error ? err.name : '';\n if (errorName === 'NotAllowedError' || errorName === 'SecurityError') {\n dispatch({ type: 'error', kind: 'permission-denied' });\n onError?.('permission-denied');\n } else if (\n errorName === 'NotFoundError' ||\n errorName === 'OverconstrainedError'\n ) {\n dispatch({ type: 'error', kind: 'no-device' });\n onError?.('no-device');\n } else {\n dispatch({ type: 'error', kind: 'capture-failed' });\n onError?.('capture-failed');\n }\n }\n }, [onError, onRecordingComplete, selectedDeviceId, supported]);\n\n const pause = useCallback(() => {\n recorderRef.current?.pause();\n dispatch({ type: 'pause' });\n }, []);\n\n const resume = useCallback(() => {\n recorderRef.current?.resume();\n dispatch({ type: 'resume' });\n }, []);\n\n const stop = useCallback(() => {\n if (state.kind === 'recording' || state.kind === 'paused') {\n const started = state.startedAt;\n const pausedMs = state.pausedMs;\n const duration = Date.now() - started - pausedMs;\n durationAtStopRef.current = Math.max(0, duration);\n dispatch({ type: 'stop', duration: duration });\n }\n try {\n recorderRef.current?.stop();\n } catch {\n /* stop() throws on non-recording state; safe to swallow */\n }\n }, [state]);\n\n const cancel = useCallback(() => {\n // Flip the cancelled flag BEFORE asking MediaRecorder to stop so the\n // async onstop handler sees it and skips onRecordingComplete.\n cancelledRef.current = true;\n try {\n recorderRef.current?.stop();\n } catch {\n /* ignore */\n }\n chunksRef.current = [];\n recorderRef.current = null;\n cleanupStream();\n dispatch({ type: 'cancel' });\n onCancel?.();\n }, [cleanupStream, onCancel]);\n\n /* ── Max-duration auto-stop ── */\n useEffect(() => {\n if (state.kind !== 'recording') return;\n if (typeof maxDurationMs !== 'number' || maxDurationMs <= 0) return;\n // Use the monotonic clock so an NTP / timezone jump mid-recording\n // doesn't skew the remaining-time calc.\n const alreadyElapsed =\n performance.now() - perfStartRef.current - state.pausedMs;\n const remaining = Math.max(0, maxDurationMs - alreadyElapsed);\n const handle = window.setTimeout(() => {\n if (recorderRef.current?.state === 'recording') {\n onError?.('max-duration');\n try {\n recorderRef.current.stop();\n } catch {\n /* ignore */\n }\n }\n }, remaining);\n return () => window.clearTimeout(handle);\n }, [state, maxDurationMs, onError]);\n\n /* ── Unmount cleanup: release mic if still held ── */\n useEffect(() => {\n return () => {\n unmountedRef.current = true;\n try {\n recorderRef.current?.stop();\n } catch {\n /* ignore */\n }\n // Use streamRef so we see a stream that was acquired by an\n // in-flight getUserMedia resolution — not just the one captured\n // by the closure at mount.\n streamRef.current?.getTracks().forEach((tr) => tr.stop());\n streamRef.current = null;\n };\n }, []);\n\n const elapsedMs =\n state.kind === 'recording'\n ? now - state.startedAt - state.pausedMs\n : state.kind === 'paused'\n ? state.pausedAt - state.startedAt - state.pausedMs\n : state.kind === 'stopped'\n ? state.duration\n : 0;\n\n const agentHandle = useMemo<AudioRecorderHandle>(\n () => ({\n isRecording: () => state.kind === 'recording',\n getDuration: () => elapsedMs,\n hasRecording: () => state.kind === 'stopped',\n startRecording: () => requestAndStart(),\n stopRecording: () => stop(),\n discard: () => cancel(),\n }),\n [state, elapsedMs, requestAndStart, stop, cancel],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(audioRecorderAgent, agentHandle, rest.id);\n\n const deviceOptions: SelectOption<string>[] = devices.map((d) => ({\n value: d.deviceId,\n label: d.label || t('chat.audio.selectDevice'),\n }));\n\n const statusText = (() => {\n switch (state.kind) {\n case 'idle':\n return t('chat.audio.idle');\n case 'requesting':\n return t('common.loading');\n case 'recording':\n return t('chat.audio.recording');\n case 'paused':\n return t('chat.audio.paused');\n case 'stopped':\n return t('chat.audio.idle');\n case 'error':\n if (state.type === 'permission-denied')\n return t('chat.audio.permissionDenied');\n if (state.type === 'unsupported') return t('chat.audio.unsupported');\n return t('chat.audio.idle');\n }\n })();\n\n const isRecording = state.kind === 'recording';\n const isPaused = state.kind === 'paused';\n const hasError = state.kind === 'error';\n\n return (\n <div\n data-component=\"audio-recorder\"\n data-component-id={rest.id}\n className={rootVariants({ size, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span\n aria-hidden=\"true\"\n className={[\n 'ds:relative ds:inline-flex ds:size-3 ds:items-center ds:justify-center ds:rounded-[var(--radius-full)]',\n isRecording\n ? 'ds:bg-[color:var(--destructive)]'\n : 'ds:bg-[color:var(--muted)]',\n ].join(' ')}\n >\n {isRecording ? (\n <span\n className={[\n 'ds:absolute ds:inset-0 ds:rounded-[var(--radius-full)]',\n 'ds:bg-[color:var(--destructive)]',\n 'ds:motion-safe:animate-[var(--accessible-off,recorder-pulse_1.2s_ease-out_infinite)]',\n ].join(' ')}\n />\n ) : null}\n </span>\n <AudioVisualiser\n stream={stream}\n size=\"sm\"\n aria-hidden=\"true\"\n className=\"ds:flex-1\"\n />\n <time\n dir=\"ltr\"\n aria-hidden=\"true\"\n className=\"ds:tabular-nums type-meta ds:text-[color:var(--muted-foreground)]\"\n >\n {formatTimer(elapsedMs, i18n.language)}\n </time>\n </div>\n\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {statusText}\n </span>\n\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {state.kind === 'idle' || state.kind === 'stopped' || hasError ? (\n <Button\n intent=\"primary\"\n size=\"sm\"\n startIcon={<Mic />}\n onClick={requestAndStart}\n disabled={!supported}\n >\n {t('chat.audio.record')}\n </Button>\n ) : null}\n {isRecording ? (\n <IconButton\n icon={<Pause />}\n aria-label={t('chat.audio.pause')}\n intent=\"secondary\"\n size=\"sm\"\n onClick={pause}\n />\n ) : null}\n {isPaused ? (\n <IconButton\n icon={<Play />}\n aria-label={t('chat.audio.resume')}\n intent=\"secondary\"\n size=\"sm\"\n onClick={resume}\n />\n ) : null}\n {isRecording || isPaused ? (\n <>\n <IconButton\n icon={<Square />}\n aria-label={t('chat.audio.stop')}\n intent=\"primary\"\n size=\"sm\"\n onClick={stop}\n />\n <IconButton\n icon={<X />}\n aria-label={t('chat.audio.cancel')}\n intent=\"ghost\"\n size=\"sm\"\n onClick={cancel}\n />\n </>\n ) : null}\n {state.kind === 'idle' && deviceOptions.length > 1 ? (\n <div className=\"ds:ms-auto ds:min-w-[160px]\">\n <Select\n aria-label={t('chat.audio.selectDevice')}\n options={deviceOptions}\n value={selectedDeviceId}\n onValueChange={(v) => setSelectedDeviceId(v)}\n size=\"sm\"\n clearable\n />\n </div>\n ) : null}\n </div>\n\n {hasError && state.kind === 'error' ? (\n <Alert variant=\"error\" live=\"polite\">\n <Alert.Description>{statusText}</Alert.Description>\n {state.type === 'permission-denied' ? (\n <Alert.Action>\n <Button intent=\"ghost\" size=\"sm\" onClick={requestAndStart}>\n {t('chat.audio.retry')}\n </Button>\n </Alert.Action>\n ) : null}\n </Alert>\n ) : null}\n </div>\n );\n },\n);\n\nAudioRecorder.displayName = 'AudioRecorder';\n"],"names":["__iconNode","Pause","createLucideIcon","Play","audioRecorderAgent","handle","reducer","state","action","rootVariants","cva","MIME_PREFERENCES","pickMimeType","mime","formatTimer","ms","locale","total","minutes","seconds","fmt","n","AudioRecorder","forwardRef","size","onRecordingComplete","onCancel","onError","maxDurationMs","maxBytes","className","rest","ref","t","i18n","useTranslation","dispatch","useReducer","stream","setStream","useState","now","setNow","devices","setDevices","selectedDeviceId","setSelectedDeviceId","recorderRef","useRef","chunksRef","byteCountRef","durationAtStopRef","streamRef","unmountedRef","cancelledRef","perfStartRef","supported","useEffect","_a","list","mics","d","cleanupStream","useCallback","held","requestAndStart","nextStream","tr","mimeType","recorder","event","blob","err","errorName","pause","resume","stop","started","pausedMs","duration","cancel","alreadyElapsed","remaining","_b","elapsedMs","agentHandle","useMemo","useImperativeHandle","useAgentRegistration","deviceOptions","statusText","isRecording","isPaused","hasError","jsxs","jsx","AudioVisualiser","Button","Mic","IconButton","Fragment","Square","X","Select","v","Alert"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"audio-recorder-B11RR-rC.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pause.mjs","../../node_modules/lucide-react/dist/esm/icons/play.mjs","../../src/components/audio-recorder/audio-recorder.agent.ts","../../src/components/audio-recorder/audio-recorder.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\",\n key: \"10ikf1\"\n }\n ]\n];\nconst Play = createLucideIcon(\"play\", __iconNode);\n\nexport { __iconNode, Play as default };\n//# sourceMappingURL=play.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — AudioRecorder. */\n/* */\n/* Multi-step media-capture lifecycle (request → record → stop → submit / */\n/* discard). Exposes `capture` for the start/stop steps and `submit` for */\n/* the final commit via onRecordingComplete. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AudioRecorderHandle } from './audio-recorder';\n\nexport const audioRecorderAgent: AgentAdapter<AudioRecorderHandle> = {\n id: 'audio-recorder',\n capabilities: ['capture', 'submit'],\n state: {\n isRecording: {\n type: 'boolean',\n descriptionKey: 'ui.agent.audioRecorder.state.isRecording',\n description: 'True while actively capturing audio (not paused).',\n read: (handle) => handle.isRecording(),\n },\n duration: {\n type: 'number',\n descriptionKey: 'ui.agent.audioRecorder.state.duration',\n description:\n 'Elapsed recording time in milliseconds (paused time excluded).',\n read: (handle) => handle.getDuration(),\n },\n hasRecording: {\n type: 'boolean',\n descriptionKey: 'ui.agent.audioRecorder.state.hasRecording',\n description:\n 'True when a completed recording is available for submission.',\n read: (handle) => handle.hasRecording(),\n },\n },\n actions: {\n start_recording: {\n safety: 'write',\n returns: 'void',\n descriptionKey: 'ui.agent.audioRecorder.actions.startRecording',\n description: 'Request microphone permission and begin recording.',\n errors: ['Microphone permission denied', 'No audio input device'],\n invoke: (handle) => handle.startRecording(),\n },\n stop_recording: {\n safety: 'write',\n descriptionKey: 'ui.agent.audioRecorder.actions.stopRecording',\n description: 'Stop the current recording and finalise the blob.',\n invoke: (handle) => {\n handle.stopRecording();\n },\n },\n discard: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.audioRecorder.actions.discard',\n description:\n 'Cancel the recording. Irreversible — the captured audio is dropped.',\n invoke: (handle) => {\n handle.discard();\n },\n },\n submit: {\n safety: 'write',\n descriptionKey: 'ui.agent.audioRecorder.actions.submit',\n description:\n 'Stop the active recording, finalising it via onRecordingComplete.',\n invoke: (handle) => {\n handle.stopRecording();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'audio-recorder',\n description: 'Marks the AudioRecorder wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useReducer,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Mic, Pause, Play, Square, X } from 'lucide-react';\nimport { IconButton, Button } from '../button';\nimport { Select, type SelectOption } from '../select/select';\nimport { AudioVisualiser } from '../audio-visualiser';\nimport { Alert } from '../alert';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { audioRecorderAgent } from './audio-recorder.agent';\n\ntype State =\n | { kind: 'idle' }\n | { kind: 'requesting' }\n | { kind: 'recording'; startedAt: number; pausedMs: number }\n | { kind: 'paused'; startedAt: number; pausedMs: number; pausedAt: number }\n | { kind: 'stopped'; duration: number }\n | {\n kind: 'error';\n type:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed';\n };\n\ntype Action =\n | { type: 'request' }\n | { type: 'start' }\n | { type: 'pause' }\n | { type: 'resume' }\n | { type: 'stop'; duration: number }\n | { type: 'cancel' }\n | {\n type: 'error';\n kind:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed';\n }\n | { type: 'reset' };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'request':\n return { kind: 'requesting' };\n case 'start':\n return { kind: 'recording', startedAt: Date.now(), pausedMs: 0 };\n case 'pause':\n if (state.kind !== 'recording') return state;\n return {\n kind: 'paused',\n startedAt: state.startedAt,\n pausedMs: state.pausedMs,\n pausedAt: Date.now(),\n };\n case 'resume':\n if (state.kind !== 'paused') return state;\n return {\n kind: 'recording',\n startedAt: state.startedAt,\n pausedMs: state.pausedMs + (Date.now() - state.pausedAt),\n };\n case 'stop':\n return { kind: 'stopped', duration: action.duration };\n case 'cancel':\n return { kind: 'idle' };\n case 'error':\n return { kind: 'error', type: action.kind };\n case 'reset':\n return { kind: 'idle' };\n default:\n return state;\n }\n}\n\nconst rootVariants = cva(\n [\n 'ds:inline-flex ds:flex-col ds:items-stretch ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:bg-background',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst MIME_PREFERENCES = [\n 'audio/webm;codecs=opus',\n 'audio/webm',\n 'audio/mp4',\n 'audio/ogg;codecs=opus',\n];\n\nfunction pickMimeType(): string | undefined {\n if (typeof MediaRecorder === 'undefined') return undefined;\n for (const mime of MIME_PREFERENCES) {\n if (MediaRecorder.isTypeSupported(mime)) return mime;\n }\n return undefined;\n}\n\nfunction formatTimer(ms: number, locale: string): string {\n const total = Math.max(0, Math.floor(ms / 1000));\n const minutes = Math.floor(total / 60);\n const seconds = total % 60;\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale, { minimumIntegerDigits: 2 }).format(n);\n return `${fmt(minutes)}:${fmt(seconds)}`;\n}\n\n/** Curated imperative handle for agent / external automation. */\nexport interface AudioRecorderHandle {\n isRecording: () => boolean;\n getDuration: () => number;\n hasRecording: () => boolean;\n startRecording: () => Promise<void> | void;\n stopRecording: () => void;\n discard: () => void;\n}\n\nexport interface AudioRecorderProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onError'>,\n VariantProps<typeof rootVariants> {\n /** Called on stop with the final blob + duration in ms. */\n onRecordingComplete?: (blob: Blob, durationMs: number) => void;\n /** Called when recording is cancelled. */\n onCancel?: () => void;\n /** Called when an error occurs. */\n onError?: (\n error:\n | 'permission-denied'\n | 'no-device'\n | 'unsupported'\n | 'capture-failed'\n | 'max-duration'\n | 'max-size',\n ) => void;\n /**\n * Auto-stop after this many milliseconds of active recording. Default\n * 30 minutes. Set `null` to disable.\n */\n maxDurationMs?: number | null;\n /**\n * Auto-stop when the accumulated blob chunks exceed this many bytes.\n * Default 250 MB. Set `null` to disable.\n */\n maxBytes?: number | null;\n}\n\nexport const AudioRecorder = forwardRef<\n AudioRecorderHandle,\n AudioRecorderProps\n>(\n (\n {\n size = 'md',\n onRecordingComplete,\n onCancel,\n onError,\n maxDurationMs = 30 * 60 * 1000,\n maxBytes = 250 * 1024 * 1024,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const [state, dispatch] = useReducer(reducer, { kind: 'idle' });\n const [stream, setStream] = useState<MediaStream | null>(null);\n const [now, setNow] = useState<number>(Date.now());\n const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n const [selectedDeviceId, setSelectedDeviceId] = useState<string>('');\n\n const recorderRef = useRef<MediaRecorder | null>(null);\n const chunksRef = useRef<Blob[]>([]);\n // Running total of bytes accumulated in `chunksRef` — reading\n // `chunksRef.current.reduce(...)` on every ondataavailable scales\n // poorly; maintain the sum incrementally instead.\n const byteCountRef = useRef<number>(0);\n const durationAtStopRef = useRef<number>(0);\n // Tracks the *currently-held* MediaStream in a ref so the unmount\n // cleanup effect (which closes over [] deps) sees the latest value.\n // Without this, a unmount while getUserMedia is pending would never\n // stop() tracks and the browser mic indicator stays on.\n const streamRef = useRef<MediaStream | null>(null);\n // Flips to true on unmount; consulted inside the getUserMedia promise\n // resolution so we don't try to setStream() on a dead component and\n // so the freshly-acquired tracks get released immediately.\n const unmountedRef = useRef<boolean>(false);\n // Flips to true when cancel() is called; the onstop handler reads it\n // so `onRecordingComplete` is NOT invoked on a cancel path with a blank\n // blob. Reset on each recording start.\n const cancelledRef = useRef<boolean>(false);\n // Monotonic `performance.now()` start timestamp for the max-duration\n // timer. Wall-clock `Date.now()` jumps on NTP / timezone changes.\n const perfStartRef = useRef<number>(0);\n\n const supported = typeof MediaRecorder !== 'undefined';\n\n /* ── Enumerate devices once (after any prior permission grant) ── */\n useEffect(() => {\n if (!supported || !navigator.mediaDevices?.enumerateDevices) return;\n navigator.mediaDevices\n .enumerateDevices()\n .then((list) => {\n const mics = list.filter((d) => d.kind === 'audioinput');\n setDevices(mics);\n })\n .catch(() => {\n /* ignore */\n });\n }, [supported]);\n\n /* ── Timer tick ── */\n useEffect(() => {\n if (state.kind !== 'recording') return;\n const handle = window.setInterval(() => setNow(Date.now()), 250);\n return () => window.clearInterval(handle);\n }, [state.kind]);\n\n const cleanupStream = useCallback(() => {\n const held = streamRef.current ?? stream;\n held?.getTracks().forEach((t) => t.stop());\n streamRef.current = null;\n setStream(null);\n }, [stream]);\n\n const requestAndStart = useCallback(async () => {\n if (!supported) {\n dispatch({ type: 'error', kind: 'unsupported' });\n onError?.('unsupported');\n return;\n }\n dispatch({ type: 'request' });\n cancelledRef.current = false;\n try {\n const nextStream = await navigator.mediaDevices.getUserMedia({\n audio: selectedDeviceId\n ? { deviceId: { exact: selectedDeviceId } }\n : true,\n });\n // Guard against unmount OR a cancel() between the permission prompt\n // and resolution — otherwise the freshly-acquired tracks leak and the\n // browser's mic indicator stays live, secretly capturing audio.\n if (unmountedRef.current || cancelledRef.current) {\n nextStream.getTracks().forEach((tr) => tr.stop());\n return;\n }\n streamRef.current = nextStream;\n setStream(nextStream);\n const mimeType = pickMimeType();\n const recorder = new MediaRecorder(\n nextStream,\n mimeType ? { mimeType } : undefined,\n );\n recorderRef.current = recorder;\n chunksRef.current = [];\n byteCountRef.current = 0;\n recorder.ondataavailable = (event) => {\n if (event.data && event.data.size > 0) {\n chunksRef.current.push(event.data);\n byteCountRef.current += event.data.size;\n // Byte-cap: auto-stop if the recording would exceed maxBytes.\n // Cheaper than summing on every tick; stop once and bail.\n if (\n typeof maxBytes === 'number' &&\n byteCountRef.current >= maxBytes &&\n recorderRef.current?.state === 'recording'\n ) {\n onError?.('max-size');\n try {\n recorderRef.current.stop();\n } catch {\n /* ignore */\n }\n }\n }\n };\n recorder.onstop = () => {\n // Cancel path: drop the blob on the floor — consumers who called\n // cancel() must not receive a silent empty recording.\n if (!cancelledRef.current) {\n const blob = new Blob(chunksRef.current, {\n type: mimeType ?? 'audio/webm',\n });\n onRecordingComplete?.(blob, durationAtStopRef.current);\n }\n chunksRef.current = [];\n recorderRef.current = null;\n nextStream.getTracks().forEach((tr) => tr.stop());\n streamRef.current = null;\n setStream(null);\n cancelledRef.current = false;\n };\n perfStartRef.current = performance.now();\n recorder.start(1000);\n dispatch({ type: 'start' });\n } catch (err: unknown) {\n const errorName = err instanceof Error ? err.name : '';\n if (errorName === 'NotAllowedError' || errorName === 'SecurityError') {\n dispatch({ type: 'error', kind: 'permission-denied' });\n onError?.('permission-denied');\n } else if (\n errorName === 'NotFoundError' ||\n errorName === 'OverconstrainedError'\n ) {\n dispatch({ type: 'error', kind: 'no-device' });\n onError?.('no-device');\n } else {\n dispatch({ type: 'error', kind: 'capture-failed' });\n onError?.('capture-failed');\n }\n }\n }, [onError, onRecordingComplete, selectedDeviceId, supported]);\n\n const pause = useCallback(() => {\n recorderRef.current?.pause();\n dispatch({ type: 'pause' });\n }, []);\n\n const resume = useCallback(() => {\n recorderRef.current?.resume();\n dispatch({ type: 'resume' });\n }, []);\n\n const stop = useCallback(() => {\n if (state.kind === 'recording' || state.kind === 'paused') {\n const started = state.startedAt;\n const pausedMs = state.pausedMs;\n const duration = Date.now() - started - pausedMs;\n durationAtStopRef.current = Math.max(0, duration);\n dispatch({ type: 'stop', duration: duration });\n }\n try {\n recorderRef.current?.stop();\n } catch {\n /* stop() throws on non-recording state; safe to swallow */\n }\n }, [state]);\n\n const cancel = useCallback(() => {\n // Flip the cancelled flag BEFORE asking MediaRecorder to stop so the\n // async onstop handler sees it and skips onRecordingComplete.\n cancelledRef.current = true;\n try {\n recorderRef.current?.stop();\n } catch {\n /* ignore */\n }\n chunksRef.current = [];\n recorderRef.current = null;\n cleanupStream();\n dispatch({ type: 'cancel' });\n onCancel?.();\n }, [cleanupStream, onCancel]);\n\n /* ── Max-duration auto-stop ── */\n useEffect(() => {\n if (state.kind !== 'recording') return;\n if (typeof maxDurationMs !== 'number' || maxDurationMs <= 0) return;\n // Use the monotonic clock so an NTP / timezone jump mid-recording\n // doesn't skew the remaining-time calc.\n const alreadyElapsed =\n performance.now() - perfStartRef.current - state.pausedMs;\n const remaining = Math.max(0, maxDurationMs - alreadyElapsed);\n const handle = window.setTimeout(() => {\n if (recorderRef.current?.state === 'recording') {\n onError?.('max-duration');\n try {\n recorderRef.current.stop();\n } catch {\n /* ignore */\n }\n }\n }, remaining);\n return () => window.clearTimeout(handle);\n }, [state, maxDurationMs, onError]);\n\n /* ── Unmount cleanup: release mic if still held ── */\n useEffect(() => {\n return () => {\n unmountedRef.current = true;\n try {\n recorderRef.current?.stop();\n } catch {\n /* ignore */\n }\n // Use streamRef so we see a stream that was acquired by an\n // in-flight getUserMedia resolution — not just the one captured\n // by the closure at mount.\n streamRef.current?.getTracks().forEach((tr) => tr.stop());\n streamRef.current = null;\n };\n }, []);\n\n const elapsedMs =\n state.kind === 'recording'\n ? now - state.startedAt - state.pausedMs\n : state.kind === 'paused'\n ? state.pausedAt - state.startedAt - state.pausedMs\n : state.kind === 'stopped'\n ? state.duration\n : 0;\n\n const agentHandle = useMemo<AudioRecorderHandle>(\n () => ({\n isRecording: () => state.kind === 'recording',\n getDuration: () => elapsedMs,\n hasRecording: () => state.kind === 'stopped',\n startRecording: () => requestAndStart(),\n stopRecording: () => stop(),\n discard: () => cancel(),\n }),\n [state, elapsedMs, requestAndStart, stop, cancel],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(audioRecorderAgent, agentHandle, rest.id);\n\n const deviceOptions: SelectOption<string>[] = devices.map((d) => ({\n value: d.deviceId,\n label: d.label || t('chat.audio.selectDevice'),\n }));\n\n const statusText = (() => {\n switch (state.kind) {\n case 'idle':\n return t('chat.audio.idle');\n case 'requesting':\n return t('common.loading');\n case 'recording':\n return t('chat.audio.recording');\n case 'paused':\n return t('chat.audio.paused');\n case 'stopped':\n return t('chat.audio.idle');\n case 'error':\n if (state.type === 'permission-denied')\n return t('chat.audio.permissionDenied');\n if (state.type === 'unsupported') return t('chat.audio.unsupported');\n return t('chat.audio.idle');\n }\n })();\n\n const isRecording = state.kind === 'recording';\n const isPaused = state.kind === 'paused';\n const hasError = state.kind === 'error';\n\n return (\n <div\n data-component=\"audio-recorder\"\n data-component-id={rest.id}\n className={rootVariants({ size, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span\n aria-hidden=\"true\"\n className={[\n 'ds:relative ds:inline-flex ds:size-3 ds:items-center ds:justify-center ds:rounded-[var(--radius-full)]',\n isRecording\n ? 'ds:bg-[color:var(--destructive)]'\n : 'ds:bg-[color:var(--muted)]',\n ].join(' ')}\n >\n {isRecording ? (\n <span\n className={[\n 'ds:absolute ds:inset-0 ds:rounded-[var(--radius-full)]',\n 'ds:bg-[color:var(--destructive)]',\n 'ds:motion-safe:animate-[var(--accessible-off,recorder-pulse_1.2s_ease-out_infinite)]',\n ].join(' ')}\n />\n ) : null}\n </span>\n <AudioVisualiser\n stream={stream}\n size=\"sm\"\n aria-hidden=\"true\"\n className=\"ds:flex-1\"\n />\n <time\n dir=\"ltr\"\n aria-hidden=\"true\"\n className=\"ds:tabular-nums type-meta ds:text-[color:var(--muted-foreground)]\"\n >\n {formatTimer(elapsedMs, i18n.language)}\n </time>\n </div>\n\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {statusText}\n </span>\n\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {state.kind === 'idle' || state.kind === 'stopped' || hasError ? (\n <Button\n intent=\"primary\"\n size=\"sm\"\n startIcon={<Mic />}\n onClick={requestAndStart}\n disabled={!supported}\n >\n {t('chat.audio.record')}\n </Button>\n ) : null}\n {isRecording ? (\n <IconButton\n icon={<Pause />}\n aria-label={t('chat.audio.pause')}\n intent=\"secondary\"\n size=\"sm\"\n onClick={pause}\n />\n ) : null}\n {isPaused ? (\n <IconButton\n icon={<Play />}\n aria-label={t('chat.audio.resume')}\n intent=\"secondary\"\n size=\"sm\"\n onClick={resume}\n />\n ) : null}\n {isRecording || isPaused ? (\n <>\n <IconButton\n icon={<Square />}\n aria-label={t('chat.audio.stop')}\n intent=\"primary\"\n size=\"sm\"\n onClick={stop}\n />\n <IconButton\n icon={<X />}\n aria-label={t('chat.audio.cancel')}\n intent=\"ghost\"\n size=\"sm\"\n onClick={cancel}\n />\n </>\n ) : null}\n {state.kind === 'idle' && deviceOptions.length > 1 ? (\n <div className=\"ds:ms-auto ds:min-w-[160px]\">\n <Select\n aria-label={t('chat.audio.selectDevice')}\n options={deviceOptions}\n value={selectedDeviceId}\n onValueChange={(v) => setSelectedDeviceId(v)}\n size=\"sm\"\n clearable\n />\n </div>\n ) : null}\n </div>\n\n {hasError && state.kind === 'error' ? (\n <Alert variant=\"error\" live=\"polite\">\n <Alert.Description>{statusText}</Alert.Description>\n {state.type === 'permission-denied' ? (\n <Alert.Action>\n <Button intent=\"ghost\" size=\"sm\" onClick={requestAndStart}>\n {t('chat.audio.retry')}\n </Button>\n </Alert.Action>\n ) : null}\n </Alert>\n ) : null}\n </div>\n );\n },\n);\n\nAudioRecorder.displayName = 'AudioRecorder';\n"],"names":["__iconNode","Pause","createLucideIcon","Play","audioRecorderAgent","handle","reducer","state","action","rootVariants","cva","MIME_PREFERENCES","pickMimeType","mime","formatTimer","ms","locale","total","minutes","seconds","fmt","n","AudioRecorder","forwardRef","size","onRecordingComplete","onCancel","onError","maxDurationMs","maxBytes","className","rest","ref","t","i18n","useTranslation","dispatch","useReducer","stream","setStream","useState","now","setNow","devices","setDevices","selectedDeviceId","setSelectedDeviceId","recorderRef","useRef","chunksRef","byteCountRef","durationAtStopRef","streamRef","unmountedRef","cancelledRef","perfStartRef","supported","useEffect","_a","list","mics","d","cleanupStream","useCallback","held","requestAndStart","nextStream","tr","mimeType","recorder","event","blob","err","errorName","pause","resume","stop","started","pausedMs","duration","cancel","alreadyElapsed","remaining","_b","elapsedMs","agentHandle","useMemo","useImperativeHandle","useAgentRegistration","deviceOptions","statusText","isRecording","isPaused","hasError","jsxs","jsx","AudioVisualiser","Button","Mic","IconButton","Fragment","Square","X","Select","v","Alert"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -2,7 +2,7 @@ import { jsxs as m, jsx as r, Fragment as v } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect as f, forwardRef as h } from "react";
|
|
3
3
|
import { c as l } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as g } from "react-i18next";
|
|
5
|
-
import { A as c } from "./alert-
|
|
5
|
+
import { A as c } from "./alert-DjsJMGRE.js";
|
|
6
6
|
import { i as u } from "./is-development-CLUAnsU7.js";
|
|
7
7
|
import { a as p } from "./safe-href-5dbsfbQn.js";
|
|
8
8
|
import { B as b } from "./use-registration-submit-eWAECgUC.js";
|
|
@@ -83,4 +83,4 @@ export {
|
|
|
83
83
|
S as d,
|
|
84
84
|
D as u
|
|
85
85
|
};
|
|
86
|
-
//# sourceMappingURL=auth-form-parts-
|
|
86
|
+
//# sourceMappingURL=auth-form-parts-DwUTH6YN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-form-parts-Cmb41LSQ.js","sources":["../../src/patterns/_shared/auth-form-parts.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* The parts LoginForm and ForgotPasswordForm share: the top of the */\n/* card, the message above the fields, and the host's extra hidden */\n/* inputs for a native post. They follow RegistrationForm, so the three */\n/* cards of the signed-out pages look and behave as one family. */\n/* */\n/* Shipped with the patterns that import it; not an export of its own. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useEffect, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Alert, type AlertAnnounce } from '../../components/alert';\nimport { isDevelopment } from '../../components/_shared/is-development';\nimport { isSameSiteHref } from '../../components/_shared/safe-href';\nimport { BrandMark, type BrandMarkMotion } from './brand-mark';\n\n// A brand name, not interface copy: it reads the same in every language,\n// so it has no translation key.\nconst BRAND_NAME = 'Alfadocs';\n\n/** The top of the card: the mark, the heading and its line. */\nconst headingBlockVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]',\n {\n variants: {\n centred: { true: 'ds:items-center ds:text-center', false: '' },\n },\n defaultVariants: { centred: true },\n },\n);\n\n// The message above the fields can take focus, so it shows a ring like\n// anything else that does.\nconst formMessageVariants = cva(\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]',\n);\n\n// A link under the card's button takes the text colour and an underline.\n// The kit Link's own colour (`--primary`) falls just below AA on a card in\n// the dark theme, as RegistrationForm's links found. The `before` box\n// makes the touch target 44px high without moving the text.\nconst textLinkVariants = cva(\n 'type-body-sm ds:relative ds:self-center ds:rounded-[var(--radius-sm)] ds:underline ds:underline-offset-4 ds:text-[var(--foreground)] ds:before:absolute ds:before:inset-x-0 ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]',\n);\n\nexport interface AuthTextLinkProps {\n href: string;\n /** Emitted as `data-action`. */\n action: string;\n children: ReactNode;\n}\n\n/** The quiet link under the card's button: \"Forgot password?\", \"Back to\n * sign in\". */\nexport function AuthTextLink({ href, action, children }: AuthTextLinkProps) {\n return (\n <a href={href} data-action={action} className={textLinkVariants()}>\n {children}\n </a>\n );\n}\n\nexport interface AuthCardHeadingProps {\n /** The id the form is labelled by. */\n id: string;\n title: string;\n description?: string;\n level: 1 | 2 | 3;\n showLogo: boolean;\n logoMotion: BrandMarkMotion;\n}\n\n/** The mark, the heading and the line under it. */\nexport function AuthCardHeading({\n id,\n title,\n description,\n level,\n showLogo,\n logoMotion,\n}: AuthCardHeadingProps) {\n const Heading = `h${level}` as const;\n return (\n <div className={headingBlockVariants({ centred: showLogo })}>\n {/* The page's logo: read out once, before the heading. */}\n {showLogo && <BrandMark motion={logoMotion} label={BRAND_NAME} />}\n <Heading id={id} className=\"type-title-card\">\n {title}\n </Heading>\n {description && (\n <p className=\"type-body-sm ds:text-[var(--muted-foreground)]\">\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface AuthFormMessageProps {\n id?: string;\n /** Off while the error summary reads the message (see\n * useFormMessageAnnounce); the Alert's default otherwise. */\n announce?: AlertAnnounce;\n children: ReactNode;\n}\n\n/** The server's message about the whole form, above the fields. */\nexport const AuthFormMessage = forwardRef<HTMLDivElement, AuthFormMessageProps>(\n ({ id, announce, children }, ref) => (\n <Alert\n ref={ref}\n id={id}\n variant=\"error\"\n announce={announce}\n tabIndex={-1}\n data-field=\"form\"\n className={formMessageVariants()}\n >\n <Alert.Description>{children}</Alert.Description>\n </Alert>\n ),\n);\nAuthFormMessage.displayName = 'AuthFormMessage';\n\n/**\n * The host's extra hidden inputs for a native post: a CSRF token, a\n * return address. The form's own fields keep their names, so an extra\n * one that asks for the same name is left out, and said so in\n * development.\n */\nexport function useExtraFields(\n component: string,\n native: boolean,\n fieldNames: Readonly<Record<string, string | undefined>> | undefined,\n hiddenFields: Readonly<Record<string, string>> | undefined,\n): [string, string][] {\n const ownNames = new Set(Object.values(fieldNames ?? {}));\n const all = native ? Object.entries(hiddenFields ?? {}) : [];\n const clashes = all\n .filter(([name]) => ownNames.has(name))\n .map(([name]) => name)\n .join(', ');\n useEffect(() => {\n if (clashes && isDevelopment()) {\n console.warn(\n `${component}: hiddenFields \"${clashes}\" is also named in fieldNames and was left out. The form's own field wins.`,\n );\n }\n }, [clashes, component]);\n return all.filter(([name]) => !ownNames.has(name));\n}\n\n/**\n * The address a native post may go to: a path, or an address on the\n * page's own origin. Anything else is refused, and the form then posts to\n * the current address. Wiring that cannot work as written is said so in\n * development, because nothing on the page shows it.\n */\nexport function useFormAction(\n component: string,\n native: boolean,\n action: string | undefined,\n): string | undefined {\n const accepted =\n native && action && isSameSiteHref(action) ? action : undefined;\n const problem = !action\n ? undefined\n : !native\n ? '`action` does nothing without `fieldNames`: only a native form post has an address.'\n : !accepted\n ? '`action` is not a path or an address on this origin and was left out. The form posts to the current address.'\n : undefined;\n useEffect(() => {\n if (problem && isDevelopment()) console.warn(`${component}: ${problem}`);\n }, [component, problem]);\n return accepted;\n}\n\n/** The extra hidden inputs themselves. */\nexport function ExtraFields({ fields }: { fields: [string, string][] }) {\n return (\n <>\n {fields.map(([name, value]) => (\n <input key={name} type=\"hidden\" name={name} value={value} />\n ))}\n </>\n );\n}\n\n/**\n * Says \"sending\" in words while the form is busy: the button's spinner is\n * decorative and the button is disabled. Always mounted, because a live\n * region announces a change, not its first content.\n */\nexport function AuthFormStatus({ busy }: { busy: boolean }) {\n const { t } = useTranslation('ui');\n return (\n <p role=\"status\" className=\"ds:sr-only\">\n {busy ? t('chat.message.status.sending') : ''}\n </p>\n );\n}\n"],"names":["BRAND_NAME","headingBlockVariants","cva","formMessageVariants","textLinkVariants","AuthTextLink","href","action","children","jsx","AuthCardHeading","id","title","description","level","showLogo","logoMotion","Heading","jsxs","BrandMark","AuthFormMessage","forwardRef","announce","ref","Alert","useExtraFields","component","native","fieldNames","hiddenFields","ownNames","all","clashes","name","useEffect","isDevelopment","useFormAction","accepted","isSameSiteHref","problem","ExtraFields","fields","value","AuthFormStatus","busy","t","useTranslation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-form-parts-DwUTH6YN.js","sources":["../../src/patterns/_shared/auth-form-parts.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* The parts LoginForm and ForgotPasswordForm share: the top of the */\n/* card, the message above the fields, and the host's extra hidden */\n/* inputs for a native post. They follow RegistrationForm, so the three */\n/* cards of the signed-out pages look and behave as one family. */\n/* */\n/* Shipped with the patterns that import it; not an export of its own. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useEffect, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Alert, type AlertAnnounce } from '../../components/alert';\nimport { isDevelopment } from '../../components/_shared/is-development';\nimport { isSameSiteHref } from '../../components/_shared/safe-href';\nimport { BrandMark, type BrandMarkMotion } from './brand-mark';\n\n// A brand name, not interface copy: it reads the same in every language,\n// so it has no translation key.\nconst BRAND_NAME = 'Alfadocs';\n\n/** The top of the card: the mark, the heading and its line. */\nconst headingBlockVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]',\n {\n variants: {\n centred: { true: 'ds:items-center ds:text-center', false: '' },\n },\n defaultVariants: { centred: true },\n },\n);\n\n// The message above the fields can take focus, so it shows a ring like\n// anything else that does.\nconst formMessageVariants = cva(\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]',\n);\n\n// A link under the card's button takes the text colour and an underline.\n// The kit Link's own colour (`--primary`) falls just below AA on a card in\n// the dark theme, as RegistrationForm's links found. The `before` box\n// makes the touch target 44px high without moving the text.\nconst textLinkVariants = cva(\n 'type-body-sm ds:relative ds:self-center ds:rounded-[var(--radius-sm)] ds:underline ds:underline-offset-4 ds:text-[var(--foreground)] ds:before:absolute ds:before:inset-x-0 ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]',\n);\n\nexport interface AuthTextLinkProps {\n href: string;\n /** Emitted as `data-action`. */\n action: string;\n children: ReactNode;\n}\n\n/** The quiet link under the card's button: \"Forgot password?\", \"Back to\n * sign in\". */\nexport function AuthTextLink({ href, action, children }: AuthTextLinkProps) {\n return (\n <a href={href} data-action={action} className={textLinkVariants()}>\n {children}\n </a>\n );\n}\n\nexport interface AuthCardHeadingProps {\n /** The id the form is labelled by. */\n id: string;\n title: string;\n description?: string;\n level: 1 | 2 | 3;\n showLogo: boolean;\n logoMotion: BrandMarkMotion;\n}\n\n/** The mark, the heading and the line under it. */\nexport function AuthCardHeading({\n id,\n title,\n description,\n level,\n showLogo,\n logoMotion,\n}: AuthCardHeadingProps) {\n const Heading = `h${level}` as const;\n return (\n <div className={headingBlockVariants({ centred: showLogo })}>\n {/* The page's logo: read out once, before the heading. */}\n {showLogo && <BrandMark motion={logoMotion} label={BRAND_NAME} />}\n <Heading id={id} className=\"type-title-card\">\n {title}\n </Heading>\n {description && (\n <p className=\"type-body-sm ds:text-[var(--muted-foreground)]\">\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface AuthFormMessageProps {\n id?: string;\n /** Off while the error summary reads the message (see\n * useFormMessageAnnounce); the Alert's default otherwise. */\n announce?: AlertAnnounce;\n children: ReactNode;\n}\n\n/** The server's message about the whole form, above the fields. */\nexport const AuthFormMessage = forwardRef<HTMLDivElement, AuthFormMessageProps>(\n ({ id, announce, children }, ref) => (\n <Alert\n ref={ref}\n id={id}\n variant=\"error\"\n announce={announce}\n tabIndex={-1}\n data-field=\"form\"\n className={formMessageVariants()}\n >\n <Alert.Description>{children}</Alert.Description>\n </Alert>\n ),\n);\nAuthFormMessage.displayName = 'AuthFormMessage';\n\n/**\n * The host's extra hidden inputs for a native post: a CSRF token, a\n * return address. The form's own fields keep their names, so an extra\n * one that asks for the same name is left out, and said so in\n * development.\n */\nexport function useExtraFields(\n component: string,\n native: boolean,\n fieldNames: Readonly<Record<string, string | undefined>> | undefined,\n hiddenFields: Readonly<Record<string, string>> | undefined,\n): [string, string][] {\n const ownNames = new Set(Object.values(fieldNames ?? {}));\n const all = native ? Object.entries(hiddenFields ?? {}) : [];\n const clashes = all\n .filter(([name]) => ownNames.has(name))\n .map(([name]) => name)\n .join(', ');\n useEffect(() => {\n if (clashes && isDevelopment()) {\n console.warn(\n `${component}: hiddenFields \"${clashes}\" is also named in fieldNames and was left out. The form's own field wins.`,\n );\n }\n }, [clashes, component]);\n return all.filter(([name]) => !ownNames.has(name));\n}\n\n/**\n * The address a native post may go to: a path, or an address on the\n * page's own origin. Anything else is refused, and the form then posts to\n * the current address. Wiring that cannot work as written is said so in\n * development, because nothing on the page shows it.\n */\nexport function useFormAction(\n component: string,\n native: boolean,\n action: string | undefined,\n): string | undefined {\n const accepted =\n native && action && isSameSiteHref(action) ? action : undefined;\n const problem = !action\n ? undefined\n : !native\n ? '`action` does nothing without `fieldNames`: only a native form post has an address.'\n : !accepted\n ? '`action` is not a path or an address on this origin and was left out. The form posts to the current address.'\n : undefined;\n useEffect(() => {\n if (problem && isDevelopment()) console.warn(`${component}: ${problem}`);\n }, [component, problem]);\n return accepted;\n}\n\n/** The extra hidden inputs themselves. */\nexport function ExtraFields({ fields }: { fields: [string, string][] }) {\n return (\n <>\n {fields.map(([name, value]) => (\n <input key={name} type=\"hidden\" name={name} value={value} />\n ))}\n </>\n );\n}\n\n/**\n * Says \"sending\" in words while the form is busy: the button's spinner is\n * decorative and the button is disabled. Always mounted, because a live\n * region announces a change, not its first content.\n */\nexport function AuthFormStatus({ busy }: { busy: boolean }) {\n const { t } = useTranslation('ui');\n return (\n <p role=\"status\" className=\"ds:sr-only\">\n {busy ? t('chat.message.status.sending') : ''}\n </p>\n );\n}\n"],"names":["BRAND_NAME","headingBlockVariants","cva","formMessageVariants","textLinkVariants","AuthTextLink","href","action","children","jsx","AuthCardHeading","id","title","description","level","showLogo","logoMotion","Heading","jsxs","BrandMark","AuthFormMessage","forwardRef","announce","ref","Alert","useExtraFields","component","native","fieldNames","hiddenFields","ownNames","all","clashes","name","useEffect","isDevelopment","useFormAction","accepted","isSameSiteHref","problem","ExtraFields","fields","value","AuthFormStatus","busy","t","useTranslation"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { forwardRef as ms, useId as Rt, useRef as _, useCallback as ye, useState
|
|
|
3
3
|
import { c as It } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as W, Trans as zs } from "react-i18next";
|
|
5
5
|
import { u as js } from "./registry-DvAUVLHh.js";
|
|
6
|
-
import { A as ie } from "./alert-
|
|
6
|
+
import { A as ie } from "./alert-DjsJMGRE.js";
|
|
7
7
|
import { B as et } from "./button-D-MQxsA_.js";
|
|
8
8
|
import { C as at } from "./checkbox-BjDv-r3o.js";
|
|
9
9
|
import { C as Us } from "./checkbox-group-Cw2H5qaq.js";
|
|
@@ -3812,4 +3812,4 @@ export {
|
|
|
3812
3812
|
_e as O,
|
|
3813
3813
|
$n as b
|
|
3814
3814
|
};
|
|
3815
|
-
//# sourceMappingURL=booking-
|
|
3815
|
+
//# sourceMappingURL=booking-tTVxKPQY.js.map
|