@asteby/storefront-react 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account.cjs.map +1 -1
- package/dist/account.js +1 -1
- package/dist/{chunk-Q7UTJIKY.js → chunk-D5L7UZIA.js} +25 -4
- package/dist/chunk-D5L7UZIA.js.map +1 -0
- package/dist/{chunk-PPQEUTXJ.js → chunk-VE7WQPMY.js} +48 -6
- package/dist/chunk-VE7WQPMY.js.map +1 -0
- package/dist/fiscal-server.cjs.map +1 -1
- package/dist/fiscal-server.d.cts +2 -2
- package/dist/fiscal-server.d.ts +2 -2
- package/dist/fiscal-server.js +1 -1
- package/dist/fiscal.cjs +418 -17
- package/dist/fiscal.cjs.map +1 -1
- package/dist/fiscal.css +103 -0
- package/dist/fiscal.d.cts +91 -7
- package/dist/fiscal.d.ts +91 -7
- package/dist/fiscal.js +296 -18
- package/dist/fiscal.js.map +1 -1
- package/dist/{types-BnvSbV6t.d.cts → types-CZ3PleG6.d.cts} +1 -1
- package/dist/{types-BnvSbV6t.d.ts → types-CZ3PleG6.d.ts} +1 -1
- package/package.json +2 -2
- package/dist/chunk-PPQEUTXJ.js.map +0 -1
- package/dist/chunk-Q7UTJIKY.js.map +0 -1
package/dist/fiscal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/fiscal/identity-fields.tsx","../src/fiscal/document-reader.tsx","../src/fiscal/invoice-toggle.tsx","../src/fiscal/invoice-status-card.tsx"],"names":["useId","useState","useRef","useEffect","useMemo","jsxs","jsx","inv","Fragment","useCallback"],"mappings":"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","file":"fiscal.js","sourcesContent":["/**\n * The fiscal data of an invoice: tax id, legal name, tax postal code, regime and invoice use. Everything comes from the\n * region (`Region.fiscal_id`): the tax id's name and format, the regimes (narrowed by person type when the shop says how\n * to tell it), the uses (narrowed by the chosen regime) and the postal code format. Nothing here names a country.\n *\n * Plain HTML controls named `<prefix>.<field>` (default `invoice.tax_id`, `invoice.legal_name`...), so the fields work\n * inside any `<form>`, with or without JavaScript; with JavaScript the region's rules also run as the buyer types.\n */\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { CheckoutField, type CheckoutFieldClassNames, type FieldErrors } from '../checkout/fields.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { entryLabel, normalizeTaxId, regimesFor, usesFor, validateFiscalValues, type FiscalProblem, type FiscalRegion } from './format.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport type { FiscalFieldName, FiscalFieldValues } from './types.js'\n\nexport type FiscalIdentityFieldsClassNames = CheckoutFieldClassNames & Partial<Record<'fieldset' | 'legend' | 'mark' | 'radios' | 'radio', string>>\n\nexport type FiscalIdentityFieldsProps = {\n region: FiscalRegion\n /** Initial values (and, when they change, the new values: e.g. after a document is read). */\n values?: Partial<FiscalFieldValues>\n onChange?: (values: FiscalFieldValues) => void\n /** Fields that were filled from a document: they get the \"From your {document}\" mark and stay editable. */\n fromDocument?: readonly FiscalFieldName[]\n /** Short noun of the document for the mark (\"constancia\"). Default: nothing specific (\"tu documento\"). */\n documentName?: string\n /** The document listed these regimes: show only them, as radios. */\n regimeCandidates?: readonly string[]\n /** Errors by control name (`invoice.tax_regime`), from the server or `useFieldErrors`. */\n errors?: FieldErrors\n namePrefix?: string\n /** Prefix of the control ids (default: generated). */\n idPrefix?: string\n /** Tells a person type from a tax id, to narrow the regimes (`personTypeByLength`). */\n personTypeOf?: (taxId: string) => string | null\n disabled?: boolean\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: FiscalIdentityFieldsClassNames\n /** Hides the fieldset legend (when the caller already has a heading). */\n hideLegend?: boolean\n}\n\nconst FIELDS: FiscalFieldName[] = ['tax_id', 'legal_name', 'postal_code', 'tax_regime', 'use']\nconst EMPTY: FiscalFieldValues = { tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' }\n\nfunction problemText(m: FiscalMessages['fields'], region: FiscalRegion, field: FiscalFieldName, p: FiscalProblem): string {\n const e = m.errors\n switch (p) {\n case 'required':\n return e.required\n case 'format':\n return field === 'tax_id'\n ? fill(e.taxIdFormat, { kind: region.fiscal_id?.label ?? '' })\n : fill(e.postalFormat, { example: region.address?.postal_code?.example ?? '' })\n case 'person_type':\n return e.personType\n case 'use_not_allowed':\n return e.useNotAllowed\n default:\n return e.unknown\n }\n}\n\nexport function FiscalIdentityFields({\n region,\n values,\n onChange,\n fromDocument = [],\n documentName,\n regimeCandidates,\n errors = {},\n namePrefix = 'invoice',\n idPrefix,\n personTypeOf,\n disabled,\n locale: localeProp,\n messages,\n classNames: cx = {},\n hideLegend,\n}: FiscalIdentityFieldsProps) {\n const locale = useResolvedLocale(localeProp)\n const all = fiscalMessages(locale, messages)\n const m = all.fields\n const fid = region.fiscal_id\n const reactId = useId()\n const base = idPrefix ?? `sf-fiscal-${reactId.replace(/:/g, '')}`\n const [v, setV] = useState<FiscalFieldValues>({ ...EMPTY, ...values })\n const [shown, setShown] = useState<ReadonlySet<FiscalFieldName>>(new Set())\n const root = useRef<HTMLFieldSetElement>(null)\n const valuesKey = JSON.stringify(values ?? null)\n const first = useRef(true)\n\n // New values from outside (a document was read): take them.\n useEffect(() => {\n if (first.current) {\n first.current = false\n return\n }\n setV({ ...EMPTY, ...values })\n setShown(new Set())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valuesKey])\n\n const set = (patch: Partial<FiscalFieldValues>) => {\n const next = { ...v, ...patch }\n // A use the new regime does not admit is dropped, not silently kept.\n if (patch.tax_regime !== undefined && next.use && !usesFor(fid, next.tax_regime).some((u) => u.code === next.use)) next.use = ''\n setV(next)\n onChange?.(next)\n }\n\n const person = personTypeOf?.(v.tax_id) ?? null\n const taxIdOk = !validateFiscalValues(region, { tax_id: v.tax_id }, personTypeOf).tax_id\n const problems = useMemo(() => validateFiscalValues(region, v, personTypeOf), [region, v, personTypeOf])\n const candidates = regimeCandidates?.length ? regimeCandidates : null\n const regimes = useMemo(() => {\n const list = regimesFor(fid, taxIdOk ? person : null)\n if (candidates) return (fid?.regimes ?? []).filter((r) => candidates.includes(r.code))\n // Never hide the regime already chosen.\n return v.tax_regime && !list.some((r) => r.code === v.tax_regime) ? [...list, ...(fid?.regimes ?? []).filter((r) => r.code === v.tax_regime)] : list\n }, [fid, person, taxIdOk, candidates, v.tax_regime])\n const uses = useMemo(() => usesFor(fid, v.tax_regime), [fid, v.tax_regime])\n\n // Rules that block the submit (format, combination) are exposed to the browser's own validation.\n useEffect(() => {\n const el = root.current\n if (!el) return\n for (const f of FIELDS) {\n const ctl = el.querySelector<HTMLInputElement | HTMLSelectElement>(`[name=\"${namePrefix}.${f}\"]`)\n const p = problems[f]\n ctl?.setCustomValidity?.(p && p !== 'required' ? problemText(m, region, f, p) : '')\n }\n })\n\n const name = (f: FiscalFieldName) => `${namePrefix}.${f}`\n const err = (f: FiscalFieldName): string | null => {\n const external = errors[name(f)]\n if (external) return external\n const p = problems[f]\n return shown.has(f) && p && p !== 'required' ? problemText(m, region, f, p) : null\n }\n const touch = (f: FiscalFieldName) => {\n if (v[f] && !shown.has(f)) setShown((s) => new Set(s).add(f))\n }\n const doc = documentName ?? ''\n const mark = (f: FiscalFieldName): ReactNode =>\n fromDocument.includes(f) && (v[f] || (f === 'tax_regime' && candidates)) ? (\n <span className={cx.mark} data-sf-from-document>\n <span aria-hidden=\"true\">✓ </span>\n {fill(m.fromDocument, { document: doc || (locale.toLowerCase().startsWith('en') ? 'document' : 'documento') })}\n </span>\n ) : null\n const hint = (f: FiscalFieldName, text: string | undefined): ReactNode => {\n const mk = mark(f)\n if (!mk) return text\n return text ? (\n <>\n {mk} · {text}\n </>\n ) : (\n mk\n )\n }\n const postalExample = region.address?.postal_code?.example\n const numericPostal = !!postalExample && /^\\d+$/.test(postalExample)\n\n return (\n <fieldset ref={root} className={cx.fieldset} disabled={disabled} data-sf-fiscal-fields style={{ border: 0, padding: 0, margin: 0, minInlineSize: 0 }}>\n <legend className={cx.legend} hidden={hideLegend ? true : undefined} style={hideLegend ? undefined : { padding: 0 }}>\n {m.legend}\n </legend>\n <CheckoutField\n name={name('tax_id')}\n id={`${base}-tax_id`}\n label={fid?.label || m.taxId}\n hint={hint('tax_id', m.taxIdHint)}\n value={v.tax_id}\n onChange={(e) => set({ tax_id: normalizeTaxId(e.target.value) })}\n onBlur={() => touch('tax_id')}\n error={err('tax_id')}\n classNames={cx}\n autoComplete=\"off\"\n autoCapitalize=\"characters\"\n spellCheck={false}\n inputMode=\"text\"\n enterKeyHint=\"next\"\n maxLength={20}\n locale={locale}\n />\n <CheckoutField\n name={name('legal_name')}\n id={`${base}-legal_name`}\n label={m.legalName}\n hint={hint('legal_name', m.legalNameHint)}\n value={v.legal_name}\n onChange={(e) => set({ legal_name: e.target.value })}\n onBlur={() => touch('legal_name')}\n error={err('legal_name')}\n classNames={cx}\n autoComplete=\"organization\"\n enterKeyHint=\"next\"\n maxLength={254}\n locale={locale}\n />\n <CheckoutField\n name={name('postal_code')}\n id={`${base}-postal_code`}\n label={m.postalCode}\n hint={hint('postal_code', m.postalCodeHint)}\n value={v.postal_code}\n onChange={(e) => set({ postal_code: e.target.value.trim() })}\n onBlur={() => touch('postal_code')}\n error={err('postal_code')}\n classNames={cx}\n autoComplete=\"postal-code\"\n inputMode={numericPostal ? 'numeric' : 'text'}\n placeholder={postalExample}\n enterKeyHint=\"next\"\n maxLength={12}\n locale={locale}\n />\n {candidates ? (\n <fieldset className={cx.radios} data-sf-fiscal-regimes aria-describedby={err('tax_regime') ? `${base}-regime-error` : undefined} style={{ border: 0, padding: 0, margin: 0, minInlineSize: 0 }}>\n <legend className={cx.label} data-sf-label={m.regime}>\n {m.regime}\n </legend>\n <p className={cx.hint} data-sf-field-hint>\n {mark('tax_regime')} · {m.regimeFromDocument}\n </p>\n {regimes.map((r, i) => (\n <label key={r.code} className={cx.radio} data-sf-fiscal-radio>\n <input\n type=\"radio\"\n id={i === 0 ? `${base}-tax_regime` : undefined}\n name={name('tax_regime')}\n value={r.code}\n checked={v.tax_regime === r.code}\n required\n onChange={() => set({ tax_regime: r.code })}\n />\n <span>\n {entryLabel(r, locale)} <span data-sf-fiscal-code>({r.code})</span>\n </span>\n </label>\n ))}\n {err('tax_regime') ? (\n <p id={`${base}-regime-error`} className={cx.error} data-sf-field-error>\n {err('tax_regime')}\n </p>\n ) : null}\n </fieldset>\n ) : (\n <CheckoutField\n as=\"select\"\n name={name('tax_regime')}\n id={`${base}-tax_regime`}\n label={m.regime}\n hint={hint('tax_regime', m.regimeHint)}\n value={v.tax_regime}\n onChange={(e) => set({ tax_regime: e.target.value })}\n onBlur={() => touch('tax_regime')}\n error={err('tax_regime')}\n classNames={cx}\n locale={locale}\n >\n <option value=\"\">{m.regimeChoose}</option>\n {regimes.map((r) => (\n <option key={r.code} value={r.code}>\n {r.code} · {entryLabel(r, locale)}\n </option>\n ))}\n </CheckoutField>\n )}\n <CheckoutField\n as=\"select\"\n name={name('use')}\n id={`${base}-use`}\n label={m.use}\n hint={m.useHint}\n value={v.use}\n onChange={(e) => set({ use: e.target.value })}\n onBlur={() => touch('use')}\n error={err('use')}\n classNames={cx}\n locale={locale}\n >\n <option value=\"\">{m.useChoose}</option>\n {uses.map((u) => (\n <option key={u.code} value={u.code}>\n {u.code} · {entryLabel(u, locale)}\n </option>\n ))}\n </CheckoutField>\n </fieldset>\n )\n}\n","/**\n * \"Upload your tax document\" flow: the buyer drops the PDF the tax authority gave them, we read it ON THEIR DEVICE\n * (pdf.js is loaded only when a file is chosen, never in the main bundle), they review the prefilled fields and confirm.\n * The file is never uploaded or kept; only the fields the buyer confirms leave, plus minimal evidence of where they came\n * from (`buildDocumentEvidence`). Fields the region lists in `discard_fields` (ids, street...) are never shown or kept.\n *\n * Without JavaScript the same control posts the file to the shop's action (`createInvoiceAction`, intent\n * `extract-document`), which reads it in memory, discards it and sends back `data` to review.\n *\n * Everything country-specific is the region's `IdentityDocumentSpec`: label, where to get it, accepted types, size,\n * rules, freshness. The component only knows \"a document with fiscal data\".\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type DragEvent, type ReactNode } from 'react'\nimport type { FiscalDocumentEvidence, IdentityDocumentSpec } from '@asteby/storefront'\nimport { ErrorSummary, type ErrorSummaryItem, type FieldErrors } from '../checkout/fields.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { summarizeExtraction } from './extraction.js'\nimport { validateFiscalValues, type FiscalRegion } from './format.js'\nimport { FiscalIdentityFields, type FiscalIdentityFieldsClassNames } from './identity-fields.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport type { FiscalActionData, FiscalExtractionSummary, FiscalFieldName, FiscalFieldValues, FiscalReadError } from './types.js'\n\nexport type FiscalReaderResult = {\n values: FiscalFieldValues\n /** Where the data came from; `null` when the buyer typed everything. */\n evidence: FiscalDocumentEvidence | null\n /** The buyer asked to save the data to their account (`canSave`). */\n save: boolean\n}\n\nexport type IdentityDocumentReaderClassNames = FiscalIdentityFieldsClassNames &\n Partial<Record<'root' | 'zone' | 'zoneActive' | 'button' | 'link' | 'privacy' | 'status' | 'error' | 'warning' | 'notice' | 'actions' | 'primary' | 'secondary' | 'summary', string>>\n\nexport type IdentityDocumentReaderProps = {\n region: FiscalRegion\n /** The document to read. Default: the first of `region.fiscal_id.documents`. */\n document?: IdentityDocumentSpec\n /**\n * URL of the pdf.js worker (`pdf.worker.mjs` from `pdfjs-dist/legacy/build`) that YOUR site serves. There is no\n * default and no CDN: without it the browser cannot read the file and the buyer is sent to manual entry.\n */\n workerSrc?: string\n /** The buyer confirmed the reviewed data. */\n onConfirm: (result: FiscalReaderResult) => void\n /** The buyer chose to type their data. Default: the review form opens empty. */\n onManual?: () => void\n /** Values to start the review with (e.g. a saved profile). */\n initialValues?: Partial<FiscalFieldValues>\n /** Result of the server (no-JS upload): when it carries an `extraction` or an error, it is shown. */\n data?: FiscalActionData | null\n /** The shop has a signed-in buyer: offer \"Save to my account\". */\n canSave?: boolean\n /** Enables the no-JS upload (a button that posts the file to the action with `intent=extract-document`). */\n serverUpload?: boolean\n /** Short noun of the document for texts (\"constancia\"). Default: the spec's label in lowercase. */\n documentName?: string\n personTypeOf?: (taxId: string) => string | null\n /** Clock for tests. */\n now?: () => Date\n namePrefix?: string\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: IdentityDocumentReaderClassNames\n /** Label of the confirm button. */\n confirmLabel?: ReactNode\n}\n\ntype Phase =\n | { kind: 'idle' }\n | { kind: 'reading'; fileName: string }\n | { kind: 'review'; extraction: FiscalExtractionSummary | null; revision: number }\n | { kind: 'error'; code: FiscalReadError; sizeLimit?: number }\n\nconst isPdf = (f: File, accept: string[]) => {\n const okType = f.type ? accept.some((a) => a === f.type) || f.type === 'application/pdf' : false\n return okType || /\\.pdf$/i.test(f.name)\n}\n\nconst mib = (bytes: number) => `${Math.round((bytes / (1024 * 1024)) * 10) / 10} MB`\n\nexport function IdentityDocumentReader(props: IdentityDocumentReaderProps) {\n const { region, workerSrc, onConfirm, onManual, initialValues, data, canSave, serverUpload, personTypeOf, now, namePrefix = 'invoice', messages, classNames: cx = {}, confirmLabel } = props\n const locale = useResolvedLocale(props.locale)\n const all = fiscalMessages(locale, messages)\n const m = all.reader\n const spec = props.document ?? region.fiscal_id?.documents?.[0]\n const reactId = useId().replace(/:/g, '')\n const inputId = `sf-reader-${reactId}-file`\n const helpId = `sf-reader-${reactId}-help`\n const documentName = props.documentName ?? (spec?.label ?? 'document').toLowerCase()\n\n const fromServer = data?.extraction ?? null\n const serverError = data && !data.ok && data.error && ['not_pdf', 'too_large', 'no_text', 'password', 'unreadable'].includes(data.error.code) ? (data.error.code as FiscalReadError) : null\n const [phase, setPhase] = useState<Phase>(() =>\n fromServer ? { kind: 'review', extraction: fromServer, revision: 0 } : serverError ? { kind: 'error', code: serverError, sizeLimit: spec?.max_bytes } : { kind: 'idle' },\n )\n const [dragging, setDragging] = useState(false)\n const [live, setLive] = useState('')\n const [values, setValues] = useState<FiscalFieldValues>({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '', ...initialValues, ...(fromServer?.values ?? {}) })\n const [save, setSave] = useState(false)\n const [summary, setSummary] = useState<ErrorSummaryItem[] | null>(null)\n const [summaryKey, setSummaryKey] = useState(0)\n const [hydrated, setHydrated] = useState(false)\n const abort = useRef<AbortController | null>(null)\n const fileInput = useRef<HTMLInputElement>(null)\n const errorRef = useRef<HTMLDivElement>(null)\n const reviewRef = useRef<HTMLHeadingElement>(null)\n\n useEffect(() => setHydrated(true), [])\n useEffect(() => () => abort.current?.abort(), [])\n // A new answer from the server (the buyer posted a file without JS and the page came back).\n useEffect(() => {\n if (!fromServer) return\n setValues((cur) => ({ ...cur, ...fromServer.values }))\n setPhase({ kind: 'review', extraction: fromServer, revision: 1 })\n }, [fromServer])\n useEffect(() => {\n if (phase.kind === 'error') errorRef.current?.focus()\n if (phase.kind === 'review' && phase.revision > 0) reviewRef.current?.focus()\n }, [phase])\n\n const accept = useMemo(() => (spec?.accept?.length ? spec.accept.join(',') : 'application/pdf'), [spec])\n const fieldErrors: FieldErrors = useMemo(() => {\n const out: FieldErrors = {}\n for (const [k, v] of Object.entries(data?.fieldErrors ?? {})) out[k] = all.server.errors[v] ?? v\n return out\n }, [data, all.server.errors])\n\n const cancel = useCallback(() => {\n abort.current?.abort()\n abort.current = null\n setPhase({ kind: 'idle' })\n setLive('')\n }, [])\n\n const openManual = useCallback(() => {\n onManual?.()\n setPhase({ kind: 'review', extraction: null, revision: 1 })\n setLive('')\n }, [onManual])\n\n const read = useCallback(\n async (file: File) => {\n if (!spec) return\n if (!isPdf(file, spec.accept ?? [])) return setPhase({ kind: 'error', code: 'not_pdf' })\n if (file.size > spec.max_bytes) return setPhase({ kind: 'error', code: 'too_large', sizeLimit: spec.max_bytes })\n const ctl = new AbortController()\n abort.current = ctl\n setPhase({ kind: 'reading', fileName: file.name })\n setLive(fill(m.reading, { document: documentName }))\n try {\n // On demand: pdf.js is not in the main bundle, it loads here.\n const eng = await import('@asteby/storefront/fiscal-document')\n const { text, sha256 } = await eng.readPdfText(file, {\n maxBytes: spec.max_bytes,\n ...(spec.max_pages ? { maxPages: spec.max_pages } : {}),\n ...(workerSrc ? { workerSrc } : {}),\n signal: ctl.signal,\n })\n if (ctl.signal.aborted) return\n // The QR is a best-effort cross-check; it never blocks.\n const qr = await eng.decodePdfQr(file, { ...(workerSrc ? { workerSrc } : {}), signal: ctl.signal }).catch(() => null)\n if (ctl.signal.aborted) return\n const x = eng.extractIdentityDocument(text, spec, {\n catalogs: region.fiscal_id ? eng.catalogsFromRegion(region.fiscal_id) : {},\n qr,\n ...(now ? { now: now() } : {}),\n })\n const evidence = eng.buildDocumentEvidence(x, { sha256, source: 'pdf_client' })\n const sum = summarizeExtraction(x, evidence, region.fiscal_id?.regimes.map((r) => r.code))\n setValues({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '', ...sum.values })\n setSummary(null)\n setPhase({ kind: 'review', extraction: sum, revision: 1 })\n setLive(m.done)\n } catch (err) {\n if (ctl.signal.aborted) return\n const code = (err as { code?: string } | null)?.code\n setLive('')\n setPhase({\n kind: 'error',\n code: code === 'not_pdf' || code === 'too_large' || code === 'no_text' || code === 'password' ? code : 'unreadable',\n sizeLimit: spec.max_bytes,\n })\n } finally {\n if (abort.current === ctl) abort.current = null\n if (fileInput.current) fileInput.current.value = ''\n }\n },\n [spec, workerSrc, region, now, documentName, m.reading, m.done],\n )\n\n if (!spec) return null\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n setDragging(false)\n const f = e.dataTransfer?.files?.[0]\n if (f) void read(f)\n }\n\n const confirm = () => {\n const problems = validateFiscalValues(region, values, personTypeOf)\n const keys = Object.keys(problems) as FiscalFieldName[]\n if (keys.length) {\n const labels: Record<FiscalFieldName, string> = {\n tax_id: region.fiscal_id?.label || all.fields.taxId,\n legal_name: all.fields.legalName,\n postal_code: all.fields.postalCode,\n tax_regime: all.fields.regime,\n use: all.fields.use,\n }\n const item = (f: FiscalFieldName): ErrorSummaryItem => {\n const p = problems[f]!\n const msg =\n p === 'required'\n ? all.fields.errors.required\n : p === 'format'\n ? f === 'tax_id'\n ? fill(all.fields.errors.taxIdFormat, { kind: region.fiscal_id?.label ?? '' })\n : fill(all.fields.errors.postalFormat, { example: region.address?.postal_code?.example ?? '' })\n : p === 'person_type'\n ? all.fields.errors.personType\n : p === 'use_not_allowed'\n ? all.fields.errors.useNotAllowed\n : all.fields.errors.unknown\n return { name: `${namePrefix}.${f}`, id: `sf-reader-${reactId}-${f}`, label: labels[f], message: msg }\n }\n setSummary(keys.map(item))\n setSummaryKey((k) => k + 1)\n return\n }\n setSummary(null)\n const ev = phase.kind === 'review' ? (phase.extraction?.evidence ?? null) : null\n onConfirm({ values, evidence: ev, save: !!canSave && save })\n }\n\n const errorsByName: FieldErrors = { ...fieldErrors }\n for (const s of summary ?? []) errorsByName[s.name] = s.message\n\n // ---- views ------------------------------------------------------------------------------------------------------\n const privacy = serverUpload && !hydrated ? m.privacyServer : m.privacyBrowser\n\n const idle = (\n <div className={cx.root} data-sf-reader data-state=\"idle\">\n <h3 data-sf-reader-title>{fill(m.title, { document: documentName })}</h3>\n {spec.help ? <p data-sf-reader-help>{spec.help}</p> : null}\n <label\n htmlFor={inputId}\n className={dragging ? cx.zoneActive : cx.zone}\n data-sf-reader-zone\n data-dragging={dragging ? '' : undefined}\n onDragOver={(e) => {\n e.preventDefault()\n setDragging(true)\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={onDrop}\n >\n <span aria-hidden=\"true\" data-sf-reader-icon>\n ⬆\n </span>\n <span data-sf-reader-drop>{dragging ? m.dropActive : m.dropHint}</span>\n <span data-sf-reader-choose>{m.choose}</span>\n <input\n ref={fileInput}\n id={inputId}\n type=\"file\"\n // With JavaScript the file never travels with the form; the name only exists for the no-JS upload.\n name={serverUpload && !hydrated ? 'document' : undefined}\n accept={accept}\n aria-describedby={helpId}\n data-sf-reader-input\n onChange={(e) => {\n const f = e.target.files?.[0]\n if (f) void read(f)\n }}\n />\n </label>\n <p id={helpId} className={cx.privacy} data-sf-reader-privacy>\n {privacy}\n </p>\n {serverUpload ? (\n <noscript>\n <button type=\"submit\" name=\"intent\" value=\"extract-document\" formEncType=\"multipart/form-data\" formMethod=\"post\" formNoValidate className={cx.secondary} data-sf-reader-upload>\n {m.uploadServer}\n </button>\n </noscript>\n ) : null}\n <p data-sf-reader-links>\n {spec.obtain_url ? (\n <a href={spec.obtain_url} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-reader-obtain>\n {m.obtain}\n </a>\n ) : null}\n <button type=\"button\" className={cx.link} onClick={openManual} data-sf-reader-manual>\n {m.manual}\n </button>\n </p>\n </div>\n )\n\n const reading = phase.kind === 'reading' && (\n <div className={cx.root} data-sf-reader data-state=\"reading\">\n <p className={cx.status} data-sf-reader-reading>\n <span aria-hidden=\"true\" data-sf-reader-spinner />\n {fill(m.reading, { document: documentName })} <span data-sf-reader-file>{phase.fileName}</span>\n </p>\n <button type=\"button\" className={cx.secondary} onClick={cancel} data-sf-reader-cancel>\n {m.cancel}\n </button>\n </div>\n )\n\n const errored = phase.kind === 'error' && (\n <div className={cx.root} data-sf-reader data-state=\"error\">\n <div ref={errorRef} role=\"alert\" tabIndex={-1} className={cx.error} data-sf-reader-error={phase.code}>\n {fill(m.errors[phase.code], { size: mib(phase.sizeLimit ?? spec.max_bytes) })}\n </div>\n <div className={cx.actions} data-sf-reader-actions>\n <button type=\"button\" className={cx.primary} onClick={openManual} data-sf-reader-manual>\n {m.manual}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => setPhase({ kind: 'idle' })} data-sf-reader-retry>\n {m.changeFile}\n </button>\n </div>\n </div>\n )\n\n const review = phase.kind === 'review' && (\n <div className={cx.root} data-sf-reader data-state=\"review\">\n <h3 ref={reviewRef} tabIndex={-1} data-sf-reader-title>\n {m.reviewTitle}\n </h3>\n <p data-sf-reader-help>{m.reviewHint}</p>\n <ErrorSummary\n items={summary}\n focusKey={summaryKey}\n locale={locale}\n title={summary ? (summary.length === 1 ? m.summaryTitleOne : fill(m.summaryTitleMany, { n: summary.length })) : undefined}\n />\n {phase.extraction ? <Warnings x={phase.extraction} m={m} cx={cx} /> : null}\n <FiscalIdentityFields\n region={region}\n values={values}\n onChange={setValues}\n errors={errorsByName}\n idPrefix={`sf-reader-${reactId}`}\n namePrefix={namePrefix}\n fromDocument={phase.extraction?.from_document ?? []}\n documentName={documentName}\n regimeCandidates={phase.extraction && phase.extraction.regime_candidates.length > 1 ? phase.extraction.regime_candidates : undefined}\n {...(personTypeOf ? { personTypeOf } : {})}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n hideLegend\n />\n {phase.extraction?.evidence ? <input type=\"hidden\" name={`${namePrefix}.document`} value={JSON.stringify(phase.extraction.evidence)} /> : null}\n {canSave ? (\n <label data-sf-reader-save>\n <input type=\"checkbox\" name={`${namePrefix}.save`} checked={save} onChange={(e) => setSave(e.target.checked)} />\n <span>\n {m.saveToAccount}\n <span data-sf-field-hint> {m.saveConsent}</span>\n </span>\n </label>\n ) : null}\n <div className={cx.actions} data-sf-reader-actions>\n <button type=\"button\" className={cx.primary} onClick={confirm} data-sf-reader-confirm>\n {confirmLabel ?? m.confirm}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => setPhase({ kind: 'idle' })} data-sf-reader-retry>\n {m.changeFile}\n </button>\n </div>\n </div>\n )\n\n return (\n <div data-sf-document-reader>\n {/* Always mounted so assistive tech announces every change (reading, done). */}\n <div role=\"status\" aria-live=\"polite\" className={cx.status} data-sf-reader-live style={visuallyHidden}>\n {live}\n </div>\n {phase.kind === 'idle' ? idle : null}\n {reading || null}\n {errored || null}\n {review || null}\n </div>\n )\n}\n\nconst visuallyHidden = { position: 'absolute', width: 1, height: 1, margin: -1, padding: 0, overflow: 'hidden', clip: 'rect(0 0 0 0)', whiteSpace: 'nowrap', border: 0 } as const\n\nfunction Warnings({ x, m, cx }: { x: FiscalExtractionSummary; m: FiscalMessages['reader']; cx: IdentityDocumentReaderClassNames }) {\n const items: string[] = []\n if (x.qr_match === false) items.push(m.warnings.qrMismatch)\n if (x.stale === true && x.age_days !== null) items.push(fill(m.warnings.stale, { days: x.age_days }))\n if (x.regime_candidates.length === 0 && !x.values.tax_regime) items.push(m.warnings.regimeMissing)\n else if (x.missing.some((k) => k !== 'tax_regime' && k !== 'document_id' && k !== 'issued_on')) items.push(m.warnings.fieldsMissing)\n if (!items.length) return null\n return (\n <ul className={cx.warning} data-sf-reader-warnings>\n {items.map((t) => (\n <li key={t} data-sf-reader-warning>\n <span aria-hidden=\"true\">⚠ </span>\n {t}\n </li>\n ))}\n </ul>\n )\n}\n","/**\n * \"I need an invoice\" for the checkout (collapsed by default). Expanded it shows, in this order:\n * - the buyer's saved fiscal data as a card (masked tax id) with \"Change\" / \"Use other details\";\n * - otherwise the document reader (upload the tax document, review, confirm) with manual entry as the way out;\n * - or the plain fields when the store reads no document.\n * It reports the state with `onChange` (including the label for the pay button: \"Pay and invoice\") and posts the data as\n * `invoice.*` fields of the surrounding `<form>`, so the checkout action can send it with `createInvoiceAction`.\n */\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { FiscalDocumentEvidence, FiscalIdentity, IdentityDocumentSpec, InvoiceRequest, InvoicingCapabilities } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { IdentityDocumentReader, type IdentityDocumentReaderClassNames } from './document-reader.js'\nimport { entryLabel, maskTaxId, toInvoiceRequest, validateFiscalValues, type FiscalRegion } from './format.js'\nimport { FiscalIdentityFields } from './identity-fields.js'\nimport { fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport type { FiscalActionData, FiscalFieldValues } from './types.js'\n\nexport type InvoiceToggleState = {\n requested: boolean\n /** The data to send as `CheckoutInput.invoice` / `carts.setInvoice`; `null` when none is requested or it is not ready. */\n invoice: InvoiceRequest | null\n /** All the data is there and valid for the region (the server still checks it). */\n ready: boolean\n source: 'profile' | 'document' | 'manual' | null\n /** \"Pay\" or \"Pay and invoice\": the label for the pay button. */\n payLabel: string\n}\n\nexport type InvoiceToggleClassNames = IdentityDocumentReaderClassNames & Partial<Record<'toggle' | 'body' | 'card' | 'cardRow' | 'cardTitle' | 'unavailable', string>>\n\nexport type InvoiceToggleProps = {\n region: FiscalRegion & { country_code?: string }\n /** `loadFiscalContext(...).invoicing`. `available: false` or `checkout: 'off'` renders nothing. */\n capabilities?: InvoicingCapabilities | null\n /** The buyer's saved fiscal data (`customer.fiscal`). */\n profile?: FiscalIdentity | null\n defaultRequested?: boolean\n onChange?: (state: InvoiceToggleState) => void\n /** Result of the shop's action (server errors by field, a document read without JS). */\n data?: FiscalActionData | null\n /** The buyer is signed in: they can save the data to their account. */\n canSave?: boolean\n workerSrc?: string\n /** Enables the no-JS document upload. */\n serverUpload?: boolean\n /** Link (e.g. `?invoice=1`) that opens the section when JavaScript is not available. */\n noJsHref?: string\n document?: IdentityDocumentSpec\n documentName?: string\n personTypeOf?: (taxId: string) => string | null\n /** Label of the pay button when no invoice is asked. Default from the messages. */\n payLabel?: string\n namePrefix?: string\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: InvoiceToggleClassNames\n now?: () => Date\n}\n\ntype Mode = 'profile' | 'edit-profile' | 'read' | 'manual'\n\nconst profileValues = (p: FiscalIdentity): FiscalFieldValues => ({\n tax_id: p.tax_id,\n legal_name: p.legal_name,\n postal_code: p.postal_code,\n tax_regime: p.tax_regime,\n use: p.invoice_use ?? '',\n})\n\nexport function InvoiceToggle(props: InvoiceToggleProps) {\n const { region, capabilities, profile, onChange, data, canSave, workerSrc, serverUpload, noJsHref, personTypeOf, namePrefix = 'invoice', messages, classNames: cx = {}, now } = props\n const locale = useResolvedLocale(props.locale)\n const all = fiscalMessages(locale, messages)\n const m = all.toggle\n const fid = region.fiscal_id\n // `identity_documents` lists the kinds the store reads; empty means none. Without capabilities, what the region publishes.\n const spec = props.document ?? fid?.documents?.find((d) => !capabilities || capabilities.identity_documents.includes(d.kind)) ?? undefined\n const canRead = !!spec\n const usable = !!profile && !!profile.invoice_use\n const startMode: Mode = data?.extraction ? 'read' : usable ? 'profile' : profile ? 'edit-profile' : canRead ? 'read' : 'manual'\n\n const bodyId = `sf-invoice-${useId().replace(/:/g, '')}`\n const [requested, setRequested] = useState(!!props.defaultRequested || !!data?.extraction || !!data?.fieldErrors)\n const [mode, setMode] = useState<Mode>(startMode)\n const [values, setValues] = useState<FiscalFieldValues>(profile ? profileValues(profile) : { tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n const [confirmed, setConfirmed] = useState<{ values: FiscalFieldValues; evidence: FiscalDocumentEvidence | null; save: boolean } | null>(null)\n const [save, setSave] = useState(false)\n const emit = useRef(onChange)\n emit.current = onChange\n\n const payDefault = props.payLabel ?? m.payDefault\n const state = useMemo<InvoiceToggleState>(() => {\n if (!requested) return { requested: false, invoice: null, ready: false, source: null, payLabel: payDefault }\n const country = region.country_code\n const label = m.payAndInvoice\n if (mode === 'profile' && profile) {\n const inv = toInvoiceRequest(profileValues(profile), profile.country_code || country)\n if (profile.document) inv.document = profile.document\n return { requested: true, invoice: inv, ready: true, source: 'profile', payLabel: label }\n }\n if (mode === 'read') {\n if (!confirmed) return { requested: true, invoice: null, ready: false, source: null, payLabel: label }\n const inv = toInvoiceRequest(confirmed.values, country)\n if (confirmed.evidence) inv.document = confirmed.evidence\n if (confirmed.save) inv.save = true\n return { requested: true, invoice: inv, ready: true, source: confirmed.evidence ? 'document' : 'manual', payLabel: label }\n }\n const ready = Object.keys(validateFiscalValues(region, values, personTypeOf)).length === 0\n const inv = toInvoiceRequest(values, country)\n if (save) inv.save = true\n return { requested: true, invoice: ready ? inv : null, ready, source: 'manual', payLabel: label }\n }, [requested, mode, profile, confirmed, values, save, region, personTypeOf, payDefault, m.payAndInvoice])\n\n const key = JSON.stringify(state)\n useEffect(() => {\n emit.current?.(state)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key])\n\n if (capabilities && (!capabilities.available || capabilities.checkout === 'off')) return null\n\n const profileCard = profile && (\n <div className={cx.card} data-sf-invoice-profile>\n <p className={cx.cardTitle} data-sf-invoice-profile-title>\n {m.profileTitle}\n </p>\n <dl>\n <Row cx={cx} label={fid?.label || m.fieldsOf.taxId} value={<span data-sf-masked>{maskTaxId(profile.tax_id)}</span>} />\n <Row cx={cx} label={m.fieldsOf.legalName} value={profile.legal_name} />\n <Row cx={cx} label={m.fieldsOf.postalCode} value={profile.postal_code} />\n <Row cx={cx} label={m.fieldsOf.regime} value={labelOf(fid?.regimes, profile.tax_regime, locale)} />\n <Row cx={cx} label={m.fieldsOf.use} value={labelOf(fid?.invoice_uses, profile.invoice_use ?? '', locale)} />\n </dl>\n {/* The saved data also travels as fields, so the checkout works without JavaScript. */}\n <input type=\"hidden\" name={`${namePrefix}.tax_id`} value={profile.tax_id} />\n <input type=\"hidden\" name={`${namePrefix}.legal_name`} value={profile.legal_name} />\n <input type=\"hidden\" name={`${namePrefix}.postal_code`} value={profile.postal_code} />\n <input type=\"hidden\" name={`${namePrefix}.tax_regime`} value={profile.tax_regime} />\n <input type=\"hidden\" name={`${namePrefix}.use`} value={profile.invoice_use ?? ''} />\n {profile.document ? <input type=\"hidden\" name={`${namePrefix}.document`} value={JSON.stringify(profile.document)} /> : null}\n <div className={cx.actions} data-sf-invoice-actions>\n <button type=\"button\" className={cx.secondary} onClick={() => setMode('edit-profile')} data-sf-invoice-change>\n {m.change}\n </button>\n <button\n type=\"button\"\n className={cx.link}\n onClick={() => {\n setValues({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n setConfirmed(null)\n setMode(canRead ? 'read' : 'manual')\n }}\n data-sf-invoice-other\n >\n {m.useOther}\n </button>\n </div>\n </div>\n )\n\n const saveBox = canSave ? (\n <label data-sf-invoice-save>\n <input type=\"checkbox\" name={`${namePrefix}.save`} checked={save} onChange={(e) => setSave(e.target.checked)} />\n <span>{all.reader.saveToAccount}</span>\n </label>\n ) : null\n const backToProfile =\n profile && usable && mode !== 'profile' ? (\n <button\n type=\"button\"\n className={cx.link}\n onClick={() => {\n setValues(profileValues(profile))\n setMode('profile')\n }}\n data-sf-invoice-back\n >\n {m.useSaved}\n </button>\n ) : null\n\n const body = !requested ? null : (\n <div id={bodyId} className={cx.body} data-sf-invoice-body>\n <input type=\"hidden\" name={`${namePrefix}.requested`} value=\"true\" />\n {mode === 'profile' ? (\n profileCard\n ) : mode === 'read' ? (\n <>\n <IdentityDocumentReader\n region={region}\n {...(spec ? { document: spec } : {})}\n {...(workerSrc ? { workerSrc } : {})}\n {...(data ? { data } : {})}\n {...(canSave !== undefined ? { canSave } : {})}\n {...(serverUpload ? { serverUpload } : {})}\n {...(props.documentName ? { documentName: props.documentName } : {})}\n {...(personTypeOf ? { personTypeOf } : {})}\n {...(now ? { now } : {})}\n onManual={() => {\n setValues({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n setMode('manual')\n }}\n onConfirm={(r) => {\n setConfirmed(r)\n }}\n namePrefix={namePrefix}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n />\n {confirmed ? (\n <p role=\"status\" data-sf-invoice-confirmed>\n <span aria-hidden=\"true\">✓ </span>\n {m.profileTitle}\n </p>\n ) : null}\n {backToProfile}\n </>\n ) : (\n <>\n <h3 className={cx.cardTitle}>{m.manualTitle}</h3>\n <FiscalIdentityFields\n region={region}\n values={values}\n onChange={setValues}\n errors={Object.fromEntries(Object.entries(data?.fieldErrors ?? {}).map(([k, v]) => [k, all.server.errors[v] ?? v]))}\n namePrefix={namePrefix}\n {...(personTypeOf ? { personTypeOf } : {})}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n hideLegend\n />\n {saveBox}\n <p className={cx.privacy} data-sf-invoice-privacy>\n {m.privacy}\n </p>\n {backToProfile}\n </>\n )}\n </div>\n )\n\n return (\n <section className={cx.toggle} data-sf-invoice-toggle aria-label={m.label}>\n <label data-sf-invoice-label>\n <input\n type=\"checkbox\"\n name={`${namePrefix}.want`}\n checked={requested}\n aria-controls={requested ? bodyId : undefined}\n onChange={(e) => setRequested(e.target.checked)}\n />\n <span>{m.label}</span>\n </label>\n {noJsHref && !requested ? (\n <noscript>\n <a href={noJsHref} data-sf-invoice-nojs>\n {m.label}\n </a>\n </noscript>\n ) : null}\n {body}\n </section>\n )\n}\n\nfunction Row({ label, value, cx }: { label: string; value: ReactNode; cx: InvoiceToggleClassNames }) {\n return (\n <div className={cx.cardRow} data-sf-invoice-row>\n <dt>{label}</dt>\n <dd>{value}</dd>\n </div>\n )\n}\n\nfunction labelOf(list: { code: string; label: string; label_en?: string; person_types: string[] }[] | undefined, code: string, locale: string): string {\n const e = list?.find((x) => x.code === code)\n return e ? `${e.code} · ${entryLabel(e, locale)}` : code\n}\n","/**\n * The invoice of an order, in one card with the state the buyer needs to understand and the one next step. It reads an\n * `InvoiceSummary` (`stage`, `action`, `can_request`, `blocked_reason`, `reason_code`, links) and never guesses: the\n * server decides what is possible. While an invoice is being generated it asks the caller to refresh (`onRefresh`)\n * every 10 s for at most a minute, then stops and says so.\n */\nimport { useCallback, useEffect, useId, useRef, useState, type ReactNode } from 'react'\nimport type { InvoiceSummary } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\n\nexport type InvoiceCardState =\n | 'not_requested'\n | 'awaiting_payment'\n | 'processing'\n | 'issued'\n | 'needs_data'\n | 'needs_review'\n | 'window_closed'\n | 'unavailable'\n | 'cancelled'\n\n/** Which of the card's states an invoice is in. `available: false` (the store does not invoice) wins over everything. */\nexport function invoiceCardState(invoice: InvoiceSummary | null | undefined, available = true): InvoiceCardState {\n if (!available) return 'unavailable'\n if (!invoice) return 'not_requested'\n const stage = invoice.stage ?? ''\n const blocked = invoice.blocked_reason ?? ''\n if (stage === 'issued' || invoice.status === 'issued' || (invoice.action === 'download' && (invoice.url || invoice.xml_url))) return 'issued'\n if (stage === 'cancelled') return 'cancelled'\n if (stage === 'needs_data' || invoice.action === 'correct_data') return 'needs_data'\n if (stage === 'needs_review' || invoice.action === 'contact_store') return 'needs_review'\n if (stage === 'window_closed' || blocked === 'window_closed') return 'window_closed'\n if (stage === 'awaiting_payment' || blocked === 'awaiting_payment') return 'awaiting_payment'\n if (stage === 'queued' || stage === 'issuing' || stage === 'retrying' || stage === 'requested') return 'processing'\n if (blocked === 'not_invoiceable' || blocked === 'unavailable') return 'unavailable'\n if (invoice.can_request === false && blocked) return 'unavailable'\n return 'not_requested'\n}\n\nexport type InvoiceStatusCardClassNames = Partial<Record<'root' | 'title' | 'body' | 'actions' | 'primary' | 'secondary' | 'link' | 'meta', string>>\n\nexport type InvoiceStatusCardProps = {\n invoice?: InvoiceSummary | null\n /** `capabilities.invoicing.available`. `false`: \"Invoice not available\". */\n available?: boolean\n /** The buyer taps \"Request invoice\". Shown when `invoice.can_request !== false`. Without it, `requestHref` is a link. */\n onRequest?: () => void\n requestHref?: string\n /** \"Fix and retry\". Without it, `correctHref` is a link. */\n onCorrect?: () => void\n correctHref?: string\n /** Called while the invoice is processing (every `refreshMs`, for at most `refreshForMs`). Reload the order there. */\n onRefresh?: () => void\n refreshMs?: number\n refreshForMs?: number\n /** How to reach the store when it must review: an email, a phone or a URL. */\n contact?: { email?: string; phone?: string; url?: string }\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: InvoiceStatusCardClassNames\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4\n}\n\nexport function InvoiceStatusCard(props: InvoiceStatusCardProps) {\n const { invoice, available = true, onRequest, requestHref, onCorrect, correctHref, onRefresh, refreshMs = 10_000, refreshForMs = 60_000, contact, messages, classNames: cx = {}, headingLevel = 3 } = props\n const locale = useResolvedLocale(props.locale)\n const m = fiscalMessages(locale, messages).status\n const state = invoiceCardState(invoice, available)\n const titleId = `sf-invoice-card-${useId().replace(/:/g, '')}`\n const [tired, setTired] = useState(false)\n const refresh = useRef(onRefresh)\n refresh.current = onRefresh\n\n // Refresh while it is processing, then give up quietly (the card says it is still going).\n useEffect(() => {\n setTired(false)\n if (state !== 'processing' || !refresh.current) return\n const t0 = Date.now()\n const id = setInterval(() => {\n if (Date.now() - t0 >= refreshForMs) {\n clearInterval(id)\n setTired(true)\n return\n }\n refresh.current?.()\n }, refreshMs)\n return () => clearInterval(id)\n }, [state, refreshMs, refreshForMs])\n\n const manualRefresh = useCallback(() => {\n setTired(false)\n refresh.current?.()\n }, [])\n\n const H = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n const contactLine = contact?.email ?? contact?.phone ?? contact?.url\n const reason = invoice?.reason_code ? (m.reasons[invoice.reason_code] ?? m.reasons.default) : m.reasons.default\n\n let title: string\n let body: ReactNode = null\n let actions: ReactNode = null\n let live = false\n\n switch (state) {\n case 'not_requested': {\n title = m.title\n body = <p className={cx.body}>{m.requestHelp}</p>\n const can = invoice?.can_request !== false\n if (can && (onRequest || requestHref)) {\n actions = onRequest ? (\n <button type=\"button\" className={cx.primary} onClick={onRequest} data-sf-invoice-request>\n {m.request}\n </button>\n ) : (\n <a href={requestHref} className={cx.primary} data-sf-invoice-request>\n {m.request}\n </a>\n )\n }\n break\n }\n case 'awaiting_payment':\n title = m.awaitingTitle\n body = <p className={cx.body}>{m.awaitingBody}</p>\n break\n case 'processing':\n live = true\n title = m.processingTitle\n body = <p className={cx.body}>{tired ? m.processingSlow : m.processingBody}</p>\n actions = onRefresh ? (\n <button type=\"button\" className={cx.secondary} onClick={manualRefresh} data-sf-invoice-refresh>\n {m.refresh}\n </button>\n ) : null\n break\n case 'issued':\n title = m.issuedTitle\n body = (\n <>\n <p className={cx.body}>{m.issuedBody}</p>\n {invoice?.folio ? (\n <p className={cx.meta} data-sf-invoice-folio>\n <span>{m.folio}: </span>\n <code>{invoice.folio}</code>\n </p>\n ) : null}\n </>\n )\n actions = (\n <>\n {invoice?.url ? (\n <a href={invoice.url} className={cx.primary} rel=\"noopener noreferrer\" download data-sf-invoice-pdf>\n {m.pdf}\n </a>\n ) : null}\n {invoice?.xml_url ? (\n <a href={invoice.xml_url} className={cx.secondary} rel=\"noopener noreferrer\" download data-sf-invoice-xml>\n {m.xml}\n </a>\n ) : null}\n </>\n )\n break\n case 'needs_data':\n title = m.needsDataTitle\n body = (\n <>\n <p className={cx.body}>{m.needsDataBody}</p>\n <p className={cx.meta} data-sf-invoice-reason>\n {reason}\n </p>\n </>\n )\n actions = onCorrect ? (\n <button type=\"button\" className={cx.primary} onClick={onCorrect} data-sf-invoice-correct>\n {m.correct}\n </button>\n ) : correctHref ? (\n <a href={correctHref} className={cx.primary} data-sf-invoice-correct>\n {m.correct}\n </a>\n ) : null\n break\n case 'needs_review':\n title = m.reviewTitle\n body = (\n <>\n <p className={cx.body}>{m.reviewBody}</p>\n {contactLine ? <p className={cx.meta}>{fill(m.contactBy, { contact: contactLine })}</p> : null}\n </>\n )\n actions = contact?.url ? (\n <a href={contact.url} className={cx.secondary} data-sf-invoice-contact>\n {m.contact}\n </a>\n ) : contact?.email ? (\n <a href={`mailto:${contact.email}`} className={cx.secondary} data-sf-invoice-contact>\n {m.contact}\n </a>\n ) : null\n break\n case 'window_closed':\n title = m.windowTitle\n body = <p className={cx.body}>{m.windowBody}</p>\n break\n case 'cancelled':\n title = m.cancelledTitle\n body = <p className={cx.body}>{m.cancelledBody}</p>\n break\n default:\n title = m.unavailableTitle\n body = <p className={cx.body}>{m.unavailableBody}</p>\n }\n\n return (\n <section className={cx.root} data-sf-invoice-card data-state={state} data-stage={invoice?.stage || undefined} aria-labelledby={titleId}>\n <H id={titleId} className={cx.title} data-sf-invoice-title>\n <span aria-hidden=\"true\" data-sf-invoice-icon>\n {ICON[state]}\n </span>{' '}\n {title}\n </H>\n {/* Announces the change when an invoice moves on while the buyer is looking at the page. */}\n <div aria-live={live || state === 'issued' ? 'polite' : undefined} data-sf-invoice-live>\n {body}\n </div>\n {actions ? (\n <div className={cx.actions} data-sf-invoice-actions>\n {actions}\n </div>\n ) : null}\n </section>\n )\n}\n\n/** A shape per state, so the state never depends on color alone. */\nconst ICON: Record<InvoiceCardState, string> = {\n not_requested: '○',\n awaiting_payment: '◔',\n processing: '↻',\n issued: '✓',\n needs_data: '!',\n needs_review: '◐',\n window_closed: '–',\n unavailable: '–',\n cancelled: '×',\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/fiscal/identity-fields.tsx","../src/fiscal/use-camera-qr.ts","../src/fiscal/document-reader.tsx","../src/fiscal/scan-tax-document.tsx","../src/fiscal/invoice-toggle.tsx","../src/fiscal/invoice-status-card.tsx"],"names":["useRef","useState","useEffect","useId","useMemo","useCallback","jsxs","jsx","inv","Fragment"],"mappings":";;;;;;;;;;;AAgDA,IAAM,SAA4B,CAAC,QAAA,EAAU,YAAA,EAAc,aAAA,EAAe,cAAc,KAAK,CAAA;AAC7F,IAAM,KAAA,GAA2B,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAExG,SAAS,WAAA,CAAY,CAAA,EAA6B,MAAA,EAAsB,KAAA,EAAwB,CAAA,EAA0B;AACxH,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,CAAE,QAAA;AAAA,IACX,KAAK,QAAA;AACH,MAAA,OAAO,KAAA,KAAU,WACb,IAAA,CAAK,CAAA,CAAE,aAAa,EAAE,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,KAAA,IAAS,EAAA,EAAI,CAAA,GAC3D,IAAA,CAAK,CAAA,CAAE,YAAA,EAAc,EAAE,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,OAAA,IAAW,EAAA,EAAI,CAAA;AAAA,IAClF,KAAK,aAAA;AACH,MAAA,OAAO,CAAA,CAAE,UAAA;AAAA,IACX,KAAK,iBAAA;AACH,MAAA,OAAO,CAAA,CAAE,aAAA;AAAA,IACX;AACE,MAAA,OAAO,CAAA,CAAE,OAAA;AAAA;AAEf;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAe,EAAC;AAAA,EAChB,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAS,EAAC;AAAA,EACV,UAAA,GAAa,SAAA;AAAA,EACb,QAAA;AAAA,EACA,YAAA,EAAc,kBAAA;AAAA,EACd,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,UAAA,EAAY,KAAK,EAAC;AAAA,EAClB;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,MAAA,GAAS,kBAAkB,UAAU,CAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA;AAC3C,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,MAAM,MAAA,CAAO,SAAA;AACnB,EAAA,MAAM,UAAU,KAAA,EAAM;AACtB,EAAA,MAAM,OAAO,QAAA,IAAY,CAAA,UAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AAC/D,EAAA,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,GAAI,QAAA,CAA4B,EAAE,GAAG,KAAA,EAAO,GAAG,MAAA,EAAQ,CAAA;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,iBAAuC,IAAI,KAAK,CAAA;AAE1E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAM,kBAAA,CAAmB,MAAA,CAAO,SAAA,EAAW,kBAAkB,CAAA,EAAG,CAAC,MAAA,CAAO,SAAA,EAAW,kBAAkB,CAAC,CAAA;AACnI,EAAA,MAAM,IAAA,GAAO,OAA4B,IAAI,CAAA;AAC7C,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAA,IAAU,IAAI,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAGzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,EAAE,GAAG,KAAA,EAAO,GAAG,QAAQ,CAAA;AAC5B,IAAA,QAAA,iBAAS,IAAI,KAAK,CAAA;AAAA,EAEpB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,KAAsC;AACjD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM;AAE9B,IAAA,IAAI,KAAA,CAAM,eAAe,MAAA,IAAa,IAAA,CAAK,OAAO,CAAC,OAAA,CAAQ,KAAK,IAAA,CAAK,UAAU,EAAE,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,KAAK,GAAG,CAAA,OAAQ,GAAA,GAAM,EAAA;AAE9H,IAAA,IAAI,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,CAAC,KAAK,GAAA,EAAK;AAC/C,MAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAA,CAAK,UAAU,CAAA;AACzD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAA,CAAK,GAAA,GAAM,UAAA;AACX,QAAA,UAAA,CAAW,UAAU,CAAA;AAAA,MACvB,CAAA,iBAAkB,IAAI,CAAA;AAAA,IACxB,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,MAAA,aAAsB,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,IAAI,CAAA;AACT,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,CAAA,CAAE,MAAM,CAAA;AACpC,EAAA,MAAM,OAAA,GAAU,CAAC,oBAAA,CAAqB,MAAA,EAAQ,EAAE,QAAQ,CAAA,CAAE,MAAA,EAAO,EAAG,YAAY,CAAA,CAAE,MAAA;AAClF,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAM,oBAAA,CAAqB,MAAA,EAAQ,CAAA,EAAG,YAAY,CAAA,EAAG,CAAC,MAAA,EAAQ,CAAA,EAAG,YAAY,CAAC,CAAA;AACvG,EAAA,MAAM,UAAA,GAAa,gBAAA,EAAkB,MAAA,GAAS,gBAAA,GAAmB,IAAA;AACjE,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC5B,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,GAAA,EAAK,OAAA,GAAU,SAAS,IAAI,CAAA;AACpD,IAAA,IAAI,UAAA,EAAY,OAAA,CAAQ,GAAA,EAAK,OAAA,IAAW,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE,IAAI,CAAC,CAAA;AAErF,IAAA,OAAO,CAAA,CAAE,UAAA,IAAc,CAAC,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,UAAU,CAAA,GAAI,CAAC,GAAG,IAAA,EAAM,GAAA,CAAI,GAAA,EAAK,OAAA,IAAW,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,UAAU,CAAC,CAAA,GAAI,IAAA;AAAA,EAClJ,CAAA,EAAG,CAAC,GAAA,EAAK,MAAA,EAAQ,SAAS,UAAA,EAAY,CAAA,CAAE,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAM,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,UAAU,CAAA,EAAG,CAAC,GAAA,EAAK,CAAA,CAAE,UAAU,CAAC,CAAA;AAG1E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAK,IAAA,CAAK,OAAA;AAChB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,MAAM,EAAA,CAAG,aAAA,CAAoD,UAAU,UAAU,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAChG,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,MAAA,GAAA,EAAK,iBAAA,GAAoB,CAAA,IAAK,CAAA,KAAM,UAAA,GAAa,WAAA,CAAY,GAAG,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA,GAAI,EAAE,CAAA;AAAA,IACpF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,OAAO,CAAC,CAAA,KAAuB,CAAA,EAAG,UAAU,IAAI,CAAC,CAAA,CAAA;AACvD,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAsC;AACjD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAC/B,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,IAAK,CAAA,IAAK,CAAA,KAAM,UAAA,GAAa,WAAA,CAAY,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA;AAAA,EAChF,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAuB;AACpC,IAAA,IAAI,EAAE,CAAC,CAAA,IAAK,CAAC,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,MAAM,IAAI,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,MAAM,YAAA,IAAgB,EAAA;AAC5B,EAAA,MAAM,OAAO,CAAC,CAAA,KACZ,aAAa,QAAA,CAAS,CAAC,MAAM,CAAA,CAAE,CAAC,KAAM,CAAA,KAAM,YAAA,IAAgB,8BAC1D,IAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,IAAA,EAAM,yBAAqB,IAAA,EAC7C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,SAAA,EAAE,CAAA;AAAA,IAC1B,IAAA,CAAK,CAAA,CAAE,YAAA,EAAc,EAAE,UAAU,GAAA,KAAQ,MAAA,CAAO,WAAA,EAAY,CAAE,UAAA,CAAW,IAAI,CAAA,GAAI,UAAA,GAAa,cAAc;AAAA,GAAA,EAC/G,CAAA,GACE,IAAA;AACN,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,EAAoB,IAAA,KAAwC;AACxE,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,IAAA,OAAO,uBACL,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,EAAA;AAAA,MAAG,QAAA;AAAA,MAAI;AAAA,KAAA,EACV,CAAA,GAEA,EAAA;AAAA,EAEJ,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAS,WAAA,EAAa,OAAA;AACnD,EAAA,MAAM,gBAAgB,CAAC,CAAC,aAAA,IAAiB,OAAA,CAAQ,KAAK,aAAa,CAAA;AAEnE,EAAA,uBACE,IAAA,CAAC,cAAS,GAAA,EAAK,IAAA,EAAM,WAAW,EAAA,CAAG,QAAA,EAAU,UAAoB,uBAAA,EAAqB,IAAA,EAAC,OAAO,EAAE,MAAA,EAAQ,GAAG,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,EAAG,aAAA,EAAe,GAAE,EACjJ,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,MAAA,EAAQ,aAAa,IAAA,GAAO,MAAA,EAAW,KAAA,EAAO,UAAA,GAAa,SAAY,EAAE,OAAA,EAAS,CAAA,EAAE,EAC/G,YAAE,MAAA,EACL,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAK,QAAQ,CAAA;AAAA,QACnB,EAAA,EAAI,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,QACX,KAAA,EAAO,GAAA,EAAK,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,QACvB,IAAA,EAAM,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,SAAS,CAAA;AAAA,QAChC,OAAO,CAAA,CAAE,MAAA;AAAA,QACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,EAAE,MAAA,EAAQ,cAAA,CAAe,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAAA,QAC/D,MAAA,EAAQ,MAAM,KAAA,CAAM,QAAQ,CAAA;AAAA,QAC5B,KAAA,EAAO,IAAI,QAAQ,CAAA;AAAA,QACnB,UAAA,EAAY,EAAA;AAAA,QACZ,YAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAe,YAAA;AAAA,QACf,UAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAU,MAAA;AAAA,QACV,YAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,QACX;AAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAK,YAAY,CAAA;AAAA,QACvB,EAAA,EAAI,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,QACX,OAAO,CAAA,CAAE,SAAA;AAAA,QACT,IAAA,EAAM,IAAA,CAAK,YAAA,EAAc,CAAA,CAAE,aAAa,CAAA;AAAA,QACxC,OAAO,CAAA,CAAE,UAAA;AAAA,QACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,EAAE,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,QACnD,MAAA,EAAQ,MAAM,KAAA,CAAM,YAAY,CAAA;AAAA,QAChC,KAAA,EAAO,IAAI,YAAY,CAAA;AAAA,QACvB,UAAA,EAAY,EAAA;AAAA,QACZ,YAAA,EAAa,cAAA;AAAA,QACb,YAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,GAAA;AAAA,QACX;AAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAK,aAAa,CAAA;AAAA,QACxB,EAAA,EAAI,GAAG,IAAI,CAAA,YAAA,CAAA;AAAA,QACX,OAAO,CAAA,CAAE,UAAA;AAAA,QACT,IAAA,EAAM,IAAA,CAAK,aAAA,EAAe,CAAA,CAAE,cAAc,CAAA;AAAA,QAC1C,OAAO,CAAA,CAAE,WAAA;AAAA,QACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,EAAE,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK,EAAG,CAAA;AAAA,QAC3D,MAAA,EAAQ,MAAM,KAAA,CAAM,aAAa,CAAA;AAAA,QACjC,KAAA,EAAO,IAAI,aAAa,CAAA;AAAA,QACxB,UAAA,EAAY,EAAA;AAAA,QACZ,YAAA,EAAa,aAAA;AAAA,QACb,SAAA,EAAW,gBAAgB,SAAA,GAAY,MAAA;AAAA,QACvC,WAAA,EAAa,aAAA;AAAA,QACb,YAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,QACX;AAAA;AAAA,KACF;AAAA,IACC,UAAA,mBACC,IAAA,CAAC,UAAA,EAAA,EAAS,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,wBAAA,EAAsB,IAAA,EAAC,kBAAA,EAAkB,GAAA,CAAI,YAAY,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,GAAkB,MAAA,EAAW,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,aAAA,EAAe,CAAA,EAAE,EAC3L,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,WAAW,EAAA,CAAG,KAAA,EAAO,iBAAe,CAAA,CAAE,MAAA,EAC3C,YAAE,MAAA,EACL,CAAA;AAAA,2BACC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,sBAAkB,IAAA,EACtC,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,YAAY,CAAA;AAAA,QAAE,QAAA;AAAA,QAAI,CAAA,CAAE;AAAA,OAAA,EAC5B,CAAA;AAAA,MACC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACf,IAAA,CAAC,OAAA,EAAA,EAAmB,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,sBAAA,EAAoB,IAAA,EAC3D,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,EAAA,EAAI,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,WAAA,CAAA,GAAgB,MAAA;AAAA,YACrC,IAAA,EAAM,KAAK,YAAY,CAAA;AAAA,YACvB,OAAO,CAAA,CAAE,IAAA;AAAA,YACT,OAAA,EAAS,CAAA,CAAE,UAAA,KAAe,CAAA,CAAE,IAAA;AAAA,YAC5B,QAAA,EAAQ,IAAA;AAAA,YACR,UAAU,MAAM,GAAA,CAAI,EAAE,UAAA,EAAY,CAAA,CAAE,MAAM;AAAA;AAAA,SAC5C;AAAA,6BACC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,GAAG,MAAM,CAAA;AAAA,UAAE,GAAA;AAAA,0BAAC,IAAA,CAAC,MAAA,EAAA,EAAK,qBAAA,EAAmB,IAAA,EAAC,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAAE,CAAA,CAAE,IAAA;AAAA,YAAK;AAAA,WAAA,EAAC;AAAA,SAAA,EAC9D;AAAA,OAAA,EAAA,EAZU,CAAA,CAAE,IAad,CACD,CAAA;AAAA,MACA,IAAI,YAAY,CAAA,mBACf,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,EAAiB,SAAA,EAAW,GAAG,KAAA,EAAO,qBAAA,EAAmB,MACpE,QAAA,EAAA,GAAA,CAAI,YAAY,GACnB,CAAA,GACE;AAAA,KAAA,EACN,CAAA,mBAEA,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,QAAA;AAAA,QACH,IAAA,EAAM,KAAK,YAAY,CAAA;AAAA,QACvB,EAAA,EAAI,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,QACX,OAAO,CAAA,CAAE,MAAA;AAAA,QACT,IAAA,EAAM,IAAA,CAAK,YAAA,EAAc,CAAA,CAAE,UAAU,CAAA;AAAA,QACrC,OAAO,CAAA,CAAE,UAAA;AAAA,QACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,EAAE,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,QACnD,MAAA,EAAQ,MAAM,KAAA,CAAM,YAAY,CAAA;AAAA,QAChC,KAAA,EAAO,IAAI,YAAY,CAAA;AAAA,QACvB,UAAA,EAAY,EAAA;AAAA,QACZ,MAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,YAAA,EAAa,CAAA;AAAA,UAChC,OAAA,CAAQ,IAAI,CAAC,CAAA,0BACX,QAAA,EAAA,EAAoB,KAAA,EAAO,EAAE,IAAA,EAC3B,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,IAAA;AAAA,YAAK,QAAA;AAAA,YAAI,UAAA,CAAW,GAAG,MAAM;AAAA,WAAA,EAAA,EADrB,CAAA,CAAE,IAEf,CACD;AAAA;AAAA;AAAA,KACH;AAAA,oBAEF,IAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,QAAA;AAAA,QACH,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,QAChB,EAAA,EAAI,GAAG,IAAI,CAAA,IAAA,CAAA;AAAA,QACX,OAAO,CAAA,CAAE,GAAA;AAAA,QACT,IAAA,EACE,EAAE,GAAA,KAAQ,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,CAAA,mBACvC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,MAAM,mBAAA,EAAiB,IAAA,EACxC,YAAE,SAAA,EACL,CAAA;AAAA,UAAQ,GAAA;AAAA,UAAI,OAAA;AAAA,UACT,CAAA,CAAE;AAAA,SAAA,EACP,IAEA,CAAA,CAAE,OAAA;AAAA,QAGN,OAAO,CAAA,CAAE,GAAA;AAAA,QACT,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,EAAE,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,QAC5C,MAAA,EAAQ,MAAM,KAAA,CAAM,KAAK,CAAA;AAAA,QACzB,KAAA,EAAO,IAAI,KAAK,CAAA;AAAA,QAChB,UAAA,EAAY,EAAA;AAAA,QACZ,MAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,SAAA,EAAU,CAAA;AAAA,UAC7B,IAAA,CAAK,IAAI,CAAC,CAAA,0BACR,QAAA,EAAA,EAAoB,KAAA,EAAO,EAAE,IAAA,EAC3B,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,IAAA;AAAA,YAAK,QAAA;AAAA,YAAI,UAAA,CAAW,GAAG,MAAM;AAAA,WAAA,EAAA,EADrB,CAAA,CAAE,IAEf,CACD;AAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AChSO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,OAAO,SAAA,KAAc,WAAA,IAAe,OAAQ,SAAA,CAAkD,cAAc,YAAA,KAAiB,UAAA;AACtI;AAEO,SAAS,YAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,GAAa,KAAI,EAAoC;AACjG,EAAA,MAAM,QAAA,GAAWA,OAAgC,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAyB,MAAM,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAYD,OAA2B,IAAI,CAAA;AACjD,EAAA,MAAM,SAAA,GAAYA,OAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,EAAA,MAAM,IAAA,GAAO,YAAY,MAAM;AAC7B,IAAA,KAAA,MAAW,KAAA,IAAS,UAAU,OAAA,EAAS,SAAA,MAAe,EAAC,QAAS,IAAA,EAAK;AACrE,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,IAAA,MAAM,IAAI,QAAA,CAAS,OAAA;AACnB,IAAA,IAAI,CAAA,IAAK,SAAA,GAAY,IAAA;AACrB,IAAA,SAAA,CAAU,CAAC,CAAA,KAAO,CAAA,KAAM,YAAY,CAAA,KAAM,aAAA,GAAgB,IAAI,MAAO,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAE,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,CAAC,iBAAgB,EAAG;AACtB,MAAA,SAAA,CAAU,aAAa,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,SAAA,CAAU,UAAU,CAAA;AAEpB,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,IAAI,QAAA,CAAS,eAAA,KAAoB,QAAA,EAAU,IAAA,EAAK;AAAA,IAClD,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,QAAQ,CAAA;AAErD,IAAA,CAAC,YAAY;AACZ,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAO,SAAA,CAA4D,YAAA,CAAa,YAAA,CAAa,EAAE,KAAA,EAAO,EAAE,UAAA,EAAY,EAAE,OAAO,aAAA,EAAc,EAAE,EAAG,KAAA,EAAO,OAAO,CAAA;AAAA,MACzK,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI,CAAC,SAAA,EAAW,SAAA,CAAU,QAAQ,CAAA;AAClC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,SAAA,EAAU,IAAK,IAAA,EAAK;AAC3C,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,SAAA,EAAU,IAAK,IAAA,EAAK;AAC3C,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAClB,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,MAAA,KAAK,KAAA,CAAM,IAAA,IAAO,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACzC,MAAA,SAAA,CAAU,UAAU,CAAA;AACpB,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,oCAAoC,CAAA;AAC7D,MAAA,KAAA,GAAQ,YAAY,YAAY;AAC9B,QAAA,IAAI,IAAA,IAAQ,aAAa,CAAC,QAAA,CAAS,WAAW,QAAA,CAAS,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC/E,QAAA,IAAA,GAAO,IAAA;AACP,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,aAAA,CAAc,SAAS,OAAO,CAAA;AACrD,UAAA,IAAI,IAAA,IAAQ,CAAC,SAAA,EAAW;AACtB,YAAA,SAAA,GAAY,IAAA;AACZ,YAAA,aAAA,CAAc,KAAK,CAAA;AACnB,YAAA,IAAA,EAAK;AACL,YAAA,SAAA,CAAU,QAAQ,IAAI,CAAA;AAAA,UACxB;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER,CAAA,SAAE;AACA,UAAA,IAAA,GAAO,KAAA;AAAA,QACT;AAAA,MACF,GAAG,UAAU,CAAA;AAAA,IACf,CAAA,GAAG;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,IAAI,KAAA,gBAAqB,KAAK,CAAA;AAC9B,MAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,QAAQ,CAAA;AACzD,MAAA,KAAA,MAAW,CAAA,IAAK,UAAU,OAAA,EAAS,SAAA,MAAe,EAAC,IAAK,IAAA,EAAK;AAC7D,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,SAAA,GAAY,IAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAA,EAAY,IAAI,CAAC,CAAA;AAE7B,EAAA,OAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAK;AAClC;AC9CA,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAS,MAAA,KAAqB;AAC3C,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,CAAE,SAAS,iBAAA,GAAoB,KAAA;AAC3F,EAAA,OAAO,MAAA,IAAU,SAAA,CAAU,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AACxC,CAAA;AAEA,IAAM,OAAA,GAAU,CAAC,CAAA,KAAY,CAAA,CAAE,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,IAAK,gCAAA,CAAiC,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AAExG,IAAM,GAAA,GAAM,CAAC,KAAA,KAAkB,CAAA,EAAG,IAAA,CAAK,KAAA,CAAO,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,GAAS,EAAE,CAAA,GAAI,EAAE,CAAA,GAAA,CAAA;AAExE,SAAS,uBAAuB,KAAA,EAAoC;AACzE,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,WAAW,QAAA,EAAU,aAAA,EAAe,MAAM,OAAA,EAAS,YAAA,EAAc,cAAc,GAAA,EAAK,UAAA,GAAa,WAAW,QAAA,EAAU,UAAA,EAAY,KAAK,EAAC,EAAG,cAAa,GAAI,KAAA;AACvL,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA;AAC3C,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,OAAO,KAAA,CAAM,QAAA,IAAY,MAAA,CAAO,SAAA,EAAW,YAAY,CAAC,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAUC,KAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA,KAAA,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA,KAAA,CAAA;AACnC,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA,IAAA,CAAiB,IAAA,EAAM,KAAA,IAAS,YAAY,WAAA,EAAY;AAEnF,EAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,IAAA;AACvC,EAAA,MAAM,WAAA,GAAc,QAAQ,CAAC,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,IAAS,CAAC,SAAA,EAAW,WAAA,EAAa,WAAW,UAAA,EAAY,YAAY,EAAE,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA,GAAK,IAAA,CAAK,KAAA,CAAM,IAAA,GAA2B,IAAA;AACvL,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,QAAAA;AAAA,IAAgB,MACxC,aAAa,EAAE,IAAA,EAAM,UAAU,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,CAAA,EAAE,GAAI,WAAA,GAAc,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,WAAA,EAAa,SAAA,EAAW,MAAM,SAAA,EAAU,GAAI,EAAE,IAAA,EAAM,MAAA;AAAO,GACzK;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIA,SAA4B,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,WAAA,EAAa,IAAI,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAG,aAAA,EAAe,GAAI,UAAA,EAAY,MAAA,IAAU,EAAC,EAAI,CAAA;AACjL,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAoC,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQD,OAA+B,IAAI,CAAA;AACjD,EAAA,MAAM,SAAA,GAAYA,OAAyB,IAAI,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAWA,OAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAYA,OAA2B,IAAI,CAAA;AAEjD,EAAAE,UAAU,MAAM,WAAA,CAAY,IAAI,CAAA,EAAG,EAAE,CAAA;AACrC,EAAAA,SAAAA,CAAU,MAAM,MAAM,KAAA,CAAM,SAAS,KAAA,EAAM,EAAG,EAAE,CAAA;AAEhD,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,SAAA,CAAU,CAAC,GAAA,KAAQ;AACjB,MAAA,MAAM,OAAO,EAAE,GAAG,GAAA,EAAK,GAAG,WAAW,MAAA,EAAO;AAC5C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,IAAc,CAAC,IAAA,CAAK,GAAA,GAAM,iBAAA,CAAkB,MAAA,CAAO,SAAA,EAAW,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA;AACzG,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAA,CAAK,GAAA,GAAM,UAAA;AACX,QAAA,eAAA,CAAgB,UAAU,CAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,YAAY,UAAA,EAAY,QAAA,EAAU,GAAG,CAAA;AAAA,EAElE,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,QAAA,CAAS,SAAS,KAAA,EAAM;AACpD,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,IAAY,KAAA,CAAM,WAAW,CAAA,EAAG,SAAA,CAAU,SAAS,KAAA,EAAM;AAAA,EAC9E,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,MAAM,MAAA,GAASE,QAAQ,MAAM;AAC3B,IAAA,MAAM,KAAA,GAAA,CAAS,IAAA,EAAM,MAAA,IAAU,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAC,CAAA;AACxE,IAAA,OAAO,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,iBAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACT,EAAA,MAAM,YAAY,IAAA,EAAM,UAAA,IAAc,KAAK,UAAA,KAAe,MAAA,GAAS,KAAK,UAAA,GAAa,IAAA;AACrF,EAAA,MAAM,UAAA,GAAaJ,OAAyB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,MAAM,IAAA,KAAS,QAAA;AACpC,EAAA,MAAM,WAAA,GAA2BG,QAAQ,MAAM;AAC7C,IAAA,MAAM,MAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,WAAA,IAAe,EAAE,CAAA,MAAO,CAAC,CAAA,GAAI,IAAI,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAC/F,IAAA,OAAO,GAAA;AAAA,EACT,GAAG,CAAC,IAAA,EAAM,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAE5B,EAAA,MAAM,MAAA,GAASC,YAAY,MAAM;AAC/B,IAAA,KAAA,CAAM,SAAS,KAAA,EAAM;AACrB,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACzB,IAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,EACZ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,QAAA,IAAW;AACX,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,YAAY,IAAA,EAAM,QAAA,EAAU,GAAG,CAAA;AAC1D,IAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,EACZ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,GAAA,KAAiC;AAChC,MAAA,MAAM,IAAA,GAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,YAAY,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAG,IAAI,MAAA,EAAO;AACnG,MAAA,MAAM,UAAA,GAAa,KAAK,UAAA,GAAa,iBAAA,CAAkB,OAAO,SAAA,EAAW,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA;AAC5F,MAAA,IAAI,UAAA,IAAc,CAAC,IAAA,CAAK,GAAA,OAAU,GAAA,GAAM,UAAA;AACxC,MAAA,eAAA,CAAgB,UAAA,IAAc,IAAA,CAAK,GAAA,KAAQ,UAAA,GAAa,aAAa,IAAI,CAAA;AACzE,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,YAAY,GAAA,EAAK,QAAA,EAAU,GAAG,CAAA;AACzD,MAAA,OAAA,CAAQ,EAAE,IAAI,CAAA;AAAA,IAChB,CAAA;AAAA,IACA,CAAC,MAAA,CAAO,SAAA,EAAW,CAAA,CAAE,IAAI;AAAA,GAC3B;AAGA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACb,OAAO,IAAA,KAAwB;AAC7B,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,CAAC,MAAM,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AAC3D,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,oCAAoC,CAAA;AAC7D,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,uBAAA,CAAwB,EAAA,EAAI,IAAA,EAAM;AAAA,QAC9C,QAAA,EAAU,OAAO,SAAA,GAAY,GAAA,CAAI,mBAAmB,MAAA,CAAO,SAAS,IAAI,EAAC;AAAA,QACzE,EAAA,EAAI,IAAA;AAAA,QACJ,GAAI,GAAA,GAAM,EAAE,KAAK,GAAA,EAAI,KAAM;AAAC,OAC7B,CAAA;AACD,MAAA,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AACtE,MAAA,MAAM,QAAA,GAAW,IAAI,qBAAA,CAAsB,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA;AAC5E,MAAA,cAAA,CAAe,mBAAA,CAAoB,CAAA,EAAG,QAAA,EAAU,MAAA,CAAO,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,IAC/F,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,cAAc;AAAA,GACpC;AAEA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OAAO,IAAA,KAAe;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,SAAkB,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAC/G,MAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAChC,MAAA,KAAA,CAAM,OAAA,GAAU,GAAA;AAChB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACjD,MAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,EAAS,EAAE,QAAA,EAAU,YAAA,EAAc,CAAC,CAAA;AACnD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,OAAO,oCAAoC,CAAA;AAC7D,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,aAAA,CAAc,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,CAAK,SAAA,EAAW,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,CAAA;AAC3F,QAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACxB,QAAA,MAAM,OAAO,IAAI,CAAA;AAAA,MACnB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACxB,QAAA,MAAM,OAAQ,GAAA,EAAkC,IAAA;AAChD,QAAA,OAAA,CAAQ,EAAE,CAAA;AACV,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAS,WAAA,GAAc,WAAA,GAAc,IAAA,KAAS,WAAA,GAAc,WAAA,GAAc,YAAA,EAAc,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,MACrJ,CAAA,SAAE;AACA,QAAA,IAAI,KAAA,CAAM,OAAA,KAAY,GAAA,EAAK,KAAA,CAAM,OAAA,GAAU,IAAA;AAC3C,QAAA,IAAI,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,MACrD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,YAAA,EAAc,CAAA,CAAE,SAAS,MAAM;AAAA,GACxC;AAEA,EAAA,MAAM,SAAS,WAAA,CAAY;AAAA,IACzB,MAAA,EAAQ,YAAA;AAAA,IACR,MAAA,EAAQ,CAAC,IAAA,KAAS;AAEhB,MAAA,KAAK,MAAA,CAAO,IAAI,CAAA,CACb,IAAA,CAAK,MAAM,QAAQ,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAE,CAAC,CAAA,CACrD,KAAA,CAAM,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,CAAC,CAAA;AAAA,IAChE;AAAA,GACD,CAAA;AAED,EAAA,MAAM,IAAA,GAAOA,WAAAA;AAAA,IACX,OAAO,IAAA,KAAe;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,aAAa,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,UAAU,IAAI,CAAA;AACrD,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,IAAA,CAAK,UAAU,EAAE,CAAA,EAAG,OAAO,SAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,CAAA;AACvF,MAAA,IAAI,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,SAAkB,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAC/G,MAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAChC,MAAA,KAAA,CAAM,OAAA,GAAU,GAAA;AAChB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACjD,MAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,EAAS,EAAE,QAAA,EAAU,YAAA,EAAc,CAAC,CAAA;AACnD,MAAA,IAAI;AAEF,QAAA,MAAM,GAAA,GAAM,MAAM,OAAO,oCAAoC,CAAA;AAC7D,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,KAAW,MAAM,GAAA,CAAI,YAAY,IAAA,EAAM;AAAA,UACnD,UAAU,IAAA,CAAK,SAAA;AAAA,UACf,GAAI,KAAK,SAAA,GAAY,EAAE,UAAU,IAAA,CAAK,SAAA,KAAc,EAAC;AAAA,UACrD,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,UACjC,QAAQ,GAAA,CAAI;AAAA,SACb,CAAA;AACD,QAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AAExB,QAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,WAAA,CAAY,MAAM,EAAE,GAAI,YAAY,EAAE,SAAA,KAAc,EAAC,EAAI,QAAQ,GAAA,CAAI,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACpH,QAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACxB,QAAA,MAAM,CAAA,GAAI,GAAA,CAAI,uBAAA,CAAwB,IAAA,EAAM,IAAA,EAAM;AAAA,UAChD,QAAA,EAAU,OAAO,SAAA,GAAY,GAAA,CAAI,mBAAmB,MAAA,CAAO,SAAS,IAAI,EAAC;AAAA,UACzE,EAAA;AAAA,UACA,GAAI,GAAA,GAAM,EAAE,KAAK,GAAA,EAAI,KAAM;AAAC,SAC7B,CAAA;AACD,QAAA,MAAM,QAAA,GAAW,IAAI,qBAAA,CAAsB,CAAA,EAAG,EAAE,MAAA,EAAQ,MAAA,EAAQ,cAAc,CAAA;AAC9E,QAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,CAAA,EAAG,QAAA,EAAU,MAAA,CAAO,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AACzF,QAAA,cAAA,CAAe,GAAG,CAAA;AAAA,MACpB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACxB,QAAA,MAAM,OAAQ,GAAA,EAAkC,IAAA;AAChD,QAAA,OAAA,CAAQ,EAAE,CAAA;AACV,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAM,SAAS,SAAA,IAAa,IAAA,KAAS,eAAe,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,UAAA,GAAa,IAAA,GAAO,YAAA;AAAA,UACvG,WAAW,IAAA,CAAK;AAAA,SACjB,CAAA;AAAA,MACH,CAAA,SAAE;AACA,QAAA,IAAI,KAAA,CAAM,OAAA,KAAY,GAAA,EAAK,KAAA,CAAM,OAAA,GAAU,IAAA;AAC3C,QAAA,IAAI,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,MACnD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,GAAA,EAAK,cAAc,CAAA,CAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAAW,cAAc;AAAA,GAC9F;AAEA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAiB;AAC/B,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,YAAA,EAAc,KAAA,GAAQ,CAAC,CAAA;AACnC,IAAA,IAAI,CAAA,EAAG,KAAK,IAAA,CAAK,CAAC,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,qBAAqB,MAAA,EAAQ,MAAA,EAAQ,mBAAmB,MAAA,CAAO,SAAA,EAAW,YAAY,CAAC,CAAA;AACxG,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,MAAA,GAA0C;AAAA,QAC9C,MAAA,EAAQ,MAAA,CAAO,SAAA,EAAW,KAAA,IAAS,IAAI,MAAA,CAAO,KAAA;AAAA,QAC9C,UAAA,EAAY,IAAI,MAAA,CAAO,SAAA;AAAA,QACvB,WAAA,EAAa,IAAI,MAAA,CAAO,UAAA;AAAA,QACxB,UAAA,EAAY,IAAI,MAAA,CAAO,MAAA;AAAA,QACvB,GAAA,EAAK,IAAI,MAAA,CAAO;AAAA,OAClB;AACA,MAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAyC;AACrD,QAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,QAAA,MAAM,GAAA,GACJ,CAAA,KAAM,UAAA,GACF,GAAA,CAAI,MAAA,CAAO,OAAO,QAAA,GAClB,CAAA,KAAM,QAAA,GACJ,CAAA,KAAM,QAAA,GACJ,IAAA,CAAK,IAAI,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,EAAE,IAAA,EAAM,MAAA,CAAO,WAAW,KAAA,IAAS,EAAA,EAAI,CAAA,GAC3E,IAAA,CAAK,GAAA,CAAI,OAAO,MAAA,CAAO,YAAA,EAAc,EAAE,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,aAAa,OAAA,IAAW,EAAA,EAAI,CAAA,GAC9F,CAAA,KAAM,aAAA,GACJ,IAAI,MAAA,CAAO,MAAA,CAAO,UAAA,GAClB,CAAA,KAAM,iBAAA,GACJ,GAAA,CAAI,OAAO,MAAA,CAAO,aAAA,GAClB,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,OAAA;AAC9B,QAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,CAAC,IAAI,EAAA,EAAI,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,KAAA,EAAO,OAAO,CAAC,CAAA,EAAG,SAAS,GAAA,EAAI;AAAA,MACvG,CAAA;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA;AACzB,MAAA,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,MAAM,KAAK,KAAA,CAAM,IAAA,KAAS,WAAY,KAAA,CAAM,UAAA,EAAY,YAAY,IAAA,GAAQ,IAAA;AAC5E,IAAA,SAAA,CAAU,EAAE,QAAQ,QAAA,EAAU,EAAA,EAAI,MAAM,CAAC,CAAC,OAAA,IAAW,IAAA,EAAM,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,YAAA,GAA4B,EAAE,GAAG,WAAA,EAAY;AACnD,EAAA,KAAA,MAAW,CAAA,IAAK,WAAW,EAAC,eAAgB,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,OAAA;AAGxD,EAAA,MAAM,UAAU,YAAA,IAAgB,CAAC,QAAA,GAAW,CAAA,CAAE,gBAAgB,CAAA,CAAE,cAAA;AAEhE,EAAA,MAAM,IAAA,mBACJC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,IAAA,EAAM,gBAAA,EAAc,IAAA,EAAC,YAAA,EAAW,MAAA,EACjD,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,IAAA,EAAA,EAAG,sBAAA,EAAoB,IAAA,EAAE,QAAA,EAAA,IAAA,CAAK,CAAA,CAAE,KAAA,EAAO,EAAE,QAAA,EAAU,YAAA,EAAc,CAAA,EAAE,CAAA;AAAA,IACnE,IAAA,CAAK,uBAAOA,GAAAA,CAAC,OAAE,qBAAA,EAAmB,IAAA,EAAE,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA,GAAO,IAAA;AAAA,oBACtDD,IAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAW,QAAA,GAAW,EAAA,CAAG,UAAA,GAAa,EAAA,CAAG,IAAA;AAAA,QACzC,qBAAA,EAAmB,IAAA;AAAA,QACnB,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,QAC/B,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB,CAAA;AAAA,QACA,WAAA,EAAa,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,QACpC,MAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,IAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,qBAAA,EAAmB,MAAC,QAAA,EAAA,QAAA,EAE7C,CAAA;AAAA,0BACAA,IAAC,MAAA,EAAA,EAAK,qBAAA,EAAmB,MAAE,QAAA,EAAA,QAAA,GAAW,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,QAAA,EAAS,CAAA;AAAA,0BAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,uBAAA,EAAqB,IAAA,EAAE,YAAE,MAAA,EAAO,CAAA;AAAA,0BACtCA,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,SAAA;AAAA,cACL,EAAA,EAAI,OAAA;AAAA,cACJ,IAAA,EAAK,MAAA;AAAA,cAEL,IAAA,EAAM,YAAA,IAAgB,CAAC,QAAA,GAAW,UAAA,GAAa,MAAA;AAAA,cAC/C,MAAA;AAAA,cACA,kBAAA,EAAkB,MAAA;AAAA,cAClB,sBAAA,EAAoB,IAAA;AAAA,cACpB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,MAAM,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC5B,gBAAA,IAAI,CAAA,EAAG,KAAK,IAAA,CAAK,CAAC,CAAA;AAAA,cACpB;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,IACC,SAAA,mBACCD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,uBAAmB,IAAA,EAC7C,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAA;AAAA,UACL,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,SAAA;AAAA,UACP,OAAA,EAAQ,aAAA;AAAA,UACR,MAAA,EAAM,IAAA;AAAA,UACN,QAAA,EAAU,EAAA;AAAA,UACV,YAAA,EAAY,EAAE,IAAA,CAAK,KAAA;AAAA,UACnB,4BAAA,EAA0B,IAAA;AAAA,UAC1B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,YAAA,MAAM,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC5B,YAAA,IAAI,CAAA,EAAG,KAAK,SAAA,CAAU,CAAC,CAAA;AAAA,UACzB;AAAA;AAAA,OACF;AAAA,sBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAW,GAAG,SAAA,EAAW,OAAA,EAAS,MAAM,UAAA,CAAW,SAAS,KAAA,EAAM,EAAG,wBAAoB,IAAA,EAC5G,QAAA,EAAA,CAAA,CAAE,KAAK,KAAA,EACV,CAAA;AAAA,MACC,QAAA,IAAY,eAAA,EAAgB,mBAC3BA,GAAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,yBAAqB,IAAA,EAC9G,QAAA,EAAA,CAAA,CAAE,IAAA,CAAK,MAAA,EACV,CAAA,GACE;AAAA,KAAA,EACN,CAAA,GACE,IAAA;AAAA,oBACJA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,MAAA,EAAQ,WAAW,EAAA,CAAG,OAAA,EAAS,wBAAA,EAAsB,IAAA,EACzD,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,IACC,YAAA,mBACCA,GAAAA,CAAC,UAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,IAAA,EAAK,QAAA,EAAS,KAAA,EAAM,kBAAA,EAAmB,WAAA,EAAY,qBAAA,EAAsB,UAAA,EAAW,MAAA,EAAO,cAAA,EAAc,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,uBAAA,EAAqB,IAAA,EAC3K,QAAA,EAAA,CAAA,CAAE,YAAA,EACL,CAAA,EACF,CAAA,GACE,IAAA;AAAA,oBACJD,IAAAA,CAAC,GAAA,EAAA,EAAE,sBAAA,EAAoB,IAAA,EACpB,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,6BACJC,GAAAA,CAAC,OAAE,IAAA,EAAM,IAAA,CAAK,YAAY,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,qBAAA,EAAsB,WAAW,EAAA,CAAG,IAAA,EAAM,yBAAqB,IAAA,EAC1G,QAAA,EAAA,CAAA,CAAE,QACL,CAAA,GACE,IAAA;AAAA,sBACJA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,uBAAA,EAAqB,IAAA,EACjF,YAAE,MAAA,EACL;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,KAAS,SAAA,oBAC7BD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,gBAAA,EAAc,IAAA,EAAC,cAAW,SAAA,EACjD,QAAA,EAAA;AAAA,oBAAAA,KAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,0BAAsB,IAAA,EAC7C,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,0BAAsB,IAAA,EAAC,CAAA;AAAA,MAC/C,KAAK,CAAA,CAAE,OAAA,EAAS,EAAE,QAAA,EAAU,cAAc,CAAA;AAAA,MAAE,GAAA;AAAA,sBAACA,GAAAA,CAAC,MAAA,EAAA,EAAK,qBAAA,EAAmB,IAAA,EAAE,gBAAM,QAAA,EAAS;AAAA,KAAA,EAC1F,CAAA;AAAA,oBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,uBAAA,EAAqB,IAAA,EAClF,YAAE,MAAA,EACL;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,QAAA,oBAChCD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,gBAAA,EAAc,IAAA,EAAC,cAAW,QAAA,EACjD,QAAA,EAAA;AAAA,oBAAAC,IAAC,IAAA,EAAA,EAAG,sBAAA,EAAoB,IAAA,EAAE,QAAA,EAAA,CAAA,CAAE,KAAK,WAAA,EAAY,CAAA;AAAA,oBAC7CD,IAAAA,CAAC,KAAA,EAAA,EAAI,2BAAA,EAAyB,IAAA,EAE5B,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,OAAA,EAAA,EAAM,GAAA,EAAK,MAAA,CAAO,UAAU,WAAA,EAAW,IAAA,EAAC,KAAA,EAAK,IAAA,EAAC,YAAA,EAAY,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,wBAAoB,IAAA,EAAC,CAAA;AAAA,sBACpGA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,wBAAoB,IAAA,EAAC;AAAA,KAAA,EAChD,CAAA;AAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,8BAAA,EAA8B,MAAA,CAAO,MAAA,EAC3D,QAAA,EAAA,MAAA,CAAO,MAAA,KAAW,QAAA,GACf,CAAA,CAAE,IAAA,CAAK,YAAA,GACP,MAAA,CAAO,MAAA,KAAW,aAAA,GAChB,CAAA,CAAE,IAAA,CAAK,iBAAA,GACP,MAAA,CAAO,MAAA,KAAW,UAAA,GAChB,CAAA,CAAE,IAAA,CAAK,cAAA,GACP,CAAA,CAAE,KAAK,WAAA,EACjB,CAAA;AAAA,oBACAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,wBAAA,EAAsB,MAC7C,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,oBACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,0BAAsB,IAAA,EAChD,QAAA,EAAA;AAAA,sBAAAC,IAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,GAAG,SAAA,EAAW,OAAA,EAAS,MAAM,UAAA,CAAW,SAAS,KAAA,EAAM,EAAG,wBAAoB,IAAA,EAC5G,QAAA,EAAA,CAAA,CAAE,KAAK,WAAA,EACV,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,WAAW,EAAA,CAAG,OAAA;AAAA,UACd,SAAS,MAAM;AACb,YAAA,MAAA,CAAO,IAAA,EAAK;AACZ,YAAA,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,UAC3B,CAAA;AAAA,UACA,6BAAA,EAA2B,IAAA;AAAA,UAE1B,YAAE,IAAA,CAAK;AAAA;AAAA;AACV,KAAA,EACF,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,SAAA;AAAA,QACP,OAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAM,IAAA;AAAA,QACN,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAY,EAAE,IAAA,CAAK,WAAA;AAAA,QACnB,4BAAA,EAA0B,IAAA;AAAA,QAC1B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC5B,UAAA,IAAI,CAAA,EAAG,KAAK,SAAA,CAAU,CAAC,CAAA;AAAA,QACzB;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,KAAS,OAAA,oBAC7BD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,gBAAA,EAAc,IAAA,EAAC,cAAW,OAAA,EACjD,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,IAAA,EAAK,OAAA,EAAQ,QAAA,EAAU,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,sBAAA,EAAsB,KAAA,CAAM,IAAA,EAC7F,QAAA,EAAA,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,EAAE,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,SAAS,CAAA,EAAG,CAAA,EAC9E,CAAA;AAAA,oBACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,0BAAsB,IAAA,EAChD,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,OAAA,EAAS,UAAA,EAAY,uBAAA,EAAqB,IAAA,EACpF,QAAA,EAAA,CAAA,CAAE,MAAA,EACL,CAAA;AAAA,sBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAW,GAAG,SAAA,EAAW,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,MAAA,EAAQ,GAAG,sBAAA,EAAoB,IAAA,EAC3G,YAAE,UAAA,EACL;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,QAAA,oBAC5BD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,gBAAA,EAAc,IAAA,EAAC,cAAW,QAAA,EACjD,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,QAAG,GAAA,EAAK,SAAA,EAAW,UAAU,EAAA,EAAI,sBAAA,EAAoB,IAAA,EACnD,QAAA,EAAA,CAAA,CAAE,WAAA,EACL,CAAA;AAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,qBAAA,EAAmB,IAAA,EAAE,YAAE,UAAA,EAAW,CAAA;AAAA,oBACrCA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,MAAA;AAAA,QACA,KAAA,EAAO,OAAA,GAAW,OAAA,CAAQ,MAAA,KAAW,IAAI,CAAA,CAAE,eAAA,GAAkB,IAAA,CAAK,CAAA,CAAE,kBAAkB,EAAE,CAAA,EAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,GAAK;AAAA;AAAA,KAClH;AAAA,IACC,KAAA,CAAM,UAAA,mBAAaA,GAAAA,CAAC,QAAA,EAAA,EAAS,GAAG,KAAA,CAAM,UAAA,EAAY,CAAA,EAAM,EAAA,EAAQ,CAAA,GAAK,IAAA;AAAA,oBACtEA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,MAAA,EAAQ,YAAA;AAAA,QACR,QAAA,EAAU,aAAa,OAAO,CAAA,CAAA;AAAA,QAC9B,UAAA;AAAA,QACA,YAAA,EAAc,KAAA,CAAM,UAAA,EAAY,aAAA,IAAiB,EAAC;AAAA,QAClD,YAAA;AAAA,QACA,gBAAA,EAAkB,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,kBAAkB,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,UAAA,CAAW,iBAAA,GAAoB,MAAA;AAAA,QAC3H,YAAA;AAAA,QACC,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,QACxC,MAAA;AAAA,QACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,QAChC,UAAA,EAAY,EAAA;AAAA,QACZ,UAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IACC,MAAM,UAAA,EAAY,QAAA,mBAAWA,GAAAA,CAAC,OAAA,EAAA,EAAM,MAAK,QAAA,EAAS,IAAA,EAAM,GAAG,UAAU,CAAA,SAAA,CAAA,EAAa,OAAO,IAAA,CAAK,SAAA,CAAU,MAAM,UAAA,CAAW,QAAQ,GAAG,CAAA,GAAK,IAAA;AAAA,IACzI,OAAA,mBACCD,IAAAA,CAAC,OAAA,EAAA,EAAM,uBAAmB,IAAA,EACxB,QAAA,EAAA;AAAA,sBAAAC,IAAC,OAAA,EAAA,EAAM,IAAA,EAAK,UAAA,EAAW,IAAA,EAAM,GAAG,UAAU,CAAA,KAAA,CAAA,EAAS,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA,KAAM,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,EAAG,CAAA;AAAA,sBAC9GD,KAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,aAAA;AAAA,wBACHA,IAAAA,CAAC,MAAA,EAAA,EAAK,oBAAA,EAAkB,IAAA,EAAC,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,CAAA,CAAE;AAAA,SAAA,EAAY;AAAA,OAAA,EAC3C;AAAA,KAAA,EACF,CAAA,GACE,IAAA;AAAA,oBACJA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,0BAAsB,IAAA,EAChD,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,wBAAA,EAAsB,IAAA,EAClF,QAAA,EAAA,YAAA,IAAgB,EAAE,OAAA,EACrB,CAAA;AAAA,sBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAW,GAAG,SAAA,EAAW,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,MAAA,EAAQ,GAAG,sBAAA,EAAoB,IAAA,EAC3G,YAAE,UAAA,EACL;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,yBAAA,EAAuB,IAAA,EAE1B,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,QAAA,EAAS,WAAA,EAAU,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,qBAAA,EAAmB,IAAA,EAAC,KAAA,EAAO,gBACpF,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,IACC,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,IAAA,GAAO,IAAA;AAAA,IAC/B,OAAA,IAAW,IAAA;AAAA,IACX,UAAA,IAAc,IAAA;AAAA,IACd,OAAA,IAAW,IAAA;AAAA,IACX,MAAA,IAAU;AAAA,GAAA,EACb,CAAA;AAEJ;AAEA,IAAM,iBAAiB,EAAE,QAAA,EAAU,YAAY,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,MAAA,EAAQ,IAAI,OAAA,EAAS,CAAA,EAAG,UAAU,QAAA,EAAU,IAAA,EAAM,iBAAiB,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAA,EAAE;AAEvK,SAAS,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,IAAG,EAAsG;AACjI,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,EAAE,QAAA,KAAa,KAAA,QAAa,IAAA,CAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAC1D,EAAA,IAAI,EAAE,KAAA,KAAU,IAAA,IAAQ,CAAA,CAAE,QAAA,KAAa,MAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,SAAS,KAAA,EAAO,EAAE,MAAM,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AACpG,EAAA,IAAI,CAAA,CAAE,SAAS,MAAA,KAAW,IAAA,QAAY,IAAA,CAAK,CAAA,CAAE,SAAS,SAAS,CAAA;AAAA,OAAA,IACtD,CAAA,CAAE,iBAAA,CAAkB,MAAA,KAAW,CAAA,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,aAAa,CAAA;AAAA,OAAA,IAC7F,EAAE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,MAAM,YAAA,IAAgB,CAAA,KAAM,aAAA,IAAiB,CAAA,KAAM,WAAW,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,SAAS,aAAa,CAAA;AACnI,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,OAAO,IAAA;AAC1B,EAAA,uBACEA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,SAAS,yBAAA,EAAuB,IAAA,EAC/C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACVD,IAAAA,CAAC,IAAA,EAAA,EAAW,0BAAsB,IAAA,EAChC,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,SAAA,EAAE,CAAA;AAAA,IAC1B;AAAA,GAAA,EAAA,EAFM,CAGT,CACD,CAAA,EACH,CAAA;AAEJ;AC9iBO,SAAS,gBAAgB,KAAA,EAA6B;AAC3D,EAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,EAAA,GAAK,EAAC,EAAG,QAAA,EAAU,YAAA,EAAc,GAAG,MAAA,EAAO,GAAI,KAAA;AACxF,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,CAAA,GAAI,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA,CAAE,MAAA;AAC3C,EAAA,MAAM,OAAO,KAAA,CAAM,QAAA,IAAY,MAAM,MAAA,CAAO,SAAA,EAAW,YAAY,CAAC,CAAA;AACpE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIN,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,UAAUE,KAAAA,EAAM;AACtB,EAAA,MAAM,EAAE,GAAA,EAAK,eAAA,EAAgB,GAAI,cAAA,CAAe,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,CAAA;AACvF,EAAA,MAAM,MAAA,GAASH,OAA0B,IAAI,CAAA;AAC7C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,YAAA,IAAgB,IAAA,CAAK,MAAM,WAAA,EAAY;AAE1D,EAAA,uBACEM,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,gBAAY,IAAA,EACtC,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,OAAA,IAAW,EAAA,CAAG,OAAA,EAAS,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,eAAA,EAAc,QAAA,EAAS,mBAAA,EAAiB,IAAA,EAC3I,QAAA,EAAA,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,CAAA,EAC7C,CAAA;AAAA,oBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAW,EAAA,CAAG,MAAA,IAAU,EAAA,CAAG,SAAA,EAAW,SAAS,QAAA,EAAU,qBAAA,EAAmB,IAAA,EAC/F,QAAA,EAAA,CAAA,CAAE,KAAK,MAAA,EACV,CAAA;AAAA,IACC,IAAA,mBACCA,GAAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAU,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,MAAA,EAAO,iBAAA,EAAiB,OAAA,EAAS,OAAA,EAAS,iBAAiB,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,oBAAA,EAAkB,IAAA,EAC1K,QAAA,kBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,sBAAkB,IAAA,EAC/C,QAAA,EAAA;AAAA,sBAAAA,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,uBAAmB,IAAA,EACjD,QAAA,EAAA;AAAA,wBAAAC,IAAC,IAAA,EAAA,EAAG,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,GAAG,UAAA,EAAY,oBAAA,EAAkB,IAAA,EAC1D,QAAA,EAAA,IAAA,CAAK,EAAE,IAAA,CAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA,EACxC,CAAA;AAAA,wBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,oBAAA,EAAkB,IAAA,EAAC,mBAAA,EAAiB,IAAA,EAC3I,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,QAAA,EAAC,CAAA,EAC5B;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,MAAA;AAAA,UACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,UAC/B,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,UACxC,UAAA,EAAY,EAAA;AAAA,UACZ,SAAA,EAAW,CAAC,MAAA,KAAW;AACrB,YAAA,OAAA,CAAQ,KAAK,CAAA;AACb,YAAA,SAAA,CAAU,MAAM,CAAA;AAAA,UAClB,CAAA;AAAA,UACA,UAAU,MAAM;AACd,YAAA,OAAA,CAAQ,KAAK,CAAA;AACb,YAAA,QAAA,EAAS;AAAA,UACX;AAAA;AAAA;AACF,KAAA,EACF,GACF,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AClBA,IAAM,aAAA,GAAgB,CAAC,CAAA,MAA0C;AAAA,EAC/D,QAAQ,CAAA,CAAE,MAAA;AAAA,EACV,YAAY,CAAA,CAAE,UAAA;AAAA,EACd,aAAa,CAAA,CAAE,WAAA;AAAA,EACf,YAAY,CAAA,CAAE,UAAA;AAAA,EACd,GAAA,EAAK,EAAE,WAAA,IAAe;AACxB,CAAA,CAAA;AAEO,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAc,SAAS,QAAA,EAAU,IAAA,EAAM,SAAS,SAAA,EAAW,YAAA,EAAc,UAAU,YAAA,EAAc,UAAA,GAAa,WAAW,QAAA,EAAU,UAAA,EAAY,KAAK,EAAC,EAAG,KAAI,GAAI,KAAA;AAChL,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA;AAC3C,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AACd,EAAA,MAAM,MAAM,MAAA,CAAO,SAAA;AAEnB,EAAA,MAAM,OAAO,KAAA,CAAM,QAAA,IAAY,GAAA,EAAK,SAAA,EAAW,KAAK,CAAC,CAAA,KAAM,CAAC,YAAA,IAAgB,aAAa,kBAAA,CAAmB,QAAA,CAAS,CAAA,CAAE,IAAI,CAAC,CAAA,IAAK,MAAA;AACjI,EAAA,MAAM,OAAA,GAAU,CAAC,CAAC,IAAA;AAClB,EAAA,MAAM,SAAS,CAAC,CAAC,OAAA,IAAW,CAAC,CAAC,OAAA,CAAQ,WAAA;AACtC,EAAA,MAAM,SAAA,GAAkB,MAAM,UAAA,GAAa,MAAA,GAAS,SAAS,SAAA,GAAY,OAAA,GAAU,cAAA,GAAiB,OAAA,GAAU,MAAA,GAAS,QAAA;AAEvH,EAAA,MAAM,SAAS,CAAA,WAAA,EAAcJ,KAAAA,GAAQ,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIF,QAAAA,CAAS,CAAC,CAAC,KAAA,CAAM,gBAAA,IAAoB,CAAC,CAAC,IAAA,EAAM,UAAA,IAAc,CAAC,CAAC,MAAM,WAAW,CAAA;AAChH,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAe,SAAS,CAAA;AAChD,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIA,SAA4B,OAAA,GAAU,aAAA,CAAc,OAAO,CAAA,GAAI,EAAE,QAAQ,EAAA,EAAI,UAAA,EAAY,IAAI,WAAA,EAAa,EAAA,EAAI,YAAY,EAAA,EAAI,GAAA,EAAK,IAAI,CAAA;AACnK,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAuG,IAAI,CAAA;AAC7I,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,IAAA,GAAOD,OAAO,QAAQ,CAAA;AAC5B,EAAA,IAAA,CAAK,OAAA,GAAU,QAAA;AAEf,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,QAAA,IAAY,CAAA,CAAE,UAAA;AACvC,EAAA,MAAM,KAAA,GAAQI,QAA4B,MAAM;AAC9C,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,UAAU,UAAA,EAAW;AAC3G,IAAA,MAAM,UAAU,MAAA,CAAO,YAAA;AACvB,IAAA,MAAM,QAAQ,CAAA,CAAE,aAAA;AAChB,IAAA,IAAI,IAAA,KAAS,aAAa,OAAA,EAAS;AACjC,MAAA,MAAMI,OAAM,gBAAA,CAAiB,aAAA,CAAc,OAAO,CAAA,EAAG,OAAA,CAAQ,gBAAgB,OAAO,CAAA;AACpF,MAAA,IAAI,OAAA,CAAQ,QAAA,EAAUA,IAAAA,CAAI,WAAW,OAAA,CAAQ,QAAA;AAC7C,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAASA,IAAAA,EAAK,OAAO,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,KAAA,EAAM;AAAA,IAC1F;AACA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,UAAU,KAAA,EAAM;AACrG,MAAA,MAAMA,IAAAA,GAAM,gBAAA,CAAiB,SAAA,CAAU,MAAA,EAAQ,OAAO,CAAA;AACtD,MAAA,IAAI,SAAA,CAAU,QAAA,EAAUA,IAAAA,CAAI,WAAW,SAAA,CAAU,QAAA;AACjD,MAAA,IAAI,SAAA,CAAU,IAAA,EAAMA,IAAAA,CAAI,IAAA,GAAO,IAAA;AAC/B,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAASA,IAAAA,EAAK,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,QAAA,GAAW,UAAA,GAAa,QAAA,EAAU,UAAU,KAAA,EAAM;AAAA,IAC3H;AACA,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,oBAAA,CAAqB,QAAQ,MAAA,EAAQ,YAAY,CAAC,CAAA,CAAE,MAAA,KAAW,CAAA;AACzF,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAA,EAAQ,OAAO,CAAA;AAC5C,IAAA,IAAI,IAAA,MAAU,IAAA,GAAO,IAAA;AACrB,IAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,KAAA,GAAQ,GAAA,GAAM,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,KAAA,EAAM;AAAA,EAClG,CAAA,EAAG,CAAC,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,UAAA,EAAY,CAAA,CAAE,aAAa,CAAC,CAAA;AAEzG,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAChC,EAAAN,UAAU,MAAM;AACd,IAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAEtB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,IAAI,iBAAiB,CAAC,YAAA,CAAa,aAAa,YAAA,CAAa,QAAA,KAAa,QAAQ,OAAO,IAAA;AAEzF,EAAA,MAAM,WAAA,GAAc,2BAClBI,IAAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,yBAAA,EAAuB,IAAA,EAC9C,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,OAAE,SAAA,EAAW,EAAA,CAAG,WAAW,+BAAA,EAA6B,IAAA,EACtD,YAAE,YAAA,EACL,CAAA;AAAA,oBACAD,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAC,IAAC,GAAA,EAAA,EAAI,EAAA,EAAQ,OAAO,GAAA,EAAK,KAAA,IAAS,EAAE,QAAA,CAAS,KAAA,EAAO,uBAAOA,GAAAA,CAAC,UAAK,gBAAA,EAAc,IAAA,EAAE,oBAAU,OAAA,CAAQ,MAAM,GAAE,CAAA,EAAS,CAAA;AAAA,sBACpHA,GAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAQ,KAAA,EAAO,EAAE,QAAA,CAAS,SAAA,EAAW,KAAA,EAAO,OAAA,CAAQ,UAAA,EAAY,CAAA;AAAA,sBACrEA,GAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAQ,KAAA,EAAO,EAAE,QAAA,CAAS,UAAA,EAAY,KAAA,EAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,sBACvEA,GAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAQ,OAAO,CAAA,CAAE,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,QAAQ,GAAA,EAAK,OAAA,EAAS,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA,EAAG,CAAA;AAAA,sBACjGA,GAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAQ,KAAA,EAAO,EAAE,QAAA,CAAS,GAAA,EAAK,KAAA,EAAO,OAAA,CAAQ,KAAK,YAAA,EAAc,OAAA,CAAQ,WAAA,IAAe,EAAA,EAAI,MAAM,CAAA,EAAG;AAAA,KAAA,EAC5G,CAAA;AAAA,oBAEAA,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,OAAA,CAAA,EAAW,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,oBAC1EA,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,WAAA,CAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,UAAA,EAAY,CAAA;AAAA,oBAClFA,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,YAAA,CAAA,EAAgB,KAAA,EAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,oBACpFA,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,WAAA,CAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,UAAA,EAAY,CAAA;AAAA,oBAClFA,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,IAAA,CAAA,EAAQ,KAAA,EAAO,OAAA,CAAQ,WAAA,IAAe,EAAA,EAAI,CAAA;AAAA,IACjF,QAAQ,QAAA,mBAAWA,GAAAA,CAAC,OAAA,EAAA,EAAM,MAAK,QAAA,EAAS,IAAA,EAAM,CAAA,EAAG,UAAU,aAAa,KAAA,EAAO,IAAA,CAAK,UAAU,OAAA,CAAQ,QAAQ,GAAG,CAAA,GAAK,IAAA;AAAA,oBACvHD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,2BAAuB,IAAA,EACjD,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAW,EAAA,CAAG,SAAA,EAAW,OAAA,EAAS,MAAM,QAAQ,cAAc,CAAA,EAAG,wBAAA,EAAsB,IAAA,EAC1G,YAAE,MAAA,EACL,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,WAAW,EAAA,CAAG,IAAA;AAAA,UACd,SAAS,MAAM;AACb,YAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,CAAA;AAClF,YAAA,YAAA,CAAa,IAAI,CAAA;AACjB,YAAA,OAAA,CAAQ,OAAA,GAAU,SAAS,QAAQ,CAAA;AAAA,UACrC,CAAA;AAAA,UACA,uBAAA,EAAqB,IAAA;AAAA,UAEpB,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA;AACL,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,UAAU,OAAA,mBACdD,IAAAA,CAAC,OAAA,EAAA,EAAM,wBAAoB,IAAA,EACzB,QAAA,EAAA;AAAA,oBAAAC,IAAC,OAAA,EAAA,EAAM,IAAA,EAAK,UAAA,EAAW,IAAA,EAAM,GAAG,UAAU,CAAA,KAAA,CAAA,EAAS,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA,KAAM,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,EAAG,CAAA;AAAA,oBAC9GA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,CAAI,OAAO,aAAA,EAAc;AAAA,GAAA,EAClC,CAAA,GACE,IAAA;AACJ,EAAA,MAAM,aAAA,GACJ,OAAA,IAAW,MAAA,IAAU,IAAA,KAAS,4BAC5BA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAW,EAAA,CAAG,IAAA;AAAA,MACd,SAAS,MAAM;AACb,QAAA,SAAA,CAAU,aAAA,CAAc,OAAO,CAAC,CAAA;AAChC,QAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,sBAAA,EAAoB,IAAA;AAAA,MAEnB,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,GACL,GACE,IAAA;AAEN,EAAA,MAAM,IAAA,GAAO,CAAC,SAAA,GAAY,IAAA,mBACxBD,IAAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,wBAAoB,IAAA,EACvD,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,WAAM,IAAA,EAAK,QAAA,EAAS,MAAM,CAAA,EAAG,UAAU,CAAA,UAAA,CAAA,EAAc,KAAA,EAAM,MAAA,EAAO,CAAA;AAAA,IAClE,IAAA,KAAS,YACR,WAAA,GACE,IAAA,KAAS,yBACXD,IAAAA,CAAAG,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,GAAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACC,GAAI,IAAA,GAAO,EAAE,QAAA,EAAU,IAAA,KAAS,EAAC;AAAA,UACjC,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,UACjC,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS,EAAC;AAAA,UACvB,GAAI,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,KAAY,EAAC;AAAA,UAC3C,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,UACvC,GAAI,MAAM,YAAA,GAAe,EAAE,cAAc,KAAA,CAAM,YAAA,KAAiB,EAAC;AAAA,UACjE,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,UACvC,GAAI,GAAA,GAAM,EAAE,GAAA,KAAQ,EAAC;AAAA,UACtB,UAAU,MAAM;AACd,YAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,CAAA;AAClF,YAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAClB,CAAA;AAAA,UACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,YAAA,CAAa,CAAC,CAAA;AAAA,UAChB,CAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAA;AAAA,UACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,UAChC,UAAA,EAAY;AAAA;AAAA,OACd;AAAA,MACC,4BACCD,IAAAA,CAAC,OAAE,IAAA,EAAK,QAAA,EAAS,6BAAyB,IAAA,EACxC,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,SAAA,EAAE,CAAA;AAAA,QAC1B,CAAA,CAAE;AAAA,OAAA,EACL,CAAA,GACE,IAAA;AAAA,MACH;AAAA,KAAA,EACH,CAAA,mBAEAD,IAAAA,CAAAG,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,IAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,SAAA,EAAY,YAAE,WAAA,EAAY,CAAA;AAAA,sBAC5CA,GAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,MAAM,WAAA,IAAe,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,CAAC,CAAC,CAAC,CAAA;AAAA,UAClH,UAAA;AAAA,UACC,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,UACxC,MAAA;AAAA,UACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,UAChC,UAAA,EAAY,EAAA;AAAA,UACZ,UAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MACC,OAAA;AAAA,sBACDA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,yBAAA,EAAuB,IAAA,EAC9C,QAAA,EAAA,CAAA,CAAE,OAAA,EACL,CAAA;AAAA,MACC;AAAA,KAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAGF,EAAA,uBACED,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,QAAQ,wBAAA,EAAsB,IAAA,EAAC,YAAA,EAAY,CAAA,CAAE,KAAA,EAClE,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,uBAAA,EAAqB,IAAA,EAC1B,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,IAAA,EAAM,GAAG,UAAU,CAAA,KAAA,CAAA;AAAA,UACnB,OAAA,EAAS,SAAA;AAAA,UACT,eAAA,EAAe,YAAY,MAAA,GAAS,MAAA;AAAA,UACpC,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,OAAO;AAAA;AAAA,OAChD;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM;AAAA,KAAA,EACjB,CAAA;AAAA,IACC,YAAY,CAAC,SAAA,mBACZA,GAAAA,CAAC,cACC,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,UAAU,sBAAA,EAAoB,IAAA,EACpC,QAAA,EAAA,CAAA,CAAE,KAAA,EACL,GACF,CAAA,GACE,IAAA;AAAA,IACH;AAAA,GAAA,EACH,CAAA;AAEJ;AAEA,SAAS,GAAA,CAAI,EAAE,KAAA,EAAO,KAAA,EAAO,IAAG,EAAqE;AACnG,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,OAAA,EAAS,uBAAmB,IAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,QAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACXA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACb,CAAA;AAEJ;AAEA,SAAS,OAAA,CAAQ,IAAA,EAAgG,IAAA,EAAc,MAAA,EAAwB;AACrJ,EAAA,MAAM,IAAI,IAAA,EAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAC3C,EAAA,OAAO,CAAA,GAAI,GAAG,CAAA,CAAE,IAAI,SAAM,UAAA,CAAW,CAAA,EAAG,MAAM,CAAC,CAAA,CAAA,GAAK,IAAA;AACtD;AChQO,SAAS,gBAAA,CAAiB,OAAA,EAA4C,SAAA,GAAY,IAAA,EAAwB;AAC/G,EAAA,IAAI,CAAC,WAAW,OAAO,aAAA;AACvB,EAAA,IAAI,CAAC,SAAS,OAAO,eAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,QAAQ,cAAA,IAAkB,EAAA;AAC1C,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,OAAA,CAAQ,MAAA,KAAW,QAAA,IAAa,OAAA,CAAQ,MAAA,KAAW,UAAA,KAAe,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAA,EAAW,OAAO,QAAA;AACrI,EAAA,IAAI,KAAA,KAAU,aAAa,OAAO,WAAA;AAClC,EAAA,IAAI,KAAA,KAAU,YAAA,IAAgB,OAAA,CAAQ,MAAA,KAAW,gBAAgB,OAAO,YAAA;AACxE,EAAA,IAAI,KAAA,KAAU,cAAA,IAAkB,OAAA,CAAQ,MAAA,KAAW,iBAAiB,OAAO,cAAA;AAC3E,EAAA,IAAI,KAAA,KAAU,eAAA,IAAmB,OAAA,KAAY,eAAA,EAAiB,OAAO,eAAA;AACrE,EAAA,IAAI,KAAA,KAAU,kBAAA,IAAsB,OAAA,KAAY,kBAAA,EAAoB,OAAO,kBAAA;AAC3E,EAAA,IAAI,KAAA,KAAU,YAAY,KAAA,KAAU,SAAA,IAAa,UAAU,UAAA,IAAc,KAAA,KAAU,aAAa,OAAO,YAAA;AACvG,EAAA,IAAI,OAAA,KAAY,iBAAA,IAAqB,OAAA,KAAY,aAAA,EAAe,OAAO,aAAA;AACvE,EAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,KAAA,IAAS,OAAA,EAAS,OAAO,aAAA;AACrD,EAAA,OAAO,eAAA;AACT;AA2BO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM,EAAE,SAAS,SAAA,GAAY,IAAA,EAAM,WAAW,WAAA,EAAa,SAAA,EAAW,aAAa,SAAA,EAAW,SAAA,GAAY,KAAQ,YAAA,GAAe,GAAA,EAAQ,SAAS,QAAA,EAAU,UAAA,EAAY,KAAK,EAAC,EAAG,YAAA,GAAe,CAAA,EAAE,GAAI,KAAA;AACtM,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,CAAA,GAAI,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA,CAAE,MAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,CAAA;AACjD,EAAA,MAAM,UAAU,CAAA,gBAAA,EAAmBJ,KAAAA,GAAQ,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AAC5D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,SAAS,KAAK,CAAA;AACxC,EAAA,MAAM,OAAA,GAAUD,OAAO,SAAS,CAAA;AAChC,EAAA,OAAA,CAAQ,OAAA,GAAU,SAAA;AAGlB,EAAAE,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,IAAI,KAAA,KAAU,YAAA,IAAgB,CAAC,OAAA,CAAQ,OAAA,EAAS;AAChD,IAAA,MAAM,EAAA,GAAK,KAAK,GAAA,EAAI;AACpB,IAAA,MAAM,EAAA,GAAK,YAAY,MAAM;AAC3B,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,EAAA,IAAM,YAAA,EAAc;AACnC,QAAA,aAAA,CAAc,EAAE,CAAA;AAChB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,OAAA,IAAU;AAAA,IACpB,GAAG,SAAS,CAAA;AACZ,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAA,EAAO,SAAA,EAAW,YAAY,CAAC,CAAA;AAEnC,EAAA,MAAM,aAAA,GAAgBG,YAAY,MAAM;AACtC,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,OAAA,CAAQ,OAAA,IAAU;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAA,GAAI,IAAI,YAAY,CAAA,CAAA;AAC1B,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,KAAA,IAAS,OAAA,EAAS,SAAS,OAAA,EAAS,GAAA;AACjE,EAAA,MAAM,MAAA,GAAS,OAAA,EAAS,WAAA,GAAe,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,IAAK,CAAA,CAAE,OAAA,CAAQ,OAAA,GAAW,CAAA,CAAE,OAAA,CAAQ,OAAA;AAExG,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,IAAA,GAAkB,IAAA;AACtB,EAAA,IAAI,OAAA,GAAqB,IAAA;AACzB,EAAA,IAAI,IAAA,GAAO,KAAA;AAEX,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,eAAA,EAAiB;AACpB,MAAA,KAAA,GAAQ,CAAA,CAAE,KAAA;AACV,MAAA,IAAA,mBAAOE,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,YAAE,WAAA,EAAY,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAM,SAAS,WAAA,KAAgB,KAAA;AACrC,MAAA,IAAI,GAAA,KAAQ,aAAa,WAAA,CAAA,EAAc;AACrC,QAAA,OAAA,GAAU,SAAA,mBACRA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,yBAAA,EAAuB,IAAA,EACrF,QAAA,EAAA,CAAA,CAAE,OAAA,EACL,CAAA,mBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,yBAAA,EAAuB,IAAA,EACjE,QAAA,EAAA,CAAA,CAAE,OAAA,EACL,CAAA;AAAA,MAEJ;AACA,MAAA;AAAA,IACF;AAAA,IACA,KAAK,kBAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,aAAA;AACV,MAAA,IAAA,mBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,YAAE,YAAA,EAAa,CAAA;AAC9C,MAAA;AAAA,IACF,KAAK,YAAA;AACH,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,KAAA,GAAQ,CAAA,CAAE,eAAA;AACV,MAAA,IAAA,mBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,MAAO,QAAA,EAAA,KAAA,GAAQ,CAAA,CAAE,cAAA,GAAiB,CAAA,CAAE,cAAA,EAAe,CAAA;AAC3E,MAAA,OAAA,GAAU,SAAA,mBACRA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,aAAA,EAAe,yBAAA,EAAuB,IAAA,EAC3F,QAAA,EAAA,CAAA,CAAE,SACL,CAAA,GACE,IAAA;AACJ,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,WAAA;AACV,MAAA,IAAA,mBACED,IAAAA,CAAAG,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAF,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,IAAA,EAAO,YAAE,UAAA,EAAW,CAAA;AAAA,QACpC,OAAA,EAAS,wBACRD,IAAAA,CAAC,OAAE,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,uBAAA,EAAqB,IAAA,EAC1C,QAAA,EAAA;AAAA,0BAAAA,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,KAAA;AAAA,YAAM;AAAA,WAAA,EAAE,CAAA;AAAA,0BACjBC,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,SAAA,EACvB,CAAA,GACE;AAAA,OAAA,EACN,CAAA;AAEF,MAAA,OAAA,mBACED,IAAAA,CAAAG,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,OAAA,EAAS,sBACRF,GAAAA,CAAC,OAAE,IAAA,EAAM,OAAA,CAAQ,KAAK,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,GAAA,EAAI,uBAAsB,QAAA,EAAQ,IAAA,EAAC,uBAAmB,IAAA,EAChG,QAAA,EAAA,CAAA,CAAE,KACL,CAAA,GACE,IAAA;AAAA,QACH,SAAS,OAAA,mBACRA,IAAC,GAAA,EAAA,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,SAAA,EAAW,GAAG,SAAA,EAAW,GAAA,EAAI,uBAAsB,QAAA,EAAQ,IAAA,EAAC,uBAAmB,IAAA,EACtG,QAAA,EAAA,CAAA,CAAE,KACL,CAAA,GACE;AAAA,OAAA,EACN,CAAA;AAEF,MAAA;AAAA,IACF,KAAK,YAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,cAAA;AACV,MAAA,IAAA,mBACED,IAAAA,CAAAG,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAF,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,IAAA,EAAO,YAAE,aAAA,EAAc,CAAA;AAAA,wBACxCA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,IAAA,EAAM,wBAAA,EAAsB,MAC1C,QAAA,EAAA,MAAA,EACH;AAAA,OAAA,EACF,CAAA;AAEF,MAAA,OAAA,GAAU,SAAA,mBACRA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,yBAAA,EAAuB,IAAA,EACrF,QAAA,EAAA,CAAA,CAAE,OAAA,EACL,CAAA,GACE,WAAA,mBACFA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,yBAAA,EAAuB,IAAA,EACjE,QAAA,EAAA,CAAA,CAAE,SACL,CAAA,GACE,IAAA;AACJ,MAAA;AAAA,IACF,KAAK,cAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,WAAA;AACV,MAAA,IAAA,mBACED,IAAAA,CAAAG,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAF,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,IAAA,EAAO,YAAE,UAAA,EAAW,CAAA;AAAA,QACpC,WAAA,mBAAcA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,QAAA,EAAA,IAAA,CAAK,CAAA,CAAE,WAAW,EAAE,OAAA,EAAS,WAAA,EAAa,GAAE,CAAA,GAAO;AAAA,OAAA,EAC5F,CAAA;AAEF,MAAA,OAAA,GAAU,OAAA,EAAS,GAAA,mBACjBA,GAAAA,CAAC,OAAE,IAAA,EAAM,OAAA,CAAQ,GAAA,EAAK,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,yBAAA,EAAuB,IAAA,EACnE,YAAE,OAAA,EACL,CAAA,GACE,OAAA,EAAS,KAAA,mBACXA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,UAAU,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,SAAA,EAAW,GAAG,SAAA,EAAW,yBAAA,EAAuB,IAAA,EACjF,QAAA,EAAA,CAAA,CAAE,SACL,CAAA,GACE,IAAA;AACJ,MAAA;AAAA,IACF,KAAK,eAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,WAAA;AACV,MAAA,IAAA,mBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,YAAE,UAAA,EAAW,CAAA;AAC5C,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,KAAA,GAAQ,CAAA,CAAE,cAAA;AACV,MAAA,IAAA,mBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,YAAE,aAAA,EAAc,CAAA;AAC/C,MAAA;AAAA,IACF;AACE,MAAA,KAAA,GAAQ,CAAA,CAAE,gBAAA;AACV,MAAA,IAAA,mBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,EAAA,CAAG,IAAA,EAAO,YAAE,eAAA,EAAgB,CAAA;AAAA;AAGrD,EAAA,uBACED,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,GAAG,IAAA,EAAM,sBAAA,EAAoB,IAAA,EAAC,YAAA,EAAY,OAAO,YAAA,EAAY,OAAA,EAAS,KAAA,IAAS,MAAA,EAAW,mBAAiB,OAAA,EAC7H,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAE,EAAA,EAAI,OAAA,EAAS,WAAW,EAAA,CAAG,KAAA,EAAO,yBAAqB,IAAA,EACxD,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,wBAAoB,IAAA,EAC1C,QAAA,EAAA,IAAA,CAAK,KAAK,CAAA,EACb,CAAA;AAAA,MAAQ,GAAA;AAAA,MACP;AAAA,KAAA,EACH,CAAA;AAAA,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAW,IAAA,IAAQ,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,MAAA,EAAW,sBAAA,EAAoB,IAAA,EACpF,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,IACC,OAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,OAAA,EAAS,yBAAA,EAAuB,IAAA,EAChD,QAAA,EAAA,OAAA,EACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAGA,IAAM,IAAA,GAAyC;AAAA,EAC7C,aAAA,EAAe,QAAA;AAAA,EACf,gBAAA,EAAkB,QAAA;AAAA,EAClB,UAAA,EAAY,QAAA;AAAA,EACZ,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,GAAA;AAAA,EACZ,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,QAAA;AAAA,EACf,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA","file":"fiscal.js","sourcesContent":["/**\n * The fiscal data of an invoice: tax id, legal name, tax postal code, regime and invoice use. Everything comes from the\n * region (`Region.fiscal_id`): the tax id's name and format, the regimes (narrowed by person type when the shop says how\n * to tell it), the uses (narrowed by the chosen regime) and the postal code format. Nothing here names a country.\n *\n * Plain HTML controls named `<prefix>.<field>` (default `invoice.tax_id`, `invoice.legal_name`...), so the fields work\n * inside any `<form>`, with or without JavaScript; with JavaScript the region's rules also run as the buyer types.\n */\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { CheckoutField, type CheckoutFieldClassNames, type FieldErrors } from '../checkout/fields.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { entryLabel, normalizeTaxId, personTypeResolver, regimesFor, suggestInvoiceUse, usesFor, validateFiscalValues, type FiscalProblem, type FiscalRegion } from './format.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport type { FiscalFieldName, FiscalFieldValues } from './types.js'\n\nexport type FiscalIdentityFieldsClassNames = CheckoutFieldClassNames & Partial<Record<'fieldset' | 'legend' | 'mark' | 'radios' | 'radio', string>>\n\nexport type FiscalIdentityFieldsProps = {\n region: FiscalRegion\n /** Initial values (and, when they change, the new values: e.g. after a document is read). */\n values?: Partial<FiscalFieldValues>\n onChange?: (values: FiscalFieldValues) => void\n /** Fields that were filled from a document: they get the \"From your {document}\" mark and stay editable. */\n fromDocument?: readonly FiscalFieldName[]\n /** Short noun of the document for the mark (\"constancia\"). Default: nothing specific (\"tu documento\"). */\n documentName?: string\n /** The document listed these regimes: show only them, as radios. */\n regimeCandidates?: readonly string[]\n /** Errors by control name (`invoice.tax_regime`), from the server or `useFieldErrors`. */\n errors?: FieldErrors\n namePrefix?: string\n /** Prefix of the control ids (default: generated). */\n idPrefix?: string\n /**\n * Overrides how a person type is told from a tax id (to narrow the regimes). Default: the region's own patterns\n * (`fiscal_id.person_patterns`); with neither, the regimes are not narrowed (the server still checks).\n */\n personTypeOf?: (taxId: string) => string | null\n /** The invoice use in `values` came from the region's suggestion (a document was read): it gets the \"Suggested\" mark. */\n suggestedUse?: string | null\n disabled?: boolean\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: FiscalIdentityFieldsClassNames\n /** Hides the fieldset legend (when the caller already has a heading). */\n hideLegend?: boolean\n}\n\nconst FIELDS: FiscalFieldName[] = ['tax_id', 'legal_name', 'postal_code', 'tax_regime', 'use']\nconst EMPTY: FiscalFieldValues = { tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' }\n\nfunction problemText(m: FiscalMessages['fields'], region: FiscalRegion, field: FiscalFieldName, p: FiscalProblem): string {\n const e = m.errors\n switch (p) {\n case 'required':\n return e.required\n case 'format':\n return field === 'tax_id'\n ? fill(e.taxIdFormat, { kind: region.fiscal_id?.label ?? '' })\n : fill(e.postalFormat, { example: region.address?.postal_code?.example ?? '' })\n case 'person_type':\n return e.personType\n case 'use_not_allowed':\n return e.useNotAllowed\n default:\n return e.unknown\n }\n}\n\nexport function FiscalIdentityFields({\n region,\n values,\n onChange,\n fromDocument = [],\n documentName,\n regimeCandidates,\n errors = {},\n namePrefix = 'invoice',\n idPrefix,\n personTypeOf: personTypeOverride,\n suggestedUse,\n disabled,\n locale: localeProp,\n messages,\n classNames: cx = {},\n hideLegend,\n}: FiscalIdentityFieldsProps) {\n const locale = useResolvedLocale(localeProp)\n const all = fiscalMessages(locale, messages)\n const m = all.fields\n const fid = region.fiscal_id\n const reactId = useId()\n const base = idPrefix ?? `sf-fiscal-${reactId.replace(/:/g, '')}`\n const [v, setV] = useState<FiscalFieldValues>({ ...EMPTY, ...values })\n const [shown, setShown] = useState<ReadonlySet<FiscalFieldName>>(new Set())\n // The use the region suggested when the regime was chosen here (cleared as soon as the buyer picks one).\n const [autoUse, setAutoUse] = useState<string | null>(null)\n const personTypeOf = useMemo(() => personTypeResolver(region.fiscal_id, personTypeOverride), [region.fiscal_id, personTypeOverride])\n const root = useRef<HTMLFieldSetElement>(null)\n const valuesKey = JSON.stringify(values ?? null)\n const first = useRef(true)\n\n // New values from outside (a document was read): take them.\n useEffect(() => {\n if (first.current) {\n first.current = false\n return\n }\n setV({ ...EMPTY, ...values })\n setShown(new Set())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valuesKey])\n\n const set = (patch: Partial<FiscalFieldValues>) => {\n const next = { ...v, ...patch }\n // A use the new regime does not admit is dropped, not silently kept.\n if (patch.tax_regime !== undefined && next.use && !usesFor(fid, next.tax_regime).some((u) => u.code === next.use)) next.use = ''\n // A regime was chosen and no use yet: the region's suggestion (if it has one) is preselected, marked and editable.\n if (patch.tax_regime !== undefined && !next.use) {\n const suggestion = suggestInvoiceUse(fid, next.tax_regime)\n if (suggestion) {\n next.use = suggestion\n setAutoUse(suggestion)\n } else setAutoUse(null)\n } else if (patch.use !== undefined) setAutoUse(null)\n setV(next)\n onChange?.(next)\n }\n\n const person = personTypeOf(v.tax_id)\n const taxIdOk = !validateFiscalValues(region, { tax_id: v.tax_id }, personTypeOf).tax_id\n const problems = useMemo(() => validateFiscalValues(region, v, personTypeOf), [region, v, personTypeOf])\n const candidates = regimeCandidates?.length ? regimeCandidates : null\n const regimes = useMemo(() => {\n const list = regimesFor(fid, taxIdOk ? person : null)\n if (candidates) return (fid?.regimes ?? []).filter((r) => candidates.includes(r.code))\n // Never hide the regime already chosen.\n return v.tax_regime && !list.some((r) => r.code === v.tax_regime) ? [...list, ...(fid?.regimes ?? []).filter((r) => r.code === v.tax_regime)] : list\n }, [fid, person, taxIdOk, candidates, v.tax_regime])\n const uses = useMemo(() => usesFor(fid, v.tax_regime), [fid, v.tax_regime])\n\n // Rules that block the submit (format, combination) are exposed to the browser's own validation.\n useEffect(() => {\n const el = root.current\n if (!el) return\n for (const f of FIELDS) {\n const ctl = el.querySelector<HTMLInputElement | HTMLSelectElement>(`[name=\"${namePrefix}.${f}\"]`)\n const p = problems[f]\n ctl?.setCustomValidity?.(p && p !== 'required' ? problemText(m, region, f, p) : '')\n }\n })\n\n const name = (f: FiscalFieldName) => `${namePrefix}.${f}`\n const err = (f: FiscalFieldName): string | null => {\n const external = errors[name(f)]\n if (external) return external\n const p = problems[f]\n return shown.has(f) && p && p !== 'required' ? problemText(m, region, f, p) : null\n }\n const touch = (f: FiscalFieldName) => {\n if (v[f] && !shown.has(f)) setShown((s) => new Set(s).add(f))\n }\n const doc = documentName ?? ''\n const mark = (f: FiscalFieldName): ReactNode =>\n fromDocument.includes(f) && (v[f] || (f === 'tax_regime' && candidates)) ? (\n <span className={cx.mark} data-sf-from-document>\n <span aria-hidden=\"true\">✓ </span>\n {fill(m.fromDocument, { document: doc || (locale.toLowerCase().startsWith('en') ? 'document' : 'documento') })}\n </span>\n ) : null\n const hint = (f: FiscalFieldName, text: string | undefined): ReactNode => {\n const mk = mark(f)\n if (!mk) return text\n return text ? (\n <>\n {mk} · {text}\n </>\n ) : (\n mk\n )\n }\n const postalExample = region.address?.postal_code?.example\n const numericPostal = !!postalExample && /^\\d+$/.test(postalExample)\n\n return (\n <fieldset ref={root} className={cx.fieldset} disabled={disabled} data-sf-fiscal-fields style={{ border: 0, padding: 0, margin: 0, minInlineSize: 0 }}>\n <legend className={cx.legend} hidden={hideLegend ? true : undefined} style={hideLegend ? undefined : { padding: 0 }}>\n {m.legend}\n </legend>\n <CheckoutField\n name={name('tax_id')}\n id={`${base}-tax_id`}\n label={fid?.label || m.taxId}\n hint={hint('tax_id', m.taxIdHint)}\n value={v.tax_id}\n onChange={(e) => set({ tax_id: normalizeTaxId(e.target.value) })}\n onBlur={() => touch('tax_id')}\n error={err('tax_id')}\n classNames={cx}\n autoComplete=\"off\"\n autoCapitalize=\"characters\"\n spellCheck={false}\n inputMode=\"text\"\n enterKeyHint=\"next\"\n maxLength={20}\n locale={locale}\n />\n <CheckoutField\n name={name('legal_name')}\n id={`${base}-legal_name`}\n label={m.legalName}\n hint={hint('legal_name', m.legalNameHint)}\n value={v.legal_name}\n onChange={(e) => set({ legal_name: e.target.value })}\n onBlur={() => touch('legal_name')}\n error={err('legal_name')}\n classNames={cx}\n autoComplete=\"organization\"\n enterKeyHint=\"next\"\n maxLength={254}\n locale={locale}\n />\n <CheckoutField\n name={name('postal_code')}\n id={`${base}-postal_code`}\n label={m.postalCode}\n hint={hint('postal_code', m.postalCodeHint)}\n value={v.postal_code}\n onChange={(e) => set({ postal_code: e.target.value.trim() })}\n onBlur={() => touch('postal_code')}\n error={err('postal_code')}\n classNames={cx}\n autoComplete=\"postal-code\"\n inputMode={numericPostal ? 'numeric' : 'text'}\n placeholder={postalExample}\n enterKeyHint=\"next\"\n maxLength={12}\n locale={locale}\n />\n {candidates ? (\n <fieldset className={cx.radios} data-sf-fiscal-regimes aria-describedby={err('tax_regime') ? `${base}-regime-error` : undefined} style={{ border: 0, padding: 0, margin: 0, minInlineSize: 0 }}>\n <legend className={cx.label} data-sf-label={m.regime}>\n {m.regime}\n </legend>\n <p className={cx.hint} data-sf-field-hint>\n {mark('tax_regime')} · {m.regimeFromDocument}\n </p>\n {regimes.map((r, i) => (\n <label key={r.code} className={cx.radio} data-sf-fiscal-radio>\n <input\n type=\"radio\"\n id={i === 0 ? `${base}-tax_regime` : undefined}\n name={name('tax_regime')}\n value={r.code}\n checked={v.tax_regime === r.code}\n required\n onChange={() => set({ tax_regime: r.code })}\n />\n <span>\n {entryLabel(r, locale)} <span data-sf-fiscal-code>({r.code})</span>\n </span>\n </label>\n ))}\n {err('tax_regime') ? (\n <p id={`${base}-regime-error`} className={cx.error} data-sf-field-error>\n {err('tax_regime')}\n </p>\n ) : null}\n </fieldset>\n ) : (\n <CheckoutField\n as=\"select\"\n name={name('tax_regime')}\n id={`${base}-tax_regime`}\n label={m.regime}\n hint={hint('tax_regime', m.regimeHint)}\n value={v.tax_regime}\n onChange={(e) => set({ tax_regime: e.target.value })}\n onBlur={() => touch('tax_regime')}\n error={err('tax_regime')}\n classNames={cx}\n locale={locale}\n >\n <option value=\"\">{m.regimeChoose}</option>\n {regimes.map((r) => (\n <option key={r.code} value={r.code}>\n {r.code} · {entryLabel(r, locale)}\n </option>\n ))}\n </CheckoutField>\n )}\n <CheckoutField\n as=\"select\"\n name={name('use')}\n id={`${base}-use`}\n label={m.use}\n hint={\n v.use && (v.use === autoUse || v.use === suggestedUse) ? (\n <>\n <span className={cx.mark} data-sf-suggested>\n {m.suggested}\n </span>{' '}\n · {m.useHint}\n </>\n ) : (\n m.useHint\n )\n }\n value={v.use}\n onChange={(e) => set({ use: e.target.value })}\n onBlur={() => touch('use')}\n error={err('use')}\n classNames={cx}\n locale={locale}\n >\n <option value=\"\">{m.useChoose}</option>\n {uses.map((u) => (\n <option key={u.code} value={u.code}>\n {u.code} · {entryLabel(u, locale)}\n </option>\n ))}\n </CheckoutField>\n </fieldset>\n )\n}\n","/**\n * Live QR reading with the device camera. Nothing is recorded or stored: the frames are read in memory by\n * `decodeImageQr` (loaded on demand, so a page that never opens the camera pays 0 bytes for it) and the stream is\n * stopped when the scanner closes, when the component unmounts or when the page is hidden.\n */\nimport { useCallback, useEffect, useRef, useState, type RefObject } from 'react'\n\nexport type CameraQrStatus =\n /** Not running. */\n | 'idle'\n /** Waiting for the permission or for the first frame. */\n | 'starting'\n | 'scanning'\n /** The buyer (or the browser) refused the camera. */\n | 'denied'\n /** No `getUserMedia` here (old browser, insecure page). */\n | 'unsupported'\n\nexport type UseCameraQrOptions = {\n /** Start (true) or stop (false) the camera. */\n active: boolean\n /** The QR text read. Called once; the camera stops right after. */\n onCode: (text: string) => void\n /** Milliseconds between two reading attempts (default 250). */\n intervalMs?: number\n}\n\nexport type UseCameraQr = {\n videoRef: RefObject<HTMLVideoElement | null>\n status: CameraQrStatus\n /** Stops the stream now. */\n stop: () => void\n}\n\ntype MediaDevicesLike = { getUserMedia(c: unknown): Promise<MediaStream> }\n\nexport function cameraSupported(): boolean {\n return typeof navigator !== 'undefined' && typeof (navigator as { mediaDevices?: MediaDevicesLike }).mediaDevices?.getUserMedia === 'function'\n}\n\nexport function useCameraQr({ active, onCode, intervalMs = 250 }: UseCameraQrOptions): UseCameraQr {\n const videoRef = useRef<HTMLVideoElement | null>(null)\n const [status, setStatus] = useState<CameraQrStatus>('idle')\n const streamRef = useRef<MediaStream | null>(null)\n const onCodeRef = useRef(onCode)\n onCodeRef.current = onCode\n\n const stop = useCallback(() => {\n for (const track of streamRef.current?.getTracks() ?? []) track.stop()\n streamRef.current = null\n const v = videoRef.current\n if (v) v.srcObject = null\n setStatus((s) => (s === 'denied' || s === 'unsupported' ? s : 'idle'))\n }, [])\n\n useEffect(() => {\n if (!active) return\n if (!cameraSupported()) {\n setStatus('unsupported')\n return\n }\n let cancelled = false\n let timer: ReturnType<typeof setInterval> | undefined\n let busy = false\n setStatus('starting')\n\n const onHidden = () => {\n if (document.visibilityState === 'hidden') stop()\n }\n document.addEventListener('visibilitychange', onHidden)\n\n ;(async () => {\n let stream: MediaStream\n try {\n stream = await (navigator as unknown as { mediaDevices: MediaDevicesLike }).mediaDevices.getUserMedia({ video: { facingMode: { ideal: 'environment' } }, audio: false })\n } catch {\n if (!cancelled) setStatus('denied')\n return\n }\n if (cancelled) {\n for (const t of stream.getTracks()) t.stop()\n return\n }\n streamRef.current = stream\n const video = videoRef.current\n if (!video) {\n for (const t of stream.getTracks()) t.stop()\n streamRef.current = null\n return\n }\n video.srcObject = stream\n video.muted = true\n void video.play?.().catch(() => undefined)\n setStatus('scanning')\n const eng = await import('@asteby/storefront/fiscal-document')\n timer = setInterval(async () => {\n if (busy || cancelled || !videoRef.current || videoRef.current.readyState < 2) return\n busy = true\n try {\n const text = await eng.decodeImageQr(videoRef.current)\n if (text && !cancelled) {\n cancelled = true\n clearInterval(timer)\n stop()\n onCodeRef.current(text)\n }\n } catch {\n /* a frame that cannot be read is not an error: the next one may */\n } finally {\n busy = false\n }\n }, intervalMs)\n })()\n\n return () => {\n cancelled = true\n if (timer) clearInterval(timer)\n document.removeEventListener('visibilitychange', onHidden)\n for (const t of streamRef.current?.getTracks() ?? []) t.stop()\n streamRef.current = null\n if (videoRef.current) videoRef.current.srcObject = null\n }\n }, [active, intervalMs, stop])\n\n return { videoRef, status, stop }\n}\n","/**\n * \"Upload your tax document\" flow: the buyer drops the PDF the tax authority gave them, we read it ON THEIR DEVICE\n * (pdf.js is loaded only when a file is chosen, never in the main bundle), they review the prefilled fields and confirm.\n * The file is never uploaded or kept; only the fields the buyer confirms leave, plus minimal evidence of where they came\n * from (`buildDocumentEvidence`). Fields the region lists in `discard_fields` (ids, street...) are never shown or kept.\n *\n * Without JavaScript the same control posts the file to the shop's action (`createInvoiceAction`, intent\n * `extract-document`), which reads it in memory, discards it and sends back `data` to review.\n *\n * When the region lets a PHOTO of the document be read (`image_mode`: `qr_only` | `full`) the buyer can also take a\n * picture of its QR or scan it live with the camera. A QR carries only the tax id and the id of the document: the\n * rest is asked for (or the PDF is uploaded). The image and the camera frames never leave the device.\n *\n * Everything country-specific is the region's `IdentityDocumentSpec`: label, where to get it, accepted types, size,\n * rules, freshness. The component only knows \"a document with fiscal data\".\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type DragEvent, type ReactNode } from 'react'\nimport type { FiscalDocumentEvidence, IdentityDocumentSpec } from '@asteby/storefront'\nimport { ErrorSummary, type ErrorSummaryItem, type FieldErrors } from '../checkout/fields.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { summarizeExtraction } from './extraction.js'\nimport { personTypeResolver, suggestInvoiceUse, validateFiscalValues, type FiscalRegion } from './format.js'\nimport { FiscalIdentityFields, type FiscalIdentityFieldsClassNames } from './identity-fields.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport { cameraSupported, useCameraQr } from './use-camera-qr.js'\nimport type { FiscalActionData, FiscalExtractionSummary, FiscalFieldName, FiscalFieldValues, FiscalReadError } from './types.js'\n\nexport type FiscalReaderResult = {\n values: FiscalFieldValues\n /** Where the data came from; `null` when the buyer typed everything. */\n evidence: FiscalDocumentEvidence | null\n /** The buyer asked to save the data to their account (`canSave`). */\n save: boolean\n}\n\nexport type IdentityDocumentReaderClassNames = FiscalIdentityFieldsClassNames &\n Partial<Record<'root' | 'zone' | 'zoneActive' | 'button' | 'link' | 'privacy' | 'status' | 'error' | 'warning' | 'notice' | 'actions' | 'primary' | 'secondary' | 'summary', string>>\n\nexport type IdentityDocumentReaderProps = {\n region: FiscalRegion\n /** The document to read. Default: the first of `region.fiscal_id.documents`. */\n document?: IdentityDocumentSpec\n /**\n * URL of the pdf.js worker (`pdf.worker.mjs` from `pdfjs-dist/legacy/build`) that YOUR site serves. There is no\n * default and no CDN: without it the browser cannot read the file and the buyer is sent to manual entry.\n */\n workerSrc?: string\n /** The buyer confirmed the reviewed data. */\n onConfirm: (result: FiscalReaderResult) => void\n /** The buyer chose to type their data. Default: the review form opens empty. */\n onManual?: () => void\n /** Values to start the review with (e.g. a saved profile). */\n initialValues?: Partial<FiscalFieldValues>\n /** Result of the server (no-JS upload): when it carries an `extraction` or an error, it is shown. */\n data?: FiscalActionData | null\n /** The shop has a signed-in buyer: offer \"Save to my account\". */\n canSave?: boolean\n /** Enables the no-JS upload (a button that posts the file to the action with `intent=extract-document`). */\n serverUpload?: boolean\n /** Short noun of the document for texts (\"constancia\"). Default: the spec's label in lowercase. */\n documentName?: string\n personTypeOf?: (taxId: string) => string | null\n /** Clock for tests. */\n now?: () => Date\n namePrefix?: string\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: IdentityDocumentReaderClassNames\n /** Label of the confirm button. */\n confirmLabel?: ReactNode\n}\n\ntype Phase =\n | { kind: 'idle' }\n | { kind: 'reading'; fileName: string }\n | { kind: 'camera' }\n | { kind: 'review'; extraction: FiscalExtractionSummary | null; revision: number }\n | { kind: 'error'; code: FiscalReadError; sizeLimit?: number }\n\nconst isPdf = (f: File, accept: string[]) => {\n const okType = f.type ? accept.some((a) => a === f.type) || f.type === 'application/pdf' : false\n return okType || /\\.pdf$/i.test(f.name)\n}\n\nconst isImage = (f: File) => f.type.startsWith('image/') || /\\.(jpe?g|png|webp|heic|heif)$/i.test(f.name)\n\nconst mib = (bytes: number) => `${Math.round((bytes / (1024 * 1024)) * 10) / 10} MB`\n\nexport function IdentityDocumentReader(props: IdentityDocumentReaderProps) {\n const { region, workerSrc, onConfirm, onManual, initialValues, data, canSave, serverUpload, personTypeOf, now, namePrefix = 'invoice', messages, classNames: cx = {}, confirmLabel } = props\n const locale = useResolvedLocale(props.locale)\n const all = fiscalMessages(locale, messages)\n const m = all.reader\n const spec = props.document ?? region.fiscal_id?.documents?.[0]\n const reactId = useId().replace(/:/g, '')\n const inputId = `sf-reader-${reactId}-file`\n const helpId = `sf-reader-${reactId}-help`\n const documentName = props.documentName ?? (spec?.label ?? 'document').toLowerCase()\n\n const fromServer = data?.extraction ?? null\n const serverError = data && !data.ok && data.error && ['not_pdf', 'too_large', 'no_text', 'password', 'unreadable'].includes(data.error.code) ? (data.error.code as FiscalReadError) : null\n const [phase, setPhase] = useState<Phase>(() =>\n fromServer ? { kind: 'review', extraction: fromServer, revision: 0 } : serverError ? { kind: 'error', code: serverError, sizeLimit: spec?.max_bytes } : { kind: 'idle' },\n )\n const [dragging, setDragging] = useState(false)\n const [live, setLive] = useState('')\n const [values, setValues] = useState<FiscalFieldValues>({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '', ...initialValues, ...(fromServer?.values ?? {}) })\n const [save, setSave] = useState(false)\n const [summary, setSummary] = useState<ErrorSummaryItem[] | null>(null)\n const [summaryKey, setSummaryKey] = useState(0)\n const [hydrated, setHydrated] = useState(false)\n const abort = useRef<AbortController | null>(null)\n const fileInput = useRef<HTMLInputElement>(null)\n const errorRef = useRef<HTMLDivElement>(null)\n const reviewRef = useRef<HTMLHeadingElement>(null)\n\n useEffect(() => setHydrated(true), [])\n useEffect(() => () => abort.current?.abort(), [])\n // A new answer from the server (the buyer posted a file without JS and the page came back).\n useEffect(() => {\n if (!fromServer) return\n setValues((cur) => {\n const next = { ...cur, ...fromServer.values }\n const suggestion = next.tax_regime && !next.use ? suggestInvoiceUse(region.fiscal_id, next.tax_regime) : null\n if (suggestion) {\n next.use = suggestion\n setSuggestedUse(suggestion)\n }\n return next\n })\n setPhase({ kind: 'review', extraction: fromServer, revision: 1 })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fromServer])\n useEffect(() => {\n if (phase.kind === 'error') errorRef.current?.focus()\n if (phase.kind === 'review' && phase.revision > 0) reviewRef.current?.focus()\n }, [phase])\n\n // The file picker takes the document's files (PDF); photos have their own control (`image_mode`).\n const accept = useMemo(() => {\n const files = (spec?.accept ?? []).filter((a) => !a.startsWith('image/'))\n return files.length ? files.join(',') : 'application/pdf'\n }, [spec])\n const imageMode = spec?.image_mode && spec.image_mode !== 'none' ? spec.image_mode : null\n const photoInput = useRef<HTMLInputElement>(null)\n const [suggestedUse, setSuggestedUse] = useState<string | null>(null)\n const cameraActive = phase.kind === 'camera' \n const fieldErrors: FieldErrors = useMemo(() => {\n const out: FieldErrors = {}\n for (const [k, v] of Object.entries(data?.fieldErrors ?? {})) out[k] = all.server.errors[v] ?? v\n return out\n }, [data, all.server.errors])\n\n const cancel = useCallback(() => {\n abort.current?.abort()\n abort.current = null\n setPhase({ kind: 'idle' })\n setLive('')\n }, [])\n\n const openManual = useCallback(() => {\n onManual?.()\n setPhase({ kind: 'review', extraction: null, revision: 1 })\n setLive('')\n }, [onManual])\n\n /** Puts what the engine read (a PDF, or only a QR) in the form, with the region's suggested use when it has one. */\n const showExtraction = useCallback(\n (sum: FiscalExtractionSummary) => {\n const base = { tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '', ...sum.values }\n const suggestion = base.tax_regime ? suggestInvoiceUse(region.fiscal_id, base.tax_regime) : null\n if (suggestion && !base.use) base.use = suggestion\n setSuggestedUse(suggestion && base.use === suggestion ? suggestion : null)\n setValues(base)\n setSummary(null)\n setPhase({ kind: 'review', extraction: sum, revision: 1 })\n setLive(m.done)\n },\n [region.fiscal_id, m.done],\n )\n\n /** The text of a QR (a photo, or a live frame) -> the fields it carries. Never blocks: no tax id means \"no QR of this document\". */\n const readQr = useCallback(\n async (text: string | null) => {\n if (!spec) return\n if (!text) return setPhase({ kind: 'error', code: 'no_qr' })\n const eng = await import('@asteby/storefront/fiscal-document')\n const x = eng.extractIdentityDocument('', spec, {\n catalogs: region.fiscal_id ? eng.catalogsFromRegion(region.fiscal_id) : {},\n qr: text,\n ...(now ? { now: now() } : {}),\n })\n if (!x.fields.tax_id) return setPhase({ kind: 'error', code: 'no_qr' })\n const evidence = eng.buildDocumentEvidence(x, { sha256: null, source: 'qr' })\n showExtraction(summarizeExtraction(x, evidence, region.fiscal_id?.regimes.map((r) => r.code)))\n },\n [spec, region, now, showExtraction],\n )\n\n const readImage = useCallback(\n async (file: File) => {\n if (!spec) return\n if (file.size > spec.max_bytes) return setPhase({ kind: 'error', code: 'too_large', sizeLimit: spec.max_bytes })\n const ctl = new AbortController()\n abort.current = ctl\n setPhase({ kind: 'reading', fileName: file.name })\n setLive(fill(m.reading, { document: documentName }))\n try {\n const eng = await import('@asteby/storefront/fiscal-document')\n const text = await eng.decodeImageQr(file, { maxBytes: spec.max_bytes, signal: ctl.signal })\n if (ctl.signal.aborted) return\n await readQr(text)\n } catch (err) {\n if (ctl.signal.aborted) return\n const code = (err as { code?: string } | null)?.code\n setLive('')\n setPhase({ kind: 'error', code: code === 'too_large' ? 'too_large' : code === 'not_image' ? 'not_image' : 'unreadable', sizeLimit: spec.max_bytes })\n } finally {\n if (abort.current === ctl) abort.current = null\n if (photoInput.current) photoInput.current.value = ''\n }\n },\n [spec, documentName, m.reading, readQr],\n )\n\n const camera = useCameraQr({\n active: cameraActive,\n onCode: (text) => {\n // \"Code read. Review your details\": one announcement for the camera path (the review has its own focus).\n void readQr(text)\n .then(() => setLive(`${m.scan.cameraRead}. ${m.done}`))\n .catch(() => setPhase({ kind: 'error', code: 'unreadable' }))\n },\n })\n\n const read = useCallback(\n async (file: File) => {\n if (!spec) return\n if (imageMode && isImage(file)) return readImage(file)\n if (!isPdf(file, spec.accept ?? [])) return setPhase({ kind: 'error', code: 'not_pdf' })\n if (file.size > spec.max_bytes) return setPhase({ kind: 'error', code: 'too_large', sizeLimit: spec.max_bytes })\n const ctl = new AbortController()\n abort.current = ctl\n setPhase({ kind: 'reading', fileName: file.name })\n setLive(fill(m.reading, { document: documentName }))\n try {\n // On demand: pdf.js is not in the main bundle, it loads here.\n const eng = await import('@asteby/storefront/fiscal-document')\n const { text, sha256 } = await eng.readPdfText(file, {\n maxBytes: spec.max_bytes,\n ...(spec.max_pages ? { maxPages: spec.max_pages } : {}),\n ...(workerSrc ? { workerSrc } : {}),\n signal: ctl.signal,\n })\n if (ctl.signal.aborted) return\n // The QR is a best-effort cross-check; it never blocks.\n const qr = await eng.decodePdfQr(file, { ...(workerSrc ? { workerSrc } : {}), signal: ctl.signal }).catch(() => null)\n if (ctl.signal.aborted) return\n const x = eng.extractIdentityDocument(text, spec, {\n catalogs: region.fiscal_id ? eng.catalogsFromRegion(region.fiscal_id) : {},\n qr,\n ...(now ? { now: now() } : {}),\n })\n const evidence = eng.buildDocumentEvidence(x, { sha256, source: 'pdf_client' })\n const sum = summarizeExtraction(x, evidence, region.fiscal_id?.regimes.map((r) => r.code))\n showExtraction(sum)\n } catch (err) {\n if (ctl.signal.aborted) return\n const code = (err as { code?: string } | null)?.code\n setLive('')\n setPhase({\n kind: 'error',\n code: code === 'not_pdf' || code === 'too_large' || code === 'no_text' || code === 'password' ? code : 'unreadable',\n sizeLimit: spec.max_bytes,\n })\n } finally {\n if (abort.current === ctl) abort.current = null\n if (fileInput.current) fileInput.current.value = ''\n }\n },\n [spec, workerSrc, region, now, documentName, m.reading, imageMode, readImage, showExtraction],\n )\n\n if (!spec) return null\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n setDragging(false)\n const f = e.dataTransfer?.files?.[0]\n if (f) void read(f)\n }\n\n const confirm = () => {\n const problems = validateFiscalValues(region, values, personTypeResolver(region.fiscal_id, personTypeOf))\n const keys = Object.keys(problems) as FiscalFieldName[]\n if (keys.length) {\n const labels: Record<FiscalFieldName, string> = {\n tax_id: region.fiscal_id?.label || all.fields.taxId,\n legal_name: all.fields.legalName,\n postal_code: all.fields.postalCode,\n tax_regime: all.fields.regime,\n use: all.fields.use,\n }\n const item = (f: FiscalFieldName): ErrorSummaryItem => {\n const p = problems[f]!\n const msg =\n p === 'required'\n ? all.fields.errors.required\n : p === 'format'\n ? f === 'tax_id'\n ? fill(all.fields.errors.taxIdFormat, { kind: region.fiscal_id?.label ?? '' })\n : fill(all.fields.errors.postalFormat, { example: region.address?.postal_code?.example ?? '' })\n : p === 'person_type'\n ? all.fields.errors.personType\n : p === 'use_not_allowed'\n ? all.fields.errors.useNotAllowed\n : all.fields.errors.unknown\n return { name: `${namePrefix}.${f}`, id: `sf-reader-${reactId}-${f}`, label: labels[f], message: msg }\n }\n setSummary(keys.map(item))\n setSummaryKey((k) => k + 1)\n return\n }\n setSummary(null)\n const ev = phase.kind === 'review' ? (phase.extraction?.evidence ?? null) : null\n onConfirm({ values, evidence: ev, save: !!canSave && save })\n }\n\n const errorsByName: FieldErrors = { ...fieldErrors }\n for (const s of summary ?? []) errorsByName[s.name] = s.message\n\n // ---- views ------------------------------------------------------------------------------------------------------\n const privacy = serverUpload && !hydrated ? m.privacyServer : m.privacyBrowser\n\n const idle = (\n <div className={cx.root} data-sf-reader data-state=\"idle\">\n <h3 data-sf-reader-title>{fill(m.title, { document: documentName })}</h3>\n {spec.help ? <p data-sf-reader-help>{spec.help}</p> : null}\n <label\n htmlFor={inputId}\n className={dragging ? cx.zoneActive : cx.zone}\n data-sf-reader-zone\n data-dragging={dragging ? '' : undefined}\n onDragOver={(e) => {\n e.preventDefault()\n setDragging(true)\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={onDrop}\n >\n <span aria-hidden=\"true\" data-sf-reader-icon>\n ⬆\n </span>\n <span data-sf-reader-drop>{dragging ? m.dropActive : m.dropHint}</span>\n <span data-sf-reader-choose>{m.choose}</span>\n <input\n ref={fileInput}\n id={inputId}\n type=\"file\"\n // With JavaScript the file never travels with the form; the name only exists for the no-JS upload.\n name={serverUpload && !hydrated ? 'document' : undefined}\n accept={accept}\n aria-describedby={helpId}\n data-sf-reader-input\n onChange={(e) => {\n const f = e.target.files?.[0]\n if (f) void read(f)\n }}\n />\n </label>\n {imageMode ? (\n <div className={cx.actions} data-sf-reader-scan>\n <input\n ref={photoInput}\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n hidden\n tabIndex={-1}\n aria-label={m.scan.photo}\n data-sf-reader-photo-input\n onChange={(e) => {\n const f = e.target.files?.[0]\n if (f) void readImage(f)\n }}\n />\n <button type=\"button\" className={cx.secondary} onClick={() => photoInput.current?.click()} data-sf-reader-photo>\n {m.scan.photo}\n </button>\n {hydrated && cameraSupported() ? (\n <button type=\"button\" className={cx.secondary} onClick={() => setPhase({ kind: 'camera' })} data-sf-reader-camera>\n {m.scan.camera}\n </button>\n ) : null}\n </div>\n ) : null}\n <p id={helpId} className={cx.privacy} data-sf-reader-privacy>\n {privacy}\n </p>\n {serverUpload ? (\n <noscript>\n <button type=\"submit\" name=\"intent\" value=\"extract-document\" formEncType=\"multipart/form-data\" formMethod=\"post\" formNoValidate className={cx.secondary} data-sf-reader-upload>\n {m.uploadServer}\n </button>\n </noscript>\n ) : null}\n <p data-sf-reader-links>\n {spec.obtain_url ? (\n <a href={spec.obtain_url} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-reader-obtain>\n {m.obtain}\n </a>\n ) : null}\n <button type=\"button\" className={cx.link} onClick={openManual} data-sf-reader-manual>\n {m.manual}\n </button>\n </p>\n </div>\n )\n\n const reading = phase.kind === 'reading' && (\n <div className={cx.root} data-sf-reader data-state=\"reading\">\n <p className={cx.status} data-sf-reader-reading>\n <span aria-hidden=\"true\" data-sf-reader-spinner />\n {fill(m.reading, { document: documentName })} <span data-sf-reader-file>{phase.fileName}</span>\n </p>\n <button type=\"button\" className={cx.secondary} onClick={cancel} data-sf-reader-cancel>\n {m.cancel}\n </button>\n </div>\n )\n\n const cameraView = phase.kind === 'camera' && (\n <div className={cx.root} data-sf-reader data-state=\"camera\">\n <h3 data-sf-reader-title>{m.scan.cameraTitle}</h3>\n <div data-sf-reader-viewfinder>\n {/* The stream is shown, never recorded; it stops when this view closes. */}\n <video ref={camera.videoRef} playsInline muted aria-label={m.scan.cameraGuide} data-sf-reader-video />\n <span aria-hidden=\"true\" data-sf-reader-frame />\n </div>\n <p className={cx.status} data-sf-reader-camera-status={camera.status}>\n {camera.status === 'denied'\n ? m.scan.cameraDenied\n : camera.status === 'unsupported'\n ? m.scan.cameraUnavailable\n : camera.status === 'starting'\n ? m.scan.cameraStarting\n : m.scan.cameraGuide}\n </p>\n <p className={cx.privacy} data-sf-reader-privacy>\n {privacy}\n </p>\n <div className={cx.actions} data-sf-reader-actions>\n <button type=\"button\" className={cx.secondary} onClick={() => photoInput.current?.click()} data-sf-reader-photo>\n {m.scan.choosePhoto}\n </button>\n <button\n type=\"button\"\n className={cx.primary}\n onClick={() => {\n camera.stop()\n setPhase({ kind: 'idle' })\n }}\n data-sf-reader-camera-close\n >\n {m.scan.closeCamera}\n </button>\n </div>\n <input\n ref={photoInput}\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n hidden\n tabIndex={-1}\n aria-label={m.scan.choosePhoto}\n data-sf-reader-photo-input\n onChange={(e) => {\n const f = e.target.files?.[0]\n if (f) void readImage(f)\n }}\n />\n </div>\n )\n\n const errored = phase.kind === 'error' && (\n <div className={cx.root} data-sf-reader data-state=\"error\">\n <div ref={errorRef} role=\"alert\" tabIndex={-1} className={cx.error} data-sf-reader-error={phase.code}>\n {fill(m.errors[phase.code], { size: mib(phase.sizeLimit ?? spec.max_bytes) })}\n </div>\n <div className={cx.actions} data-sf-reader-actions>\n <button type=\"button\" className={cx.primary} onClick={openManual} data-sf-reader-manual>\n {m.manual}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => setPhase({ kind: 'idle' })} data-sf-reader-retry>\n {m.changeFile}\n </button>\n </div>\n </div>\n )\n\n const review = phase.kind === 'review' && (\n <div className={cx.root} data-sf-reader data-state=\"review\">\n <h3 ref={reviewRef} tabIndex={-1} data-sf-reader-title>\n {m.reviewTitle}\n </h3>\n <p data-sf-reader-help>{m.reviewHint}</p>\n <ErrorSummary\n items={summary}\n focusKey={summaryKey}\n locale={locale}\n title={summary ? (summary.length === 1 ? m.summaryTitleOne : fill(m.summaryTitleMany, { n: summary.length })) : undefined}\n />\n {phase.extraction ? <Warnings x={phase.extraction} m={m} cx={cx} /> : null}\n <FiscalIdentityFields\n region={region}\n values={values}\n onChange={setValues}\n errors={errorsByName}\n idPrefix={`sf-reader-${reactId}`}\n namePrefix={namePrefix}\n fromDocument={phase.extraction?.from_document ?? []}\n documentName={documentName}\n regimeCandidates={phase.extraction && phase.extraction.regime_candidates.length > 1 ? phase.extraction.regime_candidates : undefined}\n suggestedUse={suggestedUse}\n {...(personTypeOf ? { personTypeOf } : {})}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n hideLegend\n />\n {phase.extraction?.evidence ? <input type=\"hidden\" name={`${namePrefix}.document`} value={JSON.stringify(phase.extraction.evidence)} /> : null}\n {canSave ? (\n <label data-sf-reader-save>\n <input type=\"checkbox\" name={`${namePrefix}.save`} checked={save} onChange={(e) => setSave(e.target.checked)} />\n <span>\n {m.saveToAccount}\n <span data-sf-field-hint> {m.saveConsent}</span>\n </span>\n </label>\n ) : null}\n <div className={cx.actions} data-sf-reader-actions>\n <button type=\"button\" className={cx.primary} onClick={confirm} data-sf-reader-confirm>\n {confirmLabel ?? m.confirm}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => setPhase({ kind: 'idle' })} data-sf-reader-retry>\n {m.changeFile}\n </button>\n </div>\n </div>\n )\n\n return (\n <div data-sf-document-reader>\n {/* Always mounted so assistive tech announces every change (reading, done). */}\n <div role=\"status\" aria-live=\"polite\" className={cx.status} data-sf-reader-live style={visuallyHidden}>\n {live}\n </div>\n {phase.kind === 'idle' ? idle : null}\n {reading || null}\n {cameraView || null}\n {errored || null}\n {review || null}\n </div>\n )\n}\n\nconst visuallyHidden = { position: 'absolute', width: 1, height: 1, margin: -1, padding: 0, overflow: 'hidden', clip: 'rect(0 0 0 0)', whiteSpace: 'nowrap', border: 0 } as const\n\nfunction Warnings({ x, m, cx }: { x: FiscalExtractionSummary; m: FiscalMessages['reader']; cx: IdentityDocumentReaderClassNames }) {\n const items: string[] = []\n if (x.qr_match === false) items.push(m.warnings.qrMismatch)\n if (x.stale === true && x.age_days !== null) items.push(fill(m.warnings.stale, { days: x.age_days }))\n if (x.evidence.source === 'qr') items.push(m.warnings.qrPartial)\n else if (x.regime_candidates.length === 0 && !x.values.tax_regime) items.push(m.warnings.regimeMissing)\n else if (x.missing.some((k) => k !== 'tax_regime' && k !== 'document_id' && k !== 'issued_on')) items.push(m.warnings.fieldsMissing)\n if (!items.length) return null\n return (\n <ul className={cx.warning} data-sf-reader-warnings>\n {items.map((t) => (\n <li key={t} data-sf-reader-warning>\n <span aria-hidden=\"true\">⚠ </span>\n {t}\n </li>\n ))}\n </ul>\n )\n}\n","/**\n * \"Scan your tax document\": the entry point of the invoice flows (request an invoice, checkout, add a fiscal profile).\n * A primary button that names the region's document (`IdentityDocumentSpec.label`: another country says its own\n * document) and, under it, \"Enter by hand\". The button opens a bottom sheet with the `IdentityDocumentReader`: choose\n * the PDF, take a photo of the QR or scan it live, review, confirm.\n *\n * Degradation: when the region publishes no document the component renders nothing (the caller shows the plain form).\n * The file, the photo and the camera frames are read on the device and never uploaded (see the reader).\n */\nimport { useId, useRef, useState, type ReactNode } from 'react'\nimport { useModalDialog } from '../dialog.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { IdentityDocumentReader, type FiscalReaderResult, type IdentityDocumentReaderProps } from './document-reader.js'\nimport { fill, fiscalMessages } from './messages.js'\n\nexport type ScanTaxDocumentClassNames = IdentityDocumentReaderProps['classNames'] &\n Partial<Record<'actions' | 'trigger' | 'manual' | 'sheet' | 'sheetPanel' | 'sheetHeader' | 'sheetTitle' | 'sheetClose', string>>\n\nexport type ScanTaxDocumentProps = Omit<IdentityDocumentReaderProps, 'onConfirm' | 'onManual' | 'classNames' | 'confirmLabel'> & {\n /** The buyer confirmed the reviewed data (the sheet is already closed). */\n onConfirm: (result: FiscalReaderResult) => void\n /** The buyer chose to type their data (the sheet is already closed). */\n onManual: () => void\n /** Label of the confirm button inside the sheet. */\n confirmLabel?: ReactNode\n classNames?: ScanTaxDocumentClassNames\n}\n\nexport function ScanTaxDocument(props: ScanTaxDocumentProps) {\n const { onConfirm, onManual, classNames: cx = {}, messages, confirmLabel, ...reader } = props\n const locale = useResolvedLocale(props.locale)\n const m = fiscalMessages(locale, messages).reader\n const spec = props.document ?? props.region.fiscal_id?.documents?.[0]\n const [open, setOpen] = useState(false)\n const titleId = useId()\n const { ref, onBackdropClick } = useModalDialog({ open, onClose: () => setOpen(false) })\n const opener = useRef<HTMLButtonElement>(null)\n if (!spec) return null\n const name = props.documentName ?? spec.label.toLowerCase()\n\n return (\n <div className={cx.actions} data-sf-scan>\n <button ref={opener} type=\"button\" className={cx.trigger ?? cx.primary} onClick={() => setOpen(true)} aria-haspopup=\"dialog\" data-sf-scan-open>\n {fill(m.scan.open, { document: spec.label })}\n </button>\n <button type=\"button\" className={cx.manual ?? cx.secondary} onClick={onManual} data-sf-scan-manual>\n {m.scan.manual}\n </button>\n {open ? (\n <dialog ref={ref} role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId} onClick={onBackdropClick} onClose={() => setOpen(false)} className={cx.sheet} data-sf-scan-sheet>\n <div className={cx.sheetPanel} data-sf-scan-panel>\n <div className={cx.sheetHeader} data-sf-scan-header>\n <h2 id={titleId} className={cx.sheetTitle} data-sf-scan-title>\n {fill(m.scan.title, { document: name })}\n </h2>\n <button type=\"button\" className={cx.sheetClose} onClick={() => setOpen(false)} aria-label={m.scan.close} data-sf-scan-close data-sf-autofocus>\n <span aria-hidden=\"true\">✕</span>\n </button>\n </div>\n <IdentityDocumentReader\n {...reader}\n locale={locale}\n {...(messages ? { messages } : {})}\n {...(confirmLabel ? { confirmLabel } : {})}\n classNames={cx}\n onConfirm={(result) => {\n setOpen(false)\n onConfirm(result)\n }}\n onManual={() => {\n setOpen(false)\n onManual()\n }}\n />\n </div>\n </dialog>\n ) : null}\n </div>\n )\n}\n","/**\n * \"I need an invoice\" for the checkout (collapsed by default). Expanded it shows, in this order:\n * - the buyer's saved fiscal data as a card (masked tax id) with \"Change\" / \"Use other details\";\n * - otherwise the document reader (upload the tax document, review, confirm) with manual entry as the way out;\n * - or the plain fields when the store reads no document.\n * It reports the state with `onChange` (including the label for the pay button: \"Pay and invoice\") and posts the data as\n * `invoice.*` fields of the surrounding `<form>`, so the checkout action can send it with `createInvoiceAction`.\n */\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { FiscalDocumentEvidence, FiscalIdentity, IdentityDocumentSpec, InvoiceRequest, InvoicingCapabilities } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { IdentityDocumentReader, type IdentityDocumentReaderClassNames } from './document-reader.js'\nimport { entryLabel, maskTaxId, toInvoiceRequest, validateFiscalValues, type FiscalRegion } from './format.js'\nimport { FiscalIdentityFields } from './identity-fields.js'\nimport { fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\nimport type { FiscalActionData, FiscalFieldValues } from './types.js'\n\nexport type InvoiceToggleState = {\n requested: boolean\n /** The data to send as `CheckoutInput.invoice` / `carts.setInvoice`; `null` when none is requested or it is not ready. */\n invoice: InvoiceRequest | null\n /** All the data is there and valid for the region (the server still checks it). */\n ready: boolean\n source: 'profile' | 'document' | 'manual' | null\n /** \"Pay\" or \"Pay and invoice\": the label for the pay button. */\n payLabel: string\n}\n\nexport type InvoiceToggleClassNames = IdentityDocumentReaderClassNames & Partial<Record<'toggle' | 'body' | 'card' | 'cardRow' | 'cardTitle' | 'unavailable', string>>\n\nexport type InvoiceToggleProps = {\n region: FiscalRegion & { country_code?: string }\n /** `loadFiscalContext(...).invoicing`. `available: false` or `checkout: 'off'` renders nothing. */\n capabilities?: InvoicingCapabilities | null\n /** The buyer's saved fiscal data (`customer.fiscal`). */\n profile?: FiscalIdentity | null\n defaultRequested?: boolean\n onChange?: (state: InvoiceToggleState) => void\n /** Result of the shop's action (server errors by field, a document read without JS). */\n data?: FiscalActionData | null\n /** The buyer is signed in: they can save the data to their account. */\n canSave?: boolean\n workerSrc?: string\n /** Enables the no-JS document upload. */\n serverUpload?: boolean\n /** Link (e.g. `?invoice=1`) that opens the section when JavaScript is not available. */\n noJsHref?: string\n document?: IdentityDocumentSpec\n documentName?: string\n personTypeOf?: (taxId: string) => string | null\n /** Label of the pay button when no invoice is asked. Default from the messages. */\n payLabel?: string\n namePrefix?: string\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: InvoiceToggleClassNames\n now?: () => Date\n}\n\ntype Mode = 'profile' | 'edit-profile' | 'read' | 'manual'\n\nconst profileValues = (p: FiscalIdentity): FiscalFieldValues => ({\n tax_id: p.tax_id,\n legal_name: p.legal_name,\n postal_code: p.postal_code,\n tax_regime: p.tax_regime,\n use: p.invoice_use ?? '',\n})\n\nexport function InvoiceToggle(props: InvoiceToggleProps) {\n const { region, capabilities, profile, onChange, data, canSave, workerSrc, serverUpload, noJsHref, personTypeOf, namePrefix = 'invoice', messages, classNames: cx = {}, now } = props\n const locale = useResolvedLocale(props.locale)\n const all = fiscalMessages(locale, messages)\n const m = all.toggle\n const fid = region.fiscal_id\n // `identity_documents` lists the kinds the store reads; empty means none. Without capabilities, what the region publishes.\n const spec = props.document ?? fid?.documents?.find((d) => !capabilities || capabilities.identity_documents.includes(d.kind)) ?? undefined\n const canRead = !!spec\n const usable = !!profile && !!profile.invoice_use\n const startMode: Mode = data?.extraction ? 'read' : usable ? 'profile' : profile ? 'edit-profile' : canRead ? 'read' : 'manual'\n\n const bodyId = `sf-invoice-${useId().replace(/:/g, '')}`\n const [requested, setRequested] = useState(!!props.defaultRequested || !!data?.extraction || !!data?.fieldErrors)\n const [mode, setMode] = useState<Mode>(startMode)\n const [values, setValues] = useState<FiscalFieldValues>(profile ? profileValues(profile) : { tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n const [confirmed, setConfirmed] = useState<{ values: FiscalFieldValues; evidence: FiscalDocumentEvidence | null; save: boolean } | null>(null)\n const [save, setSave] = useState(false)\n const emit = useRef(onChange)\n emit.current = onChange\n\n const payDefault = props.payLabel ?? m.payDefault\n const state = useMemo<InvoiceToggleState>(() => {\n if (!requested) return { requested: false, invoice: null, ready: false, source: null, payLabel: payDefault }\n const country = region.country_code\n const label = m.payAndInvoice\n if (mode === 'profile' && profile) {\n const inv = toInvoiceRequest(profileValues(profile), profile.country_code || country)\n if (profile.document) inv.document = profile.document\n return { requested: true, invoice: inv, ready: true, source: 'profile', payLabel: label }\n }\n if (mode === 'read') {\n if (!confirmed) return { requested: true, invoice: null, ready: false, source: null, payLabel: label }\n const inv = toInvoiceRequest(confirmed.values, country)\n if (confirmed.evidence) inv.document = confirmed.evidence\n if (confirmed.save) inv.save = true\n return { requested: true, invoice: inv, ready: true, source: confirmed.evidence ? 'document' : 'manual', payLabel: label }\n }\n const ready = Object.keys(validateFiscalValues(region, values, personTypeOf)).length === 0\n const inv = toInvoiceRequest(values, country)\n if (save) inv.save = true\n return { requested: true, invoice: ready ? inv : null, ready, source: 'manual', payLabel: label }\n }, [requested, mode, profile, confirmed, values, save, region, personTypeOf, payDefault, m.payAndInvoice])\n\n const key = JSON.stringify(state)\n useEffect(() => {\n emit.current?.(state)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key])\n\n if (capabilities && (!capabilities.available || capabilities.checkout === 'off')) return null\n\n const profileCard = profile && (\n <div className={cx.card} data-sf-invoice-profile>\n <p className={cx.cardTitle} data-sf-invoice-profile-title>\n {m.profileTitle}\n </p>\n <dl>\n <Row cx={cx} label={fid?.label || m.fieldsOf.taxId} value={<span data-sf-masked>{maskTaxId(profile.tax_id)}</span>} />\n <Row cx={cx} label={m.fieldsOf.legalName} value={profile.legal_name} />\n <Row cx={cx} label={m.fieldsOf.postalCode} value={profile.postal_code} />\n <Row cx={cx} label={m.fieldsOf.regime} value={labelOf(fid?.regimes, profile.tax_regime, locale)} />\n <Row cx={cx} label={m.fieldsOf.use} value={labelOf(fid?.invoice_uses, profile.invoice_use ?? '', locale)} />\n </dl>\n {/* The saved data also travels as fields, so the checkout works without JavaScript. */}\n <input type=\"hidden\" name={`${namePrefix}.tax_id`} value={profile.tax_id} />\n <input type=\"hidden\" name={`${namePrefix}.legal_name`} value={profile.legal_name} />\n <input type=\"hidden\" name={`${namePrefix}.postal_code`} value={profile.postal_code} />\n <input type=\"hidden\" name={`${namePrefix}.tax_regime`} value={profile.tax_regime} />\n <input type=\"hidden\" name={`${namePrefix}.use`} value={profile.invoice_use ?? ''} />\n {profile.document ? <input type=\"hidden\" name={`${namePrefix}.document`} value={JSON.stringify(profile.document)} /> : null}\n <div className={cx.actions} data-sf-invoice-actions>\n <button type=\"button\" className={cx.secondary} onClick={() => setMode('edit-profile')} data-sf-invoice-change>\n {m.change}\n </button>\n <button\n type=\"button\"\n className={cx.link}\n onClick={() => {\n setValues({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n setConfirmed(null)\n setMode(canRead ? 'read' : 'manual')\n }}\n data-sf-invoice-other\n >\n {m.useOther}\n </button>\n </div>\n </div>\n )\n\n const saveBox = canSave ? (\n <label data-sf-invoice-save>\n <input type=\"checkbox\" name={`${namePrefix}.save`} checked={save} onChange={(e) => setSave(e.target.checked)} />\n <span>{all.reader.saveToAccount}</span>\n </label>\n ) : null\n const backToProfile =\n profile && usable && mode !== 'profile' ? (\n <button\n type=\"button\"\n className={cx.link}\n onClick={() => {\n setValues(profileValues(profile))\n setMode('profile')\n }}\n data-sf-invoice-back\n >\n {m.useSaved}\n </button>\n ) : null\n\n const body = !requested ? null : (\n <div id={bodyId} className={cx.body} data-sf-invoice-body>\n <input type=\"hidden\" name={`${namePrefix}.requested`} value=\"true\" />\n {mode === 'profile' ? (\n profileCard\n ) : mode === 'read' ? (\n <>\n <IdentityDocumentReader\n region={region}\n {...(spec ? { document: spec } : {})}\n {...(workerSrc ? { workerSrc } : {})}\n {...(data ? { data } : {})}\n {...(canSave !== undefined ? { canSave } : {})}\n {...(serverUpload ? { serverUpload } : {})}\n {...(props.documentName ? { documentName: props.documentName } : {})}\n {...(personTypeOf ? { personTypeOf } : {})}\n {...(now ? { now } : {})}\n onManual={() => {\n setValues({ tax_id: '', legal_name: '', postal_code: '', tax_regime: '', use: '' })\n setMode('manual')\n }}\n onConfirm={(r) => {\n setConfirmed(r)\n }}\n namePrefix={namePrefix}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n />\n {confirmed ? (\n <p role=\"status\" data-sf-invoice-confirmed>\n <span aria-hidden=\"true\">✓ </span>\n {m.profileTitle}\n </p>\n ) : null}\n {backToProfile}\n </>\n ) : (\n <>\n <h3 className={cx.cardTitle}>{m.manualTitle}</h3>\n <FiscalIdentityFields\n region={region}\n values={values}\n onChange={setValues}\n errors={Object.fromEntries(Object.entries(data?.fieldErrors ?? {}).map(([k, v]) => [k, all.server.errors[v] ?? v]))}\n namePrefix={namePrefix}\n {...(personTypeOf ? { personTypeOf } : {})}\n locale={locale}\n {...(messages ? { messages } : {})}\n classNames={cx}\n hideLegend\n />\n {saveBox}\n <p className={cx.privacy} data-sf-invoice-privacy>\n {m.privacy}\n </p>\n {backToProfile}\n </>\n )}\n </div>\n )\n\n return (\n <section className={cx.toggle} data-sf-invoice-toggle aria-label={m.label}>\n <label data-sf-invoice-label>\n <input\n type=\"checkbox\"\n name={`${namePrefix}.want`}\n checked={requested}\n aria-controls={requested ? bodyId : undefined}\n onChange={(e) => setRequested(e.target.checked)}\n />\n <span>{m.label}</span>\n </label>\n {noJsHref && !requested ? (\n <noscript>\n <a href={noJsHref} data-sf-invoice-nojs>\n {m.label}\n </a>\n </noscript>\n ) : null}\n {body}\n </section>\n )\n}\n\nfunction Row({ label, value, cx }: { label: string; value: ReactNode; cx: InvoiceToggleClassNames }) {\n return (\n <div className={cx.cardRow} data-sf-invoice-row>\n <dt>{label}</dt>\n <dd>{value}</dd>\n </div>\n )\n}\n\nfunction labelOf(list: { code: string; label: string; label_en?: string; person_types: string[] }[] | undefined, code: string, locale: string): string {\n const e = list?.find((x) => x.code === code)\n return e ? `${e.code} · ${entryLabel(e, locale)}` : code\n}\n","/**\n * The invoice of an order, in one card with the state the buyer needs to understand and the one next step. It reads an\n * `InvoiceSummary` (`stage`, `action`, `can_request`, `blocked_reason`, `reason_code`, links) and never guesses: the\n * server decides what is possible. While an invoice is being generated it asks the caller to refresh (`onRefresh`)\n * every 10 s for at most a minute, then stops and says so.\n */\nimport { useCallback, useEffect, useId, useRef, useState, type ReactNode } from 'react'\nimport type { InvoiceSummary } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { fill, fiscalMessages, type DeepPartial, type FiscalMessages } from './messages.js'\n\nexport type InvoiceCardState =\n | 'not_requested'\n | 'awaiting_payment'\n | 'processing'\n | 'issued'\n | 'needs_data'\n | 'needs_review'\n | 'window_closed'\n | 'unavailable'\n | 'cancelled'\n\n/** Which of the card's states an invoice is in. `available: false` (the store does not invoice) wins over everything. */\nexport function invoiceCardState(invoice: InvoiceSummary | null | undefined, available = true): InvoiceCardState {\n if (!available) return 'unavailable'\n if (!invoice) return 'not_requested'\n const stage = invoice.stage ?? ''\n const blocked = invoice.blocked_reason ?? ''\n if (stage === 'issued' || invoice.status === 'issued' || (invoice.action === 'download' && (invoice.url || invoice.xml_url))) return 'issued'\n if (stage === 'cancelled') return 'cancelled'\n if (stage === 'needs_data' || invoice.action === 'correct_data') return 'needs_data'\n if (stage === 'needs_review' || invoice.action === 'contact_store') return 'needs_review'\n if (stage === 'window_closed' || blocked === 'window_closed') return 'window_closed'\n if (stage === 'awaiting_payment' || blocked === 'awaiting_payment') return 'awaiting_payment'\n if (stage === 'queued' || stage === 'issuing' || stage === 'retrying' || stage === 'requested') return 'processing'\n if (blocked === 'not_invoiceable' || blocked === 'unavailable') return 'unavailable'\n if (invoice.can_request === false && blocked) return 'unavailable'\n return 'not_requested'\n}\n\nexport type InvoiceStatusCardClassNames = Partial<Record<'root' | 'title' | 'body' | 'actions' | 'primary' | 'secondary' | 'link' | 'meta', string>>\n\nexport type InvoiceStatusCardProps = {\n invoice?: InvoiceSummary | null\n /** `capabilities.invoicing.available`. `false`: \"Invoice not available\". */\n available?: boolean\n /** The buyer taps \"Request invoice\". Shown when `invoice.can_request !== false`. Without it, `requestHref` is a link. */\n onRequest?: () => void\n requestHref?: string\n /** \"Fix and retry\". Without it, `correctHref` is a link. */\n onCorrect?: () => void\n correctHref?: string\n /** Called while the invoice is processing (every `refreshMs`, for at most `refreshForMs`). Reload the order there. */\n onRefresh?: () => void\n refreshMs?: number\n refreshForMs?: number\n /** How to reach the store when it must review: an email, a phone or a URL. */\n contact?: { email?: string; phone?: string; url?: string }\n locale?: string\n messages?: DeepPartial<FiscalMessages>\n classNames?: InvoiceStatusCardClassNames\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4\n}\n\nexport function InvoiceStatusCard(props: InvoiceStatusCardProps) {\n const { invoice, available = true, onRequest, requestHref, onCorrect, correctHref, onRefresh, refreshMs = 10_000, refreshForMs = 60_000, contact, messages, classNames: cx = {}, headingLevel = 3 } = props\n const locale = useResolvedLocale(props.locale)\n const m = fiscalMessages(locale, messages).status\n const state = invoiceCardState(invoice, available)\n const titleId = `sf-invoice-card-${useId().replace(/:/g, '')}`\n const [tired, setTired] = useState(false)\n const refresh = useRef(onRefresh)\n refresh.current = onRefresh\n\n // Refresh while it is processing, then give up quietly (the card says it is still going).\n useEffect(() => {\n setTired(false)\n if (state !== 'processing' || !refresh.current) return\n const t0 = Date.now()\n const id = setInterval(() => {\n if (Date.now() - t0 >= refreshForMs) {\n clearInterval(id)\n setTired(true)\n return\n }\n refresh.current?.()\n }, refreshMs)\n return () => clearInterval(id)\n }, [state, refreshMs, refreshForMs])\n\n const manualRefresh = useCallback(() => {\n setTired(false)\n refresh.current?.()\n }, [])\n\n const H = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n const contactLine = contact?.email ?? contact?.phone ?? contact?.url\n const reason = invoice?.reason_code ? (m.reasons[invoice.reason_code] ?? m.reasons.default) : m.reasons.default\n\n let title: string\n let body: ReactNode = null\n let actions: ReactNode = null\n let live = false\n\n switch (state) {\n case 'not_requested': {\n title = m.title\n body = <p className={cx.body}>{m.requestHelp}</p>\n const can = invoice?.can_request !== false\n if (can && (onRequest || requestHref)) {\n actions = onRequest ? (\n <button type=\"button\" className={cx.primary} onClick={onRequest} data-sf-invoice-request>\n {m.request}\n </button>\n ) : (\n <a href={requestHref} className={cx.primary} data-sf-invoice-request>\n {m.request}\n </a>\n )\n }\n break\n }\n case 'awaiting_payment':\n title = m.awaitingTitle\n body = <p className={cx.body}>{m.awaitingBody}</p>\n break\n case 'processing':\n live = true\n title = m.processingTitle\n body = <p className={cx.body}>{tired ? m.processingSlow : m.processingBody}</p>\n actions = onRefresh ? (\n <button type=\"button\" className={cx.secondary} onClick={manualRefresh} data-sf-invoice-refresh>\n {m.refresh}\n </button>\n ) : null\n break\n case 'issued':\n title = m.issuedTitle\n body = (\n <>\n <p className={cx.body}>{m.issuedBody}</p>\n {invoice?.folio ? (\n <p className={cx.meta} data-sf-invoice-folio>\n <span>{m.folio}: </span>\n <code>{invoice.folio}</code>\n </p>\n ) : null}\n </>\n )\n actions = (\n <>\n {invoice?.url ? (\n <a href={invoice.url} className={cx.primary} rel=\"noopener noreferrer\" download data-sf-invoice-pdf>\n {m.pdf}\n </a>\n ) : null}\n {invoice?.xml_url ? (\n <a href={invoice.xml_url} className={cx.secondary} rel=\"noopener noreferrer\" download data-sf-invoice-xml>\n {m.xml}\n </a>\n ) : null}\n </>\n )\n break\n case 'needs_data':\n title = m.needsDataTitle\n body = (\n <>\n <p className={cx.body}>{m.needsDataBody}</p>\n <p className={cx.meta} data-sf-invoice-reason>\n {reason}\n </p>\n </>\n )\n actions = onCorrect ? (\n <button type=\"button\" className={cx.primary} onClick={onCorrect} data-sf-invoice-correct>\n {m.correct}\n </button>\n ) : correctHref ? (\n <a href={correctHref} className={cx.primary} data-sf-invoice-correct>\n {m.correct}\n </a>\n ) : null\n break\n case 'needs_review':\n title = m.reviewTitle\n body = (\n <>\n <p className={cx.body}>{m.reviewBody}</p>\n {contactLine ? <p className={cx.meta}>{fill(m.contactBy, { contact: contactLine })}</p> : null}\n </>\n )\n actions = contact?.url ? (\n <a href={contact.url} className={cx.secondary} data-sf-invoice-contact>\n {m.contact}\n </a>\n ) : contact?.email ? (\n <a href={`mailto:${contact.email}`} className={cx.secondary} data-sf-invoice-contact>\n {m.contact}\n </a>\n ) : null\n break\n case 'window_closed':\n title = m.windowTitle\n body = <p className={cx.body}>{m.windowBody}</p>\n break\n case 'cancelled':\n title = m.cancelledTitle\n body = <p className={cx.body}>{m.cancelledBody}</p>\n break\n default:\n title = m.unavailableTitle\n body = <p className={cx.body}>{m.unavailableBody}</p>\n }\n\n return (\n <section className={cx.root} data-sf-invoice-card data-state={state} data-stage={invoice?.stage || undefined} aria-labelledby={titleId}>\n <H id={titleId} className={cx.title} data-sf-invoice-title>\n <span aria-hidden=\"true\" data-sf-invoice-icon>\n {ICON[state]}\n </span>{' '}\n {title}\n </H>\n {/* Announces the change when an invoice moves on while the buyer is looking at the page. */}\n <div aria-live={live || state === 'issued' ? 'polite' : undefined} data-sf-invoice-live>\n {body}\n </div>\n {actions ? (\n <div className={cx.actions} data-sf-invoice-actions>\n {actions}\n </div>\n ) : null}\n </section>\n )\n}\n\n/** A shape per state, so the state never depends on color alone. */\nconst ICON: Record<InvoiceCardState, string> = {\n not_requested: '○',\n awaiting_payment: '◔',\n processing: '↻',\n issued: '✓',\n needs_data: '!',\n needs_review: '◐',\n window_closed: '–',\n unavailable: '–',\n cancelled: '×',\n}\n"]}
|
|
@@ -30,7 +30,7 @@ type FiscalExtractionSummary = {
|
|
|
30
30
|
evidence: FiscalDocumentEvidence;
|
|
31
31
|
};
|
|
32
32
|
/** Why a document could not be used. `server` is only for the no-JS upload. */
|
|
33
|
-
type FiscalReadError = 'not_pdf' | 'too_large' | 'no_text' | 'password' | 'unreadable';
|
|
33
|
+
type FiscalReadError = 'not_pdf' | 'too_large' | 'no_text' | 'password' | 'unreadable' | 'no_qr' | 'not_image';
|
|
34
34
|
type FiscalIntent = 'set-invoice' | 'save-profile' | 'request-invoice' | 'clear-profile' | 'extract-document';
|
|
35
35
|
type FiscalErrorCode =
|
|
36
36
|
/** A field was rejected (`field` says which, like `invoice.tax_regime`). */
|
|
@@ -30,7 +30,7 @@ type FiscalExtractionSummary = {
|
|
|
30
30
|
evidence: FiscalDocumentEvidence;
|
|
31
31
|
};
|
|
32
32
|
/** Why a document could not be used. `server` is only for the no-JS upload. */
|
|
33
|
-
type FiscalReadError = 'not_pdf' | 'too_large' | 'no_text' | 'password' | 'unreadable';
|
|
33
|
+
type FiscalReadError = 'not_pdf' | 'too_large' | 'no_text' | 'password' | 'unreadable' | 'no_qr' | 'not_image';
|
|
34
34
|
type FiscalIntent = 'set-invoice' | 'save-profile' | 'request-invoice' | 'clear-profile' | 'extract-document';
|
|
35
35
|
type FiscalErrorCode =
|
|
36
36
|
/** A field was rejected (`field` says which, like `invoice.tax_regime`). */
|