@alfadocs/ui-kit-debug 1.90.0 → 1.90.2
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-autocomplete-DR4Xn23Z.js +519 -0
- package/dist/_chunks/address-autocomplete-DR4Xn23Z.js.map +1 -0
- package/dist/_chunks/{address-fields-CfnXK8RT.js → address-fields-qxQkGwPf.js} +5 -5
- package/dist/_chunks/{address-fields-CfnXK8RT.js.map → address-fields-qxQkGwPf.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-CoW22jx1.js → ai-permission-notice-VNh3W57L.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-CoW22jx1.js.map → ai-permission-notice-VNh3W57L.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-DUMERHK3.js → anamnesis-summary-rows-EKPfVCmh.js} +662 -654
- package/dist/_chunks/anamnesis-summary-rows-EKPfVCmh.js.map +1 -0
- package/dist/_chunks/autocomplete-BXMcNoa3.js +562 -0
- package/dist/_chunks/autocomplete-BXMcNoa3.js.map +1 -0
- package/dist/_chunks/{balance-badge-cell-C9-hyfxy.js → balance-badge-cell-D9VhFp0L.js} +3 -3
- package/dist/_chunks/{balance-badge-cell-C9-hyfxy.js.map → balance-badge-cell-D9VhFp0L.js.map} +1 -1
- package/dist/_chunks/{booking-C0FoW8Yx.js → booking-CcE_oviI.js} +1896 -1859
- package/dist/_chunks/booking-CcE_oviI.js.map +1 -0
- package/dist/_chunks/browser-D5CD3WOj.js +565 -0
- package/dist/_chunks/browser-D5CD3WOj.js.map +1 -0
- package/dist/_chunks/{calendar-appointment-editor-dialog-D8Wkbm8_.js → calendar-appointment-editor-dialog-CiAGAX2t.js} +7 -7
- package/dist/_chunks/{calendar-appointment-editor-dialog-D8Wkbm8_.js.map → calendar-appointment-editor-dialog-CiAGAX2t.js.map} +1 -1
- package/dist/_chunks/{checkbox-BjDv-r3o.js → checkbox-a7Sh-dXb.js} +32 -31
- package/dist/_chunks/checkbox-a7Sh-dXb.js.map +1 -0
- package/dist/_chunks/{checkbox-group-Cw2H5qaq.js → checkbox-group-eGdv9fZc.js} +2 -2
- package/dist/_chunks/{checkbox-group-Cw2H5qaq.js.map → checkbox-group-eGdv9fZc.js.map} +1 -1
- package/dist/_chunks/{city-input-CJVGswxp.js → city-input-CA59CjnV.js} +2 -2
- package/dist/_chunks/{city-input-CJVGswxp.js.map → city-input-CA59CjnV.js.map} +1 -1
- package/dist/_chunks/{combobox-CDPm_n0p.js → combobox-D-gpgEDy.js} +314 -294
- package/dist/_chunks/combobox-D-gpgEDy.js.map +1 -0
- package/dist/_chunks/{country-select-DQ8q7ypA.js → country-select-BfmX9y5i.js} +2 -2
- package/dist/_chunks/{country-select-DQ8q7ypA.js.map → country-select-BfmX9y5i.js.map} +1 -1
- package/dist/_chunks/{data-table-D7EGpqOn.js → data-table-CqQgoNsU.js} +553 -552
- package/dist/_chunks/data-table-CqQgoNsU.js.map +1 -0
- package/dist/_chunks/{face-scheme-BgJGFDTa.js → face-scheme-BKSE98bo.js} +2 -2
- package/dist/_chunks/{face-scheme-BgJGFDTa.js.map → face-scheme-BKSE98bo.js.map} +1 -1
- package/dist/_chunks/{file-manager-DQbWBTfk.js → file-manager-BnI1ZWZu.js} +2 -2
- package/dist/_chunks/{file-manager-DQbWBTfk.js.map → file-manager-BnI1ZWZu.js.map} +1 -1
- package/dist/_chunks/{header-settings-BVhjndtV.js → header-settings-BeA2fnol.js} +24 -23
- package/dist/_chunks/header-settings-BeA2fnol.js.map +1 -0
- package/dist/_chunks/{heatmap-BJB6V9yJ.js → heatmap-fCxwNz2o.js} +2 -2
- package/dist/_chunks/{heatmap-BJB6V9yJ.js.map → heatmap-fCxwNz2o.js.map} +1 -1
- package/dist/_chunks/index-CpVcVNBu.js +2326 -0
- package/dist/_chunks/index-CpVcVNBu.js.map +1 -0
- package/dist/_chunks/{index.es-Bpb8_NrX.js → index.es-Beo-XicE.js} +2 -2
- package/dist/_chunks/{index.es-Bpb8_NrX.js.map → index.es-Beo-XicE.js.map} +1 -1
- package/dist/_chunks/jspdf.es.min-BW7y6yhl.js +9674 -0
- package/dist/_chunks/jspdf.es.min-BW7y6yhl.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-C0ynDik7.js → link-cell-renderer-CnCgudvq.js} +3 -3
- package/dist/_chunks/{link-cell-renderer-C0ynDik7.js.map → link-cell-renderer-CnCgudvq.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-DYwbL5sD.js → login-dev-card-BZBR58mu.js} +2 -2
- package/dist/_chunks/{login-dev-card-DYwbL5sD.js.map → login-dev-card-BZBR58mu.js.map} +1 -1
- package/dist/_chunks/{map-view-Bvi06RVh.js → map-view-UrNgxBy3.js} +260 -237
- package/dist/_chunks/map-view-UrNgxBy3.js.map +1 -0
- package/dist/_chunks/{index.modern-BeRXQVdc.js → maps-core-gate-DkNqGkm3.js} +360 -319
- package/dist/_chunks/maps-core-gate-DkNqGkm3.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js → marketplace-app-shell-CmZx0Oam.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js.map → marketplace-app-shell-CmZx0Oam.js.map} +1 -1
- package/dist/_chunks/{notes-panel-CZO1qsD-.js → notes-panel-Dywo6R55.js} +2 -2
- package/dist/_chunks/{notes-panel-CZO1qsD-.js.map → notes-panel-Dywo6R55.js.map} +1 -1
- package/dist/_chunks/{patient-details-D0P5eog5.js → patient-details-BUr7Oemx.js} +2 -2
- package/dist/_chunks/{patient-details-D0P5eog5.js.map → patient-details-BUr7Oemx.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-R73dZJY6.js → patient-field-row-bJk8Q_qr.js} +5 -5
- package/dist/_chunks/{patient-field-row-R73dZJY6.js.map → patient-field-row-bJk8Q_qr.js.map} +1 -1
- package/dist/_chunks/patient-search-Ca9j5cWb.js +1306 -0
- package/dist/_chunks/patient-search-Ca9j5cWb.js.map +1 -0
- package/dist/_chunks/{patient-summary-card-6U74-ivO.js → patient-summary-card-CCQZ8X37.js} +2 -2
- package/dist/_chunks/{patient-summary-card-6U74-ivO.js.map → patient-summary-card-CCQZ8X37.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js → periodontal-diagnosis-DD3hrg9X.js} +2 -2
- package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js.map → periodontal-diagnosis-DD3hrg9X.js.map} +1 -1
- package/dist/_chunks/{permission-matrix-BoQjENGV.js → permission-matrix-BJ6sg3Zp.js} +3 -3
- package/dist/_chunks/{permission-matrix-BoQjENGV.js.map → permission-matrix-BJ6sg3Zp.js.map} +1 -1
- package/dist/_chunks/{practice-results-B61krlwu.js → practice-results-DQuOfqej.js} +2 -2
- package/dist/_chunks/{practice-results-B61krlwu.js.map → practice-results-DQuOfqej.js.map} +1 -1
- package/dist/_chunks/{province-select-CPdTwEob.js → province-select-D64whw0m.js} +2 -2
- package/dist/_chunks/{province-select-CPdTwEob.js.map → province-select-D64whw0m.js.map} +1 -1
- package/dist/_chunks/{registration-form-DmP3YUfp.js → registration-form-CRm6DaB9.js} +2 -2
- package/dist/_chunks/{registration-form-DmP3YUfp.js.map → registration-form-CRm6DaB9.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-UzQQLb-z.js → reviews-panel-B7InBORU.js} +42 -41
- package/dist/_chunks/reviews-panel-B7InBORU.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-BZTyxQBd.js → rich-text-editor-BfEu57dk.js} +3 -3
- package/dist/_chunks/{rich-text-editor-BZTyxQBd.js.map → rich-text-editor-BfEu57dk.js.map} +1 -1
- package/dist/_chunks/{slot-grid-Bb13H9Rl.js → slot-grid-DrwynKeN.js} +91 -89
- package/dist/_chunks/{slot-grid-Bb13H9Rl.js.map → slot-grid-DrwynKeN.js.map} +1 -1
- package/dist/_chunks/{task-editor-BOETWbjU.js → task-editor-CI1SKUNc.js} +2 -2
- package/dist/_chunks/{task-editor-BOETWbjU.js.map → task-editor-CI1SKUNc.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js → use-appointment-details-read-BytPq3Ux.js} +2 -2
- package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js.map → use-appointment-details-read-BytPq3Ux.js.map} +1 -1
- package/dist/_chunks/{voice-control-panel-BziKE-KK.js → voice-control-panel-BP0otrID.js} +2 -2
- package/dist/_chunks/{voice-control-panel-BziKE-KK.js.map → voice-control-panel-BP0otrID.js.map} +1 -1
- package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js} +2 -2
- package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js.map → workflow-webhook-action-B_nBJ_ht.js.map} +1 -1
- package/dist/agent-catalog.json +2 -2
- package/dist/agent-i18n/en.json +1 -1
- package/dist/components/_shared/maps-core-gate.d.ts +18 -0
- package/dist/components/_shared/maps-core-gate.d.ts.map +1 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.js +1 -1
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/city-input/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/data-table/index.js +2 -2
- package/dist/components/data-table/toolbar.d.ts.map +1 -1
- package/dist/components/data-table/xlsx-export.d.ts +13 -0
- package/dist/components/data-table/xlsx-export.d.ts.map +1 -0
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/header-settings/header-settings.d.ts +2 -1
- package/dist/components/header-settings/header-settings.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/heatmap/index.js +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.d.ts.map +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-search/patient-search.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/periodontal-diagnosis/index.js +1 -1
- package/dist/components/permission-matrix/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/host-compat.css +1 -10
- package/dist/index.js +37 -37
- package/dist/patterns/anamnesis/anamnesis-export-download.d.ts +1 -1
- package/dist/patterns/anamnesis/anamnesis-export-download.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-export.d.ts +3 -1
- package/dist/patterns/anamnesis/anamnesis-export.d.ts.map +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/workflow-webhook-action/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +4 -8
- package/dist/_chunks/address-autocomplete-bPR2mNBt.js +0 -498
- package/dist/_chunks/address-autocomplete-bPR2mNBt.js.map +0 -1
- package/dist/_chunks/anamnesis-summary-rows-DUMERHK3.js.map +0 -1
- package/dist/_chunks/autocomplete-CnB1mHGc.js +0 -539
- package/dist/_chunks/autocomplete-CnB1mHGc.js.map +0 -1
- package/dist/_chunks/booking-C0FoW8Yx.js.map +0 -1
- package/dist/_chunks/checkbox-BjDv-r3o.js.map +0 -1
- package/dist/_chunks/combobox-CDPm_n0p.js.map +0 -1
- package/dist/_chunks/data-table-D7EGpqOn.js.map +0 -1
- package/dist/_chunks/exceljs.min-D2MHbJsF.js +0 -23046
- package/dist/_chunks/exceljs.min-D2MHbJsF.js.map +0 -1
- package/dist/_chunks/header-settings-BVhjndtV.js.map +0 -1
- package/dist/_chunks/index.modern-BeRXQVdc.js.map +0 -1
- package/dist/_chunks/jspdf.es.min-Cal6Nuw_.js +0 -10007
- package/dist/_chunks/jspdf.es.min-Cal6Nuw_.js.map +0 -1
- package/dist/_chunks/map-view-Bvi06RVh.js.map +0 -1
- package/dist/_chunks/patient-search-CCOUZABE.js +0 -1196
- package/dist/_chunks/patient-search-CCOUZABE.js.map +0 -1
- package/dist/_chunks/reviews-panel-UzQQLb-z.js.map +0 -1
package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js}
RENAMED
|
@@ -9,7 +9,7 @@ import { B as Kt } from "./badge-BUk4RjTS.js";
|
|
|
9
9
|
import { B as ue } from "./button-DohK_Ak_.js";
|
|
10
10
|
import { I as $t } from "./icon-button-S8_weU3g.js";
|
|
11
11
|
import { C as Ge } from "./card-BA4Ig_kn.js";
|
|
12
|
-
import { C as Xt } from "./checkbox-
|
|
12
|
+
import { C as Xt } from "./checkbox-a7Sh-dXb.js";
|
|
13
13
|
import { F as zt } from "./field-array-CA-gn526.js";
|
|
14
14
|
import { F as G } from "./form-field-CyHfOVKF.js";
|
|
15
15
|
import { P as Ut } from "./password-input-BokZ_rnT.js";
|
|
@@ -809,4 +809,4 @@ export {
|
|
|
809
809
|
Mo as W,
|
|
810
810
|
fo as a
|
|
811
811
|
};
|
|
812
|
-
//# sourceMappingURL=workflow-webhook-action-
|
|
812
|
+
//# sourceMappingURL=workflow-webhook-action-B_nBJ_ht.js.map
|
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"workflow-webhook-action-B_nBJ_ht.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.90.
|
|
3
|
+
"packageVersion": "1.90.2",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "component",
|
|
@@ -1042,7 +1042,7 @@
|
|
|
1042
1042
|
{
|
|
1043
1043
|
"name": "isOpen",
|
|
1044
1044
|
"type": "boolean",
|
|
1045
|
-
"description": "True when the suggestion
|
|
1045
|
+
"description": "True when the suggestion popup is visible. Open with no suggestions to show reads false.",
|
|
1046
1046
|
"descriptionKey": "ui.agent.autocomplete.state.isOpen"
|
|
1047
1047
|
}
|
|
1048
1048
|
],
|
package/dist/agent-i18n/en.json
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"state": {
|
|
117
117
|
"value": "Currently-selected option value, or null when nothing is committed.",
|
|
118
118
|
"query": "Current free-text query in the input.",
|
|
119
|
-
"isOpen": "True when the suggestion
|
|
119
|
+
"isOpen": "True when the suggestion popup is visible. Open with no suggestions to show reads false."
|
|
120
120
|
},
|
|
121
121
|
"actions": {
|
|
122
122
|
"setValue": "Set the committed value programmatically.",
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface MapsCoreGateProps {
|
|
3
|
+
/** Libraries to await before `children` mount. `core` is always awaited. */
|
|
4
|
+
libraries?: readonly string[];
|
|
5
|
+
/** Shown while the libraries are on their way. */
|
|
6
|
+
pending: ReactNode;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Renders `pending` until `google.maps.importLibrary` has delivered `core`
|
|
11
|
+
* (plus `libraries`), then `children`. A failed import is thrown during
|
|
12
|
+
* render, so the nearest `ErrorBoundary` shows its fallback instead of the
|
|
13
|
+
* host page going blank. Place it inside that boundary and outside the
|
|
14
|
+
* `APIProvider`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function MapsCoreGate({ libraries, pending, children, }: MapsCoreGateProps): ReactNode;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=maps-core-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps-core-gate.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/maps-core-gate.ts"],"names":[],"mappings":"AAcA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiC5D,UAAU,iBAAiB;IACzB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,kDAAkD;IAClD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAc,EACd,OAAO,EACP,QAAQ,GACT,EAAE,iBAAiB,GAAG,SAAS,CA6B/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/components/address-autocomplete/address-autocomplete.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"address-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/components/address-autocomplete/address-autocomplete.tsx"],"names":[],"mappings":"AA4DA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;AAMvD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,MAAM,KACV,iBAAiB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAcxD,MAAM,WAAW,yBAAyB;IACxC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,mDAAmD;IACnD,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gDAAgD;IAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oDAAoD;IACpD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mCAAmC;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAMD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+oBD,eAAO,MAAM,mBAAmB,uHA2B9B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as e, a as n, p, u as s } from "../../_chunks/use-appointment-details-read-
|
|
1
|
+
import { A as e, a as n, p, u as s } from "../../_chunks/use-appointment-details-read-BytPq3Ux.js";
|
|
2
2
|
export {
|
|
3
3
|
e as AppointmentDetailsPanel,
|
|
4
4
|
n as appointmentDetailsPanelAgent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.agent.d.ts","sourceRoot":"","sources":["../../../src/components/autocomplete/autocomplete.agent.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"autocomplete.agent.d.ts","sourceRoot":"","sources":["../../../src/components/autocomplete/autocomplete.agent.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,kBAAkB,CAiG9D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../src/components/autocomplete/autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAUlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBrD,QAAA,MAAM,oBAAoB;;;8EAazB,CAAC;
|
|
1
|
+
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../src/components/autocomplete/autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAUlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBrD,QAAA,MAAM,oBAAoB;;;8EAazB,CAAC;AA6DF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAMD,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1D,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,IAAI,CACxE,QAAQ,EACR,MAAM,GAAG,MAAM,CAChB;IACC,WAAW,EAAE,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAC1C,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAE5C,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAElD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA6lBD,UAAU,qBAAqB;IAC7B,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACxB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;KAAE,GAC5D,YAAY,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,EACQ,qBAAqB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking.tsx"],"names":[],"mappings":"AA6FA,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;
|
|
1
|
+
{"version":3,"file":"booking.d.ts","sourceRoot":"","sources":["../../../src/components/booking/booking.tsx"],"names":[],"mappings":"AA6FA,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;AAu0F1C,eAAO,MAAM,OAAO,yGAq6BnB,CAAC"}
|
|
@@ -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;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;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiCD,eAAO,MAAM,kBAAkB,
|
|
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;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiCD,eAAO,MAAM,kBAAkB,qHAwvC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOlE,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,OAAO,GAAG,eAAe,CAAC;IAC5C,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA0CD,QAAA,MAAM,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOlE,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,OAAO,GAAG,eAAe,CAAC;IAC5C,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA0CD,QAAA,MAAM,gBAAgB;;8EAiCrB,CAAC;AAEF,KAAK,cAAc,GAAG,wBAAwB,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAE1E,MAAM,WAAW,aACf,SACE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC,EAChE,YAAY,CAAC,OAAO,gBAAgB,CAAC;IACvC;;;OAGG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,KAAK,IAAI,CAAC;IAC/D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,6GAqIpB,CAAC"}
|