@alfadocs/ui-kit-debug 1.78.0 → 1.80.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/{address-fields-BUPRs3n-.js → address-fields-GnoSkvh6.js} +2 -2
- package/dist/_chunks/{address-fields-BUPRs3n-.js.map → address-fields-GnoSkvh6.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-vNDyE5HW.js → anamnesis-summary-rows-lONg-zja.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-vNDyE5HW.js.map → anamnesis-summary-rows-lONg-zja.js.map} +1 -1
- package/dist/_chunks/{bishop-score-CdbU9Nl4.js → bishop-score-C5di6oAV.js} +2 -2
- package/dist/_chunks/{bishop-score-CdbU9Nl4.js.map → bishop-score-C5di6oAV.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-DnfiDh4Q.js → bmi-calculator-BIExHBZV.js} +2 -2
- package/dist/_chunks/{bmi-calculator-DnfiDh4Q.js.map → bmi-calculator-BIExHBZV.js.map} +1 -1
- package/dist/_chunks/{booking-Cz_QjIJe.js → booking-By4I_1A-.js} +1766 -1749
- package/dist/_chunks/booking-By4I_1A-.js.map +1 -0
- package/dist/_chunks/{calendar-appointment-editor-dialog-cvUpUjj-.js → calendar-appointment-editor-dialog-DhTTWgXw.js} +3 -3
- package/dist/_chunks/{calendar-appointment-editor-dialog-cvUpUjj-.js.map → calendar-appointment-editor-dialog-DhTTWgXw.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-HO3s5InI.js → cycle-calculator-CQkjVSD2.js} +2 -2
- package/dist/_chunks/{cycle-calculator-HO3s5InI.js.map → cycle-calculator-CQkjVSD2.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-CDWTSblh.js → due-date-calculator-NjTlmoFK.js} +2 -2
- package/dist/_chunks/{due-date-calculator-CDWTSblh.js.map → due-date-calculator-NjTlmoFK.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-CrtBFJl-.js → fetal-weight-Brl3n4LN.js} +2 -2
- package/dist/_chunks/{fetal-weight-CrtBFJl-.js.map → fetal-weight-Brl3n4LN.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-BSOZVrZG.js → forgot-password-form-BQPvDS7i.js} +2 -2
- package/dist/_chunks/{forgot-password-form-BSOZVrZG.js.map → forgot-password-form-BQPvDS7i.js.map} +1 -1
- package/dist/_chunks/form-field-CyHfOVKF.js +185 -0
- package/dist/_chunks/form-field-CyHfOVKF.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-CTHeJJdb.js → gestational-age-calculator-Dr9hdDta.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-CTHeJJdb.js.map → gestational-age-calculator-Dr9hdDta.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-BBk-a33g.js → hcg-doubling-K41Wy7LB.js} +2 -2
- package/dist/_chunks/{hcg-doubling-BBk-a33g.js.map → hcg-doubling-K41Wy7LB.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-Ds1FY-WY.js → help-me-write-templates-BJSf24xS.js} +2 -2
- package/dist/_chunks/{help-me-write-templates-Ds1FY-WY.js.map → help-me-write-templates-BJSf24xS.js.map} +1 -1
- package/dist/_chunks/key-round-DIgsnJSg.js +21 -0
- package/dist/_chunks/key-round-DIgsnJSg.js.map +1 -0
- package/dist/_chunks/{kit-extensions-sNTZWkoo.js → kit-extensions-a0G4COFH.js} +6 -6
- package/dist/_chunks/{kit-extensions-sNTZWkoo.js.map → kit-extensions-a0G4COFH.js.map} +1 -1
- package/dist/_chunks/login-dev-card-CvLHj-_N.js +353 -0
- package/dist/_chunks/login-dev-card-CvLHj-_N.js.map +1 -0
- package/dist/_chunks/{practice-results-BnY2EkzI.js → practice-results-CtOanuzZ.js} +659 -615
- package/dist/_chunks/practice-results-CtOanuzZ.js.map +1 -0
- package/dist/_chunks/{pregnancy-dating-JBAUbM40.js → pregnancy-dating-BHvfDxz4.js} +2 -2
- package/dist/_chunks/{pregnancy-dating-JBAUbM40.js.map → pregnancy-dating-BHvfDxz4.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain--Bqv6AWu.js → pregnancy-weight-gain-BeQRxwdP.js} +2 -2
- package/dist/_chunks/{pregnancy-weight-gain--Bqv6AWu.js.map → pregnancy-weight-gain-BeQRxwdP.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-DQh2SX8G.js → radiograph-panel.agent-BQ95uFCd.js} +2 -2
- package/dist/_chunks/{radiograph-panel.agent-DQh2SX8G.js.map → radiograph-panel.agent-BQ95uFCd.js.map} +1 -1
- package/dist/_chunks/registration-form-CNBfUduG.js +1337 -0
- package/dist/_chunks/registration-form-CNBfUduG.js.map +1 -0
- package/dist/_chunks/reset-password-form-Cf9QPEJu.js +367 -0
- package/dist/_chunks/reset-password-form-Cf9QPEJu.js.map +1 -0
- package/dist/_chunks/{send-registration-link-form-__DWY62q.js → send-registration-link-form-vTn1HxjA.js} +2 -2
- package/dist/_chunks/{send-registration-link-form-__DWY62q.js.map → send-registration-link-form-vTn1HxjA.js.map} +1 -1
- package/dist/_chunks/{task-editor-CRhfwP9T.js → task-editor-Cpw-NmND.js} +2 -2
- package/dist/_chunks/{task-editor-CRhfwP9T.js.map → task-editor-Cpw-NmND.js.map} +1 -1
- package/dist/_chunks/{unit-converter-D59L-gkf.js → unit-converter-BH5ueIhT.js} +2 -2
- package/dist/_chunks/{unit-converter-D59L-gkf.js.map → unit-converter-BH5ueIhT.js.map} +1 -1
- package/dist/_chunks/{voice-control-panel-DQJwe6_Q.js → voice-control-panel-BziKE-KK.js} +2 -2
- package/dist/_chunks/{voice-control-panel-DQJwe6_Q.js.map → voice-control-panel-BziKE-KK.js.map} +1 -1
- package/dist/_chunks/{workflow-webhook-action-BvVPZVpG.js → workflow-webhook-action-DulCpCRz.js} +96 -111
- package/dist/_chunks/workflow-webhook-action-DulCpCRz.js.map +1 -0
- package/dist/agent-catalog.json +91 -5
- package/dist/agent-i18n/en.json +11 -2
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/booking-types.d.ts +16 -1
- package/dist/components/booking/booking-types.d.ts.map +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/cascade.d.ts +3 -0
- package/dist/components/booking/cascade.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts +2 -0
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/form-field/form-field.d.ts +6 -0
- package/dist/components/form-field/form-field.d.ts.map +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.d.ts +19 -2
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/i18n/locales/ar.d.ts +28 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +30 -2
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +28 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +30 -2
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +28 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +30 -2
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +28 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +29 -1
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +28 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +30 -2
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +28 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +30 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +28 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +30 -2
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +28 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +30 -2
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +28 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +30 -2
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +28 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +30 -2
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +28 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +30 -2
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +28 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +30 -2
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +28 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +30 -2
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +28 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +30 -2
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +28 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +30 -2
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +28 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +30 -2
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +28 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +30 -2
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +28 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +30 -2
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +90 -87
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +30 -2
- package/dist/locales/de.json +30 -2
- package/dist/locales/el.json +30 -2
- package/dist/locales/en.json +29 -1
- package/dist/locales/es.json +30 -2
- package/dist/locales/fr.json +30 -2
- package/dist/locales/hi.json +30 -2
- package/dist/locales/it.json +30 -2
- package/dist/locales/ja.json +30 -2
- package/dist/locales/nl.json +30 -2
- package/dist/locales/pl.json +30 -2
- package/dist/locales/pt.json +30 -2
- package/dist/locales/ro.json +30 -2
- package/dist/locales/ru.json +30 -2
- package/dist/locales/sq.json +30 -2
- package/dist/locales/sv.json +30 -2
- package/dist/locales/tr.json +30 -2
- package/dist/locales/zh.json +30 -2
- package/dist/patterns/_shared/password-policy.d.ts +3 -0
- package/dist/patterns/_shared/password-policy.d.ts.map +1 -0
- 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/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/login-form/login-form.d.ts +24 -7
- package/dist/patterns/login-form/login-form.d.ts.map +1 -1
- package/dist/patterns/registration-form/index.d.ts +1 -1
- package/dist/patterns/registration-form/index.d.ts.map +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/registration-form/registration-form.d.ts +27 -0
- package/dist/patterns/registration-form/registration-form.d.ts.map +1 -1
- package/dist/patterns/reset-password-form/index.d.ts +3 -0
- package/dist/patterns/reset-password-form/index.d.ts.map +1 -0
- package/dist/patterns/reset-password-form/index.js +6 -0
- package/dist/patterns/reset-password-form/index.js.map +1 -0
- package/dist/patterns/reset-password-form/reset-password-form.d.ts +108 -0
- package/dist/patterns/reset-password-form/reset-password-form.d.ts.map +1 -0
- package/dist/patterns/send-registration-link-form/index.js +1 -1
- package/dist/patterns/workflow-webhook-action/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +5 -1
- package/dist/_chunks/booking-Cz_QjIJe.js.map +0 -1
- package/dist/_chunks/form-field-Ani72sVY.js +0 -176
- package/dist/_chunks/form-field-Ani72sVY.js.map +0 -1
- package/dist/_chunks/login-dev-card-DRxTPkE9.js +0 -332
- package/dist/_chunks/login-dev-card-DRxTPkE9.js.map +0 -1
- package/dist/_chunks/practice-results-BnY2EkzI.js.map +0 -1
- package/dist/_chunks/registration-form-xORq2s4p.js +0 -1310
- package/dist/_chunks/registration-form-xORq2s4p.js.map +0 -1
- package/dist/_chunks/workflow-webhook-action-BvVPZVpG.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-webhook-action-DulCpCRz.js","sources":["../../src/patterns/workflow-webhook-action/workflow-webhook-action.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* WorkflowWebhookAction — the fields of a workflow's webhook step. */\n/* */\n/* The step sends a signed message to another app, such as Link, each */\n/* time a patient reaches it. The fields ask for what most practices */\n/* need, the address and the secret, and keep the extra parameters in */\n/* an Advanced section that stays closed until it is used. */\n/* */\n/* It renders fields, not a form: the host keeps its own form, title */\n/* and Save button around it. Given `fieldNames`, the inputs post to the */\n/* host's own names, so a server form needs no change. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cva } from 'class-variance-authority';\nimport { Check, CircleAlert, Copy, KeyRound, Send } from 'lucide-react';\nimport { CodeBlock } from '../../components/_shared/code-block';\nimport { Accordion } from '../../components/accordion';\nimport { Alert } from '../../components/alert';\nimport { Badge } from '../../components/badge';\nimport { Button, IconButton } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { Checkbox } from '../../components/checkbox';\nimport { FieldArray } from '../../components/field-array';\nimport { FormField } from '../../components/form-field';\nimport { PasswordInput } from '../../components/password-input';\nimport { TextInput } from '../../components/text-input';\nimport { TokenInsertMenu } from '../../components/token-insert-menu';\nimport { useCopyToClipboard } from '../../hooks/use-copy-to-clipboard';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/** The fields of the step, in the order they appear. */\nexport const WORKFLOW_WEBHOOK_ACTION_FIELDS = [\n 'url',\n 'secret',\n 'legalBasisConfirmed',\n 'parameters',\n] as const;\n\nexport type WorkflowWebhookActionField =\n (typeof WORKFLOW_WEBHOOK_ACTION_FIELDS)[number];\n\n/** One parameter value as the platform stores it: a flat scalar. */\nexport type WorkflowWebhookParameterValue = string | number | boolean | null;\n\n/** What the step holds now. Mirrors the platform's\n * `SendHttpRequestWorkflowActionDto`. */\nexport interface WorkflowWebhookActionValues {\n /** Where the message goes: platform `url`. */\n url: string;\n /**\n * A new signing secret: platform `secret`, stored encrypted as\n * `encryptedSecret`. Empty means \"keep the saved one\". The server never\n * sends a saved secret back.\n */\n secret: string;\n /** The extra parameters: platform `parameters`, a flat map of scalars. */\n parameters: Record<string, WorkflowWebhookParameterValue>;\n /** The consent box: platform `legalBasisConfirmed`. */\n legalBasisConfirmed: boolean;\n}\n\n/** Values to show when the fields open. There is no secret here, on\n * purpose: a saved secret is never sent back to the browser. */\nexport type WorkflowWebhookActionInitialValues = Partial<\n Omit<WorkflowWebhookActionValues, 'secret'>\n>;\n\n/** Messages from the server, already translated, one per field. */\nexport type WorkflowWebhookActionErrors = Partial<\n Record<WorkflowWebhookActionField, string>\n>;\n\n/** The host's own form field names, for a native form post. */\nexport type WorkflowWebhookActionFieldNames = Record<\n WorkflowWebhookActionField,\n string\n>;\n\n/** A variable the user can insert into a parameter value. */\nexport interface WorkflowWebhookActionPlaceholder {\n /** The code the server replaces, such as `[[NOME]]`. */\n value: string;\n /** What the user reads, translated, such as \"First name\". */\n label: string;\n}\n\n/**\n * What a test message got back, as the host's server saw it.\n * `answered`: the app replied with this HTTP status. `unreachable`: no\n * reply at all (the address does not resolve, refuses, times out or has\n * no valid certificate). `message` replaces the fields' own words, already\n * translated, when the server knows better.\n */\nexport type WorkflowWebhookTestResult =\n | { outcome: 'answered'; status: number; message?: string }\n | { outcome: 'unreachable'; message?: string };\n\nexport interface WorkflowWebhookActionProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'children' | 'onChange'\n> {\n /**\n * Host content above the fields, such as the plan notice (\"Included in\n * the trial and the Elite plans\"). Nothing in it is posted.\n */\n children?: ReactNode;\n /**\n * Values to show when the fields open. Read once. Parameters keep the\n * order and the names they are given; a number beyond\n * `Number.MAX_SAFE_INTEGER` has already lost precision by the time it\n * arrives here.\n */\n initialValues?: WorkflowWebhookActionInitialValues;\n /**\n * True when the step already has a secret. The secret field is then\n * optional: left empty, the saved secret stays.\n */\n hasSavedSecret?: boolean;\n /**\n * Messages from the server, already translated. A field's message shows\n * until the user changes that field; when the fields open with\n * messages, focus goes to the first one. A message on `parameters`\n * opens the Advanced section.\n *\n * A React host keeps `errors` in state: each new object is a new answer\n * from the server, shown even when its words match the last one.\n */\n errors?: WorkflowWebhookActionErrors;\n /**\n * For a native form post: the host's own field names. The parameters\n * post as one JSON object, or an empty string when there are none. The\n * consent box posts `1` when ticked and nothing when not. The fields\n * must sit inside the host's `<form>`.\n */\n fieldNames?: WorkflowWebhookActionFieldNames;\n /**\n * The variables the user can insert into a parameter value, listed in\n * Advanced with a copy button each. Default: the three the platform\n * replaces in a webhook step (salutation, first name, last name), with\n * the kit's own labels. An empty list hides the menu and the list.\n */\n placeholders?: ReadonlyArray<WorkflowWebhookActionPlaceholder>;\n /**\n * Shows \"Send test\". Called with the values when the user asks for a\n * test, once the address and the secret pass their checks; the host's\n * server sends a sample message (invented IDs, no patient data, marked\n * as a test) signed with that secret, or with the saved one when\n * `secret` is empty, and resolves with what came back. A rejected\n * promise reads as \"the test could not be sent\". Without it, no button.\n */\n onSendTest?: (\n values: WorkflowWebhookActionValues,\n ) => Promise<WorkflowWebhookTestResult>;\n /** For React hosts: called with the values after each change. */\n onValueChange?: (values: WorkflowWebhookActionValues) => void;\n /**\n * How the \"What Alfadocs sends\" card lays out the message body and its\n * headers. `two-column` (default): side by side once the fields are\n * 720px wide; narrower, as on a phone, one above the other.\n * `one-column`: always one above the other, for a narrow card or a side\n * panel.\n */\n layout?: 'two-column' | 'one-column';\n}\n\n/* -------------------------------------------------------------------- */\n/* Styles */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:w-full ds:flex-col ds:gap-[var(--spacing-lg)] ds:text-start ds:text-[var(--foreground)]',\n);\n\n// Two columns: the fields side by side, read left to right.\n// Side by side when wide: two to a row, or three for the variables so\n// none of the three sits alone.\nconst fieldsGridVariants = cva(\n 'ds:m-0 ds:grid ds:gap-x-[var(--spacing-xl)] ds:gap-y-[var(--spacing-md)]',\n {\n variants: {\n columns: {\n 1: 'ds:grid-cols-1',\n 2: 'ds:grid-cols-2',\n 3: 'ds:grid-cols-3',\n },\n },\n defaultVariants: { columns: 1 },\n },\n);\n\nconst referenceSectionVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-sm)]',\n);\n\nconst sectionHeadingVariants = cva('type-title-item ds:text-foreground');\n\nconst fieldNameVariants = cva(\n 'ds:min-w-0 ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:font-mono type-body-sm ds:text-foreground ds:[overflow-wrap:anywhere]',\n);\n\nconst helpVariants = cva('type-body-sm ds:text-muted-foreground');\n\nconst errorVariants = cva(\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive',\n);\n\nconst parameterRowVariants = cva(\n 'ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-sm)] ds:sm:grid-cols-2',\n);\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\n/** The platform posts only to an address that starts with exactly this:\n * `ResolveSafeDestinationService::isHttpsUrl`. */\nconst HTTPS = 'https://';\n\n/** The platform's limit on the address (`SendHttpRequestWorkflowActionType`). */\nconst URL_MAX_LENGTH = 2048;\n\n/** From this width the fields every message carries sit two to a row:\n * room for two readable descriptions. The pattern's own width, not the\n * window's, so it fits whatever space the host gives. */\nconst TWO_COLUMN_MIN_WIDTH = 720;\n\n/** The variables the platform replaces in a parameter value, the same in\n * every language: `GetPlaceholdersForContextService`, webhook context. */\nconst PLATFORM_VARIABLES = {\n salutation: '[[TITOLO]]',\n firstName: '[[NOME]]',\n lastName: '[[COGNOME]]',\n} as const;\n\n/* The example message. Its shape is the platform's\n * (`SendHttpRequestService`, `HmacSignature`); every value is invented. */\nconst EXAMPLE_IDEMPOTENCY_KEY = 'wf12-e345-a67';\nconst EXAMPLE_BODY = {\n sentAt: '2026-10-12T09:00:00+02:00',\n idempotencyKey: EXAMPLE_IDEMPOTENCY_KEY,\n practiceId: 1234,\n workflowId: 12,\n workflowActionId: 67,\n workflowEnrollmentId: 345,\n patientId: 5678,\n};\nconst EXAMPLE_HEADERS = [\n 'Content-Type: application/json',\n `X-AlfaDocs-Idempotency-Key: ${EXAMPLE_IDEMPOTENCY_KEY}`,\n 'X-AlfaDocs-Request-Timestamp: 1791788400000',\n 'X-AlfaDocs-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',\n].join('\\n');\n\ninterface ParameterRow {\n /** Opaque and stable for the row's life: never the name or value. */\n key: string;\n name: string;\n value: string;\n /** What the row arrived with, kept so a saved parameter posts back\n * exactly as it was: a number or boolean as one, not as text. */\n original?: { name: string; value: WorkflowWebhookParameterValue };\n}\n\nconst textOf = (value: WorkflowWebhookParameterValue): string =>\n value === null ? '' : String(value);\n\nconst isUntouched = (row: ParameterRow): boolean =>\n row.original !== undefined &&\n row.name === row.original.name &&\n row.value === textOf(row.original.value);\n\n/**\n * The rows as the server stores them, in the user's order. Names are kept\n * as typed. A new row without a name is left out: the checks stop a\n * submit before that can lose a value.\n */\nconst parameterEntries = (\n rows: ReadonlyArray<ParameterRow>,\n): Array<[string, WorkflowWebhookParameterValue]> =>\n rows.flatMap((row): Array<[string, WorkflowWebhookParameterValue]> => {\n if (row.original !== undefined && isUntouched(row)) {\n return [[row.original.name, row.original.value]];\n }\n if (row.name.trim() === '') return [];\n return [[row.name, row.value]];\n });\n\n/** One JSON object, written by hand so the order is the user's: a plain\n * object would move number-like names to the front. */\nconst parametersJsonOf = (\n entries: ReadonlyArray<[string, WorkflowWebhookParameterValue]>,\n): string =>\n entries.length === 0\n ? ''\n : `{${entries\n .map(\n ([name, value]) => `${JSON.stringify(name)}:${JSON.stringify(value)}`,\n )\n .join(',')}}`;\n\n/** 32 random bytes as hex: 64 characters the receiving app can store. */\nconst generateSecret = (): string => {\n const bytes = new Uint8Array(32);\n globalThis.crypto.getRandomValues(bytes);\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(\n '',\n );\n};\n\ntype FocusTarget =\n | {\n kind: 'url' | 'secret' | 'legal' | 'copy' | 'add' | 'parametersError';\n }\n | { kind: 'parameter'; key: string };\n\n/** Where focus goes when the fields open with the server's messages. */\nconst firstServerMessage = (\n errors: WorkflowWebhookActionErrors | undefined,\n): FocusTarget | null => {\n if (errors?.url) return { kind: 'url' };\n if (errors?.secret) return { kind: 'secret' };\n if (errors?.legalBasisConfirmed) return { kind: 'legal' };\n if (errors?.parameters) return { kind: 'parametersError' };\n return null;\n};\n\ninterface SentFieldProps {\n /** The field or header name, as the receiving app reads it. */\n name: string;\n /** What it holds, in plain words. */\n description: string;\n /** Told whether the copy worked, so the fields can say so. */\n onCopied: (copied: boolean) => void;\n}\n\n/** One field every message carries: its name to copy, then its meaning.\n * Renders a `<dl>` group, so it sits inside a `<dl>`. */\nfunction SentField({ name, description, onCopied }: SentFieldProps) {\n const { t } = useTranslation('ui');\n // \"Copy [[NOME]]\" alone does not say what it is: the meaning describes it.\n const descriptionId = useId();\n const { status, copy } = useCopyToClipboard();\n const copied = status === 'copied';\n const failed = status === 'error';\n return (\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <dt className=\"ds:flex ds:min-w-0 ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <code dir=\"ltr\" className={fieldNameVariants()}>\n {name}\n </code>\n <IconButton\n icon={copied ? <Check /> : failed ? <CircleAlert /> : <Copy />}\n size=\"sm\"\n intent=\"ghost\"\n aria-label={t('keyValuePair.copy', { label: name })}\n aria-describedby={descriptionId}\n data-action=\"copy-field\"\n data-copied={copied ? 'true' : undefined}\n onClick={() => void copy(name).then(onCopied)}\n />\n {/* Seen, not heard: the fields announce the copy once. */}\n {copied ? (\n <span aria-hidden=\"true\" className=\"type-body-sm ds:text-success\">\n {t('copyField.copied')}\n </span>\n ) : failed ? (\n <span aria-hidden=\"true\" className=\"type-body-sm ds:text-destructive\">\n {t('copyField.copyFailed')}\n </span>\n ) : null}\n </dt>\n <dd\n id={descriptionId}\n className=\"ds:m-0 type-body-sm ds:text-muted-foreground\"\n >\n {description}\n </dd>\n </div>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\n/**\n * The fields of a workflow's webhook step. Mount it inside the host's\n * form, between the page title and the Save button.\n */\nexport const WorkflowWebhookAction = forwardRef<\n HTMLDivElement,\n WorkflowWebhookActionProps\n>(\n (\n {\n children,\n initialValues,\n hasSavedSecret = false,\n errors,\n fieldNames,\n placeholders,\n onSendTest,\n onValueChange,\n layout = 'two-column',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n\n // Every message's fields, in the order the receiving app most likely\n // needs them: the body the platform's `SendHttpRequestService` builds.\n const sentFields: ReadonlyArray<readonly [string, string]> = [\n ['patientId', t('workflowWebhookAction.sent.patientId')],\n ['practiceId', t('workflowWebhookAction.sent.practiceId')],\n ['workflowId', t('workflowWebhookAction.sent.workflowId')],\n ['workflowActionId', t('workflowWebhookAction.sent.workflowActionId')],\n [\n 'workflowEnrollmentId',\n t('workflowWebhookAction.sent.workflowEnrollmentId'),\n ],\n ['sentAt', t('workflowWebhookAction.sent.sentAt')],\n ['idempotencyKey', t('workflowWebhookAction.sent.idempotencyKey')],\n ['parameters', t('workflowWebhookAction.sent.parameters')],\n ];\n // Every message's headers: the platform's `HmacSignature` and sender.\n const sentHeaders: ReadonlyArray<readonly [string, string]> = [\n ['X-AlfaDocs-Signature', t('workflowWebhookAction.headers.signature')],\n [\n 'X-AlfaDocs-Request-Timestamp',\n t('workflowWebhookAction.headers.timestamp'),\n ],\n [\n 'X-AlfaDocs-Idempotency-Key',\n t('workflowWebhookAction.headers.idempotency'),\n ],\n ];\n const legalErrorId = useId();\n const bodyLabelId = useId();\n const headersLabelId = useId();\n const variablesLabelId = useId();\n const testHelpId = useId();\n\n // The variables a value may carry: the host's, or the platform's three.\n const variables: ReadonlyArray<WorkflowWebhookActionPlaceholder> =\n placeholders ?? [\n {\n value: PLATFORM_VARIABLES.salutation,\n label: t('workflowWebhookAction.variableSalutation'),\n },\n {\n value: PLATFORM_VARIABLES.firstName,\n label: t('workflowWebhookAction.variableFirstName'),\n },\n {\n value: PLATFORM_VARIABLES.lastName,\n label: t('workflowWebhookAction.variableLastName'),\n },\n ];\n\n /* ------------------------------ State ----------------------------- */\n\n const keyCounter = useRef(0);\n const nextKey = () => {\n keyCounter.current += 1;\n return `parameter-${keyCounter.current}`;\n };\n\n const [url, setUrl] = useState(() => initialValues?.url ?? '');\n const [secret, setSecret] = useState('');\n // True from a generated secret until the user changes it: the field\n // then says to copy it into the app now.\n const [generated, setGenerated] = useState(false);\n const [rows, setRows] = useState<ParameterRow[]>(() =>\n Object.entries(initialValues?.parameters ?? {}).map(([name, value]) => {\n keyCounter.current += 1;\n return {\n key: `parameter-${keyCounter.current}`,\n name,\n value: textOf(value),\n original: { name, value },\n };\n }),\n );\n const [legal, setLegal] = useState(\n () => initialValues?.legalBasisConfirmed ?? false,\n );\n const [advancedOpen, setAdvancedOpen] = useState(\n () =>\n Object.keys(initialValues?.parameters ?? {}).length > 0 ||\n Boolean(errors?.parameters),\n );\n\n // A field the user has left, and whether a submit has been tried. A\n // message shows once either is true.\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [submitted, setSubmitted] = useState(false);\n const [serverErrors, setServerErrors] =\n useState<WorkflowWebhookActionErrors>(() => errors ?? {});\n const [announcement, setAnnouncement] = useState('');\n // The server has answered with messages: focus goes to the first, and\n // the rest stay quiet, as after a refused submit.\n // A test stopped at a field: focus reads its message, the rest stay\n // quiet, as after a refused submit.\n const [testChecked, setTestChecked] = useState(false);\n const [answered, setAnswered] = useState(() =>\n Object.values(errors ?? {}).some(Boolean),\n );\n\n // A new `errors` object is a new answer from the server.\n const lastErrors = useRef(errors);\n useEffect(() => {\n if (errors === lastErrors.current) return;\n lastErrors.current = errors;\n setServerErrors(errors ?? {});\n if (errors?.parameters) setAdvancedOpen(true);\n setAnswered(Object.values(errors ?? {}).some(Boolean));\n setFocusRequest(firstServerMessage(errors));\n }, [errors]);\n\n const leave = (field: string) =>\n setTouched((previous) =>\n previous[field] ? previous : { ...previous, [field]: true },\n );\n // The server's message was about the old value.\n const forget = (field: WorkflowWebhookActionField) =>\n setServerErrors((previous) =>\n previous[field] ? { ...previous, [field]: undefined } : previous,\n );\n\n /* ---------------------------- Refs -------------------------------- */\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const urlInput = useRef<HTMLInputElement>(null);\n const secretInput = useRef<HTMLInputElement>(null);\n const copyButton = useRef<HTMLButtonElement>(null);\n const parametersError = useRef<HTMLDivElement>(null);\n const legalBox = useRef<HTMLButtonElement>(null);\n const liveRegion = useRef<HTMLSpanElement>(null);\n const nameInputs = useRef(new Map<string, HTMLInputElement>());\n const valueInputs = useRef(new Map<string, HTMLInputElement>());\n // Values the user has been in. An input keeps its caret when it loses\n // focus, so a detail goes where the user left off; a value never\n // visited gets it at the end.\n const visitedValues = useRef(new Set<string>());\n // Where the caret goes after an insert, once the new value is drawn.\n const pendingCaret = useRef<{ key: string; position: number } | null>(null);\n useEffect(() => {\n const pending = pendingCaret.current;\n if (!pending) return;\n pendingCaret.current = null;\n valueInputs.current\n .get(pending.key)\n ?.setSelectionRange(pending.position, pending.position);\n });\n\n // Measured before the first paint, so the layout never jumps.\n const [fitsTwoColumns, setFitsTwoColumns] = useState(false);\n useIsomorphicLayoutEffect(() => {\n const node = rootRef.current;\n if (!node) return;\n const measure = () =>\n setFitsTwoColumns(\n node.getBoundingClientRect().width >= TWO_COLUMN_MIN_WIDTH,\n );\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const twoColumns = layout === 'two-column' && fitsTwoColumns;\n\n const setRootRef = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n /**\n * Says something to a screen reader. Cleared first, so the same words\n * twice are read twice. While a menu is open the rest of the page is\n * hidden from screen readers, so the words wait until it has closed.\n */\n const announce = (message: string) => {\n setAnnouncement('');\n let frames = 0;\n const speak = () => {\n const hidden = liveRegion.current?.closest('[aria-hidden=\"true\"]');\n if (hidden && frames < 60) {\n frames += 1;\n window.requestAnimationFrame(speak);\n return;\n }\n setAnnouncement(message);\n };\n window.requestAnimationFrame(speak);\n };\n\n /* ---------------------------- Validation -------------------------- */\n\n const urlProblem = (): string | undefined => {\n const value = url.trim();\n if (value === '') return t('workflowWebhookAction.urlRequired');\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return t('workflowWebhookAction.urlInvalid');\n }\n if (!value.startsWith(HTTPS)) return t('workflowWebhookAction.urlHttps');\n if (parsed.hostname === '') return t('workflowWebhookAction.urlInvalid');\n if (parsed.username !== '' || parsed.password !== '') {\n return t('workflowWebhookAction.urlCredentials');\n }\n return undefined;\n };\n\n const secretProblem = (): string | undefined =>\n secret.trim() === '' && !hasSavedSecret\n ? t('workflowWebhookAction.secretRequired')\n : undefined;\n\n /** Per row key: a value with no name, or a name used twice. A saved\n * parameter left as it was is never stopped. */\n const rowProblems = (): Map<string, string> => {\n const problems = new Map<string, string>();\n // Every name the post would carry, whatever its row's position: a\n // later saved parameter must stop an edit above it taking its name.\n const counts = new Map<string, number>();\n for (const row of rows) {\n const name = isUntouched(row)\n ? row.name\n : row.name.trim() === ''\n ? null\n : row.name;\n if (name !== null) counts.set(name, (counts.get(name) ?? 0) + 1);\n }\n for (const row of rows) {\n // A saved parameter left as it was is never stopped; the row the\n // user changed is the one to fix.\n if (isUntouched(row)) continue;\n if (row.name.trim() === '') {\n if (row.value !== '')\n problems.set(\n row.key,\n t('workflowWebhookAction.parameterNameRequired'),\n );\n continue;\n }\n if ((counts.get(row.name) ?? 0) > 1)\n problems.set(\n row.key,\n t('workflowWebhookAction.parameterNameDuplicate'),\n );\n }\n return problems;\n };\n\n const legalProblem = (): string | undefined =>\n legal ? undefined : t('workflowWebhookAction.legalBasisRequired');\n\n const due = (field: string) => submitted || touched[field] === true;\n const rowsWithProblems = rowProblems();\n\n const urlError =\n serverErrors.url ?? (due('url') ? urlProblem() : undefined);\n const secretError =\n serverErrors.secret ?? (due('secret') ? secretProblem() : undefined);\n const legalError =\n serverErrors.legalBasisConfirmed ??\n (submitted ? legalProblem() : undefined);\n const rowError = (key: string) =>\n due(`parameter:${key}`) ? rowsWithProblems.get(key) : undefined;\n // After a refused submit focus lands on the first problem, which reads\n // its own message; the others stay quiet rather than all speaking at\n // once. Each is still read when its field has focus.\n const announceErrors = !submitted && !answered && !testChecked;\n\n /** The first field a submit must stop at, in the order they appear. */\n const firstProblem = (): FocusTarget | undefined => {\n if (urlProblem()) return { kind: 'url' };\n if (secretProblem()) return { kind: 'secret' };\n if (legalProblem()) return { kind: 'legal' };\n const row = rows.find((candidate) => rowsWithProblems.has(candidate.key));\n return row ? { kind: 'parameter', key: row.key } : undefined;\n };\n const firstProblemRef = useRef(firstProblem);\n firstProblemRef.current = firstProblem;\n\n /* ------------------------------ Focus ----------------------------- */\n\n // A new object for each request, so asking twice moves focus twice. The\n // effect runs after the change is drawn: a new row, an opened section.\n // A page the server rendered after a refused save opens on its first\n // message.\n const [focusRequest, setFocusRequest] = useState<FocusTarget | null>(() =>\n firstServerMessage(errors),\n );\n useEffect(() => {\n if (!focusRequest) return;\n const target: HTMLElement | null | undefined = (() => {\n switch (focusRequest.kind) {\n case 'url':\n return urlInput.current;\n case 'secret':\n return secretInput.current;\n case 'legal':\n return legalBox.current;\n case 'copy':\n return copyButton.current;\n case 'parametersError':\n return parametersError.current;\n case 'add':\n return rootRef.current?.querySelector<HTMLElement>(\n '[data-slot=\"parameters\"] [data-component=\"field-array\"] > button',\n );\n case 'parameter':\n return nameInputs.current.get(focusRequest.key);\n }\n })();\n target?.focus();\n }, [focusRequest]);\n\n /* ------------------------------ Submit ---------------------------- */\n\n // The host owns the form. Its submit is stopped here while a field has\n // a problem, and focus goes to the first one. A React host's own\n // submit handler should return early when `event.defaultPrevented`.\n // A script that calls `form.submit()` skips this check; the server's\n // own checks still apply.\n useEffect(() => {\n const form = rootRef.current?.closest('form');\n if (!form) return;\n const onSubmit = (event: SubmitEvent) => {\n const first = firstProblemRef.current();\n if (!first) return;\n event.preventDefault();\n setSubmitted(true);\n if (first.kind === 'parameter') setAdvancedOpen(true);\n setFocusRequest({ ...first });\n };\n form.addEventListener('submit', onSubmit);\n return () => form.removeEventListener('submit', onSubmit);\n }, []);\n\n /* ---------------------------- Host sync --------------------------- */\n\n const entries = parameterEntries(rows);\n const parametersJson = parametersJsonOf(entries);\n\n const onValueChangeRef = useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n // `rows` changes identity on every keystroke; the JSON says when the\n // parameters really changed.\n const entriesRef = useRef(entries);\n entriesRef.current = entries;\n const mounted = useRef(false);\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n onValueChangeRef.current?.({\n url,\n secret,\n parameters: Object.fromEntries(entriesRef.current),\n legalBasisConfirmed: legal,\n });\n }, [url, secret, parametersJson, legal]);\n\n /* ----------------------------- Secret ----------------------------- */\n\n // The secret lives in one password field, which keeps it out of the\n // page's markup: never in a `value` attribute, never in a hidden input\n // a copied page or a session recording could read.\n const {\n status: copyStatus,\n copiedValue,\n copy,\n reset: resetCopy,\n } = useCopyToClipboard();\n // \"Copied\" only for the secret in the field now: a new one is not yet\n // in the receiving app.\n const secretCopied = copyStatus === 'copied' && copiedValue === secret;\n const secretCopyFailed = copyStatus === 'error';\n\n const generateNewSecret = () => {\n resetCopy();\n setSecret(generateSecret());\n setGenerated(true);\n forget('secret');\n announce(t('workflowWebhookAction.secretGenerated'));\n setFocusRequest({ kind: 'copy' });\n };\n\n /* ---------------------------- Send test --------------------------- */\n\n type TestState =\n | { kind: 'idle' | 'sending' | 'failed' }\n | { kind: 'done'; result: WorkflowWebhookTestResult };\n const [test, setTest] = useState<TestState>({ kind: 'idle' });\n // A newer test, or a change to what was tested, makes an older answer\n // stale: it is dropped when it arrives.\n const testRun = useRef(0);\n\n const sendTest = async () => {\n if (!onSendTest) return;\n // The two fields a test needs, checked as a save checks them.\n const problem = urlProblem() ? 'url' : secretProblem() ? 'secret' : null;\n if (problem) {\n leave('url');\n leave('secret');\n setTestChecked(true);\n setFocusRequest({ kind: problem });\n return;\n }\n testRun.current += 1;\n const run = testRun.current;\n setTest({ kind: 'sending' });\n try {\n const result = await onSendTest({\n url: url.trim(),\n secret: secretInput.current?.value ?? secret,\n parameters: Object.fromEntries(entries),\n legalBasisConfirmed: legal,\n });\n if (run === testRun.current) finishTest({ kind: 'done', result });\n } catch {\n if (run === testRun.current) finishTest({ kind: 'failed' });\n }\n };\n\n // The answer is said once through the fields' own live region: a\n // result that arrives already filled in is not reliably read. Focus\n // stays on the button while it is busy (a loading Button keeps it).\n const finishTest = (next: TestState) => {\n setTest(next);\n const outcome = describeTest(next);\n if (outcome) announce(outcome.text);\n };\n\n // What was tested has changed: the answer no longer applies.\n const testedText = `${url}\\n${secret}\\n${parametersJson}`;\n const lastTestedText = useRef(testedText);\n useEffect(() => {\n if (testedText === lastTestedText.current) return;\n lastTestedText.current = testedText;\n testRun.current += 1;\n setTest((previous) =>\n previous.kind === 'idle' ? previous : { kind: 'idle' },\n );\n }, [testedText]);\n\n /** The answer in words, and whether it is good news. */\n const describeTest = (\n state: TestState,\n ): { ok: boolean; text: string } | null => {\n if (state.kind === 'failed') {\n return { ok: false, text: t('workflowWebhookAction.testFailed') };\n }\n if (state.kind !== 'done') return null;\n const { result } = state;\n const ok =\n result.outcome === 'answered' &&\n result.status >= 200 &&\n result.status < 300;\n if (result.message) return { ok, text: result.message };\n if (result.outcome === 'unreachable') {\n return { ok, text: t('workflowWebhookAction.testUnreachable') };\n }\n if (ok) {\n return {\n ok,\n text: t('workflowWebhookAction.testSent', { status: result.status }),\n };\n }\n return {\n ok,\n text:\n result.status === 401 || result.status === 403\n ? t('workflowWebhookAction.testCheckSecret', {\n status: result.status,\n })\n : t('workflowWebhookAction.testRejected', {\n status: result.status,\n }),\n };\n };\n\n const copySecret = async () => {\n const ok = await copy(secretInput.current?.value ?? secret);\n announce(ok ? t('copyField.copySuccess') : t('copyField.copyFailed'));\n };\n\n /* --------------------------- Parameters --------------------------- */\n\n const updateRow = (key: string, patch: Partial<ParameterRow>) => {\n setRows((previous) =>\n previous.map((row) => (row.key === key ? { ...row, ...patch } : row)),\n );\n forget('parameters');\n };\n\n const addRow = () => {\n const key = nextKey();\n setRows((previous) => [...previous, { key, name: '', value: '' }]);\n setFocusRequest({ kind: 'parameter', key });\n };\n\n const removeRow = (index: number) => {\n const next = rows.filter((_, position) => position !== index);\n const removed = rows[index];\n if (removed) {\n nameInputs.current.delete(removed.key);\n valueInputs.current.delete(removed.key);\n visitedValues.current.delete(removed.key);\n }\n setRows(next);\n forget('parameters');\n const neighbour = next[index] ?? next[index - 1];\n setFocusRequest(\n neighbour ? { kind: 'parameter', key: neighbour.key } : { kind: 'add' },\n );\n };\n\n const insertPlaceholder = (row: ParameterRow, token: string) => {\n const input = valueInputs.current.get(row.key);\n const visited = input !== undefined && visitedValues.current.has(row.key);\n const start = visited\n ? (input.selectionStart ?? row.value.length)\n : row.value.length;\n const end = visited ? (input.selectionEnd ?? start) : start;\n const value = row.value.slice(0, start) + token + row.value.slice(end);\n pendingCaret.current = { key: row.key, position: start + token.length };\n updateRow(row.key, { value });\n const label = variables.find((item) => item.value === token)?.label;\n announce(\n t('workflowWebhookAction.placeholderInserted', {\n detail: label ?? token,\n }),\n );\n };\n\n /* ------------------------------ Render ---------------------------- */\n\n const announceCopy = (copied: boolean) =>\n announce(copied ? t('copyField.copySuccess') : t('copyField.copyFailed'));\n\n /** The fields of one part of the message, each with its name to copy. */\n const renderFields = (\n labelId: string,\n items: ReadonlyArray<readonly [string, string]>,\n wideColumns: 2 | 3 = 2,\n ) => (\n <dl\n aria-labelledby={labelId}\n className={fieldsGridVariants({\n columns: twoColumns ? wideColumns : 1,\n })}\n >\n {items.map(([name, description]) => (\n <SentField\n key={name}\n name={name}\n description={description}\n onCopied={announceCopy}\n />\n ))}\n </dl>\n );\n\n // The example body carries the user's own parameters, as sent.\n const exampleBody = JSON.stringify(\n { ...EXAMPLE_BODY, parameters: Object.fromEntries(entries) },\n null,\n 2,\n );\n\n /** What every message carries, for whoever sets up the receiving app:\n * each part with an example to copy, then each field to copy. */\n const reference = (\n <div\n data-columns={twoColumns ? 2 : 1}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xl)]\"\n >\n <div className={referenceSectionVariants()}>\n <h4 id={bodyLabelId} className={sectionHeadingVariants()}>\n {t('workflowWebhookAction.bodyHeading')}\n </h4>\n <p className={helpVariants()}>\n {t('workflowWebhookAction.sentDescription')}\n </p>\n <CodeBlock\n language=\"json\"\n code={exampleBody}\n copyLabel={t('workflowWebhookAction.copyBody')}\n />\n {renderFields(bodyLabelId, sentFields)}\n </div>\n\n <div className={referenceSectionVariants()}>\n <h4 id={headersLabelId} className={sectionHeadingVariants()}>\n {t('workflowWebhookAction.headersHeading')}\n </h4>\n <p className={helpVariants()}>\n {t('workflowWebhookAction.headersDescription')}\n </p>\n <CodeBlock\n language=\"http\"\n code={EXAMPLE_HEADERS}\n copyLabel={t('workflowWebhookAction.copyHeaders')}\n />\n {renderFields(headersLabelId, sentHeaders)}\n </div>\n </div>\n );\n\n const native = fieldNames !== undefined;\n const secretDescription = generated\n ? t('workflowWebhookAction.generatedNotice')\n : hasSavedSecret\n ? t('workflowWebhookAction.secretSavedDescription')\n : t('workflowWebhookAction.secretDescription');\n\n return (\n <div\n ref={setRootRef}\n {...rest}\n data-component=\"workflow-webhook-action\"\n data-layout={twoColumns ? 'two-column' : 'one-column'}\n className={rootVariants({ className })}\n >\n {children ? (\n <div\n data-slot=\"host-content\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n {children}\n </div>\n ) : null}\n\n <p className={helpVariants()}>{t('workflowWebhookAction.intro')}</p>\n\n <FormField\n label={t('workflowWebhookAction.url')}\n description={t('workflowWebhookAction.urlDescription')}\n required\n error={urlError}\n announceError={announceErrors}\n data-field=\"url\"\n >\n {/* Text, not `type=\"url\"`: the browser's own check would stop\n the host's form with its own message before ours. An address\n reads left to right in every language. */}\n <TextInput\n ref={urlInput}\n name={native ? fieldNames.url : undefined}\n dir=\"ltr\"\n inputMode=\"url\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={URL_MAX_LENGTH}\n placeholder=\"https://\"\n value={url}\n onChange={(event) => {\n setUrl(event.target.value);\n forget('url');\n }}\n onBlur={(event) => {\n if (event.target.value !== '') leave('url');\n }}\n />\n </FormField>\n\n <div\n data-field=\"secret\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <FormField\n label={t('workflowWebhookAction.secret')}\n description={secretDescription}\n {...(hasSavedSecret ? { optional: true } : { required: true })}\n error={secretError}\n announceError={announceErrors}\n >\n <PasswordInput\n ref={secretInput}\n // PasswordInput names itself \"password\" when given no name.\n name={native ? fieldNames.secret : ''}\n dir=\"ltr\"\n autoComplete=\"new-password\"\n spellCheck={false}\n value={secret}\n onChange={(event) => {\n setSecret(event.target.value);\n setGenerated(false);\n resetCopy();\n forget('secret');\n }}\n onBlur={(event) => {\n if (event.target.value !== '') leave('secret');\n }}\n />\n </FormField>\n <div className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-xs)]\">\n <Button\n type=\"button\"\n intent=\"outline\"\n size=\"sm\"\n startIcon={<KeyRound />}\n data-action=\"generate-secret\"\n onClick={generateNewSecret}\n >\n {t('workflowWebhookAction.generate')}\n </Button>\n <Button\n ref={copyButton}\n type=\"button\"\n intent=\"outline\"\n size=\"sm\"\n disabled={secret === ''}\n startIcon={\n secretCopied ? (\n <Check />\n ) : secretCopyFailed ? (\n <CircleAlert />\n ) : (\n <Copy />\n )\n }\n data-action=\"copy-secret\"\n data-copied={secretCopied ? 'true' : undefined}\n onClick={() => void copySecret()}\n >\n {secretCopied\n ? t('copyField.copied')\n : secretCopyFailed\n ? t('copyField.copyFailed')\n : t('workflowWebhookAction.copySecret')}\n </Button>\n </div>\n </div>\n\n {onSendTest ? (\n <div\n data-slot=\"send-test\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <p id={testHelpId} className={helpVariants()}>\n {t('workflowWebhookAction.testDescription')}\n </p>\n <Button\n type=\"button\"\n intent=\"outline\"\n size=\"sm\"\n startIcon={<Send />}\n loading={test.kind === 'sending'}\n aria-describedby={testHelpId}\n className=\"ds:self-start\"\n data-action=\"send-test\"\n onClick={() => void sendTest()}\n >\n {t('workflowWebhookAction.sendTest')}\n </Button>\n {(() => {\n const outcome = describeTest(test);\n return outcome ? (\n <Alert\n variant={outcome.ok ? 'success' : 'error'}\n announce=\"off\"\n data-slot=\"test-result\"\n data-test-ok={outcome.ok ? 'true' : 'false'}\n >\n <Alert.Description>{outcome.text}</Alert.Description>\n </Alert>\n ) : null;\n })()}\n </div>\n ) : null}\n\n <div\n data-field=\"legalBasisConfirmed\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n <Checkbox\n ref={legalBox}\n name={native ? fieldNames.legalBasisConfirmed : undefined}\n value=\"1\"\n checked={legal}\n onCheckedChange={(next) => {\n setLegal(next === true);\n forget('legalBasisConfirmed');\n }}\n aria-required=\"true\"\n aria-invalid={legalError ? true : undefined}\n aria-describedby={legalError ? legalErrorId : undefined}\n label={t('workflowWebhookAction.legalBasis')}\n />\n {legalError ? (\n <p\n id={legalErrorId}\n role={announceErrors ? 'alert' : undefined}\n data-slot=\"error\"\n className={errorVariants()}\n >\n <CircleAlert\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0\"\n />\n <span>{legalError}</span>\n </p>\n ) : null}\n </div>\n\n {/* Outside the section: closed, its content is not in the page,\n and the parameters must still be posted. */}\n {native ? (\n <input\n type=\"hidden\"\n name={fieldNames.parameters}\n value={parametersJson}\n />\n ) : null}\n\n <div data-field=\"parameters\" data-slot=\"parameters\">\n {/* The elevated card, like the host page's own card. */}\n <Card variant=\"elevated\">\n <Accordion\n type=\"single\"\n collapsible\n value={advancedOpen ? 'advanced' : ''}\n onValueChange={(value: string) =>\n setAdvancedOpen(value === 'advanced')\n }\n >\n <Accordion.Item value=\"advanced\">\n <Accordion.Trigger data-action=\"toggle-advanced\">\n <span className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('workflowWebhookAction.advanced')}</span>\n {entries.length > 0 ? (\n <Badge variant=\"neutral\" size=\"md\">\n {t('workflowWebhookAction.parameterCount', {\n total: entries.length,\n })}\n </Badge>\n ) : null}\n </span>\n </Accordion.Trigger>\n <Accordion.Content>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\">\n <p className={helpVariants()}>\n {t('workflowWebhookAction.advancedDescription')}\n </p>\n\n {serverErrors.parameters ? (\n <div\n ref={parametersError}\n tabIndex={-1}\n data-slot=\"error\"\n className=\"ds:outline-none\"\n >\n <Alert variant=\"error\" announce=\"off\">\n <Alert.Description>\n {serverErrors.parameters}\n </Alert.Description>\n </Alert>\n </div>\n ) : null}\n\n <FieldArray\n legend={t('workflowWebhookAction.parametersLegend')}\n items={rows}\n addLabel={t('workflowWebhookAction.addParameter')}\n removeItemLabel={(index) =>\n t('workflowWebhookAction.removeParameter', {\n number: index + 1,\n })\n }\n onAdd={addRow}\n onRemove={removeRow}\n renderItem={(row, index) => (\n <div\n data-parameter-id={row.key}\n className={parameterRowVariants()}\n >\n <FormField\n label={t('workflowWebhookAction.parameterName')}\n error={rowError(row.key)}\n announceError={announceErrors}\n >\n <TextInput\n ref={(node) => {\n if (node) nameInputs.current.set(row.key, node);\n }}\n aria-label={t(\n 'workflowWebhookAction.parameterNameOf',\n { number: index + 1 },\n )}\n dir=\"auto\"\n autoComplete=\"off\"\n spellCheck={false}\n value={row.name}\n onChange={(event) =>\n updateRow(row.key, { name: event.target.value })\n }\n onBlur={() => leave(`parameter:${row.key}`)}\n />\n </FormField>\n <FormField\n label={t('workflowWebhookAction.parameterValue')}\n >\n <TextInput\n ref={(node) => {\n if (node)\n valueInputs.current.set(row.key, node);\n }}\n aria-label={t(\n 'workflowWebhookAction.parameterValueOf',\n { number: index + 1 },\n )}\n dir=\"auto\"\n autoComplete=\"off\"\n value={row.value}\n onChange={(event) =>\n updateRow(row.key, {\n value: event.target.value,\n })\n }\n onFocus={() => visitedValues.current.add(row.key)}\n />\n </FormField>\n {variables.length > 0 ? (\n <div className=\"ds:sm:col-span-2\">\n <TokenInsertMenu\n tokens={variables.map((item) => ({\n value: item.value,\n label: item.label,\n }))}\n triggerLabel={t(\n 'workflowWebhookAction.insertDetail',\n )}\n onInsert={(token) =>\n insertPlaceholder(row, token)\n }\n />\n </div>\n ) : null}\n </div>\n )}\n />\n\n {variables.length > 0 ? (\n <div className={referenceSectionVariants()}>\n <h4\n id={variablesLabelId}\n className={sectionHeadingVariants()}\n >\n {t('workflowWebhookAction.variablesHeading')}\n </h4>\n <p className={helpVariants()}>\n {t('workflowWebhookAction.variablesDescription')}\n </p>\n {renderFields(\n variablesLabelId,\n variables.map(\n (item) => [item.value, item.label] as const,\n ),\n 3,\n )}\n </div>\n ) : null}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion>\n </Card>\n </div>\n\n {/* A card of its own: for whoever sets up the receiving app, so\n closed until asked for. */}\n <div data-slot=\"reference\">\n <Card variant=\"elevated\">\n <Accordion type=\"single\" collapsible>\n <Accordion.Item value=\"reference\">\n <Accordion.Trigger data-action=\"toggle-reference\">\n <span>{t('workflowWebhookAction.sentHeading')}</span>\n </Accordion.Trigger>\n <Accordion.Content>{reference}</Accordion.Content>\n </Accordion.Item>\n </Accordion>\n </Card>\n </div>\n\n {/* Generating, copying and inserting change what is on screen\n without a focus change a screen reader would notice. */}\n <span\n ref={liveRegion}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n >\n {announcement}\n </span>\n </div>\n );\n },\n);\nWorkflowWebhookAction.displayName = 'WorkflowWebhookAction';\n"],"names":["WORKFLOW_WEBHOOK_ACTION_FIELDS","rootVariants","cva","fieldsGridVariants","referenceSectionVariants","sectionHeadingVariants","fieldNameVariants","helpVariants","errorVariants","parameterRowVariants","HTTPS","URL_MAX_LENGTH","TWO_COLUMN_MIN_WIDTH","PLATFORM_VARIABLES","EXAMPLE_IDEMPOTENCY_KEY","EXAMPLE_BODY","EXAMPLE_HEADERS","textOf","value","isUntouched","row","parameterEntries","rows","parametersJsonOf","entries","name","generateSecret","bytes","byte","firstServerMessage","errors","SentField","description","onCopied","t","useTranslation","descriptionId","useId","status","copy","useCopyToClipboard","copied","failed","jsxs","jsx","IconButton","Check","CircleAlert","Copy","WorkflowWebhookAction","forwardRef","children","initialValues","hasSavedSecret","fieldNames","placeholders","onSendTest","onValueChange","layout","className","rest","ref","sentFields","sentHeaders","legalErrorId","bodyLabelId","headersLabelId","variablesLabelId","testHelpId","variables","keyCounter","useRef","nextKey","url","setUrl","useState","secret","setSecret","generated","setGenerated","setRows","legal","setLegal","advancedOpen","setAdvancedOpen","touched","setTouched","submitted","setSubmitted","serverErrors","setServerErrors","announcement","setAnnouncement","testChecked","setTestChecked","answered","setAnswered","lastErrors","useEffect","setFocusRequest","leave","field","previous","forget","rootRef","urlInput","secretInput","copyButton","parametersError","legalBox","liveRegion","nameInputs","valueInputs","visitedValues","pendingCaret","pending","_a","fitsTwoColumns","setFitsTwoColumns","useIsomorphicLayoutEffect","node","measure","observer","twoColumns","setRootRef","useCallback","announce","message","frames","speak","urlProblem","parsed","secretProblem","rowProblems","problems","counts","legalProblem","due","rowsWithProblems","urlError","secretError","legalError","rowError","key","announceErrors","firstProblem","candidate","firstProblemRef","focusRequest","target","form","onSubmit","event","first","parametersJson","onValueChangeRef","entriesRef","mounted","copyStatus","copiedValue","resetCopy","secretCopied","secretCopyFailed","generateNewSecret","test","setTest","testRun","sendTest","problem","run","result","finishTest","next","outcome","describeTest","testedText","lastTestedText","state","ok","copySecret","updateRow","patch","addRow","removeRow","index","_","position","removed","neighbour","insertPlaceholder","token","input","visited","start","end","label","item","announceCopy","renderFields","labelId","items","wideColumns","exampleBody","reference","CodeBlock","native","secretDescription","FormField","TextInput","PasswordInput","Button","KeyRound","Send","Alert","Checkbox","Card","Accordion","Badge","FieldArray","TokenInsertMenu"],"mappings":"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"}
|
package/dist/agent-catalog.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "1.
|
|
3
|
+
"packageVersion": "1.80.0",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "component",
|
|
@@ -1512,7 +1512,7 @@
|
|
|
1512
1512
|
"root": {
|
|
1513
1513
|
"attr": "data-component",
|
|
1514
1514
|
"value": "booking",
|
|
1515
|
-
"description": "Marks the Booking root region. The host prop hideEmail (boolean, default false) hides the email field, skips its validation and omits email from submission.
|
|
1515
|
+
"description": "Marks the Booking root region. The host prop hideEmail (boolean, default false) hides the email field, skips its validation and omits email from submission. The host prop emailOptional (boolean, default false) keeps email visible and optional unless used for confirmation. Email is marked and validated as required when selected in the channel picker or singleConfirmationChannel radio, or when the effective confirmation channel is email. With a hidden picker, the form and success screen use the sole enabled channel, or email when multiple channels are enabled. This includes payment and blocked-payment flows, which omit stored selections from submission. Omitting confirmationChannels also defaults to email. Selecting SMS without email makes the field optional again. The optional/required marker updates visually when the channel changes, with no announcement of that change. Validation updates immediately using the existing email error. With emailOptional, surrounding spaces are trimmed before validation, even when email is required for confirmation. Optional blank values are omitted from submission; filled values are sent trimmed. hideEmail takes precedence over emailOptional. Neither prop changes confirmation channels; pair with confirmationChannels [\"sms\"] for SMS-only confirmation with no channel picker. The optional codeStep prop adds SMS verification after submission and payment; the step remains 7 until verification succeeds, then becomes 8. Patient contact details and verification codes are never exposed through this adapter."
|
|
1516
1516
|
},
|
|
1517
1517
|
"instanceId": {
|
|
1518
1518
|
"attr": "data-component-id",
|
|
@@ -11217,7 +11217,7 @@
|
|
|
11217
11217
|
},
|
|
11218
11218
|
"item": {
|
|
11219
11219
|
"attr": "data-result-id",
|
|
11220
|
-
"description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. The non-focusable card group is labelled by the practice-result-{id}-name heading, which contains data-component=\"practice-result-name-link\": a visible link to result.href that navigates without firing onResultSelect or click telemetry. Each card also carries up to two CTA anchors: data-component=\"practice-result-open-cta\" (practice page; absent when the consumer sets showCardOpenButton=false) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost,
|
|
11220
|
+
"description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. The non-focusable card group is labelled by the practice-result-{id}-name heading, which contains data-component=\"practice-result-name-link\": a visible link to result.href that navigates without firing onResultSelect or click telemetry. Each card also carries up to two CTA anchors: data-component=\"practice-result-open-cta\" (practice page; absent when the consumer sets showCardOpenButton=false) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost: firstVisitPrice supports fixed, from and range amounts plus an optional practice-written label; it takes precedence over the older firstVisitPriceCents fixed-price field. Absent when neither price is set)."
|
|
11221
11221
|
}
|
|
11222
11222
|
}
|
|
11223
11223
|
},
|
|
@@ -20224,6 +20224,10 @@
|
|
|
20224
20224
|
"component": "password-input",
|
|
20225
20225
|
"as": "password"
|
|
20226
20226
|
},
|
|
20227
|
+
{
|
|
20228
|
+
"component": "checkbox",
|
|
20229
|
+
"as": "rememberMe"
|
|
20230
|
+
},
|
|
20227
20231
|
{
|
|
20228
20232
|
"component": "button",
|
|
20229
20233
|
"as": "submit"
|
|
@@ -20237,7 +20241,7 @@
|
|
|
20237
20241
|
{
|
|
20238
20242
|
"name": "read_form",
|
|
20239
20243
|
"safety": "read",
|
|
20240
|
-
"description": "Read the sign-in form and what is wrong with it. Each field sits in a wrapper with `data-field` (`email`, `password`). A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form, such as a refused sign-in, is in `data-field=\"form\"`; it never says which of the two values was wrong. Never read or repeat the password.",
|
|
20244
|
+
"description": "Read the sign-in form and what is wrong with it. Each field sits in a wrapper with `data-field` (`email`, `password`, and `remember-me` when the host turns it on). A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form, such as a refused sign-in, is in `data-field=\"form\"`; it never says which of the two values was wrong. Never read or repeat the password.",
|
|
20241
20245
|
"descriptionKey": "ui.agent.loginForm.workflows.readForm",
|
|
20242
20246
|
"uiActions": [],
|
|
20243
20247
|
"apiActions": []
|
|
@@ -20252,6 +20256,14 @@
|
|
|
20252
20256
|
"auth.signIn"
|
|
20253
20257
|
]
|
|
20254
20258
|
},
|
|
20259
|
+
{
|
|
20260
|
+
"name": "remember_me",
|
|
20261
|
+
"safety": "write",
|
|
20262
|
+
"description": "Tick or untick \"Remember me on this computer\" (`data-field=\"remember-me\"`, a checkbox, unticked by default). Present only when the host turns it on. It reports the choice to the host, which decides what it means; it changes nothing until the form is submitted.",
|
|
20263
|
+
"descriptionKey": "ui.agent.loginForm.workflows.rememberMe",
|
|
20264
|
+
"uiActions": [],
|
|
20265
|
+
"apiActions": []
|
|
20266
|
+
},
|
|
20255
20267
|
{
|
|
20256
20268
|
"name": "forgot_password",
|
|
20257
20269
|
"safety": "read",
|
|
@@ -22344,7 +22356,7 @@
|
|
|
22344
22356
|
{
|
|
22345
22357
|
"name": "read_form",
|
|
22346
22358
|
"safety": "read",
|
|
22347
|
-
"description": "Read which fields the form asks for and which have a problem. The host picks the fields, so read them from the page: each one that shows sits in a wrapper with `data-field`. A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form is in `data-field=\"form\"`. An email the person cannot change is marked `readonly`. When the host asks for a code, a field's wrapper also carries `data-verification` (`idle`, `sent` or `verified`); a verified field is `readonly`. Never read or repeat the password fields.",
|
|
22359
|
+
"description": "Read which fields the form asks for and which have a problem. The host picks the fields, so read them from the page: each one that shows sits in a wrapper with `data-field`. A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form is in `data-field=\"form\"`. An email the person cannot change is marked `readonly`. When the host asks for a code, a field's wrapper also carries `data-verification` (`idle`, `sent` or `verified`); a verified field is `readonly`. When the address already has an account, the email message says so and the two link-buttons under it lead on: sign in (`data-action=\"sign-in\"`) or reset the password (`data-action=\"reset-password\"`). Never read or repeat the password fields.",
|
|
22348
22360
|
"descriptionKey": "ui.agent.registrationForm.workflows.readForm",
|
|
22349
22361
|
"uiActions": [],
|
|
22350
22362
|
"apiActions": []
|
|
@@ -22379,6 +22391,80 @@
|
|
|
22379
22391
|
}
|
|
22380
22392
|
]
|
|
22381
22393
|
},
|
|
22394
|
+
{
|
|
22395
|
+
"kind": "pattern",
|
|
22396
|
+
"id": "reset-password-form",
|
|
22397
|
+
"composes": [
|
|
22398
|
+
{
|
|
22399
|
+
"component": "card",
|
|
22400
|
+
"as": "card"
|
|
22401
|
+
},
|
|
22402
|
+
{
|
|
22403
|
+
"component": "alert",
|
|
22404
|
+
"as": "formError"
|
|
22405
|
+
},
|
|
22406
|
+
{
|
|
22407
|
+
"component": "error-summary",
|
|
22408
|
+
"as": "errorSummary"
|
|
22409
|
+
},
|
|
22410
|
+
{
|
|
22411
|
+
"component": "alert",
|
|
22412
|
+
"as": "result"
|
|
22413
|
+
},
|
|
22414
|
+
{
|
|
22415
|
+
"component": "form-field",
|
|
22416
|
+
"as": "field"
|
|
22417
|
+
},
|
|
22418
|
+
{
|
|
22419
|
+
"component": "email-input",
|
|
22420
|
+
"as": "email"
|
|
22421
|
+
},
|
|
22422
|
+
{
|
|
22423
|
+
"component": "password-input",
|
|
22424
|
+
"as": "password"
|
|
22425
|
+
},
|
|
22426
|
+
{
|
|
22427
|
+
"component": "button",
|
|
22428
|
+
"as": "submit"
|
|
22429
|
+
}
|
|
22430
|
+
],
|
|
22431
|
+
"workflows": [
|
|
22432
|
+
{
|
|
22433
|
+
"name": "read_form",
|
|
22434
|
+
"safety": "read",
|
|
22435
|
+
"description": "Read where the reset stands. The root carries `data-state`: `form` while the passwords are asked for, `done` once the password has changed, `expired` when the link no longer works. The result (`data-slot=\"result\"`) replaces the form. In the form, the address the password is for may show read-only in `data-field=\"email\"`; the new password is in `data-field=\"password\"` with its rules checklist, and its repeat in `data-field=\"passwordConfirm\"`. A field with a problem carries `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element, also listed in `data-component=\"error-summary\"` after a refused submit; a message about the whole form is in `data-field=\"form\"`.",
|
|
22436
|
+
"descriptionKey": "ui.agent.resetPasswordForm.workflows.readForm",
|
|
22437
|
+
"uiActions": [],
|
|
22438
|
+
"apiActions": []
|
|
22439
|
+
},
|
|
22440
|
+
{
|
|
22441
|
+
"name": "change_password",
|
|
22442
|
+
"safety": "write",
|
|
22443
|
+
"description": "Choose a new password (`data-action=\"submit\"`). The person types both passwords themselves; an agent never types or reads a password. The form does not submit until the password meets every rule and the two entries match. The host then changes the password, through its `onSubmit` handler or a native form post, and shows the `done` state.",
|
|
22444
|
+
"descriptionKey": "ui.agent.resetPasswordForm.workflows.changePassword",
|
|
22445
|
+
"uiActions": [],
|
|
22446
|
+
"apiActions": [
|
|
22447
|
+
"auth.resetPassword"
|
|
22448
|
+
]
|
|
22449
|
+
},
|
|
22450
|
+
{
|
|
22451
|
+
"name": "sign_in",
|
|
22452
|
+
"safety": "read",
|
|
22453
|
+
"description": "Go to the sign-in page once the password has changed (`data-action=\"login\"`). Present only in the `done` state, and when the host gives its address.",
|
|
22454
|
+
"descriptionKey": "ui.agent.resetPasswordForm.workflows.signIn",
|
|
22455
|
+
"uiActions": [],
|
|
22456
|
+
"apiActions": []
|
|
22457
|
+
},
|
|
22458
|
+
{
|
|
22459
|
+
"name": "request_new_link",
|
|
22460
|
+
"safety": "read",
|
|
22461
|
+
"description": "Go to the page that asks for a new reset link (`data-action=\"request-link\"`). Present only in the `expired` state, and when the host gives its address.",
|
|
22462
|
+
"descriptionKey": "ui.agent.resetPasswordForm.workflows.requestNewLink",
|
|
22463
|
+
"uiActions": [],
|
|
22464
|
+
"apiActions": []
|
|
22465
|
+
}
|
|
22466
|
+
]
|
|
22467
|
+
},
|
|
22382
22468
|
{
|
|
22383
22469
|
"kind": "pattern",
|
|
22384
22470
|
"id": "roi-dashboard",
|
package/dist/agent-i18n/en.json
CHANGED
|
@@ -1896,8 +1896,9 @@
|
|
|
1896
1896
|
},
|
|
1897
1897
|
"loginForm": {
|
|
1898
1898
|
"workflows": {
|
|
1899
|
-
"readForm": "Read the sign-in form and what is wrong with it. Each field sits in a wrapper with `data-field` (`email`, `password`). A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form, such as a refused sign-in, is in `data-field=\"form\"`; it never says which of the two values was wrong. Never read or repeat the password.",
|
|
1899
|
+
"readForm": "Read the sign-in form and what is wrong with it. Each field sits in a wrapper with `data-field` (`email`, `password`, and `remember-me` when the host turns it on). A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form, such as a refused sign-in, is in `data-field=\"form\"`; it never says which of the two values was wrong. Never read or repeat the password.",
|
|
1900
1900
|
"signIn": "Sign in (`data-action=\"submit\"`). The person types the email and the password themselves; the form does not submit until the email is a valid address and the password is not empty; it lists what is wrong in its error summary and moves focus there. The host then signs the person in: through its `onSubmit` handler, or as a native form post to its own field names.",
|
|
1901
|
+
"rememberMe": "Tick or untick \"Remember me on this computer\" (`data-field=\"remember-me\"`, a checkbox, unticked by default). Present only when the host turns it on. It reports the choice to the host, which decides what it means; it changes nothing until the form is submitted.",
|
|
1901
1902
|
"forgotPassword": "Go to the page that asks for a password reset link (`data-action=\"forgot-password\"`). Present only when the host gives its address.",
|
|
1902
1903
|
"register": "Go to a registration page: `data-action=\"register-doctor\"` or `data-action=\"register-patient\"`, under the sign-in button. Each is present only when the host gives its address.",
|
|
1903
1904
|
"devSignIn": "Development only: follow one of the quick sign-in links (`data-action=\"dev-login\"`, inside `data-component=\"login-dev-card\"`). Each leads to a route on the host that signs a test account in. The kit holds no test data. The card is present only when the host's server reports a development environment, and the server refuses those routes anywhere else."
|
|
@@ -2029,12 +2030,20 @@
|
|
|
2029
2030
|
},
|
|
2030
2031
|
"registrationForm": {
|
|
2031
2032
|
"workflows": {
|
|
2032
|
-
"readForm": "Read which fields the form asks for and which have a problem. The host picks the fields, so read them from the page: each one that shows sits in a wrapper with `data-field`. A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form is in `data-field=\"form\"`. An email the person cannot change is marked `readonly`. When the host asks for a code, a field's wrapper also carries `data-verification` (`idle`, `sent` or `verified`); a verified field is `readonly`. Never read or repeat the password fields.",
|
|
2033
|
+
"readForm": "Read which fields the form asks for and which have a problem. The host picks the fields, so read them from the page: each one that shows sits in a wrapper with `data-field`. A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. After a refused submit the fields with a problem are also listed in `data-component=\"error-summary\"` at the top of the form, one item per field (`data-error-field`). A message about the whole form is in `data-field=\"form\"`. An email the person cannot change is marked `readonly`. When the host asks for a code, a field's wrapper also carries `data-verification` (`idle`, `sent` or `verified`); a verified field is `readonly`. When the address already has an account, the email message says so and the two link-buttons under it lead on: sign in (`data-action=\"sign-in\"`) or reset the password (`data-action=\"reset-password\"`). Never read or repeat the password fields.",
|
|
2033
2034
|
"register": "Create the account (`data-action=\"submit\"`). The person fills in the fields and accepts the terms themselves; the form does not submit until every field is valid and, when the host asks for codes, until the email and the phone are verified; it lists what is wrong in its error summary and moves focus there. The host then registers the account: through its `onSubmit` handler, or as a native form post to its own field names.",
|
|
2034
2035
|
"verifyContact": "Prove an email or a phone number with a code, when the host asks for it (a field wrapper has `data-verification`). Press Send code (`data-action=\"send-code\"`) beside the field; the code goes to the person's own inbox or phone, so the person reads it and types it into the code box (`data-component=\"otp-input\"`), or presses Verify (`data-action=\"verify-code\"`). Send a new code is `data-action=\"resend-code\"` and waits a few seconds; `data-action=\"change-value\"` returns to editing. Never read or guess the code. When it is right the field becomes `readonly` and `data-verification` is `verified`. The host's server holds the verified value and checks it again on submit.",
|
|
2035
2036
|
"devBypass": "Development only: press the shortcut (`data-component=\"dev-bypass-button\"`). It puts the values the host supplied into the fields that show, as if typed, and submits the form through the normal path when the host asked for that; a host may instead run a handler of its own, such as a development-only route. The kit holds no test data. The button is present only when the host's server reports a development environment, and what it submits is checked by the server like any other submit."
|
|
2036
2037
|
}
|
|
2037
2038
|
},
|
|
2039
|
+
"resetPasswordForm": {
|
|
2040
|
+
"workflows": {
|
|
2041
|
+
"readForm": "Read where the reset stands. The root carries `data-state`: `form` while the passwords are asked for, `done` once the password has changed, `expired` when the link no longer works. The result (`data-slot=\"result\"`) replaces the form. In the form, the address the password is for may show read-only in `data-field=\"email\"`; the new password is in `data-field=\"password\"` with its rules checklist, and its repeat in `data-field=\"passwordConfirm\"`. A field with a problem carries `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element, also listed in `data-component=\"error-summary\"` after a refused submit; a message about the whole form is in `data-field=\"form\"`.",
|
|
2042
|
+
"changePassword": "Choose a new password (`data-action=\"submit\"`). The person types both passwords themselves; an agent never types or reads a password. The form does not submit until the password meets every rule and the two entries match. The host then changes the password, through its `onSubmit` handler or a native form post, and shows the `done` state.",
|
|
2043
|
+
"signIn": "Go to the sign-in page once the password has changed (`data-action=\"login\"`). Present only in the `done` state, and when the host gives its address.",
|
|
2044
|
+
"requestNewLink": "Go to the page that asks for a new reset link (`data-action=\"request-link\"`). Present only in the `expired` state, and when the host gives its address."
|
|
2045
|
+
}
|
|
2046
|
+
},
|
|
2038
2047
|
"roiDashboard": {
|
|
2039
2048
|
"workflows": {
|
|
2040
2049
|
"viewFunnel": "Read the patient-journey funnel — per-stage efficiency, time saved, and potential for the selected period.",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as m } from "../../_chunks/bmi-calculator-
|
|
1
|
+
import { B as m } from "../../_chunks/bmi-calculator-BIExHBZV.js";
|
|
2
2
|
import { b as e, a as t, c as r, d as T, e as c, f as i, i as b, k as n, l as f } from "../../_chunks/bmi-BxD-tFzU.js";
|
|
3
3
|
export {
|
|
4
4
|
m as BmiCalculator,
|
|
@@ -170,7 +170,11 @@ export interface BookingBillingDetails {
|
|
|
170
170
|
export interface BookingDetails {
|
|
171
171
|
firstName: string;
|
|
172
172
|
lastName: string;
|
|
173
|
-
/**
|
|
173
|
+
/**
|
|
174
|
+
* Required by default. Omitted when `hideEmail` is true, or when blank
|
|
175
|
+
* with `emailOptional` and confirmation uses another channel.
|
|
176
|
+
* Filled values are trimmed when submitted.
|
|
177
|
+
*/
|
|
174
178
|
email?: string;
|
|
175
179
|
mobilePhone: string;
|
|
176
180
|
privacyConsent: boolean;
|
|
@@ -319,10 +323,21 @@ export interface BookingProps extends Omit<ComponentPropsWithoutRef<'div'>, 'ari
|
|
|
319
323
|
/**
|
|
320
324
|
* Hide the email field and skip its validation. Default: false.
|
|
321
325
|
* Submission omits email, including any email in the controlled value.
|
|
326
|
+
* Takes precedence over `emailOptional`.
|
|
322
327
|
* Pair with `confirmationChannels={['sms']}` for SMS-only confirmation.
|
|
323
328
|
* This prop does not change the enabled confirmation channels.
|
|
324
329
|
*/
|
|
325
330
|
hideEmail?: boolean;
|
|
331
|
+
/**
|
|
332
|
+
* Keep email visible but optional unless used for confirmation. Default: false.
|
|
333
|
+
* Email remains required when selected in the picker or radio, or when
|
|
334
|
+
* the resolved channels contain only email (including the omitted-prop default).
|
|
335
|
+
* Otherwise, blank or whitespace-only values are omitted from submission.
|
|
336
|
+
* Filled values must match the existing email format and are submitted trimmed.
|
|
337
|
+
* `hideEmail` takes precedence. This does not change confirmation channels;
|
|
338
|
+
* pair with `confirmationChannels={['sms']}` for SMS-only confirmation.
|
|
339
|
+
*/
|
|
340
|
+
emailOptional?: boolean;
|
|
326
341
|
requireCodiceFiscale?: boolean;
|
|
327
342
|
requireDateOfBirth?: boolean;
|
|
328
343
|
requireInsuranceNumber?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-types.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"booking-types.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"booking.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking.tsx"],"names":[],"mappings":"AAsFA,OAAO,KAAK,EAKV,YAAY,EAOb,MAAM,iBAAiB,CAAC;AAiCzB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAqtF1C,eAAO,MAAM,OAAO,yGAy1BnB,CAAC"}
|
|
@@ -108,6 +108,9 @@ export declare function resolveOperatorId(value: BookingValue): string | undefin
|
|
|
108
108
|
* when the consumer omits the prop, preserving the pre-amendment behaviour.
|
|
109
109
|
*/
|
|
110
110
|
export declare function resolveConfirmationChannels(enabled: ConfirmationChannel[] | undefined): ConfirmationChannel[];
|
|
111
|
+
/** Use the selection when present, otherwise the sole enabled channel or email.
|
|
112
|
+
* `enabled` must be resolved with `resolveConfirmationChannels` first. */
|
|
113
|
+
export declare function resolveEffectiveConfirmationChannels(enabled: ConfirmationChannel[], selection: ConfirmationChannel[] | undefined): ConfirmationChannel[];
|
|
111
114
|
/**
|
|
112
115
|
* Compute the channels to pre-check. Result is intersected with `enabled`
|
|
113
116
|
* for safety so a channel the practice didn't enable never gets ticked.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../../src/components/booking/cascade.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../../src/components/booking/cascade.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface BookingDetailsFormProps {
|
|
|
6
6
|
onSubmit: (details: BookingDetails) => void | Promise<void>;
|
|
7
7
|
/** Hide email, skip its validation and omit it from submission. Default: false. */
|
|
8
8
|
hideEmail?: boolean;
|
|
9
|
+
/** Keep email optional unless used for confirmation; `hideEmail` wins. Default: false. */
|
|
10
|
+
emailOptional?: boolean;
|
|
9
11
|
requireCodiceFiscale?: boolean;
|
|
10
12
|
requireDateOfBirth?: boolean;
|
|
11
13
|
/** When `true` AND `insuranceType === 'public'`, render the Versichertennummer field. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"details-form.d.ts","sourceRoot":"","sources":["../../../src/components/booking/details-form.tsx"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"details-form.d.ts","sourceRoot":"","sources":["../../../src/components/booking/details-form.tsx"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA2Bf,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAiHzB,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5D,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0FAA0F;IAC1F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yFAAyF;IACzF,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAGnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;+EAC2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAE7C;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAGrC,qBAAqB,CAAC,EAAE,gBAAgB,CAAC;IACzC,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAG3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,SAAS,CAAC;IAIxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,oEAAoE;IACpE,2BAA2B,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpD,gEAAgE;IAChE,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAiCD,eAAO,MAAM,kBAAkB,qHAuuC9B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D as e } from "../../_chunks/due-date-calculator-
|
|
1
|
+
import { D as e } from "../../_chunks/due-date-calculator-NjTlmoFK.js";
|
|
2
2
|
import { C as r, a as o, D, G as _, M as T, T as M, c as E, b as l, g as C, p as A, r as N, d as i, t as n } from "../../_chunks/antenatal-schedule-timeline-BGewPfEX.js";
|
|
3
3
|
export {
|
|
4
4
|
r as CRL_DATING_MAX_MM,
|