@alfadocs/ui-kit-debug 1.120.0 → 1.121.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/map-pin@2x.png +0 -0
- package/assets/map-pin@2x.source.json +5 -0
- package/dist/_chunks/{registration-form-CMXefBnC.js → registration-form-CwbhtKcy.js} +180 -165
- package/dist/_chunks/registration-form-CwbhtKcy.js.map +1 -0
- package/dist/_chunks/{workflow-webhook-action-dgUjv9T7.js → workflow-webhook-action-Cae02r_4.js} +264 -289
- package/dist/_chunks/workflow-webhook-action-Cae02r_4.js.map +1 -0
- package/dist/agent-catalog.json +1 -9
- package/dist/agent-i18n/en.json +0 -1
- package/dist/browser-support.js +1 -1
- package/dist/i18n/locales/ar.d.ts +2 -5
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +2 -5
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +2 -5
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +2 -5
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +2 -5
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +2 -5
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +2 -5
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +2 -5
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +2 -5
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +2 -5
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +2 -5
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +2 -5
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +2 -5
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +2 -5
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +2 -5
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +2 -5
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +2 -5
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +2 -5
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +2 -5
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +2 -5
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +2 -5
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +2 -5
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +2 -5
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +2 -5
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +2 -5
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +2 -5
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +2 -5
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +2 -5
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +2 -5
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +2 -5
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +2 -5
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +2 -5
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +2 -5
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +2 -5
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +2 -5
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +2 -5
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/locales/ar.json +2 -5
- package/dist/locales/de.json +2 -5
- package/dist/locales/el.json +2 -5
- package/dist/locales/en.json +2 -5
- package/dist/locales/es.json +2 -5
- package/dist/locales/fr.json +2 -5
- package/dist/locales/hi.json +2 -5
- package/dist/locales/it.json +2 -5
- package/dist/locales/ja.json +2 -5
- package/dist/locales/nl.json +2 -5
- package/dist/locales/pl.json +2 -5
- package/dist/locales/pt.json +2 -5
- package/dist/locales/ro.json +2 -5
- package/dist/locales/ru.json +2 -5
- package/dist/locales/sq.json +2 -5
- package/dist/locales/sv.json +2 -5
- package/dist/locales/tr.json +2 -5
- package/dist/locales/zh.json +2 -5
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/workflow-webhook-action/index.js +1 -1
- package/dist/patterns/workflow-webhook-action/workflow-webhook-action.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/_chunks/key-round-DIgsnJSg.js +0 -21
- package/dist/_chunks/key-round-DIgsnJSg.js.map +0 -1
- package/dist/_chunks/registration-form-CMXefBnC.js.map +0 -1
- package/dist/_chunks/workflow-webhook-action-dgUjv9T7.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-webhook-action-Cae02r_4.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, 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\ntype FocusTarget =\n | {\n kind: 'url' | 'secret' | 'legal' | '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 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 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 '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, not one typed over it.\n const secretCopied = copyStatus === 'copied' && copiedValue === secret;\n const secretCopyFailed = copyStatus === 'error';\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 // The secret always comes from the receiving app: Link, for one, gives\n // each practice its own and rejects any other.\n const secretDescription = 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 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 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 {/* 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","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","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","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","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","Send","Alert","Checkbox","Card","Accordion","Badge","FieldArray","TokenInsertMenu"],"mappings":"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"}
|
package/dist/agent-catalog.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "1.
|
|
3
|
+
"packageVersion": "1.121.0",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "component",
|
|
@@ -26698,14 +26698,6 @@
|
|
|
26698
26698
|
"uiActions": [],
|
|
26699
26699
|
"apiActions": []
|
|
26700
26700
|
},
|
|
26701
|
-
{
|
|
26702
|
-
"name": "generate_secret",
|
|
26703
|
-
"safety": "write",
|
|
26704
|
-
"description": "Generate a random signing secret into the password field (`data-action=\"generate-secret\"`; again to replace it) and copy it to the clipboard (`data-action=\"copy-secret\"`, which shows `data-copied=\"true\"` once done) so the person can paste it into the receiving app. The secret never appears in the page markup. Nothing is saved until the host form is submitted.",
|
|
26705
|
-
"descriptionKey": "ui.agent.workflowWebhookAction.workflows.generateSecret",
|
|
26706
|
-
"uiActions": [],
|
|
26707
|
-
"apiActions": []
|
|
26708
|
-
},
|
|
26709
26701
|
{
|
|
26710
26702
|
"name": "edit_parameters",
|
|
26711
26703
|
"safety": "write",
|
package/dist/agent-i18n/en.json
CHANGED
|
@@ -2314,7 +2314,6 @@
|
|
|
2314
2314
|
"workflowWebhookAction": {
|
|
2315
2315
|
"workflows": {
|
|
2316
2316
|
"readStep": "Read the webhook step and what is wrong with it. Each field sits in a wrapper with `data-field` (`url`, `secret`, `legalBasisConfirmed`, `parameters`). A field with a problem has `aria-invalid=\"true\"` on its control and its message in a `data-slot=\"error\"` element inside the wrapper. Parameter rows carry `data-parameter-id`, an opaque row id. The `secret` wrapper is write-only for agents: read whether it has a problem, never its value, and never repeat a secret.",
|
|
2317
|
-
"generateSecret": "Generate a random signing secret into the password field (`data-action=\"generate-secret\"`; again to replace it) and copy it to the clipboard (`data-action=\"copy-secret\"`, which shows `data-copied=\"true\"` once done) so the person can paste it into the receiving app. The secret never appears in the page markup. Nothing is saved until the host form is submitted.",
|
|
2318
2317
|
"editParameters": "Open the Advanced section (`data-action=\"toggle-advanced\"`) and add, change or remove extra parameters, each a name and a value. Most receiving apps, Link included, need none. A value may contain variables, inserted from each row's \"Insert variable\" menu or copied from the list under the rows (`data-action=\"copy-field\"`); the server replaces them with the patient's details when it sends.",
|
|
2319
2318
|
"sendTest": "Send one sample message to the address (`data-action=\"send-test\"`, present only when the host supports it): sample IDs, no patient data, signed with the secret. The address and secret are checked first. The answer is in `data-slot=\"test-result\"`, with `data-test-ok=\"true\"` when the app answered 2xx.",
|
|
2320
2319
|
"readMessageShape": "Open \"What Alfadocs sends\" (`data-action=\"toggle-reference\"`) to read what every message carries: an example body and example headers, each in a code block with its own copy button, then each field and header with its meaning. `data-action=\"copy-field\"` copies one field name and shows `data-copied=\"true\"` once done. The example values are invented; the shape is the platform's.",
|
package/dist/browser-support.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/* @alfadocs/ui-kit 1.
|
|
1
|
+
/* @alfadocs/ui-kit 1.121.0 browser-support.js. Generated by scripts/build-browser-support.mjs: do not edit. */
|
|
2
2
|
(function(){var j=[{id:"class-static-block",syntax:"{ class Probe { static { } } }"},{id:"object-has-own",check:function(e){return typeof e.Object.hasOwn=="function"}},{id:"structured-clone",check:function(e){return typeof e.structuredClone=="function"}}],C="alfadocs-browser-support",B="alfadocs:browser-support",R="AlfadocsBrowserSupport",U="AlfadocsBrowserSupportConfig",E="alfadocs.browserSupport.dismissedAt",D="alfadocs-browser-support",P="alfadocs-browser-support-title",A=0,W=1440*60*1e3,f="__alfadocsBrowserSupportProbe";function F(e){var r=e.document.currentScript;return r&&(r.nonce||r.getAttribute("nonce"))||""}function _(e,r,a){var t=e.document,o=t.createElement("script");a&&o.setAttribute("nonce",a),o.text=r;var s=t.head||t.documentElement;s.appendChild(o),s.removeChild(o)}function I(e,r){var a=F(e);if(!a)try{return new e.Function(r),!0}catch(o){if(o&&o.name==="SyntaxError")return!1}var t=e;try{return t[f]=0,_(e,"window."+f+" = 1;",a),t[f]!==1?null:(_(e,r+"\nwindow."+f+" = 2;",a),t[f]===2)}catch(o){return null}finally{delete t[f]}}function T(e,r){for(var a=[],t=!1,o=0;o<r.length;o++){var s=r[o],n=!0;if(s.syntax!==void 0)n=I(e,s.syntax);else if(s.check)try{n=s.check(e)}catch(i){n=!1}n===null?t=!0:n||a.push(s.id)}return a.length?a:t?null:a}function N(e,r){var a=String(e||"").toLowerCase().split(/[-_]/)[0];return a==="cn"&&(a="zh"),r.indexOf(a)>=0?a:r.indexOf("en")>=0?"en":r[0]}function M(e){var r=e.userAgent||"";return/iPad|iPhone|iPod/.test(r)?"ios":/Macintosh/.test(r)?(e.maxTouchPoints||0)>1?"ios":"mac":"other"}var w=[["Edge",/\b(?:Edg|EdgA|EdgiOS)\/(\d+)/],["Opera",/\b(?:OPR|OPT)\/(\d+)/],["Samsung Internet",/\bSamsungBrowser\/(\d+)/],["Firefox",/\b(?:Firefox|FxiOS)\/(\d+)/],["Chrome",/\b(?:Chrome|CriOS)\/(\d+)/],["Safari",/\bVersion\/(\d+(?:\.\d+)?)[\s\S]*\bSafari\//]];function L(e,r){for(var a=e.userAgent||"",t=0;t<w.length;t++){var o=w[t][1].exec(a);if(o){var s=w[t][0];if(r==="ios"&&s!=="Safari"){var n=/OS (\d+(?:_\d+)?) like Mac OS X/.exec(a),i=/iPhone|iPod/.test(a)?"iOS":"iPadOS";return{name:s,label:s+" ("+i+(n?" "+n[1].replace("_","."):"")+")"}}return{name:s,label:s+" "+o[1]}}}return null}function S(e,r,a){return e.replace(new RegExp("\\{\\{"+r+"\\}\\}","g"),function(){return a})}function H(e,r){if(!e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;var a=new Date(e+"T00:00:00Z");if(isNaN(a.getTime()))return null;try{var t=r==="en"?"en-GB":r==="pt"?"pt-PT":r;return a.toLocaleDateString(t,{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"})}catch(o){return e}}function G(e,r,a,t){var o=a?S(e.title,"browser",a.label):e.titleUnknown,s=t?S(e.reasonWithDate,"date",t):e.reason,n=r==="ios"?e.steps.ios:r==="mac"&&a&&a.name==="Safari"?e.steps.macSafari:a?S(e.steps.other,"browser",a.name):e.steps.otherUnknown;return{title:o,text:s+" "+n}}function q(e){return e&&(/^https:\/\//i.test(e)||/^\/(?![/\\])/.test(e))?e:null}var z="http://www.w3.org/2000/svg";function y(e,r){for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&e.setAttribute(a,r[a])}function V(e,r){var a=e.createElementNS(z,"svg");y(a,r.attrs);for(var t=0;t<r.children.length;t++){var o=e.createElementNS(z,r.children[t].tag);y(o,r.children[t].attrs),a.appendChild(o)}return a}function p(e,r,a,t){var o=e.createElement(r);return o.className=a,t!==void 0&&o.appendChild(e.createTextNode(t)),o}function Z(e,r){var a=C,t=r.messages,o=G(t,r.device,r.browser,r.supportEnds),s=p(e,"div",a+" "+a+"--"+r.placement);if(s.setAttribute("data-component","browser-support-alert"),s.setAttribute("data-placement",r.placement),s.setAttribute("role",r.placement==="page"?"alert":"status"),s.setAttribute("lang",r.locale),s.setAttribute("dir",r.locale==="ar"?"rtl":"ltr"),r.icon){var n=p(e,"span",a+"__icon");n.setAttribute("aria-hidden","true"),n.appendChild(V(e,r.icon)),s.appendChild(n)}var i=p(e,"div",a+"__body"),l=p(e,"p",a+"__title",o.title);A+=1,l.id=P+"-"+A,r.placement==="page"&&(l.setAttribute("role","heading"),l.setAttribute("aria-level","2")),i.appendChild(l),i.appendChild(p(e,"p",a+"__text",o.text));var b=q(r.helpHref);if(b){var h=p(e,"a",a+"__link",t.help);h.setAttribute("href",b),i.appendChild(h)}s.appendChild(i);var u=r.onDismiss;if(r.placement==="banner"&&u){var d=p(e,"button",a+"__dismiss",t.dismiss);d.setAttribute("type","button"),d.setAttribute("aria-describedby",l.id);var g=u;d.addEventListener("click",function(){s.parentNode&&s.parentNode.removeChild(s),g()}),s.appendChild(d)}return s}function J(e){var r={},a=e.document.currentScript;a&&a.getAttribute&&(r.placement=a.getAttribute("data-placement")||void 0,r.locale=a.getAttribute("data-locale")||void 0,r.helpHref=a.getAttribute("data-help-href")||void 0,r.supportEnds=a.getAttribute("data-support-ends")||void 0);var t=e[U];return t&&(r.placement||(r.placement=t.placement),r.locale||(r.locale=t.locale),r.helpHref||(r.helpHref=t.helpHref),r.supportEnds||(r.supportEnds=t.supportEnds)),r}function K(e,r){try{var a=Number(e.localStorage.getItem(E));return a>0&&r-a<W}catch(t){return!1}}function Y(e,r){try{e.localStorage.setItem(E,String(r))}catch(a){}}function $(e,r){try{var a;if(typeof e.CustomEvent=="function")a=new e.CustomEvent(B,{detail:r});else{var t=e.document.createEvent("CustomEvent");t.initCustomEvent(B,!1,!1,r),a=t}e.dispatchEvent(a)}catch(o){}}function Q(e,r){var a=e.document.body,t=a.style.paddingBottom,o=0;try{o=parseFloat(e.getComputedStyle(a).paddingBottom)||0}catch(n){o=0}function s(){if(r.parentNode){var n=e.innerHeight-r.getBoundingClientRect().top;a.style.paddingBottom=Math.max(0,o+n)+"px"}}return s(),e.addEventListener("resize",s),function(){e.removeEventListener("resize",s),a.style.paddingBottom=t}}function X(e,r){e.document.body?r():e.document.addEventListener("DOMContentLoaded",r)}function O(e,r,a){var t=a&&a.now!==void 0?a.now:new e.Date().getTime(),o=a&&a.requirements||j,s=J(e),n=s.placement==="page"?"page":"banner",i=new RegExp("[?&]"+D+"=preview(&|$)").test(e.location.search||""),l=T(e,o),b=l===null?null:l.length===0,h=M(e.navigator),u=L(e.navigator,h),d={supported:b,missing:l||[],shown:!1,placement:n,preview:i,browser:u?u.label:null};e[R]=d;var g=i||b===!1&&!(n==="banner"&&K(e,t));if(!g)return d;var m=N(s.locale||e.document.documentElement.getAttribute("lang"),r.locales);return X(e,function(){var c=e.document;if(!c.querySelector("."+C)){var x=c.createElement("style");x.appendChild(c.createTextNode(r.css)),(c.head||c.documentElement).appendChild(x);var k=function(){},v=Z(c,{placement:n,locale:m,messages:r.messages[m],device:h,browser:u,supportEnds:H(s.supportEnds,m),helpHref:s.helpHref,icon:r.icon,onDismiss:function(){k(),i||Y(e,new e.Date().getTime())}});n==="page"?c.body.insertBefore(v,c.body.firstChild):(c.body.appendChild(v),k=Q(e,v)),d.shown=!0,$(e,d)}}),d}O(window,{css:".alfadocs-browser-support{--ad-bs-surface:#fff9eb;--ad-bs-border:#fac634;--ad-bs-text:#695316;--ad-bs-ring:#6761e5;--ad-bs-shadow:0 10px 30px #0000000f;--ad-bs-font:'Space Grotesk', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:16px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:44px;--ad-bs-focus-width:2px;--ad-bs-focus-offset:2px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#f0eee8;--ad-bs-border:#695316;--ad-bs-ring:#39357e;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px}\n.theme-dark .alfadocs-browser-support{--ad-bs-surface:#3e3d50;--ad-bs-text:#fdedc0;--ad-bs-ring:#e040fb;--ad-bs-shadow:0 10px 30px #0006}\n.theme-dark.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#2e2e3d;--ad-bs-border:#fdedc0;--ad-bs-text:#fdedc0;--ad-bs-ring:#fa76fc;--ad-bs-shadow:0 10px 30px #0006;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.alfadocs-browser-support,.alfadocs-browser-support *{box-sizing:border-box}\n.alfadocs-browser-support{display:flex;flex-wrap:wrap;align-items:flex-start;padding:var(--ad-bs-space);border:var(--ad-bs-border-width) solid var(--ad-bs-border);border-radius:var(--ad-bs-radius);background:var(--ad-bs-surface);color:var(--ad-bs-text);font-family:var(--ad-bs-font);font-size:var(--ad-bs-font-size);line-height:var(--ad-bs-line-height);text-align:start}\n.alfadocs-browser-support--page{width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-width:var(--ad-bs-page-width);margin-block-start:var(--ad-bs-space);margin-block-end:var(--ad-bs-space);margin-inline-start:auto;margin-inline-end:auto}\n.alfadocs-browser-support--banner{position:fixed;z-index:var(--ad-bs-z);bottom:var(--ad-bs-space);inset-inline-start:var(--ad-bs-space);width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-height:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));overflow-y:auto;box-shadow:var(--ad-bs-shadow)}\n.alfadocs-browser-support__icon{flex:none;display:inline-flex;margin-inline-end:var(--ad-bs-space-sm)}\n.alfadocs-browser-support__icon svg{display:block;width:var(--ad-bs-icon);height:var(--ad-bs-icon)}\n.alfadocs-browser-support__body{flex:1 1 calc(var(--ad-bs-space) * 12);min-width:0;padding-inline-end:var(--ad-bs-space)}\n.alfadocs-browser-support__title,.alfadocs-browser-support__text{margin:0;font-size:inherit;line-height:inherit}\n.alfadocs-browser-support__title,.alfadocs-browser-support__link,.alfadocs-browser-support__dismiss{font-weight:var(--ad-bs-weight)}\n.alfadocs-browser-support__text{margin-block-start:var(--ad-bs-space-xs)}\n.alfadocs-browser-support .alfadocs-browser-support__link,.alfadocs-browser-support .alfadocs-browser-support__link:hover,.alfadocs-browser-support .alfadocs-browser-support__link:focus{display:inline-flex;align-items:center;min-height:var(--ad-bs-target);color:inherit;text-decoration:underline}\n.alfadocs-browser-support__dismiss{flex:none;min-height:var(--ad-bs-target);margin:0;margin-inline-start:auto;padding-block-start:0;padding-block-end:0;padding-inline-start:var(--ad-bs-space);padding-inline-end:var(--ad-bs-space);border:var(--ad-bs-border-width) solid currentColor;border-radius:var(--ad-bs-radius);background:transparent;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;cursor:pointer}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus,.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus{outline:var(--ad-bs-focus-width) solid var(--ad-bs-ring);outline-offset:var(--ad-bs-focus-offset);box-shadow:0 0 0 var(--ad-bs-focus-offset) var(--ad-bs-surface),0 0 0 calc(var(--ad-bs-focus-offset) + var(--ad-bs-focus-width)) var(--ad-bs-ring)}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus:not(:focus-visible),.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus:not(:focus-visible){outline:none;box-shadow:none}\n@media (forced-colors:active){.alfadocs-browser-support{border-color:CanvasText}.alfadocs-browser-support__dismiss{border-color:ButtonText}}\n@media print{.alfadocs-browser-support--banner{display:none}}",icon:{attrs:{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-triangle-alert","aria-hidden":"true",focusable:"false"},children:[{tag:"path",attrs:{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}},{tag:"path",attrs:{d:"M12 9v4"}},{tag:"path",attrs:{d:"M12 17h.01"}}]},locales:["en","it","de","ar","fr","es","pt","nl","ro","sq","tr","pl","sv","ru","el","ja","zh","hi"],messages:{en:{title:"{{browser}} is out of date",titleUnknown:"Your browser is out of date",reason:"Older browsers miss security fixes, and Alfadocs will soon stop supporting this one.",reasonWithDate:"Older browsers miss security fixes, and Alfadocs will stop supporting this one on {{date}}.",steps:{ios:"Go to Settings, then General, then Software Update. If no update is offered, this device is too old for Alfadocs.",macSafari:"Update macOS to get a newer Safari, or use the latest Chrome or Firefox.",other:"Update {{browser}} to its latest version.",otherUnknown:"Install the latest version of Chrome, Edge or Firefox."},help:"How to update",dismiss:"Hide for today"},it:{title:"Il browser {{browser}} \xE8 obsoleto",titleUnknown:"Il tuo browser \xE8 obsoleto",reason:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 presto di supportare questo browser.",reasonWithDate:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 di supportare questo browser il {{date}}.",steps:{ios:"Apri Impostazioni, poi Generali, poi Aggiornamento software. Se non viene proposto alcun aggiornamento, questo dispositivo \xE8 troppo vecchio per Alfadocs.",macSafari:"Aggiorna macOS per avere un Safari pi\xF9 recente, oppure usa l'ultima versione di Chrome o Firefox.",other:"Aggiorna {{browser}} all'ultima versione.",otherUnknown:"Installa l'ultima versione di Chrome, Edge o Firefox."},help:"Come aggiornare",dismiss:"Nascondi per oggi"},de:{title:"Der Browser {{browser}} ist veraltet",titleUnknown:"Ihr Browser ist veraltet",reason:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser bald nicht mehr unterst\xFCtzen.",reasonWithDate:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser am {{date}} nicht mehr unterst\xFCtzen.",steps:{ios:"\xD6ffnen Sie Einstellungen, dann Allgemein, dann Softwareupdate. Wird kein Update angeboten, ist dieses Ger\xE4t zu alt f\xFCr Alfadocs.",macSafari:"Aktualisieren Sie macOS, um ein neueres Safari zu erhalten, oder verwenden Sie die neueste Version von Chrome oder Firefox.",other:"Aktualisieren Sie {{browser}} auf die neueste Version.",otherUnknown:"Installieren Sie die neueste Version von Chrome, Edge oder Firefox."},help:"So aktualisieren Sie",dismiss:"F\xFCr heute ausblenden"},ar:{title:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D {{browser}} \u0642\u062F\u064A\u0645",titleUnknown:"\u0645\u062A\u0635\u0641\u062D\u0643 \u0642\u062F\u064A\u0645",reason:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0642\u0631\u064A\u0628\u064B\u0627 \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D.",reasonWithDate:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0628\u062A\u0627\u0631\u064A\u062E {{date}}.",steps:{ios:"\u0627\u0641\u062A\u062D \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A\u060C \u062B\u0645 \u0639\u0627\u0645\u060C \u062B\u0645 \u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C. \u0625\u0630\u0627 \u0644\u0645 \u064A\u0638\u0647\u0631 \u0623\u064A \u062A\u062D\u062F\u064A\u062B\u060C \u0641\u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0642\u062F\u064A\u0645 \u062C\u062F\u064B\u0627 \u0644\u062A\u0634\u063A\u064A\u0644 Alfadocs.",macSafari:"\u062D\u062F\u0651\u062B macOS \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0625\u0635\u062F\u0627\u0631 \u0623\u062D\u062F\u062B \u0645\u0646 Safari\u060C \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0645 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Firefox.",other:"\u062D\u062F\u0651\u062B {{browser}} \u0625\u0644\u0649 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631.",otherUnknown:"\u062B\u0628\u0651\u062A \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Edge \u0623\u0648 Firefox."},help:"\u0643\u064A\u0641\u064A\u0629 \u0627\u0644\u062A\u062D\u062F\u064A\u062B",dismiss:"\u0625\u062E\u0641\u0627\u0621 \u0644\u0644\u064A\u0648\u0645"},fr:{title:"Le navigateur {{browser}} est obsol\xE8te",titleUnknown:"Votre navigateur est obsol\xE8te",reason:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra bient\xF4t plus en charge celui-ci.",reasonWithDate:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra plus en charge celui-ci le {{date}}.",steps:{ios:"Ouvrez R\xE9glages, puis G\xE9n\xE9ral, puis Mise \xE0 jour logicielle. Si aucune mise \xE0 jour n'est propos\xE9e, cet appareil est trop ancien pour Alfadocs.",macSafari:"Mettez \xE0 jour macOS pour obtenir un Safari plus r\xE9cent, ou utilisez la derni\xE8re version de Chrome ou de Firefox.",other:"Mettez \xE0 jour {{browser}} vers sa derni\xE8re version.",otherUnknown:"Installez la derni\xE8re version de Chrome, Edge ou Firefox."},help:"Comment mettre \xE0 jour",dismiss:"Masquer pour aujourd'hui"},es:{title:"El navegador {{browser}} est\xE1 desactualizado",titleUnknown:"Su navegador est\xE1 desactualizado",reason:"Los navegadores antiguos carecen de correcciones de seguridad, y pronto Alfadocs dejar\xE1 de admitir este navegador.",reasonWithDate:"Los navegadores antiguos carecen de correcciones de seguridad, y Alfadocs dejar\xE1 de admitir este navegador el {{date}}.",steps:{ios:"Abra Ajustes, luego General y despu\xE9s Actualizaci\xF3n de software. Si no se ofrece ninguna actualizaci\xF3n, este dispositivo es demasiado antiguo para Alfadocs.",macSafari:"Actualice macOS para obtener un Safari m\xE1s reciente, o use la \xFAltima versi\xF3n de Chrome o Firefox.",other:"Actualice {{browser}} a su \xFAltima versi\xF3n.",otherUnknown:"Instale la \xFAltima versi\xF3n de Chrome, Edge o Firefox."},help:"C\xF3mo actualizar",dismiss:"Ocultar por hoy"},pt:{title:"O navegador {{browser}} est\xE1 desatualizado",titleUnknown:"O seu navegador est\xE1 desatualizado",reason:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 em breve de suportar este navegador.",reasonWithDate:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 de suportar este navegador a {{date}}.",steps:{ios:"Abra Defini\xE7\xF5es, depois Geral e depois Atualiza\xE7\xE3o de Software. Se n\xE3o for oferecida nenhuma atualiza\xE7\xE3o, este dispositivo \xE9 demasiado antigo para o Alfadocs.",macSafari:"Atualize o macOS para obter um Safari mais recente, ou use a vers\xE3o mais recente do Chrome ou do Firefox.",other:"Atualize {{browser}} para a vers\xE3o mais recente.",otherUnknown:"Instale a vers\xE3o mais recente do Chrome, Edge ou Firefox."},help:"Como atualizar",dismiss:"Ocultar por hoje"},nl:{title:"De browser {{browser}} is verouderd",titleUnknown:"Deze browser is verouderd",reason:"Oude browsers missen beveiligingsupdates en Alfadocs stopt binnenkort met de ondersteuning van deze browser.",reasonWithDate:"Oude browsers missen beveiligingsupdates en Alfadocs stopt op {{date}} met de ondersteuning van deze browser.",steps:{ios:"Open Instellingen, dan Algemeen, dan Software-update. Als er geen update wordt aangeboden, is dit apparaat te oud voor Alfadocs.",macSafari:"Werk macOS bij voor een nieuwere Safari, of gebruik de nieuwste versie van Chrome of Firefox.",other:"Werk {{browser}} bij naar de nieuwste versie.",otherUnknown:"Installeer de nieuwste versie van Chrome, Edge of Firefox."},help:"Zo werk je bij",dismiss:"Vandaag verbergen"},ro:{title:"Browserul {{browser}} este \xEEnvechit",titleUnknown:"Browserul dumneavoastr\u0103 este \xEEnvechit",reason:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar \xEEn cur\xE2nd Alfadocs nu va mai suporta acest browser.",reasonWithDate:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar Alfadocs nu va mai suporta acest browser \xEEncep\xE2nd cu {{date}}.",steps:{ios:"Deschide\u021Bi Set\u0103ri, apoi General, apoi Actualizare software. Dac\u0103 nu este oferit\u0103 nicio actualizare, acest dispozitiv este prea vechi pentru Alfadocs.",macSafari:"Actualiza\u021Bi macOS pentru a ob\u021Bine un Safari mai nou sau folosi\u021Bi cea mai recent\u0103 versiune de Chrome sau Firefox.",other:"Actualiza\u021Bi {{browser}} la cea mai recent\u0103 versiune.",otherUnknown:"Instala\u021Bi cea mai recent\u0103 versiune de Chrome, Edge sau Firefox."},help:"Cum actualiza\u021Bi",dismiss:"Ascunde\u021Bi pentru azi"},sq:{title:"Shfletuesi {{browser}} \xEBsht\xEB i vjetruar",titleUnknown:"Shfletuesi juaj \xEBsht\xEB i vjetruar",reason:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs s\xEB shpejti do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi.",reasonWithDate:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi m\xEB {{date}}.",steps:{ios:"Hapni Cil\xEBsimet (Settings), pastaj T\xEB p\xEBrgjithshme (General), pastaj P\xEBrdit\xEBsimi i softuerit (Software Update). N\xEBse nuk ofrohet asnj\xEB p\xEBrdit\xEBsim, kjo pajisje \xEBsht\xEB shum\xEB e vjet\xEBr p\xEBr Alfadocs.",macSafari:"P\xEBrdit\xEBsoni macOS p\xEBr t\xEB pasur nj\xEB Safari m\xEB t\xEB ri, ose p\xEBrdorni versionin m\xEB t\xEB fundit t\xEB Chrome ose Firefox.",other:"P\xEBrdit\xEBsoni {{browser}} n\xEB versionin m\xEB t\xEB fundit.",otherUnknown:"Instaloni versionin m\xEB t\xEB fundit t\xEB Chrome, Edge ose Firefox."},help:"Si t\xEB p\xEBrdit\xEBsoni",dismiss:"Fshihni p\xEBr sot"},tr:{title:"{{browser}} taray\u0131c\u0131s\u0131 g\xFCncel de\u011Fil",titleUnknown:"Taray\u0131c\u0131n\u0131z g\xFCncel de\u011Fil",reason:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs yak\u0131nda bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",reasonWithDate:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs {{date}} tarihinde bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",steps:{ios:"Ayarlar'\u0131, ard\u0131ndan Genel'i, ard\u0131ndan Yaz\u0131l\u0131m G\xFCncelleme'yi a\xE7\u0131n. G\xFCncelleme sunulmuyorsa bu cihaz Alfadocs i\xE7in \xE7ok eski.",macSafari:"Daha yeni bir Safari i\xE7in macOS'i g\xFCncelleyin veya Chrome ya da Firefox'un en son s\xFCr\xFCm\xFCn\xFC kullan\u0131n.",other:"{{browser}} taray\u0131c\u0131s\u0131n\u0131 en son s\xFCr\xFCme g\xFCncelleyin.",otherUnknown:"Chrome, Edge veya Firefox'un en son s\xFCr\xFCm\xFCn\xFC y\xFCkleyin."},help:"Nas\u0131l g\xFCncellenir",dismiss:"Bug\xFCn gizle"},pl:{title:"Przegl\u0105darka {{browser}} jest nieaktualna",titleUnknown:"Twoja przegl\u0105darka jest nieaktualna",reason:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs wkr\xF3tce przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119.",reasonWithDate:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119 {{date}}.",steps:{ios:"Otw\xF3rz Ustawienia, potem Og\xF3lne, potem Aktualizacja oprogramowania. Je\u015Bli nie ma dost\u0119pnej aktualizacji, to urz\u0105dzenie jest zbyt stare dla Alfadocs.",macSafari:"Zaktualizuj macOS, aby dosta\u0107 nowsz\u0105 wersj\u0119 Safari, albo u\u017Cyj najnowszej wersji Chrome lub Firefox.",other:"Zaktualizuj przegl\u0105dark\u0119 {{browser}} do najnowszej wersji.",otherUnknown:"Zainstaluj najnowsz\u0105 wersj\u0119 Chrome, Edge lub Firefox."},help:"Jak zaktualizowa\u0107",dismiss:"Ukryj na dzi\u015B"},sv:{title:"Webbl\xE4saren {{browser}} \xE4r f\xF6r\xE5ldrad",titleUnknown:"Din webbl\xE4sare \xE4r f\xF6r\xE5ldrad",reason:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar snart att st\xF6dja den h\xE4r webbl\xE4saren.",reasonWithDate:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar st\xF6dja den h\xE4r webbl\xE4saren den {{date}}.",steps:{ios:"\xD6ppna Inst\xE4llningar, sedan Allm\xE4nt och sedan Programuppdatering. Om ingen uppdatering erbjuds \xE4r den h\xE4r enheten f\xF6r gammal f\xF6r Alfadocs.",macSafari:"Uppdatera macOS f\xF6r att f\xE5 en nyare Safari, eller anv\xE4nd den senaste versionen av Chrome eller Firefox.",other:"Uppdatera {{browser}} till den senaste versionen.",otherUnknown:"Installera den senaste versionen av Chrome, Edge eller Firefox."},help:"S\xE5 uppdaterar du",dismiss:"D\xF6lj f\xF6r idag"},ru:{title:"\u0411\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0443\u0441\u0442\u0430\u0440\u0435\u043B",titleUnknown:"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043B",reason:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u0441\u043A\u043E\u0440\u043E \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.",reasonWithDate:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 {{date}}.",steps:{ios:"\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u041F\u041E\xBB. \u0415\u0441\u043B\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F, \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0441\u0442\u0430\u0440\u043E\u0435 \u0434\u043B\u044F Alfadocs.",macSafari:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 macOS, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E Safari, \u0438\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome \u0438\u043B\u0438 Firefox.",other:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.",otherUnknown:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome, Edge \u0438\u043B\u0438 Firefox."},help:"\u041A\u0430\u043A \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C",dismiss:"\u0421\u043A\u0440\u044B\u0442\u044C \u043D\u0430 \u0441\u0435\u0433\u043E\u0434\u043D\u044F"},el:{title:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",titleUnknown:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03AE\u03C2 \u03C3\u03B1\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",reason:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03C3\u03CD\u03BD\u03C4\u03BF\u03BC\u03B1 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2.",reasonWithDate:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03C3\u03C4\u03B9\u03C2 {{date}}.",steps:{ios:"\u0391\u03BD\u03BF\u03AF\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2, \u03BC\u03B5\u03C4\u03AC \u0393\u03B5\u03BD\u03B9\u03BA\u03AC \u03BA\u03B1\u03B9 \u03BC\u03B5\u03C4\u03AC \u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03BB\u03BF\u03B3\u03B9\u03C3\u03BC\u03B9\u03BA\u03BF\u03CD. \u0391\u03BD \u03B4\u03B5\u03BD \u03C0\u03C1\u03BF\u03C3\u03C6\u03AD\u03C1\u03B5\u03C4\u03B1\u03B9 \u03B5\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7, \u03B1\u03C5\u03C4\u03AE \u03B7 \u03C3\u03C5\u03C3\u03BA\u03B5\u03C5\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03CD \u03C0\u03B1\u03BB\u03B9\u03AC \u03B3\u03B9\u03B1 \u03C4\u03BF Alfadocs.",macSafari:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF macOS \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03BA\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03BD\u03B5\u03CC\u03C4\u03B5\u03C1\u03BF Safari \u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome \u03AE \u03C4\u03BF\u03C5 Firefox.",other:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03C3\u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7.",otherUnknown:"\u0395\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome, \u03C4\u03BF\u03C5 Edge \u03AE \u03C4\u03BF\u03C5 Firefox."},help:"\u03A0\u03CE\u03C2 \u03BD\u03B1 \u03B5\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03B5\u03C4\u03B5",dismiss:"\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03B3\u03B9\u03B1 \u03C3\u03AE\u03BC\u03B5\u03C1\u03B1"},ja:{title:"{{browser}}\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",titleUnknown:"\u304A\u4F7F\u3044\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",reason:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u3082\u9593\u3082\u306A\u304F\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",reasonWithDate:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u306F{{date}}\u306B\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",steps:{ios:"\u300C\u8A2D\u5B9A\u300D\u3001\u300C\u4E00\u822C\u300D\u3001\u300C\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u30FB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u300D\u306E\u9806\u306B\u958B\u304D\u307E\u3059\u3002\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u304C\u8868\u793A\u3055\u308C\u306A\u3044\u5834\u5408\u3001\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u306FAlfadocs\u306B\u5BFE\u5FDC\u3059\u308B\u306B\u306F\u53E4\u3059\u304E\u307E\u3059\u3002",macSafari:"macOS\u3092\u66F4\u65B0\u3057\u3066\u65B0\u3057\u3044Safari\u3092\u5165\u624B\u3059\u308B\u304B\u3001\u6700\u65B0\u306EChrome\u307E\u305F\u306FFirefox\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",other:"{{browser}}\u3092\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",otherUnknown:"Chrome\u3001Edge\u3001\u307E\u305F\u306FFirefox\u306E\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},help:"\u66F4\u65B0\u65B9\u6CD5",dismiss:"\u4ECA\u65E5\u306F\u975E\u8868\u793A"},zh:{title:"{{browser}} \u5DF2\u8FC7\u65F6",titleUnknown:"\u60A8\u7684\u6D4F\u89C8\u5668\u5DF2\u8FC7\u65F6",reason:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u4E5F\u5373\u5C06\u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",reasonWithDate:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u5C06\u4E8E {{date}} \u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",steps:{ios:"\u4F9D\u6B21\u6253\u5F00\u201C\u8BBE\u7F6E\u201D\u3001\u201C\u901A\u7528\u201D\u3001\u201C\u8F6F\u4EF6\u66F4\u65B0\u201D\u3002\u5982\u679C\u6CA1\u6709\u53EF\u7528\u66F4\u65B0\uFF0C\u8BF4\u660E\u6B64\u8BBE\u5907\u592A\u65E7\uFF0C\u65E0\u6CD5\u4F7F\u7528 Alfadocs\u3002",macSafari:"\u8BF7\u66F4\u65B0 macOS \u4EE5\u83B7\u5F97\u66F4\u65B0\u7248\u672C\u7684 Safari\uFF0C\u6216\u4F7F\u7528\u6700\u65B0\u7248 Chrome \u6216 Firefox\u3002",other:"\u8BF7\u5C06 {{browser}} \u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C\u3002",otherUnknown:"\u8BF7\u5B89\u88C5\u6700\u65B0\u7248 Chrome\u3001Edge \u6216 Firefox\u3002"},help:"\u5982\u4F55\u66F4\u65B0",dismiss:"\u4ECA\u65E5\u9690\u85CF"},hi:{title:"{{browser}} \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",titleUnknown:"\u0906\u092A\u0915\u093E \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",reason:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs \u091C\u0932\u094D\u0926 \u0939\u0940 \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",reasonWithDate:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs {{date}} \u0915\u094B \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",steps:{ios:"\u0938\u0947\u091F\u093F\u0902\u0917 \u0916\u094B\u0932\u0947\u0902, \u092B\u093F\u0930 \u0938\u093E\u092E\u093E\u0928\u094D\u092F, \u092B\u093F\u0930 \u0938\u0949\u092B\u093C\u094D\u091F\u0935\u0947\u092F\u0930 \u0905\u092A\u0921\u0947\u091F\u0964 \u0905\u0917\u0930 \u0915\u094B\u0908 \u0905\u092A\u0921\u0947\u091F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u093E, \u0924\u094B \u092F\u0939 \u0921\u093F\u0935\u093E\u0907\u0938 Alfadocs \u0915\u0947 \u0932\u093F\u090F \u092C\u0939\u0941\u0924 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u0948\u0964",macSafari:"\u0928\u092F\u093E Safari \u092A\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F macOS \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902, \u092F\u093E Chrome \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0947\u0902\u0964",other:"{{browser}} \u0915\u094B \u0909\u0938\u0915\u0947 \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u092E\u0947\u0902 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902\u0964",otherUnknown:"Chrome, Edge \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902\u0964"},help:"\u0905\u092A\u0921\u0947\u091F \u0915\u0948\u0938\u0947 \u0915\u0930\u0947\u0902",dismiss:"\u0906\u091C \u0915\u0947 \u0932\u093F\u090F \u091B\u093F\u092A\u093E\u090F\u0902"}}});})();
|
|
@@ -6506,10 +6506,9 @@ export declare const arUi: {
|
|
|
6506
6506
|
readonly urlHttps: "يجب أن يبدأ العنوان بـ https://.";
|
|
6507
6507
|
readonly urlCredentials: "احذف اسم المستخدم وكلمة المرور من العنوان.";
|
|
6508
6508
|
readonly secret: "سر التوقيع";
|
|
6509
|
-
readonly secretDescription: "يستخدمه التطبيق للتحقق من أن كل رسالة صادرة من Alfadocs.
|
|
6509
|
+
readonly secretDescription: "الصق السر من التطبيق الذي يستقبل الرسائل. يستخدمه التطبيق للتحقق من أن كل رسالة صادرة من Alfadocs.";
|
|
6510
6510
|
readonly secretSavedDescription: "هناك سر محفوظ بالفعل. اترك هذا الحقل فارغاً للإبقاء عليه.";
|
|
6511
|
-
readonly secretRequired: "
|
|
6512
|
-
readonly generate: "إنشاء سر";
|
|
6511
|
+
readonly secretRequired: "الصق سر التوقيع من التطبيق.";
|
|
6513
6512
|
readonly testDescription: "أرسل اختباراً للتحقق من العنوان والسر. يستخدم معرّفات نموذجية ولا يتضمن أي بيانات مريض.";
|
|
6514
6513
|
readonly sendTest: "إرسال اختبار";
|
|
6515
6514
|
readonly testSent: "تم إرسال الاختبار. ردّ التطبيق بالرمز {{status}}.";
|
|
@@ -6517,8 +6516,6 @@ export declare const arUi: {
|
|
|
6517
6516
|
readonly testRejected: "ردّ التطبيق بالرمز {{status}}. تحقق من العنوان ومن إعدادات التطبيق.";
|
|
6518
6517
|
readonly testUnreachable: "تعذّر الوصول إلى العنوان. تحقق من أنه صحيح وعام.";
|
|
6519
6518
|
readonly testFailed: "تعذّر إرسال الاختبار. حاول مرة أخرى.";
|
|
6520
|
-
readonly generatedNotice: "انسخ هذا السر إلى التطبيق الآن. بعد الحفظ، يُبقيه Alfadocs مخفياً.";
|
|
6521
|
-
readonly secretGenerated: "تم إنشاء سر جديد. انسخه إلى التطبيق.";
|
|
6522
6519
|
readonly legalBasis: "أؤكد أن العيادة لديها أساس قانوني لمشاركة بيانات المرضى مع الجهة المستلمة على هذا العنوان.";
|
|
6523
6520
|
readonly legalBasisRequired: "حدّد هذا المربع لحفظ الخطوة.";
|
|
6524
6521
|
readonly advanced: "متقدم";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAw4NP,CAAC"}
|
package/dist/i18n/locales/ar.js
CHANGED
|
@@ -6414,10 +6414,9 @@ const e = {
|
|
|
6414
6414
|
urlHttps: "يجب أن يبدأ العنوان بـ https://.",
|
|
6415
6415
|
urlCredentials: "احذف اسم المستخدم وكلمة المرور من العنوان.",
|
|
6416
6416
|
secret: "سر التوقيع",
|
|
6417
|
-
secretDescription: "يستخدمه التطبيق للتحقق من أن كل رسالة صادرة من Alfadocs.
|
|
6417
|
+
secretDescription: "الصق السر من التطبيق الذي يستقبل الرسائل. يستخدمه التطبيق للتحقق من أن كل رسالة صادرة من Alfadocs.",
|
|
6418
6418
|
secretSavedDescription: "هناك سر محفوظ بالفعل. اترك هذا الحقل فارغاً للإبقاء عليه.",
|
|
6419
|
-
secretRequired: "
|
|
6420
|
-
generate: "إنشاء سر",
|
|
6419
|
+
secretRequired: "الصق سر التوقيع من التطبيق.",
|
|
6421
6420
|
testDescription: "أرسل اختباراً للتحقق من العنوان والسر. يستخدم معرّفات نموذجية ولا يتضمن أي بيانات مريض.",
|
|
6422
6421
|
sendTest: "إرسال اختبار",
|
|
6423
6422
|
testSent: "تم إرسال الاختبار. ردّ التطبيق بالرمز {{status}}.",
|
|
@@ -6425,8 +6424,6 @@ const e = {
|
|
|
6425
6424
|
testRejected: "ردّ التطبيق بالرمز {{status}}. تحقق من العنوان ومن إعدادات التطبيق.",
|
|
6426
6425
|
testUnreachable: "تعذّر الوصول إلى العنوان. تحقق من أنه صحيح وعام.",
|
|
6427
6426
|
testFailed: "تعذّر إرسال الاختبار. حاول مرة أخرى.",
|
|
6428
|
-
generatedNotice: "انسخ هذا السر إلى التطبيق الآن. بعد الحفظ، يُبقيه Alfadocs مخفياً.",
|
|
6429
|
-
secretGenerated: "تم إنشاء سر جديد. انسخه إلى التطبيق.",
|
|
6430
6427
|
legalBasis: "أؤكد أن العيادة لديها أساس قانوني لمشاركة بيانات المرضى مع الجهة المستلمة على هذا العنوان.",
|
|
6431
6428
|
legalBasisRequired: "حدّد هذا المربع لحفظ الخطوة.",
|
|
6432
6429
|
advanced: "متقدم",
|