@alfadocs/ui-kit-debug 1.127.1 → 1.127.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/_chunks/{bill-line-table-BRxX0Awq.js → bill-line-table-CzYzg-Qh.js} +8 -5
  2. package/dist/_chunks/bill-line-table-CzYzg-Qh.js.map +1 -0
  3. package/dist/_chunks/{data-grid-bzvkQ3kc.js → data-grid-C9xlUMLt.js} +9 -5
  4. package/dist/_chunks/data-grid-C9xlUMLt.js.map +1 -0
  5. package/dist/_chunks/{default-tabs-yEfqAPuT.js → default-tabs-DOuHEKI5.js} +3 -3
  6. package/dist/_chunks/{default-tabs-yEfqAPuT.js.map → default-tabs-DOuHEKI5.js.map} +1 -1
  7. package/dist/_chunks/{invoice-upload-list-CgS_TBuX.js → invoice-upload-list-tJY7W1g_.js} +6 -4
  8. package/dist/_chunks/invoice-upload-list-tJY7W1g_.js.map +1 -0
  9. package/dist/_chunks/{toolbar-Co46MEn9.js → toolbar-CC-Ls_eC.js} +2 -2
  10. package/dist/_chunks/{toolbar-Co46MEn9.js.map → toolbar-CC-Ls_eC.js.map} +1 -1
  11. package/dist/agent-catalog.json +1 -1
  12. package/dist/browser-support.js +1 -1
  13. package/dist/components/bill-line-table/bill-line-table.columns.d.ts +7 -3
  14. package/dist/components/bill-line-table/bill-line-table.columns.d.ts.map +1 -1
  15. package/dist/components/bill-line-table/index.js +1 -1
  16. package/dist/components/bill-table/index.js +1 -1
  17. package/dist/components/data-grid/data-grid.variants.d.ts.map +1 -1
  18. package/dist/components/data-grid/index.js +2 -2
  19. package/dist/components/invoice-upload-list/columns.d.ts.map +1 -1
  20. package/dist/components/invoice-upload-list/index.js +1 -1
  21. package/dist/core.css +1 -1
  22. package/dist/index.js +5 -5
  23. package/dist/tokens.css +1 -1
  24. package/package.json +1 -1
  25. package/dist/_chunks/bill-line-table-BRxX0Awq.js.map +0 -1
  26. package/dist/_chunks/data-grid-bzvkQ3kc.js.map +0 -1
  27. package/dist/_chunks/invoice-upload-list-CgS_TBuX.js.map +0 -1
@@ -4,8 +4,8 @@ import { useTranslation as L } from "react-i18next";
4
4
  import { u as Ve } from "./registry-DvAUVLHh.js";
5
5
  import { B as Be } from "./button-DohK_Ak_.js";
6
6
  import { V as x } from "./visually-hidden-BHxEUGyT.js";
7
- import { e as Me } from "./data-grid-bzvkQ3kc.js";
8
- import { D as g } from "./toolbar-Co46MEn9.js";
7
+ import { e as Me } from "./data-grid-C9xlUMLt.js";
8
+ import { D as g } from "./toolbar-CC-Ls_eC.js";
9
9
  import { a as se } from "./format-number-DdzqwMs1.js";
10
10
  import { c as v } from "./index-D2ZczOXr.js";
11
11
  import { R as Fe } from "./row-actions-Dpf9CrCP.js";
@@ -522,7 +522,9 @@ function Rt({
522
522
  id: "total",
523
523
  header: s("invoiceUploadList.column.total", "Total"),
524
524
  align: "end",
525
- size: 96,
525
+ // Room for the longest header word, "GESAMTBETRAG" (de): headers are
526
+ // not hyphenated, and a sortable header does not break its word.
527
+ size: 128,
526
528
  responsiveTier: 1,
527
529
  value: (t) => {
528
530
  const r = de(t.total);
@@ -949,4 +951,4 @@ export {
949
951
  kt as d,
950
952
  et as i
951
953
  };
952
- //# sourceMappingURL=invoice-upload-list-CgS_TBuX.js.map
954
+ //# sourceMappingURL=invoice-upload-list-tJY7W1g_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-upload-list-tJY7W1g_.js","sources":["../../node_modules/lucide-react/dist/esm/icons/scan-search.mjs","../../src/components/invoice-upload-list/invoice-upload-list.agent.ts","../../src/components/invoice-upload-list/invoice-upload-list.variants.ts","../../src/components/invoice-upload-list/types.ts","../../src/components/invoice-upload-list/model.ts","../../src/components/invoice-upload-list/cells.tsx","../../src/components/invoice-upload-list/columns.tsx","../../src/components/invoice-upload-list/handle.ts","../../src/components/invoice-upload-list/invoice-upload-list.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"path\", { d: \"m16 16-1.9-1.9\", key: \"1dq9hf\" }]\n];\nconst ScanSearch = createLucideIcon(\"scan-search\", __iconNode);\n\nexport { __iconNode, ScanSearch as default };\n//# sourceMappingURL=scan-search.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter: InvoiceUploadList. */\n/* */\n/* Works against the curated `InvoiceUploadListHandle`: ids and kit */\n/* shapes only, never the DataGrid handle, a TanStack object, a row */\n/* object or a DOM node. It is the list's only agent surface: the */\n/* DataGrid inside registers none (`registerAgent={false}`). */\n/* */\n/* Safety: selecting, sorting and scrolling change the view (`read`). */\n/* Review opens the host's review dialog and changes nothing by itself */\n/* (`read` + `openWorld`). Load all ready and Load selected hand invoices */\n/* to the host, which loads them into the warehouse (`write` + */\n/* `openWorld`). Supplier invoices are not patient data. Agent state */\n/* carries no host text: a supplier name is read only when it is not */\n/* masked (a person under privacy mode is not), and an error reads as */\n/* `hasError`, never as the platform's message. */\n/* */\n/* Literal enums, not imports: the catalog build loads this file in plain */\n/* Node, where only type imports are erased. A test keeps the literals */\n/* equal to the constants in types.ts. */\n/* See src/docs/26-agent-readiness.mdx. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type {\n InvoiceUploadListHandle,\n InvoiceUploadListSortEntry,\n} from './types';\n\nconst SORT_COLUMNS = [\n 'fileName',\n 'supplier',\n 'invoiceNumber',\n 'date',\n 'lineCount',\n 'total',\n 'status',\n] as const;\n\ntype InvoiceUploadListAgentErrorCode =\n | 'UNKNOWN_ROW'\n | 'ROW_FILTERED_OUT'\n | 'COLUMN_MASKED'\n | 'SELECTION_DISABLED';\n\nfunction refuse(code: InvoiceUploadListAgentErrorCode, detail: string): never {\n throw new Error(`${code}: ${detail}`);\n}\n\nfunction knownRow(handle: InvoiceUploadListHandle, id: string): void {\n // Every invoice, not only the rows the search and filters leave showing.\n if (!handle.hasRow(id)) {\n refuse('UNKNOWN_ROW', `no invoice \"${id}\" in the list.`);\n }\n}\n\nconst ROW_ID_SCHEMA = {\n type: 'object',\n properties: { id: { type: 'string', description: 'An invoice id (rows).' } },\n required: ['id'],\n additionalProperties: false,\n};\n\nexport const invoiceUploadListAgent: AgentAdapter<InvoiceUploadListHandle> = {\n id: 'invoice-upload-list',\n capabilities: [\n 'select_multiple',\n 'sort',\n 'scroll',\n // review opens the host's review dialog (`open`: a Dialog).\n 'open',\n // load_all_ready and load_selected commit invoices to the warehouse.\n 'submit',\n ],\n state: {\n features: {\n type: '{ privacyMode, status, selectable, readyCount }',\n descriptionKey: 'ui.agent.invoiceUploadList.state.features',\n description:\n 'What the list can do now: privacy mode, loading status, whether rows can be selected, and how many invoices are ready to load.',\n read: (handle) => handle.getFeatures(),\n },\n rows: {\n type: 'Array<{ id, fileId, fileName, status, supplierKind, supplierName?, invoiceNumber, date, lineCount, loading, hasError, selectable, review }>',\n descriptionKey: 'ui.agent.invoiceUploadList.state.rows',\n description:\n 'The uploaded invoices. A supplier name is given only when it is not hidden; a person is never named under privacy mode. An error row reads hasError, not its message.',\n read: (handle) => handle.getRowSummaries(),\n },\n counts: {\n type: 'Record<status, number>',\n descriptionKey: 'ui.agent.invoiceUploadList.state.counts',\n description:\n 'How many invoices have each status: readyToLoad, toReview, alreadyLoaded, loaded and error.',\n read: (handle) => handle.getCounts(),\n },\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.invoiceUploadList.state.selection',\n description: 'Ids of the selected invoices.',\n read: (handle) => handle.getSelection(),\n },\n sort: {\n type: 'Array<{ colId, sort }>',\n descriptionKey: 'ui.agent.invoiceUploadList.state.sort',\n description: 'The active sort.',\n read: (handle) => handle.getSort(),\n },\n columns: {\n type: 'Array<{ id, label, visible, canHide, sortable, masked }>',\n descriptionKey: 'ui.agent.invoiceUploadList.state.columns',\n description: 'The columns, in display order.',\n read: (handle) => handle.getColumns(),\n },\n },\n actions: {\n select_ready: {\n safety: 'read',\n returns: 'string[]',\n idempotent: true,\n errors: ['SELECTION_DISABLED: the list has no selection.'],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.selectReady',\n description:\n 'Select every invoice that is ready to load and not being loaded. Nothing loads until load_selected.',\n invoke: (handle) => {\n if (!handle.getFeatures().selectable) {\n refuse('SELECTION_DISABLED', 'this list has no selection.');\n }\n return handle.selectReady();\n },\n },\n select_rows: {\n safety: 'read',\n argsType: '{ ids: string[] }',\n argsSchema: {\n type: 'object',\n properties: { ids: { type: 'array', items: { type: 'string' } } },\n required: ['ids'],\n additionalProperties: false,\n },\n returns: 'string[]',\n idempotent: true,\n errors: ['SELECTION_DISABLED: the list has no selection.'],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.selectRows',\n description:\n 'Replace the selection with the given invoice ids. Only invoices that are ready to load can be selected; others are ignored.',\n invoke: (handle, args: { ids: string[] }) => {\n if (!handle.getFeatures().selectable) {\n refuse('SELECTION_DISABLED', 'this list has no selection.');\n }\n handle.setSelection(args.ids);\n return handle.getSelection();\n },\n },\n clear_selection: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.invoiceUploadList.actions.clearSelection',\n description: 'Clear the selection.',\n invoke: (handle) => handle.clearSelection(),\n },\n sort_by: {\n safety: 'read',\n argsType:\n '{ colId: \"fileName\" | \"supplier\" | \"invoiceNumber\" | \"date\" | \"lineCount\" | \"total\" | \"status\", sort: \"asc\" | \"desc\" }',\n argsSchema: {\n type: 'object',\n properties: {\n colId: { enum: [...SORT_COLUMNS] },\n sort: { enum: ['asc', 'desc'] },\n },\n required: ['colId', 'sort'],\n additionalProperties: false,\n },\n idempotent: true,\n errors: [\n 'COLUMN_MASKED: supplier cannot be sorted while privacy mode is on.',\n ],\n examples: [{ args: { colId: 'status', sort: 'asc' } }],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.sortBy',\n description: 'Sort the invoices by one column. The selection is kept.',\n invoke: (handle, args: InvoiceUploadListSortEntry) => {\n const column = handle.getColumns().find((c) => c.id === args.colId);\n if (column?.masked) {\n refuse('COLUMN_MASKED', `\"${args.colId}\" is hidden by privacy mode.`);\n }\n handle.setSort([{ colId: args.colId, sort: args.sort }]);\n },\n },\n scroll_to_row: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: ROW_ID_SCHEMA,\n idempotent: true,\n errors: [\n 'UNKNOWN_ROW: the id is not in the list.',\n 'ROW_FILTERED_OUT: the search or a filter hides the invoice.',\n ],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.scrollToRow',\n description: 'Scroll one invoice into view.',\n invoke: (handle, args: { id: string }) => {\n knownRow(handle, args.id);\n handle.scrollToRow(args.id);\n },\n },\n open_review: {\n safety: 'read',\n openWorld: true,\n argsType: '{ id: string }',\n argsSchema: ROW_ID_SCHEMA,\n errors: [\n 'UNKNOWN_ROW: the id is not in the list.',\n 'ACTION_UNAVAILABLE: the list offers no review.',\n 'ACTION_DISABLED: error, the file could not be read.',\n ],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.openReview',\n description:\n 'Open one invoice for review. The host shows its lines. Nothing loads until the user confirms there.',\n invoke: (handle, args: { id: string }) => {\n knownRow(handle, args.id);\n handle.review(args.id);\n },\n },\n load_all_ready: {\n safety: 'write',\n openWorld: true,\n returns: 'string[]',\n errors: [\n 'ACTION_UNAVAILABLE: the list offers no \"load all ready\".',\n 'ACTION_DISABLED: noReadyInvoices.',\n ],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.loadAllReady',\n description:\n 'Hand every invoice that is ready to load to the host, which loads it into the warehouse. Returns the ids sent.',\n invoke: (handle) => handle.loadAllReady(),\n },\n load_selected: {\n safety: 'write',\n openWorld: true,\n returns: 'string[]',\n errors: [\n 'ACTION_UNAVAILABLE: the list offers no bulk load.',\n 'ACTION_DISABLED: emptySelection.',\n ],\n descriptionKey: 'ui.agent.invoiceUploadList.actions.loadSelected',\n description:\n 'Hand the selected invoices to the host, which loads them into the warehouse. Returns the ids sent.',\n invoke: (handle) => handle.loadSelected(),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'invoice-upload-list',\n description: 'Marks the element as a kit InvoiceUploadList.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from id (default warehouse-invoice-upload-list).',\n },\n item: {\n attr: 'data-row-id',\n description:\n 'Opaque invoice id on each row (DataGrid). Act through the handle, not the DOM.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: CVA for the root, the cells and the count footer. */\n/* Tokens only, logical properties only. DataGrid owns the table chrome; */\n/* these classes lay out what sits inside one cell. */\n/* -------------------------------------------------------------------- */\n\nimport { cva } from 'class-variance-authority';\n\n/** The root around the DataGrid frame and the count footer. With\n * `height: 'fill'` it is a flex column that fills its flex parent, so the\n * grid becomes the bounded scroll container (virtualised rows). */\nexport const invoiceUploadListVariants = cva('ds:w-full ds:min-w-0', {\n variants: {\n height: {\n auto: 'ds:block',\n fill: 'ds:flex ds:min-h-0 ds:flex-auto ds:flex-col',\n },\n },\n defaultVariants: { height: 'auto' },\n});\n\n/** Lines stacked in one cell (a value and its muted second line). */\nexport const cellStackVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]',\n {\n variants: {\n align: { start: 'ds:items-start', end: 'ds:items-end' },\n },\n defaultVariants: { align: 'start' },\n },\n);\n\n/** A muted second line (\"Credit note\"). */\nexport const secondaryTextVariants = cva(\n 'type-meta ds:text-[color:var(--muted-foreground)]',\n);\n\n/** The error message under the Error badge. It wraps: a platform message\n * is a sentence, not a word. */\nexport const errorTextVariants = cva(\n 'type-meta ds:text-[color:var(--destructive)] ds:[overflow-wrap:anywhere]',\n);\n\n/** One line of text that truncates; the full text stays in the DOM. */\nexport const truncatedTextVariants = cva(\n 'ds:block ds:min-w-0 ds:max-w-full ds:truncate',\n);\n\n/** The file name: the row header. */\nexport const fileNameVariants = cva(\n 'ds:block ds:min-w-0 ds:max-w-full ds:truncate ds:font-medium',\n);\n\n/** Digits that line up. */\nexport const figureVariants = cva('ds:tabular-nums');\n\n/** A spinner beside its words. */\nexport const loadingGroupVariants = cva(\n 'ds:inline-flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-xs)]',\n);\n\n/** The decorative spinner of a loading row. */\nexport const loadingSpinnerVariants = cva('ds:inline-flex ds:shrink-0');\n\n/** The count footer under the grid: counts per status. */\nexport const countsFooterVariants = cva(\n 'type-meta ds:m-0 ds:px-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:text-[color:var(--muted-foreground)]',\n);\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: public types (warehouse supplier invoices). */\n/* */\n/* Display and emit only. The platform reads the XML, decides the status */\n/* and matches the lines; the kit shows what it is given and reports */\n/* what the person chose. Only ids reach the DOM (`data-row-id`). */\n/* -------------------------------------------------------------------- */\n\nimport type { DecimalString } from '../_shared/decimal';\nimport type {\n WarehouseBadgeVariant,\n WarehouseInvoiceStatus,\n} from '../_shared/warehouse-load';\n\nexport type { DecimalString, WarehouseBadgeVariant, WarehouseInvoiceStatus };\n\n/** Column ids, in display order. `select` is the grid's own checkbox. */\nexport const INVOICE_UPLOAD_LIST_COLUMNS = [\n 'fileName',\n 'supplier',\n 'invoiceNumber',\n 'date',\n 'lineCount',\n 'total',\n 'status',\n 'actions',\n] as const;\nexport type InvoiceUploadListColumnId =\n (typeof INVOICE_UPLOAD_LIST_COLUMNS)[number];\n\n/** Columns the list sorts by. */\nexport const INVOICE_UPLOAD_LIST_SORT_COLUMNS = [\n 'fileName',\n 'supplier',\n 'invoiceNumber',\n 'date',\n 'lineCount',\n 'total',\n 'status',\n] as const satisfies readonly InvoiceUploadListColumnId[];\nexport type InvoiceUploadListSortColumn =\n (typeof INVOICE_UPLOAD_LIST_SORT_COLUMNS)[number];\n\nexport const INVOICE_SUPPLIER_KINDS = ['company', 'person'] as const;\nexport type InvoiceSupplierKind = (typeof INVOICE_SUPPLIER_KINDS)[number];\n\nexport const INVOICE_DOCUMENT_KINDS = ['invoice', 'creditNote'] as const;\nexport type InvoiceDocumentKind = (typeof INVOICE_DOCUMENT_KINDS)[number];\n\n/** One invoice body. A file may hold several, so a file name can repeat. */\nexport interface UploadedInvoice {\n /** The only row value in the DOM (`data-row-id`). Unique per invoice. */\n id: string;\n /** The `InvoiceUpload` file id this invoice came from. */\n fileId: string;\n /** File name as chosen; shown, never parsed. Names the row. */\n fileName: string;\n /** Who issued it. `person` is masked under privacy mode; a company\n * stays visible. `null` when the platform found no supplier. */\n supplier: { name: string; kind: InvoiceSupplierKind } | null;\n invoiceNumber: string | null;\n /** Calendar day `YYYY-MM-DD` of this invoice body; shown in UTC. */\n date: string | null;\n lineCount: number | null;\n /** FatturaPA `ImportoTotaleDocumento` as decimal text (\"1234.50\"). */\n total: DecimalString | null;\n /** ISO 4217 code for `total`. */\n currency: string;\n /** Default `invoice`. A credit note shows a muted \"Credit note\" line. */\n documentKind?: InvoiceDocumentKind;\n status: WarehouseInvoiceStatus;\n /** Platform text for status `error`, already translated. It is host\n * text: under privacy mode it gives way to kit copy on a row whose\n * supplier is a person. */\n error?: string;\n}\n\n/** Error panel copy and retry for `status=\"error\"`. */\nexport interface InvoiceUploadListError {\n title?: string;\n description?: string;\n onRetry?: () => void;\n}\n\nexport interface InvoiceUploadListProps {\n /** Instance id: the saved column state key and `data-component-id`. */\n id?: string;\n invoices: readonly UploadedInvoice[];\n /** `loading` with no invoices shows skeleton rows. Default `ready`. */\n status?: 'ready' | 'loading' | 'error';\n error?: InvoiceUploadListError;\n /** Ids of the selected invoices. Only `readyToLoad` rows are selectable.\n * Checkboxes show when any selection prop or `onLoadSelected` is set. */\n selection?: readonly string[];\n defaultSelection?: readonly string[];\n onSelectionChange?: (ids: string[]) => void;\n /** Row action \"Review\". Disabled, with a reason, on error rows. */\n onReview?: (invoice: UploadedInvoice) => void;\n /** Toolbar \"Load all ready (N)\": every `readyToLoad` invoice that is not\n * already loading, whatever the search or sort. */\n onLoadAllReady?: (ids: string[]) => void;\n /** Bulk action on the selection. */\n onLoadSelected?: (ids: string[]) => void;\n /** Invoices being loaded now: a spinner, and not selectable. */\n loadingIds?: readonly string[];\n /** Hides the supplier of every `person`; companies stay visible. */\n privacyMode?: boolean;\n /** Table caption. Default \"Uploaded invoices\". */\n caption?: string;\n density?: 'default' | 'compact';\n /** `fill` makes the grid the bounded scroll container of a flex column\n * parent (200 invoices virtualise). Default `auto`. */\n height?: 'auto' | 'fill';\n persistColumnState?: boolean;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n}\n\n/* ---------------- the curated handle ---------------- */\n\nexport interface InvoiceUploadListSortEntry {\n colId: InvoiceUploadListSortColumn;\n sort: 'asc' | 'desc';\n}\n\nexport interface InvoiceUploadListFeatureInfo {\n privacyMode: boolean;\n status: 'ready' | 'loading' | 'error';\n selectable: boolean;\n readyCount: number;\n}\n\nexport interface InvoiceUploadListColumnInfo {\n id: InvoiceUploadListColumnId;\n label: string;\n visible: boolean;\n canHide: boolean;\n sortable: boolean;\n masked: boolean;\n}\n\n/** Why Review is off. `error`: the file could not be read. */\nexport type InvoiceUploadReviewDisabledReason = 'error';\n\n/** The agent-safe projection of one row: ids, enums and counts. A supplier\n * name is given only when it is not masked; a host error text is never\n * given (`hasError` instead). */\nexport interface InvoiceUploadRowSummary {\n id: string;\n fileId: string;\n fileName: string;\n status: WarehouseInvoiceStatus;\n supplierKind: InvoiceSupplierKind | null;\n supplierName?: string;\n invoiceNumber: string | null;\n date: string | null;\n lineCount: number | null;\n loading: boolean;\n hasError: boolean;\n selectable: boolean;\n review: 'enabled' | { disabled: InvoiceUploadReviewDisabledReason } | null;\n}\n\n/** The `ref` of InvoiceUploadList. Ids and kit shapes only: never the\n * DataGrid handle, a row object or a DOM node. A refused call throws an\n * Error whose message starts with its code. */\nexport interface InvoiceUploadListHandle {\n getFeatures(): InvoiceUploadListFeatureInfo;\n /** Ids of the rows showing now: the search and filters apply. */\n getRowIds(): string[];\n /** Is this invoice in the list at all, shown or not? */\n hasRow(id: string): boolean;\n getRowSummaries(): InvoiceUploadRowSummary[];\n /** Invoices per status, every status present. */\n getCounts(): Record<WarehouseInvoiceStatus, number>;\n getSelection(): string[];\n setSelection(ids: readonly string[]): void;\n /** Selects every ready, not-loading invoice; returns the selection. */\n selectReady(): string[];\n clearSelection(): void;\n getSort(): InvoiceUploadListSortEntry[];\n setSort(model: readonly InvoiceUploadListSortEntry[]): void;\n getColumns(): InvoiceUploadListColumnInfo[];\n scrollToRow(id: string): void;\n focusRow(id: string): void;\n /** Same host callback as the Review button. */\n review(id: string): void;\n /** Same host callback as \"Load all ready\". Returns the ids sent. */\n loadAllReady(): string[];\n /** Same host callback as the bulk action. Returns the ids sent. */\n loadSelected(): string[];\n}\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: pure helpers shared by the component, the handle */\n/* and the agent projection. No React, no translation. */\n/* -------------------------------------------------------------------- */\n\nimport { FATTURAPA_VALUE, parseDecimal } from '../_shared/decimal';\nimport type { ScaledDecimal } from '../_shared/decimal';\nimport { formatLocale } from '../_shared/intl-locale';\nimport {\n countInvoicesByStatus,\n type WarehouseInvoiceStatus,\n} from '../_shared/warehouse-load';\nimport type {\n InvoiceUploadRowSummary,\n UploadedInvoice,\n InvoiceUploadListSortEntry,\n InvoiceUploadListSortColumn,\n} from './types';\nimport { INVOICE_UPLOAD_LIST_SORT_COLUMNS } from './types';\n\nexport const INVOICE_UPLOAD_LIST_DEFAULT_ID = 'warehouse-invoice-upload-list';\n\n/** Reading order of the statuses: work to do first. Used to sort. */\nexport const INVOICE_STATUS_RANK: Record<WarehouseInvoiceStatus, number> = {\n readyToLoad: 0,\n toReview: 1,\n error: 2,\n alreadyLoaded: 3,\n loaded: 4,\n};\n\n/** Amounts here arrive as decimal text, signed (a credit note is negative),\n * up to 11 integer digits and 8 decimals. `null` when it does not parse. */\nexport function readInvoiceTotal(total: string | null): ScaledDecimal | null {\n if (total === null) return null;\n const parsed = parseDecimal(total, FATTURAPA_VALUE.lineTotal);\n return parsed.ok ? parsed.value : null;\n}\n\n/** Is this supplier masked right now? Only people, only in privacy mode. */\nexport function isSupplierMasked(\n invoice: Pick<UploadedInvoice, 'supplier'>,\n privacyMode: boolean,\n): boolean {\n return privacyMode && invoice.supplier?.kind === 'person';\n}\n\nexport function isPersonSupplier(invoice: UploadedInvoice): boolean {\n return invoice.supplier?.kind === 'person';\n}\n\n/** A row can be ticked when it is ready and not being loaded. */\nexport function isInvoiceSelectable(\n invoice: UploadedInvoice,\n loading: ReadonlySet<string>,\n): boolean {\n return invoice.status === 'readyToLoad' && !loading.has(invoice.id);\n}\n\n/** Ids a \"load all ready\" sends: ready and not already loading, in the\n * order given. */\nexport function readyInvoiceIds(\n invoices: readonly UploadedInvoice[],\n loading: ReadonlySet<string>,\n): string[] {\n return invoices\n .filter((invoice) => isInvoiceSelectable(invoice, loading))\n .map((invoice) => invoice.id);\n}\n\nexport function countByStatus(\n invoices: readonly UploadedInvoice[],\n): Record<WarehouseInvoiceStatus, number> {\n return countInvoicesByStatus(invoices);\n}\n\n/** Row name for row-scoped controls: the file, then the invoice number\n * when the file holds more than one. Not personal data. */\nexport function invoiceRowLabel(invoice: UploadedInvoice): string {\n return invoice.invoiceNumber\n ? `${invoice.fileName} · ${invoice.invoiceNumber}`\n : invoice.fileName;\n}\n\n/** The agent-safe projection of one invoice. */\nexport function summariseInvoice(\n invoice: UploadedInvoice,\n privacyMode: boolean,\n loading: ReadonlySet<string>,\n canReview: boolean,\n): InvoiceUploadRowSummary {\n const masked = isSupplierMasked(invoice, privacyMode);\n const summary: InvoiceUploadRowSummary = {\n id: invoice.id,\n fileId: invoice.fileId,\n fileName: invoice.fileName,\n status: invoice.status,\n supplierKind: invoice.supplier?.kind ?? null,\n invoiceNumber: invoice.invoiceNumber,\n date: invoice.date,\n lineCount: invoice.lineCount,\n loading: loading.has(invoice.id),\n hasError: invoice.status === 'error',\n selectable: isInvoiceSelectable(invoice, loading),\n review: !canReview\n ? null\n : invoice.status === 'error'\n ? { disabled: 'error' }\n : 'enabled',\n };\n if (invoice.supplier && !masked) summary.supplierName = invoice.supplier.name;\n return summary;\n}\n\n/* Building an `Intl.DateTimeFormat` costs far more than using one. */\nconst dayFormatters = new Map<string, Intl.DateTimeFormat>();\nconst CALENDAR_DAY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/** A calendar day `YYYY-MM-DD` in the UI language, medium style, read and\n * formatted in UTC so it never moves with the time zone. Other text is\n * returned as given. */\nexport function formatInvoiceDay(day: string, language: string): string {\n const match = CALENDAR_DAY.exec(day);\n if (!match) return day;\n const [, year, month, date] = match;\n const instant = new Date(\n Date.UTC(Number(year), Number(month) - 1, Number(date)),\n );\n if (Number.isNaN(instant.getTime())) return day;\n const locale = formatLocale(language);\n let formatter = dayFormatters.get(locale);\n if (!formatter) {\n formatter = new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeZone: 'UTC',\n });\n dayFormatters.set(locale, formatter);\n }\n return formatter.format(instant);\n}\n\nconst SORT_COLUMNS: ReadonlySet<string> = new Set(\n INVOICE_UPLOAD_LIST_SORT_COLUMNS,\n);\n\nexport function isInvoiceSortColumn(\n id: string,\n): id is InvoiceUploadListSortColumn {\n return SORT_COLUMNS.has(id);\n}\n\n/** DataGrid sort entries to the list's own, dropping other columns. */\nexport function toInvoiceSortEntries(\n entries: ReadonlyArray<{ colId: string; sort: 'asc' | 'desc' }>,\n): InvoiceUploadListSortEntry[] {\n const out: InvoiceUploadListSortEntry[] = [];\n for (const entry of entries) {\n if (isInvoiceSortColumn(entry.colId)) {\n out.push({ colId: entry.colId, sort: entry.sort });\n }\n }\n return out;\n}\n\n/** Callbacks the handle and the UI share. */\nexport interface InvoiceUploadListCallbacks {\n onReview?: (invoice: UploadedInvoice) => void;\n onLoadAllReady?: (ids: string[]) => void;\n onLoadSelected?: (ids: string[]) => void;\n}\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: what each cell shows. */\n/* */\n/* Always rendered inside the InvoiceUploadList root through its */\n/* DataGrid. Kit leaves only (Badge, Money, Spinner); no row datum goes */\n/* into an attribute: names are text. */\n/* -------------------------------------------------------------------- */\n\nimport { useTranslation } from 'react-i18next';\nimport { Check } from 'lucide-react';\n\nimport { Badge } from '../badge/badge';\nimport { Money } from '../money/money';\nimport { Spinner } from '../spinner/spinner';\nimport { formatNumber } from '../_shared/format-number';\nimport { WAREHOUSE_INVOICE_STATUS_COPY } from '../_shared/warehouse-load';\nimport {\n cellStackVariants,\n errorTextVariants,\n figureVariants,\n fileNameVariants,\n loadingGroupVariants,\n loadingSpinnerVariants,\n secondaryTextVariants,\n truncatedTextVariants,\n} from './invoice-upload-list.variants';\nimport { formatInvoiceDay, isPersonSupplier, readInvoiceTotal } from './model';\nimport type { UploadedInvoice } from './types';\n\nexport function FileNameCell({ invoice }: { invoice: UploadedInvoice }) {\n return (\n <span dir=\"auto\" className={fileNameVariants()}>\n {invoice.fileName}\n </span>\n );\n}\n\nfunction NotFound() {\n const { t } = useTranslation('ui');\n return (\n <span className={secondaryTextVariants()}>\n {t('invoiceUploadList.cell.notFound', 'Not found')}\n </span>\n );\n}\n\n/** Never rendered for a masked cell: under privacy mode DataGrid shows its\n * mask instead. */\nexport function SupplierCell({ invoice }: { invoice: UploadedInvoice }) {\n if (invoice.supplier === null) return <NotFound />;\n return (\n <span dir=\"auto\" className={truncatedTextVariants()}>\n {invoice.supplier.name}\n </span>\n );\n}\n\nexport function InvoiceNumberCell({ invoice }: { invoice: UploadedInvoice }) {\n const { t } = useTranslation('ui');\n if (invoice.invoiceNumber === null) return <NotFound />;\n return (\n <span className={cellStackVariants()}>\n <span dir=\"auto\" className={truncatedTextVariants()}>\n {invoice.invoiceNumber}\n </span>\n {invoice.documentKind === 'creditNote' ? (\n <span className={secondaryTextVariants()}>\n {t('invoiceUploadList.documentKind.creditNote', 'Credit note')}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport function DateCell({ invoice }: { invoice: UploadedInvoice }) {\n const { i18n } = useTranslation('ui');\n if (invoice.date === null) return <NotFound />;\n return <>{formatInvoiceDay(invoice.date, i18n.language)}</>;\n}\n\nexport function LineCountCell({ invoice }: { invoice: UploadedInvoice }) {\n const { i18n } = useTranslation('ui');\n if (invoice.lineCount === null) return <NotFound />;\n return (\n <span className={figureVariants()}>\n {formatNumber(invoice.lineCount, i18n.language)}\n </span>\n );\n}\n\n/** Money on its exact decimal path. Text that does not parse shows as\n * written, never as a rounded figure. */\nexport function TotalCell({ invoice }: { invoice: UploadedInvoice }) {\n if (invoice.total === null) return <NotFound />;\n const amount = readInvoiceTotal(invoice.total);\n if (!amount) {\n return (\n <span dir=\"ltr\" className={figureVariants()}>\n {invoice.total.trim()}\n </span>\n );\n }\n return (\n <Money\n size=\"sm\"\n value={amount.units}\n scale={amount.scale}\n currency={invoice.currency}\n minimumFractionDigits={Math.min(2, amount.scale)}\n maximumFractionDigits={Math.max(2, amount.scale)}\n />\n );\n}\n\nexport interface StatusCellProps {\n invoice: UploadedInvoice;\n loading: boolean;\n privacyMode: boolean;\n}\n\n/**\n * The status badge. An error row shows its message as a second line and\n * blocks nothing else. A loading row shows a spinner with its words in\n * place of the badge. Under privacy mode a person-supplier row never shows\n * the host's error text (it may name the person); kit copy stands in.\n */\nexport function StatusCell({ invoice, loading, privacyMode }: StatusCellProps) {\n const { t } = useTranslation('ui');\n if (loading) {\n const label = t('invoiceUploadList.loading', 'Loading');\n return (\n <span className={loadingGroupVariants()}>\n {/* decorative: a live region per loading row would chatter */}\n <span aria-hidden=\"true\" className={loadingSpinnerVariants()}>\n <Spinner size=\"sm\" label={label} />\n </span>\n <span>{label}</span>\n </span>\n );\n }\n const copy = WAREHOUSE_INVOICE_STATUS_COPY[invoice.status];\n let message: string | null = null;\n if (invoice.status === 'error') {\n message =\n privacyMode && isPersonSupplier(invoice)\n ? t(\n 'invoiceUploadList.errorHidden',\n 'This file could not be read (details hidden in privacy mode)',\n )\n : (invoice.error ?? null);\n }\n return (\n <span className={cellStackVariants()}>\n <Badge\n size=\"sm\"\n variant={copy.variant}\n withDot={!copy.check}\n leading={copy.check ? <Check aria-hidden=\"true\" /> : undefined}\n >\n {t(copy.key, copy.en)}\n </Badge>\n {message ? (\n <span dir=\"auto\" className={errorTextVariants()}>\n {message}\n </span>\n ) : null}\n </span>\n );\n}\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: the column definitions on the DataGrid column API. */\n/* */\n/* Client mode: sorting, search and the status filter run in the grid. */\n/* The file name is the row header. Widths are initial px; tiers show a */\n/* column from 640, 900 or 1,200 px of grid width, and a user's own */\n/* choice in ColumnToggle always wins. Only `invoice.id` reaches the DOM. */\n/* */\n/* From 1,024 px of grid width, with or without the selection column, the */\n/* shown columns (all but Lines, which waits for 1,200 px) add up to less */\n/* than the width, so there is no sideways scroll and Status is never */\n/* under the pinned Actions column. Narrower, Lines leaves first, then */\n/* Date, then Invoice number and Total; Status and Actions never do. */\n/* -------------------------------------------------------------------- */\n\nimport { createElement, useMemo, type MutableRefObject } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ScanSearch } from 'lucide-react';\n\nimport type { DataGridColumn, DataGridOption } from '../data-grid/types';\nimport { RowActions, type RowActionDef } from '../row-actions/row-actions';\nimport { VisuallyHidden } from '../visually-hidden/visually-hidden';\nimport {\n WAREHOUSE_INVOICE_STATUSES,\n WAREHOUSE_INVOICE_STATUS_COPY,\n type WarehouseInvoiceStatus,\n} from '../_shared/warehouse-load';\nimport {\n DateCell,\n FileNameCell,\n InvoiceNumberCell,\n LineCountCell,\n StatusCell,\n SupplierCell,\n TotalCell,\n} from './cells';\nimport {\n INVOICE_STATUS_RANK,\n isPersonSupplier,\n readInvoiceTotal,\n type InvoiceUploadListCallbacks,\n} from './model';\nimport type { UploadedInvoice } from './types';\nimport { decimalToNumber } from '../_shared/decimal';\n\n/** The Review row action: one inline button, off on an error row. */\nexport function useInvoiceRowActions(\n callbacksRef: MutableRefObject<InvoiceUploadListCallbacks>,\n available: boolean,\n): RowActionDef<UploadedInvoice>[] {\n const { t } = useTranslation('ui');\n return useMemo(() => {\n if (!available) return [];\n return [\n {\n // Developer constant: React key and `data-action-id`.\n id: 'review',\n icon: createElement(ScanSearch, { 'aria-hidden': true }),\n label: t('invoiceUploadList.action.review', 'Review'),\n onClick: (invoice) => callbacksRef.current.onReview?.(invoice),\n disabled: (invoice) => invoice.status === 'error',\n disabledReason: (invoice) =>\n invoice.status === 'error'\n ? t(\n 'invoiceUploadList.action.reviewDisabledError',\n 'This file has an error, so there is nothing to review',\n )\n : undefined,\n },\n ];\n }, [t, callbacksRef, available]);\n}\n\nexport interface UseInvoiceUploadListColumnsOptions {\n privacyMode: boolean;\n loadingIds: ReadonlySet<string>;\n rowActions: readonly RowActionDef<UploadedInvoice>[];\n}\n\nexport function useInvoiceUploadListColumns({\n privacyMode,\n loadingIds,\n rowActions,\n}: UseInvoiceUploadListColumnsOptions): DataGridColumn<UploadedInvoice>[] {\n const { t } = useTranslation('ui');\n\n return useMemo(() => {\n const statusLabel = (status: WarehouseInvoiceStatus): string => {\n const copy = WAREHOUSE_INVOICE_STATUS_COPY[status];\n return t(copy.key, copy.en);\n };\n const statusOptions: DataGridOption[] = WAREHOUSE_INVOICE_STATUSES.map(\n (status) => ({ value: status, label: statusLabel(status) }),\n );\n const actionsLabel = t('dataTable.actions', 'Actions');\n\n const columns: DataGridColumn<UploadedInvoice>[] = [\n {\n id: 'fileName',\n header: t('invoiceUploadList.column.fileName', 'File'),\n rowHeader: true,\n pin: 'start',\n hideable: false,\n reorderable: false,\n pinnable: false,\n size: 176,\n minSize: 160,\n value: (invoice) => invoice.fileName,\n exportValue: (invoice) => invoice.fileName,\n sort: 'text',\n cell: (invoice) => <FileNameCell invoice={invoice} />,\n },\n {\n id: 'supplier',\n header: t('invoiceUploadList.column.supplier', 'Supplier'),\n size: 144,\n minSize: 160,\n value: (invoice) => invoice.supplier?.name ?? null,\n // Off while privacy mode is on: the whole column leaves sorting.\n sort: 'text',\n // People are masked; companies stay visible.\n privacy: { mode: 'mask', appliesTo: isPersonSupplier },\n cell: (invoice) => <SupplierCell invoice={invoice} />,\n },\n {\n id: 'invoiceNumber',\n header: t('invoiceUploadList.column.invoiceNumber', 'Invoice number'),\n size: 160,\n responsiveTier: 1,\n value: (invoice) => invoice.invoiceNumber,\n exportValue: (invoice) => invoice.invoiceNumber,\n sort: 'text',\n cell: (invoice) => <InvoiceNumberCell invoice={invoice} />,\n },\n {\n id: 'date',\n header: t('invoiceUploadList.column.date', 'Date'),\n size: 120,\n responsiveTier: 2,\n // A calendar day `YYYY-MM-DD`; DataGrid formats it for export.\n value: (invoice) => invoice.date,\n sort: 'date',\n sortDescFirst: true,\n search: false,\n cell: (invoice) => <DateCell invoice={invoice} />,\n },\n {\n id: 'lineCount',\n header: t('invoiceUploadList.column.lineCount', 'Lines'),\n align: 'end',\n size: 80,\n responsiveTier: 3,\n value: (invoice) => invoice.lineCount,\n sort: 'number',\n sortDescFirst: true,\n search: false,\n cell: (invoice) => <LineCountCell invoice={invoice} />,\n },\n {\n id: 'total',\n header: t('invoiceUploadList.column.total', 'Total'),\n align: 'end',\n // Room for the longest header word, \"GESAMTBETRAG\" (de): headers are\n // not hyphenated, and a sortable header does not break its word.\n size: 128,\n responsiveTier: 1,\n value: (invoice) => {\n const amount = readInvoiceTotal(invoice.total);\n return amount ? decimalToNumber(amount) : null;\n },\n exportValue: (invoice) => invoice.total,\n sort: 'number',\n sortDescFirst: true,\n search: false,\n cell: (invoice) => <TotalCell invoice={invoice} />,\n },\n {\n id: 'status',\n header: t('invoiceUploadList.column.status', 'Status'),\n size: 184,\n minSize: 160,\n wrap: true,\n value: (invoice) => invoice.status,\n exportValue: (invoice) => statusLabel(invoice.status),\n // Work to do first: ready, to review, error, then the rest.\n sort: (a, b) =>\n INVOICE_STATUS_RANK[a.status] - INVOICE_STATUS_RANK[b.status],\n filter: { kind: 'select', options: statusOptions },\n search: false,\n cell: (invoice) => (\n <StatusCell\n invoice={invoice}\n loading={loadingIds.has(invoice.id)}\n privacyMode={privacyMode}\n />\n ),\n },\n {\n id: 'actions',\n header: <VisuallyHidden>{actionsLabel}</VisuallyHidden>,\n headerLabel: actionsLabel,\n pin: 'end',\n size: 56,\n hideable: false,\n reorderable: false,\n pinnable: false,\n resizable: false,\n exportable: false,\n printable: false,\n search: false,\n // Kit RowActions, named by reference (\"Actions, invoice.xml\"),\n // never by row data in an attribute.\n cell: (invoice, context) => (\n <RowActions\n row={invoice}\n actions={rowActions}\n aria-labelledby={context.inputLabelledBy}\n />\n ),\n },\n ];\n return columns;\n }, [t, privacyMode, loadingIds, rowActions]);\n}\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: the curated handle (`ref`). */\n/* */\n/* Built over the inner DataGrid's handle and the props of the last */\n/* render. It hands out ids and kit shapes only: never the DataGrid */\n/* handle, a TanStack object, a row object or a DOM node. Review and */\n/* load call the same host callbacks as the UI, after the same checks; */\n/* a refused call throws an Error whose message starts with its code. */\n/* -------------------------------------------------------------------- */\n\nimport type { DataGridHandle } from '../data-grid/types';\nimport {\n countByStatus,\n isInvoiceSortColumn,\n readyInvoiceIds,\n summariseInvoice,\n toInvoiceSortEntries,\n type InvoiceUploadListCallbacks,\n} from './model';\nimport {\n INVOICE_UPLOAD_LIST_COLUMNS,\n type InvoiceUploadListColumnId,\n type InvoiceUploadListColumnInfo,\n type InvoiceUploadListFeatureInfo,\n type InvoiceUploadListHandle,\n type UploadedInvoice,\n} from './types';\n\n/** What the handle reads from the last render. */\nexport interface InvoiceUploadListLive {\n invoices: readonly UploadedInvoice[];\n callbacks: InvoiceUploadListCallbacks;\n loadingIds: ReadonlySet<string>;\n privacyMode: boolean;\n status: InvoiceUploadListFeatureInfo['status'];\n selectable: boolean;\n}\n\ntype InvoiceUploadListHandleErrorCode =\n | 'UNKNOWN_ROW'\n | 'ROW_FILTERED_OUT'\n | 'ACTION_UNAVAILABLE'\n | 'ACTION_DISABLED';\n\nfunction refuse(code: InvoiceUploadListHandleErrorCode, detail: string): never {\n throw new Error(`${code}: ${detail}`);\n}\n\nconst COLUMN_IDS: ReadonlySet<string> = new Set(INVOICE_UPLOAD_LIST_COLUMNS);\n\nfunction isColumnId(id: string): id is InvoiceUploadListColumnId {\n return COLUMN_IDS.has(id);\n}\n\nexport function createInvoiceUploadListHandle(\n gridRef: { readonly current: DataGridHandle | null },\n liveRef: { readonly current: InvoiceUploadListLive },\n): InvoiceUploadListHandle {\n const grid = (): DataGridHandle | null => gridRef.current;\n const live = (): InvoiceUploadListLive => liveRef.current;\n\n function find(id: string): UploadedInvoice {\n const invoice = live().invoices.find((candidate) => candidate.id === id);\n return invoice ?? refuse('UNKNOWN_ROW', `no invoice \"${id}\" in the list.`);\n }\n\n /** The row is in the list and the search and filters leave it showing. */\n function findShown(id: string): UploadedInvoice {\n const invoice = find(id);\n const shown = grid()?.getRowIds();\n if (shown && !shown.includes(id)) {\n refuse(\n 'ROW_FILTERED_OUT',\n `invoice \"${id}\" is hidden by the search or a filter.`,\n );\n }\n return invoice;\n }\n\n function readyIds(): string[] {\n const { invoices, loadingIds } = live();\n return readyInvoiceIds(invoices, loadingIds);\n }\n\n return {\n getFeatures() {\n const { privacyMode, status, selectable } = live();\n return { privacyMode, status, selectable, readyCount: readyIds().length };\n },\n\n getRowIds() {\n return grid()?.getRowIds() ?? live().invoices.map((i) => i.id);\n },\n\n getRowSummaries() {\n const { invoices, privacyMode, loadingIds, callbacks } = live();\n const canReview = Boolean(callbacks.onReview);\n return invoices.map((invoice) =>\n summariseInvoice(invoice, privacyMode, loadingIds, canReview),\n );\n },\n\n getCounts() {\n return countByStatus(live().invoices);\n },\n\n getSelection() {\n return grid()?.getSelection() ?? [];\n },\n\n setSelection(ids) {\n grid()?.setSelection(ids);\n },\n\n selectReady() {\n const handle = grid();\n if (!handle) return [];\n handle.setSelection(readyIds());\n return handle.getSelection();\n },\n\n clearSelection() {\n grid()?.clearSelection();\n },\n\n getSort() {\n return toInvoiceSortEntries(grid()?.getSort() ?? []);\n },\n\n setSort(model) {\n const handle = grid();\n if (!handle) return;\n const masked = new Set(\n handle\n .getColumns()\n .filter((column) => column.masked === true)\n .map((column) => column.id),\n );\n for (const entry of model) {\n if (!isInvoiceSortColumn(entry.colId) || masked.has(entry.colId))\n return;\n }\n handle.setSort(model);\n },\n\n getColumns() {\n const handle = grid();\n if (!handle) return [];\n const { privacyMode } = live();\n const columns: InvoiceUploadListColumnInfo[] = [];\n for (const column of handle.getColumns()) {\n if (!isColumnId(column.id)) continue;\n columns.push({\n id: column.id,\n label: column.label,\n visible: column.visible,\n canHide: column.canHide,\n sortable: column.sortable,\n masked: column.masked ?? (privacyMode && column.id === 'supplier'),\n });\n }\n return columns;\n },\n\n hasRow(id) {\n return live().invoices.some((candidate) => candidate.id === id);\n },\n\n scrollToRow(id) {\n findShown(id);\n grid()?.scrollToRow(id);\n },\n\n focusRow(id) {\n findShown(id);\n grid()?.focusRow(id, 'fileName');\n },\n\n review(id) {\n const invoice = find(id);\n const { callbacks } = live();\n if (!callbacks.onReview) {\n refuse('ACTION_UNAVAILABLE', 'this list offers no review.');\n }\n if (invoice.status === 'error') {\n refuse('ACTION_DISABLED', 'error');\n }\n callbacks.onReview(invoice);\n },\n\n loadAllReady() {\n const { callbacks } = live();\n if (!callbacks.onLoadAllReady) {\n refuse('ACTION_UNAVAILABLE', 'this list offers no \"load all ready\".');\n }\n const ids = readyIds();\n if (ids.length === 0) {\n refuse('ACTION_DISABLED', 'noReadyInvoices');\n }\n callbacks.onLoadAllReady(ids);\n return ids;\n },\n\n loadSelected() {\n const { callbacks } = live();\n if (!callbacks.onLoadSelected) {\n refuse('ACTION_UNAVAILABLE', 'this list offers no bulk load.');\n }\n const ids = grid()?.getSelection() ?? [];\n if (ids.length === 0) {\n refuse('ACTION_DISABLED', 'emptySelection');\n }\n callbacks.onLoadSelected(ids);\n return ids;\n },\n };\n}\n","/* -------------------------------------------------------------------- */\n/* InvoiceUploadList: the uploaded supplier invoices, one row per invoice */\n/* body, on the kit DataGrid in client mode. */\n/* */\n/* Displays and emits. It never reads a file, calls a server or decides */\n/* a status: the platform does, and passes `invoices`. Sorting, search */\n/* and the status filter run in the grid; rows virtualise past 100. Only */\n/* `readyToLoad` rows can be ticked. An error row shows its message and */\n/* blocks nothing. Privacy mode hides person suppliers; companies stay. */\n/* One agent surface per list: `invoiceUploadListAgent` over the curated */\n/* handle; the inner DataGrid registers none. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PackagePlus } from 'lucide-react';\n\nimport { useAgentRegistration } from '../../agent';\nimport { Button } from '../button/button';\nimport { VisuallyHidden } from '../visually-hidden/visually-hidden';\nimport { DataGrid } from '../data-grid/data-grid';\nimport { DataGridToolbar } from '../data-grid/toolbar';\nimport type {\n DataGridHandle,\n DataGridRowSelectability,\n} from '../data-grid/types';\nimport { formatNumber } from '../_shared/format-number';\nimport {\n WAREHOUSE_INVOICE_STATUSES,\n WAREHOUSE_INVOICE_STATUS_COPY,\n warehouseInvoiceStatusCountLabel,\n} from '../_shared/warehouse-load';\nimport { invoiceUploadListAgent } from './invoice-upload-list.agent';\nimport {\n countsFooterVariants,\n invoiceUploadListVariants,\n} from './invoice-upload-list.variants';\nimport { useInvoiceRowActions, useInvoiceUploadListColumns } from './columns';\nimport {\n createInvoiceUploadListHandle,\n type InvoiceUploadListLive,\n} from './handle';\nimport {\n INVOICE_UPLOAD_LIST_DEFAULT_ID,\n countByStatus,\n invoiceRowLabel,\n isInvoiceSelectable,\n readyInvoiceIds,\n type InvoiceUploadListCallbacks,\n} from './model';\nimport type {\n InvoiceUploadListHandle,\n InvoiceUploadListProps,\n UploadedInvoice,\n} from './types';\n\nexport type { InvoiceUploadListProps, InvoiceUploadListHandle } from './types';\n\nconst NO_IDS: readonly string[] = [];\nconst getInvoiceId = (invoice: UploadedInvoice): string => invoice.id;\nconst getInvoiceLabel = (invoice: UploadedInvoice): string =>\n invoiceRowLabel(invoice);\n\n/**\n * The uploaded invoices of a warehouse load. Pass `invoices` with the\n * status the platform worked out for each; react to `onReview`,\n * `onLoadAllReady` and `onLoadSelected`. `ref` gives the curated\n * `InvoiceUploadListHandle`.\n */\nexport const InvoiceUploadList = forwardRef<\n InvoiceUploadListHandle,\n InvoiceUploadListProps\n>(function InvoiceUploadList(props, ref) {\n const {\n id = INVOICE_UPLOAD_LIST_DEFAULT_ID,\n invoices,\n status = 'ready',\n error,\n selection,\n defaultSelection,\n onSelectionChange,\n onReview,\n onLoadAllReady,\n onLoadSelected,\n loadingIds = NO_IDS,\n privacyMode = false,\n caption,\n density = 'default',\n height = 'auto',\n persistColumnState = true,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...rest\n } = props;\n\n const { t, i18n } = useTranslation('ui');\n const gridRef = useRef<DataGridHandle | null>(null);\n\n const loadingSet = useMemo(() => new Set(loadingIds), [loadingIds]);\n // Any selection prop turns the checkboxes on, so `defaultSelection` and\n // `onSelectionChange` alone are never silently ignored.\n const selectable =\n Boolean(onLoadSelected) ||\n selection !== undefined ||\n defaultSelection !== undefined ||\n onSelectionChange !== undefined;\n\n /* ---------------- what the handle reads ---------------- */\n\n const noneReadyId = useId();\n const callbacks: InvoiceUploadListCallbacks = {\n onReview,\n onLoadAllReady,\n onLoadSelected,\n };\n // Read when an action runs, so a host's inline functions never rebuild\n // the columns.\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const live: InvoiceUploadListLive = {\n invoices,\n callbacks,\n loadingIds: loadingSet,\n privacyMode,\n status,\n selectable,\n };\n const liveRef = useRef(live);\n liveRef.current = live;\n\n const [handle] = useState(() =>\n createInvoiceUploadListHandle(gridRef, liveRef),\n );\n useImperativeHandle(ref, () => handle, [handle]);\n // `id` is the instance id. The DataGrid inside gets\n // `registerAgent={false}`, so one list exposes one agent surface.\n useAgentRegistration(invoiceUploadListAgent, handle, id);\n\n /* ---------------- derived ---------------- */\n\n const readyIds = useMemo(\n () => readyInvoiceIds(invoices, loadingSet),\n [invoices, loadingSet],\n );\n const counts = useMemo(() => countByStatus(invoices), [invoices]);\n\n const rowActions = useInvoiceRowActions(callbacksRef, Boolean(onReview));\n const columns = useInvoiceUploadListColumns({\n privacyMode,\n loadingIds: loadingSet,\n rowActions,\n });\n\n const getRowSelectability = useMemo(\n () =>\n (invoice: UploadedInvoice): DataGridRowSelectability => {\n if (isInvoiceSelectable(invoice, loadingSet)) return 'selectable';\n if (loadingSet.has(invoice.id)) {\n return {\n state: 'none',\n reason: t(\n 'invoiceUploadList.selection.loadingReason',\n 'This invoice is being loaded',\n ),\n };\n }\n const reasons = {\n toReview: t(\n 'invoiceUploadList.selection.toReviewReason',\n 'Review this invoice before you load it',\n ),\n alreadyLoaded: t(\n 'invoiceUploadList.selection.alreadyLoadedReason',\n 'This invoice is already in the warehouse',\n ),\n loaded: t(\n 'invoiceUploadList.selection.loadedReason',\n 'This invoice is loaded',\n ),\n error: t(\n 'invoiceUploadList.selection.errorReason',\n 'This file has an error',\n ),\n } as const;\n return {\n state: 'none',\n reason:\n invoice.status === 'readyToLoad'\n ? reasons.toReview\n : reasons[invoice.status],\n };\n },\n [loadingSet, t],\n );\n\n /* The bulk button leaves the toolbar when the selection empties (the\n rows turn to loading). If focus fell to the page, put it on the first\n row that was sent. */\n const keepFocusAfterBulk = (firstId: string | undefined): void => {\n if (!firstId) return;\n requestAnimationFrame(() => {\n const active = document.activeElement;\n if (!active || active === document.body) {\n gridRef.current?.focusRow(firstId, 'fileName');\n }\n });\n };\n\n /* ---------------- toolbar ---------------- */\n\n const statusPills = WAREHOUSE_INVOICE_STATUSES.map((value) => {\n const copy = WAREHOUSE_INVOICE_STATUS_COPY[value];\n return { value, label: t(copy.key, copy.en) };\n });\n\n const toolbar = (\n <DataGridToolbar>\n <DataGridToolbar.FilterBar>\n <DataGridToolbar.QuickSearch\n placeholder={t(\n 'invoiceUploadList.search.placeholder',\n 'Search by file, supplier or invoice number',\n )}\n />\n <DataGridToolbar.FacetFilter\n field=\"status\"\n label={t('invoiceUploadList.column.status', 'Status')}\n options={[\n { value: null, label: t('dataTable.selectFilter.all', 'All') },\n ...statusPills,\n ]}\n />\n <DataGridToolbar.FilterChips />\n </DataGridToolbar.FilterBar>\n <DataGridToolbar.Actions>\n {onLoadSelected ? (\n <DataGridToolbar.BulkAction\n label={t('invoiceUploadList.bulk.loadSelected', 'Load selected')}\n icon={<PackagePlus aria-hidden=\"true\" />}\n onAction={({ selectedRowIds }) => {\n const ids = [...selectedRowIds];\n onLoadSelected(ids);\n keepFocusAfterBulk(ids[0]);\n }}\n />\n ) : null}\n {onLoadAllReady ? (\n <>\n {/* aria-disabled, not disabled: the button keeps focus when the\n last ready invoice starts loading (WCAG 2.4.3). */}\n <Button\n intent=\"primary\"\n size=\"sm\"\n startIcon={<PackagePlus aria-hidden=\"true\" />}\n aria-disabled={readyIds.length === 0 ? true : undefined}\n aria-describedby={readyIds.length === 0 ? noneReadyId : undefined}\n onClick={() => {\n if (readyIds.length === 0) return;\n onLoadAllReady(readyIds);\n }}\n >\n {t(\n 'invoiceUploadList.loadAllReady',\n 'Load all ready ({{countText}})',\n {\n countText: formatNumber(readyIds.length, i18n.language),\n },\n )}\n </Button>\n <VisuallyHidden id={noneReadyId}>\n {t(\n 'invoiceUploadList.loadAllReadyNone',\n 'No invoice is ready to load',\n )}\n </VisuallyHidden>\n </>\n ) : null}\n <DataGridToolbar.ColumnToggle />\n </DataGridToolbar.Actions>\n </DataGridToolbar>\n );\n\n /* ---------------- render ---------------- */\n\n const shownCounts = WAREHOUSE_INVOICE_STATUSES.filter(\n (value) => counts[value] > 0,\n );\n const countLabels = shownCounts.map((value) =>\n warehouseInvoiceStatusCountLabel(t, i18n.language, value, counts[value]),\n );\n\n // One announcement when a load finishes, never row by row. The region is\n // always mounted so the first message is heard.\n const [announcement, setAnnouncement] = useState('');\n const wasLoading = useRef(false);\n const countsSentence = countLabels.join(', ');\n const countsSentenceRef = useRef(countsSentence);\n countsSentenceRef.current = countsSentence;\n const isLoading = loadingSet.size > 0;\n useEffect(() => {\n if (wasLoading.current && !isLoading) {\n setAnnouncement(countsSentenceRef.current);\n }\n wasLoading.current = isLoading;\n }, [isLoading]);\n\n return (\n <div\n data-component=\"invoice-upload-list\"\n data-component-id={id}\n className={invoiceUploadListVariants({ height, className })}\n {...rest}\n >\n <DataGrid<UploadedInvoice>\n ref={gridRef}\n columns={columns}\n rows={invoices}\n getRowId={getInvoiceId}\n caption={caption ?? t('invoiceUploadList.caption', 'Uploaded invoices')}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n /* identity: storage key only; the list is the agent surface */\n gridId={id}\n registerAgent={false}\n persistColumnState={persistColumnState}\n dataMode=\"client\"\n /* selection: ready rows only; survives sorting and search */\n selectionMode={selectable ? 'multiple' : 'none'}\n rowSelection={selection}\n defaultRowSelection={defaultSelection}\n onRowSelectionChange={onSelectionChange}\n getRowSelectability={getRowSelectability}\n selectAllScope=\"all\"\n rangeSelection\n columnResizing\n responsiveColumns\n getRowLabel={getInvoiceLabel}\n rowLabelPrivacySafe\n /* states */\n status={status}\n error={{\n title:\n error?.title ??\n t(\n 'invoiceUploadList.error.title',\n 'The uploaded invoices could not be shown',\n ),\n description: error?.description,\n onRetry: error?.onRetry,\n }}\n empty={{\n title: t('invoiceUploadList.empty.title', 'No invoices uploaded yet'),\n description: t(\n 'invoiceUploadList.empty.description',\n 'Invoices from the files you upload appear here.',\n ),\n noResultsTitle: t(\n 'invoiceUploadList.empty.noResultsTitle',\n 'No invoices match your search',\n ),\n }}\n toolbar={toolbar}\n density={density}\n height={height}\n privacyMode={privacyMode}\n /* every selectability reason is translated kit copy, no row data */\n hostTextPrivacySafe\n />\n {countLabels.length > 0 ? (\n <p className={countsFooterVariants()}>\n {countLabels.map((label, index) => (\n <span key={shownCounts[index]}>\n {index > 0 ? (\n <>\n {' '}\n <span aria-hidden=\"true\">·</span>{' '}\n </>\n ) : null}\n {label}\n </span>\n ))}\n </p>\n ) : null}\n <VisuallyHidden role=\"status\" aria-atomic=\"true\">\n {announcement}\n </VisuallyHidden>\n </div>\n );\n});\n\nInvoiceUploadList.displayName = 'InvoiceUploadList';\n"],"names":["__iconNode","ScanSearch","createLucideIcon","SORT_COLUMNS","refuse","code","detail","knownRow","handle","id","ROW_ID_SCHEMA","invoiceUploadListAgent","args","column","c","invoiceUploadListVariants","cva","cellStackVariants","secondaryTextVariants","errorTextVariants","truncatedTextVariants","fileNameVariants","figureVariants","loadingGroupVariants","loadingSpinnerVariants","countsFooterVariants","INVOICE_UPLOAD_LIST_COLUMNS","INVOICE_UPLOAD_LIST_SORT_COLUMNS","INVOICE_SUPPLIER_KINDS","INVOICE_DOCUMENT_KINDS","INVOICE_UPLOAD_LIST_DEFAULT_ID","INVOICE_STATUS_RANK","readInvoiceTotal","total","parsed","parseDecimal","FATTURAPA_VALUE","isSupplierMasked","invoice","privacyMode","_a","isPersonSupplier","isInvoiceSelectable","loading","readyInvoiceIds","invoices","countByStatus","countInvoicesByStatus","invoiceRowLabel","summariseInvoice","canReview","masked","summary","dayFormatters","CALENDAR_DAY","formatInvoiceDay","day","language","match","year","month","date","instant","locale","formatLocale","formatter","isInvoiceSortColumn","toInvoiceSortEntries","entries","out","entry","FileNameCell","jsx","NotFound","t","useTranslation","SupplierCell","InvoiceNumberCell","jsxs","DateCell","i18n","LineCountCell","TotalCell","amount","Money","StatusCell","label","Spinner","copy","WAREHOUSE_INVOICE_STATUS_COPY","message","Badge","Check","useInvoiceRowActions","callbacksRef","available","useMemo","createElement","_b","useInvoiceUploadListColumns","loadingIds","rowActions","statusLabel","status","statusOptions","WAREHOUSE_INVOICE_STATUSES","actionsLabel","decimalToNumber","a","b","VisuallyHidden","context","RowActions","COLUMN_IDS","isColumnId","createInvoiceUploadListHandle","gridRef","liveRef","grid","live","find","candidate","findShown","shown","readyIds","selectable","i","callbacks","ids","model","columns","NO_IDS","getInvoiceId","getInvoiceLabel","InvoiceUploadList","forwardRef","props","ref","error","selection","defaultSelection","onSelectionChange","onReview","onLoadAllReady","onLoadSelected","caption","density","height","persistColumnState","className","ariaLabel","ariaLabelledBy","ariaDescribedBy","rest","useRef","loadingSet","noneReadyId","useId","useState","useImperativeHandle","useAgentRegistration","counts","getRowSelectability","reasons","keepFocusAfterBulk","firstId","active","statusPills","value","toolbar","DataGridToolbar","PackagePlus","selectedRowIds","Fragment","Button","formatNumber","shownCounts","countLabels","warehouseInvoiceStatusCountLabel","announcement","setAnnouncement","wasLoading","countsSentence","countsSentenceRef","isLoading","useEffect","DataGrid","index"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,0BAA0B,KAAK,SAAQ,CAAE;AAAA,EACvD,CAAC,QAAQ,EAAE,GAAG,2BAA2B,KAAK,SAAQ,CAAE;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,4BAA4B,KAAK,SAAQ,CAAE;AAAA,EACzD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,kBAAkB,KAAK,SAAQ,CAAE;AACjD,GACMC,KAAaC,GAAiB,eAAeF,EAAU,GCYvDG,KAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQA,SAASC,EAAOC,GAAuCC,GAAuB;AAC5E,QAAM,IAAI,MAAM,GAAGD,CAAI,KAAKC,CAAM,EAAE;AACtC;AAEA,SAASC,GAASC,GAAiCC,GAAkB;AAEnE,EAAKD,EAAO,OAAOC,CAAE,KACnBL,EAAO,eAAe,eAAeK,CAAE,gBAAgB;AAE3D;AAEA,MAAMC,KAAgB;AAAA,EACpB,MAAM;AAAA,EACN,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,aAAa,0BAAwB;AAAA,EACzE,UAAU,CAAC,IAAI;AAAA,EACf,sBAAsB;AACxB,GAEaC,KAAgE;AAAA,EAC3E,IAAI;AAAA,EACJ,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EAAA;AAAA,EAEF,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACH,MAAWA,EAAO,YAAA;AAAA,IAAY;AAAA,IAEvC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,gBAAA;AAAA,IAAgB;AAAA,IAE3C,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,IAErC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,IAExC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,QAAA;AAAA,IAAQ;AAAA,IAEnC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,WAAA;AAAA,IAAW;AAAA,EACtC;AAAA,EAEF,SAAS;AAAA,IACP,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,CAAC,gDAAgD;AAAA,MACzD,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,OACFA,EAAO,YAAA,EAAc,cACxBJ,EAAO,sBAAsB,6BAA6B,GAErDI,EAAO,YAAA;AAAA,IAChB;AAAA,IAEF,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAA,IAAW;AAAA,QAC9D,UAAU,CAAC,KAAK;AAAA,QAChB,sBAAsB;AAAA,MAAA;AAAA,MAExB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,CAAC,gDAAgD;AAAA,MACzD,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,GAAQI,OACVJ,EAAO,YAAA,EAAc,cACxBJ,EAAO,sBAAsB,6BAA6B,GAE5DI,EAAO,aAAaI,EAAK,GAAG,GACrBJ,EAAO,aAAA;AAAA,IAChB;AAAA,IAEF,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAWA,EAAO,eAAA;AAAA,IAAe;AAAA,IAE5C,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,UACE;AAAA,MACF,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,OAAO,EAAE,MAAM,CAAC,GAAGL,EAAY,EAAA;AAAA,UAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,MAAM,EAAA;AAAA,QAAE;AAAA,QAEhC,UAAU,CAAC,SAAS,MAAM;AAAA,QAC1B,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,UAAU,MAAM,MAAA,GAAS;AAAA,MACrD,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACK,GAAQI,MAAqC;AACpD,cAAMC,IAASL,EAAO,WAAA,EAAa,KAAK,CAACM,MAAMA,EAAE,OAAOF,EAAK,KAAK;AAClE,QAAIC,KAAA,QAAAA,EAAQ,UACVT,EAAO,iBAAiB,IAAIQ,EAAK,KAAK,8BAA8B,GAEtEJ,EAAO,QAAQ,CAAC,EAAE,OAAOI,EAAK,OAAO,MAAMA,EAAK,KAAA,CAAM,CAAC;AAAA,MACzD;AAAA,IAAA;AAAA,IAEF,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAYF;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACF,GAAQI,MAAyB;AACxC,QAAAL,GAASC,GAAQI,EAAK,EAAE,GACxBJ,EAAO,YAAYI,EAAK,EAAE;AAAA,MAC5B;AAAA,IAAA;AAAA,IAEF,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAYF;AAAA,MACZ,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACF,GAAQI,MAAyB;AACxC,QAAAL,GAASC,GAAQI,EAAK,EAAE,GACxBJ,EAAO,OAAOI,EAAK,EAAE;AAAA,MACvB;AAAA,IAAA;AAAA,IAEF,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACJ,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,IAE1C,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,EAC1C;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,IAEf,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GChQaO,KAA4BC,EAAI,wBAAwB;AAAA,EACnE,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,iBAAiB,EAAE,QAAQ,OAAA;AAC7B,CAAC,GAGYC,KAAoBD;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO,EAAE,OAAO,kBAAkB,KAAK,eAAA;AAAA,IAAe;AAAA,IAExD,iBAAiB,EAAE,OAAO,QAAA;AAAA,EAAQ;AAEtC,GAGaE,KAAwBF;AAAA,EACnC;AACF,GAIaG,KAAoBH;AAAA,EAC/B;AACF,GAGaI,KAAwBJ;AAAA,EACnC;AACF,GAGaK,KAAmBL;AAAA,EAC9B;AACF,GAGaM,KAAiBN,EAAI,iBAAiB,GAGtCO,KAAuBP;AAAA,EAClC;AACF,GAGaQ,KAAyBR,EAAI,4BAA4B,GAGzDS,KAAuBT;AAAA,EAClC;AACF,GClDaU,KAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKaC,KAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIaC,KAAyB,CAAC,WAAW,QAAQ,GAG7CC,KAAyB,CAAC,WAAW,YAAY,GC1BjDC,KAAiC,iCAGjCC,KAA8D;AAAA,EACzE,aAAa;AAAA,EACb,UAAU;AAAA,EACV,OAAO;AAAA,EACP,eAAe;AAAA,EACf,QAAQ;AACV;AAIO,SAASC,GAAiBC,GAA4C;AAC3E,MAAIA,MAAU,KAAM,QAAO;AAC3B,QAAMC,IAASC,GAAaF,GAAOG,GAAgB,SAAS;AAC5D,SAAOF,EAAO,KAAKA,EAAO,QAAQ;AACpC;AAGO,SAASG,GACdC,GACAC,GACS;;AACT,SAAOA,OAAeC,IAAAF,EAAQ,aAAR,gBAAAE,EAAkB,UAAS;AACnD;AAEO,SAASC,GAAiBH,GAAmC;;AAClE,WAAOE,IAAAF,EAAQ,aAAR,gBAAAE,EAAkB,UAAS;AACpC;AAGO,SAASE,EACdJ,GACAK,GACS;AACT,SAAOL,EAAQ,WAAW,iBAAiB,CAACK,EAAQ,IAAIL,EAAQ,EAAE;AACpE;AAIO,SAASM,GACdC,GACAF,GACU;AACV,SAAOE,EACJ,OAAO,CAACP,MAAYI,EAAoBJ,GAASK,CAAO,CAAC,EACzD,IAAI,CAACL,MAAYA,EAAQ,EAAE;AAChC;AAEO,SAASQ,GACdD,GACwC;AACxC,SAAOE,GAAsBF,CAAQ;AACvC;AAIO,SAASG,GAAgBV,GAAkC;AAChE,SAAOA,EAAQ,gBACX,GAAGA,EAAQ,QAAQ,MAAMA,EAAQ,aAAa,KAC9CA,EAAQ;AACd;AAGO,SAASW,GACdX,GACAC,GACAI,GACAO,GACyB;;AACzB,QAAMC,IAASd,GAAiBC,GAASC,CAAW,GAC9Ca,IAAmC;AAAA,IACvC,IAAId,EAAQ;AAAA,IACZ,QAAQA,EAAQ;AAAA,IAChB,UAAUA,EAAQ;AAAA,IAClB,QAAQA,EAAQ;AAAA,IAChB,gBAAcE,IAAAF,EAAQ,aAAR,gBAAAE,EAAkB,SAAQ;AAAA,IACxC,eAAeF,EAAQ;AAAA,IACvB,MAAMA,EAAQ;AAAA,IACd,WAAWA,EAAQ;AAAA,IACnB,SAASK,EAAQ,IAAIL,EAAQ,EAAE;AAAA,IAC/B,UAAUA,EAAQ,WAAW;AAAA,IAC7B,YAAYI,EAAoBJ,GAASK,CAAO;AAAA,IAChD,QAASO,IAELZ,EAAQ,WAAW,UACjB,EAAE,UAAU,YACZ,YAHF;AAAA,EAGE;AAER,SAAIA,EAAQ,YAAY,CAACa,MAAQC,EAAQ,eAAed,EAAQ,SAAS,OAClEc;AACT;AAGA,MAAMC,yBAAoB,IAAA,GACpBC,KAAe;AAKd,SAASC,GAAiBC,GAAaC,GAA0B;AACtE,QAAMC,IAAQJ,GAAa,KAAKE,CAAG;AACnC,MAAI,CAACE,EAAO,QAAOF;AACnB,QAAM,GAAGG,GAAMC,GAAOC,CAAI,IAAIH,GACxBI,IAAU,IAAI;AAAA,IAClB,KAAK,IAAI,OAAOH,CAAI,GAAG,OAAOC,CAAK,IAAI,GAAG,OAAOC,CAAI,CAAC;AAAA,EAAA;AAExD,MAAI,OAAO,MAAMC,EAAQ,QAAA,CAAS,EAAG,QAAON;AAC5C,QAAMO,IAASC,GAAaP,CAAQ;AACpC,MAAIQ,IAAYZ,GAAc,IAAIU,CAAM;AACxC,SAAKE,MACHA,IAAY,IAAI,KAAK,eAAeF,GAAQ;AAAA,IAC1C,WAAW;AAAA,IACX,UAAU;AAAA,EAAA,CACX,GACDV,GAAc,IAAIU,GAAQE,CAAS,IAE9BA,EAAU,OAAOH,CAAO;AACjC;AAEA,MAAM3D,KAAoC,IAAI;AAAA,EAC5CwB;AACF;AAEO,SAASuC,GACdzD,GACmC;AACnC,SAAON,GAAa,IAAIM,CAAE;AAC5B;AAGO,SAAS0D,GACdC,GAC8B;AAC9B,QAAMC,IAAoC,CAAA;AAC1C,aAAWC,KAASF;AAClB,IAAIF,GAAoBI,EAAM,KAAK,KACjCD,EAAI,KAAK,EAAE,OAAOC,EAAM,OAAO,MAAMA,EAAM,MAAM;AAGrD,SAAOD;AACT;ACrIO,SAASE,GAAa,EAAE,SAAAjC,KAAyC;AACtE,SACE,gBAAAkC,EAAC,UAAK,KAAI,QAAO,WAAWnD,MACzB,YAAQ,SAAA,CACX;AAEJ;AAEA,SAASoD,IAAW;AAClB,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,IAAI;AACjC,SACE,gBAAAH,EAAC,UAAK,WAAWtD,GAAA,GACd,UAAAwD,EAAE,mCAAmC,WAAW,GACnD;AAEJ;AAIO,SAASE,GAAa,EAAE,SAAAtC,KAAyC;AACtE,SAAIA,EAAQ,aAAa,yBAAcmC,GAAA,EAAS,IAE9C,gBAAAD,EAAC,UAAK,KAAI,QAAO,WAAWpD,GAAA,GACzB,UAAAkB,EAAQ,SAAS,KAAA,CACpB;AAEJ;AAEO,SAASuC,GAAkB,EAAE,SAAAvC,KAAyC;AAC3E,QAAM,EAAE,GAAAoC,EAAA,IAAMC,EAAe,IAAI;AACjC,SAAIrC,EAAQ,kBAAkB,yBAAcmC,GAAA,EAAS,IAEnD,gBAAAK,EAAC,QAAA,EAAK,WAAW7D,GAAA,GACf,UAAA;AAAA,IAAA,gBAAAuD,EAAC,UAAK,KAAI,QAAO,WAAWpD,GAAA,GACzB,YAAQ,eACX;AAAA,IACCkB,EAAQ,iBAAiB,eACxB,gBAAAkC,EAAC,QAAA,EAAK,WAAWtD,GAAA,GACd,UAAAwD,EAAE,6CAA6C,aAAa,EAAA,CAC/D,IACE;AAAA,EAAA,GACN;AAEJ;AAEO,SAASK,GAAS,EAAE,SAAAzC,KAAyC;AAClE,QAAM,EAAE,MAAA0C,EAAA,IAASL,EAAe,IAAI;AACpC,SAAIrC,EAAQ,SAAS,yBAAcmC,GAAA,EAAS,2BAClC,UAAAlB,GAAiBjB,EAAQ,MAAM0C,EAAK,QAAQ,GAAE;AAC1D;AAEO,SAASC,GAAc,EAAE,SAAA3C,KAAyC;AACvE,QAAM,EAAE,MAAA0C,EAAA,IAASL,EAAe,IAAI;AACpC,SAAIrC,EAAQ,cAAc,yBAAcmC,GAAA,EAAS,IAE/C,gBAAAD,EAAC,QAAA,EAAK,WAAWlD,GAAA,GACd,aAAagB,EAAQ,WAAW0C,EAAK,QAAQ,EAAA,CAChD;AAEJ;AAIO,SAASE,GAAU,EAAE,SAAA5C,KAAyC;AACnE,MAAIA,EAAQ,UAAU,KAAM,0BAAQmC,GAAA,EAAS;AAC7C,QAAMU,IAASnD,GAAiBM,EAAQ,KAAK;AAC7C,SAAK6C,IAQH,gBAAAX;AAAA,IAACY;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAOD,EAAO;AAAA,MACd,OAAOA,EAAO;AAAA,MACd,UAAU7C,EAAQ;AAAA,MAClB,uBAAuB,KAAK,IAAI,GAAG6C,EAAO,KAAK;AAAA,MAC/C,uBAAuB,KAAK,IAAI,GAAGA,EAAO,KAAK;AAAA,IAAA;AAAA,EAAA,IAZ/C,gBAAAX,EAAC,QAAA,EAAK,KAAI,OAAM,WAAWlD,MACxB,UAAAgB,EAAQ,MAAM,KAAA,EAAK,CACtB;AAaN;AAcO,SAAS+C,GAAW,EAAE,SAAA/C,GAAS,SAAAK,GAAS,aAAAJ,KAAgC;AAC7E,QAAM,EAAE,GAAAmC,EAAA,IAAMC,EAAe,IAAI;AACjC,MAAIhC,GAAS;AACX,UAAM2C,IAAQZ,EAAE,6BAA6B,SAAS;AACtD,WACE,gBAAAI,EAAC,QAAA,EAAK,WAAWvD,GAAA,GAEf,UAAA;AAAA,MAAA,gBAAAiD,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWhD,GAAA,GAClC,UAAA,gBAAAgD,EAACe,IAAA,EAAQ,MAAK,MAAK,OAAAD,EAAA,CAAc,GACnC;AAAA,MACA,gBAAAd,EAAC,UAAM,UAAAc,EAAA,CAAM;AAAA,IAAA,GACf;AAAA,EAEJ;AACA,QAAME,IAAOC,EAA8BnD,EAAQ,MAAM;AACzD,MAAIoD,IAAyB;AAC7B,SAAIpD,EAAQ,WAAW,YACrBoD,IACEnD,KAAeE,GAAiBH,CAAO,IACnCoC;AAAA,IACE;AAAA,IACA;AAAA,EAAA,IAEDpC,EAAQ,SAAS,OAGxB,gBAAAwC,EAAC,QAAA,EAAK,WAAW7D,GAAA,GACf,UAAA;AAAA,IAAA,gBAAAuD;AAAA,MAACmB;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAASH,EAAK;AAAA,QACd,SAAS,CAACA,EAAK;AAAA,QACf,SAASA,EAAK,0BAASI,IAAA,EAAM,eAAY,QAAO,IAAK;AAAA,QAEpD,UAAAlB,EAAEc,EAAK,KAAKA,EAAK,EAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAErBE,sBACE,QAAA,EAAK,KAAI,QAAO,WAAWvE,GAAA,GACzB,UAAAuE,EAAA,CACH,IACE;AAAA,EAAA,GACN;AAEJ;AC1HO,SAASG,GACdC,GACAC,GACiC;AACjC,QAAM,EAAE,GAAArB,EAAA,IAAMC,EAAe,IAAI;AACjC,SAAOqB,EAAQ,MACRD,IACE;AAAA,IACL;AAAA;AAAA,MAEE,IAAI;AAAA,MACJ,MAAME,GAAchG,IAAY,EAAE,eAAe,IAAM;AAAA,MACvD,OAAOyE,EAAE,mCAAmC,QAAQ;AAAA,MACpD,SAAS,CAACpC,MAAA;;AAAY,gBAAA4D,KAAA1D,IAAAsD,EAAa,SAAQ,aAArB,gBAAAI,EAAA,KAAA1D,GAAgCF;AAAA;AAAA,MACtD,UAAU,CAACA,MAAYA,EAAQ,WAAW;AAAA,MAC1C,gBAAgB,CAACA,MACfA,EAAQ,WAAW,UACfoC;AAAA,QACE;AAAA,QACA;AAAA,MAAA,IAEF;AAAA,IAAA;AAAA,EACR,IAhBqB,CAAA,GAkBtB,CAACA,GAAGoB,GAAcC,CAAS,CAAC;AACjC;AAQO,SAASI,GAA4B;AAAA,EAC1C,aAAA5D;AAAA,EACA,YAAA6D;AAAA,EACA,YAAAC;AACF,GAA0E;AACxE,QAAM,EAAE,GAAA3B,EAAA,IAAMC,EAAe,IAAI;AAEjC,SAAOqB,EAAQ,MAAM;AACnB,UAAMM,IAAc,CAACC,MAA2C;AAC9D,YAAMf,IAAOC,EAA8Bc,CAAM;AACjD,aAAO7B,EAAEc,EAAK,KAAKA,EAAK,EAAE;AAAA,IAC5B,GACMgB,IAAkCC,EAA2B;AAAA,MACjE,CAACF,OAAY,EAAE,OAAOA,GAAQ,OAAOD,EAAYC,CAAM,EAAA;AAAA,IAAE,GAErDG,IAAehC,EAAE,qBAAqB,SAAS;AA+HrD,WA7HmD;AAAA,MACjD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQA,EAAE,qCAAqC,MAAM;AAAA,QACrD,WAAW;AAAA,QACX,KAAK;AAAA,QACL,UAAU;AAAA,QACV,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,CAACpC,MAAYA,EAAQ;AAAA,QAC5B,aAAa,CAACA,MAAYA,EAAQ;AAAA,QAClC,MAAM;AAAA,QACN,MAAM,CAACA,MAAY,gBAAAkC,EAACD,MAAa,SAAAjC,EAAA,CAAkB;AAAA,MAAA;AAAA,MAErD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,qCAAqC,UAAU;AAAA,QACzD,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO,CAACpC,MAAA;;AAAY,mBAAAE,IAAAF,EAAQ,aAAR,gBAAAE,EAAkB,SAAQ;AAAA;AAAA;AAAA,QAE9C,MAAM;AAAA;AAAA,QAEN,SAAS,EAAE,MAAM,QAAQ,WAAWC,GAAA;AAAA,QACpC,MAAM,CAACH,MAAY,gBAAAkC,EAACI,MAAa,SAAAtC,EAAA,CAAkB;AAAA,MAAA;AAAA,MAErD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,0CAA0C,gBAAgB;AAAA,QACpE,MAAM;AAAA,QACN,gBAAgB;AAAA,QAChB,OAAO,CAACpC,MAAYA,EAAQ;AAAA,QAC5B,aAAa,CAACA,MAAYA,EAAQ;AAAA,QAClC,MAAM;AAAA,QACN,MAAM,CAACA,MAAY,gBAAAkC,EAACK,MAAkB,SAAAvC,EAAA,CAAkB;AAAA,MAAA;AAAA,MAE1D;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,iCAAiC,MAAM;AAAA,QACjD,MAAM;AAAA,QACN,gBAAgB;AAAA;AAAA,QAEhB,OAAO,CAACpC,MAAYA,EAAQ;AAAA,QAC5B,MAAM;AAAA,QACN,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,MAAM,CAACA,MAAY,gBAAAkC,EAACO,MAAS,SAAAzC,EAAA,CAAkB;AAAA,MAAA;AAAA,MAEjD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,sCAAsC,OAAO;AAAA,QACvD,OAAO;AAAA,QACP,MAAM;AAAA,QACN,gBAAgB;AAAA,QAChB,OAAO,CAACpC,MAAYA,EAAQ;AAAA,QAC5B,MAAM;AAAA,QACN,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,MAAM,CAACA,MAAY,gBAAAkC,EAACS,MAAc,SAAA3C,EAAA,CAAkB;AAAA,MAAA;AAAA,MAEtD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,kCAAkC,OAAO;AAAA,QACnD,OAAO;AAAA;AAAA;AAAA,QAGP,MAAM;AAAA,QACN,gBAAgB;AAAA,QAChB,OAAO,CAACpC,MAAY;AAClB,gBAAM6C,IAASnD,GAAiBM,EAAQ,KAAK;AAC7C,iBAAO6C,IAASwB,GAAgBxB,CAAM,IAAI;AAAA,QAC5C;AAAA,QACA,aAAa,CAAC7C,MAAYA,EAAQ;AAAA,QAClC,MAAM;AAAA,QACN,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,MAAM,CAACA,MAAY,gBAAAkC,EAACU,MAAU,SAAA5C,EAAA,CAAkB;AAAA,MAAA;AAAA,MAElD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQoC,EAAE,mCAAmC,QAAQ;AAAA,QACrD,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAACpC,MAAYA,EAAQ;AAAA,QAC5B,aAAa,CAACA,MAAYgE,EAAYhE,EAAQ,MAAM;AAAA;AAAA,QAEpD,MAAM,CAACsE,GAAGC,MACR9E,GAAoB6E,EAAE,MAAM,IAAI7E,GAAoB8E,EAAE,MAAM;AAAA,QAC9D,QAAQ,EAAE,MAAM,UAAU,SAASL,EAAA;AAAA,QACnC,QAAQ;AAAA,QACR,MAAM,CAAClE,MACL,gBAAAkC;AAAA,UAACa;AAAA,UAAA;AAAA,YACC,SAAA/C;AAAA,YACA,SAAS8D,EAAW,IAAI9D,EAAQ,EAAE;AAAA,YAClC,aAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,MAGJ;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ,gBAAAiC,EAACsC,GAAA,EAAgB,UAAAJ,EAAA,CAAa;AAAA,QACtC,aAAaA;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,QAAQ;AAAA;AAAA;AAAA,QAGR,MAAM,CAACpE,GAASyE,MACd,gBAAAvC;AAAA,UAACwC;AAAA,UAAA;AAAA,YACC,KAAK1E;AAAA,YACL,SAAS+D;AAAA,YACT,mBAAiBU,EAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3B;AAAA,IAEJ;AAAA,EAGJ,GAAG,CAACrC,GAAGnC,GAAa6D,GAAYC,CAAU,CAAC;AAC7C;ACnLA,SAASjG,EAAOC,GAAwCC,GAAuB;AAC7E,QAAM,IAAI,MAAM,GAAGD,CAAI,KAAKC,CAAM,EAAE;AACtC;AAEA,MAAM2G,KAAkC,IAAI,IAAIvF,EAA2B;AAE3E,SAASwF,GAAWzG,GAA6C;AAC/D,SAAOwG,GAAW,IAAIxG,CAAE;AAC1B;AAEO,SAAS0G,GACdC,GACAC,GACyB;AACzB,QAAMC,IAAO,MAA6BF,EAAQ,SAC5CG,IAAO,MAA6BF,EAAQ;AAElD,WAASG,EAAK/G,GAA6B;AAEzC,WADgB8G,IAAO,SAAS,KAAK,CAACE,MAAcA,EAAU,OAAOhH,CAAE,KACrDL,EAAO,eAAe,eAAeK,CAAE,gBAAgB;AAAA,EAC3E;AAGA,WAASiH,EAAUjH,GAA6B;;AAC9C,UAAM6B,IAAUkF,EAAK/G,CAAE,GACjBkH,KAAQnF,IAAA8E,EAAA,MAAA,gBAAA9E,EAAQ;AACtB,WAAImF,KAAS,CAACA,EAAM,SAASlH,CAAE,KAC7BL;AAAA,MACE;AAAA,MACA,YAAYK,CAAE;AAAA,IAAA,GAGX6B;AAAA,EACT;AAEA,WAASsF,IAAqB;AAC5B,UAAM,EAAE,UAAA/E,GAAU,YAAAuD,EAAA,IAAemB,EAAA;AACjC,WAAO3E,GAAgBC,GAAUuD,CAAU;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,cAAc;AACZ,YAAM,EAAE,aAAA7D,GAAa,QAAAgE,GAAQ,YAAAsB,EAAA,IAAeN,EAAA;AAC5C,aAAO,EAAE,aAAAhF,GAAa,QAAAgE,GAAQ,YAAAsB,GAAY,YAAYD,EAAA,EAAW,OAAA;AAAA,IACnE;AAAA,IAEA,YAAY;;AACV,eAAOpF,IAAA8E,EAAA,MAAA,gBAAA9E,EAAQ,gBAAe+E,EAAA,EAAO,SAAS,IAAI,CAACO,MAAMA,EAAE,EAAE;AAAA,IAC/D;AAAA,IAEA,kBAAkB;AAChB,YAAM,EAAE,UAAAjF,GAAU,aAAAN,GAAa,YAAA6D,GAAY,WAAA2B,EAAA,IAAcR,EAAA,GACnDrE,IAAY,EAAQ6E,EAAU;AACpC,aAAOlF,EAAS;AAAA,QAAI,CAACP,MACnBW,GAAiBX,GAASC,GAAa6D,GAAYlD,CAAS;AAAA,MAAA;AAAA,IAEhE;AAAA,IAEA,YAAY;AACV,aAAOJ,GAAcyE,EAAA,EAAO,QAAQ;AAAA,IACtC;AAAA,IAEA,eAAe;;AACb,eAAO/E,IAAA8E,EAAA,MAAA,gBAAA9E,EAAQ,mBAAkB,CAAA;AAAA,IACnC;AAAA,IAEA,aAAawF,GAAK;;AAChB,OAAAxF,IAAA8E,EAAA,MAAA,QAAA9E,EAAQ,aAAawF;AAAA,IACvB;AAAA,IAEA,cAAc;AACZ,YAAMxH,IAAS8G,EAAA;AACf,aAAK9G,KACLA,EAAO,aAAaoH,GAAU,GACvBpH,EAAO,aAAA,KAFM,CAAA;AAAA,IAGtB;AAAA,IAEA,iBAAiB;;AACf,OAAAgC,IAAA8E,EAAA,MAAA,QAAA9E,EAAQ;AAAA,IACV;AAAA,IAEA,UAAU;;AACR,aAAO2B,KAAqB3B,IAAA8E,EAAA,MAAA,gBAAA9E,EAAQ,cAAa,CAAA,CAAE;AAAA,IACrD;AAAA,IAEA,QAAQyF,GAAO;AACb,YAAMzH,IAAS8G,EAAA;AACf,UAAI,CAAC9G,EAAQ;AACb,YAAM2C,IAAS,IAAI;AAAA,QACjB3C,EACG,WAAA,EACA,OAAO,CAACK,MAAWA,EAAO,WAAW,EAAI,EACzC,IAAI,CAACA,MAAWA,EAAO,EAAE;AAAA,MAAA;AAE9B,iBAAWyD,KAAS2D;AAClB,YAAI,CAAC/D,GAAoBI,EAAM,KAAK,KAAKnB,EAAO,IAAImB,EAAM,KAAK;AAC7D;AAEJ,MAAA9D,EAAO,QAAQyH,CAAK;AAAA,IACtB;AAAA,IAEA,aAAa;AACX,YAAMzH,IAAS8G,EAAA;AACf,UAAI,CAAC9G,EAAQ,QAAO,CAAA;AACpB,YAAM,EAAE,aAAA+B,EAAA,IAAgBgF,EAAA,GAClBW,IAAyC,CAAA;AAC/C,iBAAWrH,KAAUL,EAAO;AAC1B,QAAK0G,GAAWrG,EAAO,EAAE,KACzBqH,EAAQ,KAAK;AAAA,UACX,IAAIrH,EAAO;AAAA,UACX,OAAOA,EAAO;AAAA,UACd,SAASA,EAAO;AAAA,UAChB,SAASA,EAAO;AAAA,UAChB,UAAUA,EAAO;AAAA,UACjB,QAAQA,EAAO,WAAW0B,KAAe1B,EAAO,OAAO;AAAA,QAAA,CACxD;AAEH,aAAOqH;AAAA,IACT;AAAA,IAEA,OAAOzH,GAAI;AACT,aAAO8G,EAAA,EAAO,SAAS,KAAK,CAACE,MAAcA,EAAU,OAAOhH,CAAE;AAAA,IAChE;AAAA,IAEA,YAAYA,GAAI;;AACd,MAAAiH,EAAUjH,CAAE,IACZ+B,IAAA8E,EAAA,MAAA,QAAA9E,EAAQ,YAAY/B;AAAA,IACtB;AAAA,IAEA,SAASA,GAAI;;AACX,MAAAiH,EAAUjH,CAAE,IACZ+B,IAAA8E,QAAA,QAAA9E,EAAQ,SAAS/B,GAAI;AAAA,IACvB;AAAA,IAEA,OAAOA,GAAI;AACT,YAAM6B,IAAUkF,EAAK/G,CAAE,GACjB,EAAE,WAAAsH,EAAA,IAAcR,EAAA;AACtB,MAAKQ,EAAU,YACb3H,EAAO,sBAAsB,6BAA6B,GAExDkC,EAAQ,WAAW,WACrBlC,EAAO,mBAAmB,OAAO,GAEnC2H,EAAU,SAASzF,CAAO;AAAA,IAC5B;AAAA,IAEA,eAAe;AACb,YAAM,EAAE,WAAAyF,EAAA,IAAcR,EAAA;AACtB,MAAKQ,EAAU,kBACb3H,EAAO,sBAAsB,uCAAuC;AAEtE,YAAM4H,IAAMJ,EAAA;AACZ,aAAII,EAAI,WAAW,KACjB5H,EAAO,mBAAmB,iBAAiB,GAE7C2H,EAAU,eAAeC,CAAG,GACrBA;AAAA,IACT;AAAA,IAEA,eAAe;;AACb,YAAM,EAAE,WAAAD,EAAA,IAAcR,EAAA;AACtB,MAAKQ,EAAU,kBACb3H,EAAO,sBAAsB,gCAAgC;AAE/D,YAAM4H,MAAMxF,IAAA8E,QAAA,gBAAA9E,EAAQ,mBAAkB,CAAA;AACtC,aAAIwF,EAAI,WAAW,KACjB5H,EAAO,mBAAmB,gBAAgB,GAE5C2H,EAAU,eAAeC,CAAG,GACrBA;AAAA,IACT;AAAA,EAAA;AAEJ;ACtJA,MAAMG,KAA4B,CAAA,GAC5BC,KAAe,CAAC9F,MAAqCA,EAAQ,IAC7D+F,KAAkB,CAAC/F,MACvBU,GAAgBV,CAAO,GAQZgG,KAAoBC,GAG/B,SAA2BC,GAAOC,GAAK;AACvC,QAAM;AAAA,IACJ,IAAAhI,IAAKqB;AAAA,IACL,UAAAe;AAAA,IACA,QAAA0D,IAAS;AAAA,IACT,OAAAmC;AAAA,IACA,WAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,YAAA5C,IAAa+B;AAAA,IACb,aAAA5F,IAAc;AAAA,IACd,SAAA0G;AAAA,IACA,SAAAC,KAAU;AAAA,IACV,QAAAC,IAAS;AAAA,IACT,oBAAAC,KAAqB;AAAA,IACrB,WAAAC;AAAA,IACA,cAAcC;AAAA,IACd,mBAAmBC;AAAA,IACnB,oBAAoBC;AAAA,IACpB,GAAGC;AAAA,EAAA,IACDjB,GAEE,EAAE,GAAA9D,GAAG,MAAAM,MAASL,EAAe,IAAI,GACjCyC,IAAUsC,EAA8B,IAAI,GAE5CC,IAAa3D,EAAQ,MAAM,IAAI,IAAII,CAAU,GAAG,CAACA,CAAU,CAAC,GAG5DyB,IACJ,EAAQmB,KACRL,MAAc,UACdC,MAAqB,UACrBC,MAAsB,QAIlBe,IAAcC,GAAA,GACd9B,IAAwC;AAAA,IAC5C,UAAAe;AAAA,IACA,gBAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,GAIIlD,IAAe4D,EAAO3B,CAAS;AACrC,EAAAjC,EAAa,UAAUiC;AAEvB,QAAMR,IAA8B;AAAA,IAClC,UAAA1E;AAAA,IACA,WAAAkF;AAAA,IACA,YAAY4B;AAAA,IACZ,aAAApH;AAAA,IACA,QAAAgE;AAAA,IACA,YAAAsB;AAAA,EAAA,GAEIR,IAAUqC,EAAOnC,CAAI;AAC3B,EAAAF,EAAQ,UAAUE;AAElB,QAAM,CAAC/G,CAAM,IAAIsJ;AAAA,IAAS,MACxB3C,GAA8BC,GAASC,CAAO;AAAA,EAAA;AAEhD,EAAA0C,GAAoBtB,GAAK,MAAMjI,GAAQ,CAACA,CAAM,CAAC,GAG/CwJ,GAAqBrJ,IAAwBH,GAAQC,CAAE;AAIvD,QAAMmH,IAAW5B;AAAA,IACf,MAAMpD,GAAgBC,GAAU8G,CAAU;AAAA,IAC1C,CAAC9G,GAAU8G,CAAU;AAAA,EAAA,GAEjBM,IAASjE,EAAQ,MAAMlD,GAAcD,CAAQ,GAAG,CAACA,CAAQ,CAAC,GAE1DwD,KAAaR,GAAqBC,GAAc,EAAQgD,CAAS,GACjEZ,KAAU/B,GAA4B;AAAA,IAC1C,aAAA5D;AAAA,IACA,YAAYoH;AAAA,IACZ,YAAAtD;AAAA,EAAA,CACD,GAEK6D,KAAsBlE;AAAA,IAC1B,MACE,CAAC1D,MAAuD;AACtD,UAAII,EAAoBJ,GAASqH,CAAU,EAAG,QAAO;AACrD,UAAIA,EAAW,IAAIrH,EAAQ,EAAE;AAC3B,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQoC;AAAA,YACN;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAGJ,YAAMyF,IAAU;AAAA,QACd,UAAUzF;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,eAAeA;AAAA,UACb;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,QAAQA;AAAA,UACN;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,OAAOA;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAEF,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QACEpC,EAAQ,WAAW,gBACf6H,EAAQ,WACRA,EAAQ7H,EAAQ,MAAM;AAAA,MAAA;AAAA,IAEhC;AAAA,IACF,CAACqH,GAAYjF,CAAC;AAAA,EAAA,GAMV0F,KAAqB,CAACC,MAAsC;AAChE,IAAKA,KACL,sBAAsB,MAAM;;AAC1B,YAAMC,IAAS,SAAS;AACxB,OAAI,CAACA,KAAUA,MAAW,SAAS,WACjC9H,IAAA4E,EAAQ,YAAR,QAAA5E,EAAiB,SAAS6H,GAAS;AAAA,IAEvC,CAAC;AAAA,EACH,GAIME,KAAc9D,EAA2B,IAAI,CAAC+D,MAAU;AAC5D,UAAMhF,IAAOC,EAA8B+E,CAAK;AAChD,WAAO,EAAE,OAAAA,GAAO,OAAO9F,EAAEc,EAAK,KAAKA,EAAK,EAAE,EAAA;AAAA,EAC5C,CAAC,GAEKiF,uBACHC,GAAA,EACC,UAAA;AAAA,IAAA,gBAAA5F,EAAC4F,EAAgB,WAAhB,EACC,UAAA;AAAA,MAAA,gBAAAlG;AAAA,QAACkG,EAAgB;AAAA,QAAhB;AAAA,UACC,aAAahG;AAAA,YACX;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAEF,gBAAAF;AAAA,QAACkG,EAAgB;AAAA,QAAhB;AAAA,UACC,OAAM;AAAA,UACN,OAAOhG,EAAE,mCAAmC,QAAQ;AAAA,UACpD,SAAS;AAAA,YACP,EAAE,OAAO,MAAM,OAAOA,EAAE,8BAA8B,KAAK,EAAA;AAAA,YAC3D,GAAG6F;AAAA,UAAA;AAAA,QACL;AAAA,MAAA;AAAA,MAEF,gBAAA/F,EAACkG,EAAgB,aAAhB,CAAA,CAA4B;AAAA,IAAA,GAC/B;AAAA,IACA,gBAAA5F,EAAC4F,EAAgB,SAAhB,EACE,UAAA;AAAA,MAAA1B,IACC,gBAAAxE;AAAA,QAACkG,EAAgB;AAAA,QAAhB;AAAA,UACC,OAAOhG,EAAE,uCAAuC,eAAe;AAAA,UAC/D,MAAM,gBAAAF,EAACmG,IAAA,EAAY,eAAY,OAAA,CAAO;AAAA,UACtC,UAAU,CAAC,EAAE,gBAAAC,QAAqB;AAChC,kBAAM5C,IAAM,CAAC,GAAG4C,CAAc;AAC9B,YAAA5B,EAAehB,CAAG,GAClBoC,GAAmBpC,EAAI,CAAC,CAAC;AAAA,UAC3B;AAAA,QAAA;AAAA,MAAA,IAEA;AAAA,MACHe,IACC,gBAAAjE,EAAA+F,GAAA,EAGE,UAAA;AAAA,QAAA,gBAAArG;AAAA,UAACsG;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP,MAAK;AAAA,YACL,WAAW,gBAAAtG,EAACmG,IAAA,EAAY,eAAY,OAAA,CAAO;AAAA,YAC3C,iBAAe/C,EAAS,WAAW,IAAI,KAAO;AAAA,YAC9C,oBAAkBA,EAAS,WAAW,IAAIgC,IAAc;AAAA,YACxD,SAAS,MAAM;AACb,cAAIhC,EAAS,WAAW,KACxBmB,EAAenB,CAAQ;AAAA,YACzB;AAAA,YAEC,UAAAlD;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,gBACE,WAAWqG,GAAanD,EAAS,QAAQ5C,EAAK,QAAQ;AAAA,cAAA;AAAA,YACxD;AAAA,UACF;AAAA,QAAA;AAAA,QAEF,gBAAAR,EAACsC,GAAA,EAAe,IAAI8C,GACjB,UAAAlF;AAAA,UACC;AAAA,UACA;AAAA,QAAA,EACF,CACF;AAAA,MAAA,EAAA,CACF,IACE;AAAA,MACJ,gBAAAF,EAACkG,EAAgB,cAAhB,CAAA,CAA6B;AAAA,IAAA,EAAA,CAChC;AAAA,EAAA,GACF,GAKIM,IAAcvE,EAA2B;AAAA,IAC7C,CAAC+D,MAAUP,EAAOO,CAAK,IAAI;AAAA,EAAA,GAEvBS,IAAcD,EAAY;AAAA,IAAI,CAACR,MACnCU,GAAiCxG,GAAGM,EAAK,UAAUwF,GAAOP,EAAOO,CAAK,CAAC;AAAA,EAAA,GAKnE,CAACW,IAAcC,EAAe,IAAItB,EAAS,EAAE,GAC7CuB,IAAa3B,EAAO,EAAK,GACzB4B,IAAiBL,EAAY,KAAK,IAAI,GACtCM,IAAoB7B,EAAO4B,CAAc;AAC/C,EAAAC,EAAkB,UAAUD;AAC5B,QAAME,IAAY7B,EAAW,OAAO;AACpC,SAAA8B,GAAU,MAAM;AACd,IAAIJ,EAAW,WAAW,CAACG,KACzBJ,GAAgBG,EAAkB,OAAO,GAE3CF,EAAW,UAAUG;AAAA,EACvB,GAAG,CAACA,CAAS,CAAC,GAGZ,gBAAA1G;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,kBAAe;AAAA,MACf,qBAAmBrE;AAAA,MACnB,WAAWM,GAA0B,EAAE,QAAAoI,GAAQ,WAAAE,IAAW;AAAA,MACzD,GAAGI;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAjF;AAAA,UAACkH;AAAA,UAAA;AAAA,YACC,KAAKtE;AAAA,YACL,SAAAc;AAAA,YACA,MAAMrF;AAAA,YACN,UAAUuF;AAAA,YACV,SAASa,MAAWvE,EAAE,6BAA6B,mBAAmB;AAAA,YACtE,cAAY4E;AAAA,YACZ,mBAAiBC;AAAA,YACjB,oBAAkBC;AAAA,YAElB,QAAQ/I;AAAA,YACR,eAAe;AAAA,YACf,oBAAA2I;AAAA,YACA,UAAS;AAAA,YAET,eAAevB,IAAa,aAAa;AAAA,YACzC,cAAcc;AAAA,YACd,qBAAqBC;AAAA,YACrB,sBAAsBC;AAAA,YACtB,qBAAAqB;AAAA,YACA,gBAAe;AAAA,YACf,gBAAc;AAAA,YACd,gBAAc;AAAA,YACd,mBAAiB;AAAA,YACjB,aAAa7B;AAAA,YACb,qBAAmB;AAAA,YAEnB,QAAA9B;AAAA,YACA,OAAO;AAAA,cACL,QACEmC,KAAA,gBAAAA,EAAO,UACPhE;AAAA,gBACE;AAAA,gBACA;AAAA,cAAA;AAAA,cAEJ,aAAagE,KAAA,gBAAAA,EAAO;AAAA,cACpB,SAASA,KAAA,gBAAAA,EAAO;AAAA,YAAA;AAAA,YAElB,OAAO;AAAA,cACL,OAAOhE,EAAE,iCAAiC,0BAA0B;AAAA,cACpE,aAAaA;AAAA,gBACX;AAAA,gBACA;AAAA,cAAA;AAAA,cAEF,gBAAgBA;AAAA,gBACd;AAAA,gBACA;AAAA,cAAA;AAAA,YACF;AAAA,YAEF,SAAA+F;AAAA,YACA,SAAAvB;AAAA,YACA,QAAAC;AAAA,YACA,aAAA5G;AAAA,YAEA,qBAAmB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpB0I,EAAY,SAAS,IACpB,gBAAAzG,EAAC,OAAE,WAAW/C,GAAA,GACX,UAAAwJ,EAAY,IAAI,CAAC3F,GAAOqG,wBACtB,QAAA,EACE,UAAA;AAAA,UAAAA,IAAQ,IACP,gBAAA7G,EAAA+F,GAAA,EACG,UAAA;AAAA,YAAA;AAAA,YACD,gBAAArG,EAAC,QAAA,EAAK,eAAY,QAAO,UAAA,KAAC;AAAA,YAAQ;AAAA,UAAA,EAAA,CACpC,IACE;AAAA,UACHc;AAAA,QAAA,EAAA,GAPQ0F,EAAYW,CAAK,CAQ5B,CACD,GACH,IACE;AAAA,0BACH7E,GAAA,EAAe,MAAK,UAAS,eAAY,QACvC,UAAAqE,GAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED7C,GAAkB,cAAc;","x_google_ignoreList":[0]}
@@ -5,7 +5,7 @@ import { T as v, c as N, a as R } from "./parts-tGzYz0uG.js";
5
5
  import { e as k, s as P, w as A, a as B } from "./export-files-BByoK9Cg.js";
6
6
  import { i as O } from "./is-development-CLUAnsU7.js";
7
7
  import { d as j, g as Q, u as _ } from "./grid-context-jn9y8tNE.js";
8
- import { g as U } from "./data-grid-bzvkQ3kc.js";
8
+ import { g as U } from "./data-grid-C9xlUMLt.js";
9
9
  function S() {
10
10
  var t;
11
11
  return ((t = _()) == null ? void 0 : t.toolbarSeam) ?? null;
@@ -156,4 +156,4 @@ export {
156
156
  Z as D,
157
157
  Y as a
158
158
  };
159
- //# sourceMappingURL=toolbar-Co46MEn9.js.map
159
+ //# sourceMappingURL=toolbar-CC-Ls_eC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-Co46MEn9.js","sources":["../../src/components/data-grid/toolbar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* DataGridToolbar: the shared table toolbar parts over DataGrid. */\n/* */\n/* The parts live in `_shared/table-toolbar/` and reach the grid only */\n/* through its `TableToolbarSeam` (`./toolbar-seam.ts`). Inside the */\n/* grid's `toolbar` slot they find it through `DataGridContext`; a */\n/* toolbar lifted into a page header uses `DataGridToolbarProvider`. */\n/* Callbacks get a `ToolbarActionContext` (ids and an export snapshot), */\n/* never an engine API. No AG Grid, no DataTable import. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TableToolbarProvider } from '../_shared/table-toolbar/context';\nimport {\n exportFileName,\n snapshotToTable,\n writeTablePdf,\n writeTableXlsx,\n} from '../_shared/table-toolbar/export-files';\nimport {\n actionContextOf,\n createTableToolbarParts,\n} from '../_shared/table-toolbar/parts';\nimport type { TableToolbarSeam } from '../_shared/table-toolbar/seam';\nimport { isDevelopment } from '../_shared/is-development';\nimport {\n dataGridMountSignal,\n getDataGridToolbarSeam,\n useDataGridContext,\n} from './grid-context';\nimport { dataGridSeamCaption } from './toolbar-seam';\nimport type {\n DataGridExportFormat,\n DataGridHandle,\n DataGridToolbarBulkActionProps,\n DataGridToolbarColumnToggleProps,\n DataGridToolbarExportMenuItemProps,\n DataGridToolbarExportMenuProps,\n DataGridToolbarFacetFilterProps,\n DataGridToolbarFilterChipsProps,\n DataGridToolbarPrintProps,\n DataGridToolbarProviderProps,\n DataGridToolbarQuickSearchProps,\n DataGridToolbarRefreshProps,\n DataGridToolbarRootProps,\n} from './types';\n\n/** The grid's own seam when the part sits in its `toolbar` slot. */\nfunction useSlotSeam(): TableToolbarSeam | null {\n return useDataGridContext()?.toolbarSeam ?? null;\n}\n\n/* ------------------------------------------------------------------ */\n/* Lifted toolbar: DataGridToolbarProvider */\n/* ------------------------------------------------------------------ */\n\n/** A seam with nothing behind it, for a lifted toolbar whose grid has not\n * mounted yet: reads are empty, writes do nothing, `isReady()` is false. */\nconst UNBOUND_SEAM: TableToolbarSeam = {\n features: {\n syncsFilterInputs: true,\n exportsAllRows: false,\n keyboardReorder: true,\n },\n isReady: () => false,\n subscribe: () => () => {},\n getColumns: () => [],\n setColumnVisible: () => {},\n moveColumn: () => {},\n getQuickFilter: () => '',\n setQuickFilter: () => {},\n getFilterModel: () => ({}),\n setColumnFilter: () => {},\n clearAllFilters: () => {},\n setFacet: () => {},\n getFacet: () => null,\n getSelectionCount: () => 0,\n getSelectedRowIds: () => [],\n getExportSnapshot: () => undefined,\n exportCsv: () => {},\n print: () => {},\n};\n\ninterface Bound {\n handle: DataGridHandle | null;\n seam: TableToolbarSeam | null;\n}\n\n/**\n * For a toolbar outside the grid (a page header). Binds to whatever\n * `getGrid()` returns, once after mount and again whenever any DataGrid\n * mounts or unmounts (`dataGridMountSignal`): no polling. Until a grid is\n * bound the parts are inert.\n */\nexport function DataGridToolbarProvider({\n getGrid,\n children,\n}: DataGridToolbarProviderProps) {\n const [bound, setBound] = useState<Bound>({ handle: null, seam: null });\n useEffect(() => {\n const resolve = () => {\n const handle = getGrid() ?? null;\n const seam = getDataGridToolbarSeam(handle);\n setBound((prev) =>\n prev.handle === handle && prev.seam === seam ? prev : { handle, seam },\n );\n };\n resolve();\n return dataGridMountSignal.subscribe(resolve);\n }, [getGrid]);\n return (\n <TableToolbarProvider seam={bound.seam ?? UNBOUND_SEAM}>\n {children}\n </TableToolbarProvider>\n );\n}\n\n/**\n * Builds the toolbar and its parts. One call, at module level, marked pure:\n * a bundler drops it (and every shared part, DropdownMenu, Tag and Kbd with\n * it) from an app that imports `DataGrid` without `DataGridToolbar`.\n */\nfunction createDataGridToolbar() {\n const parts = createTableToolbarParts({\n prefix: 'DataGrid.Toolbar',\n missingProvider: (caller) =>\n `${caller} must be rendered in a DataGrid's \\`toolbar\\` slot or inside <DataGridToolbarProvider>.`,\n useEngineSeam: useSlotSeam,\n });\n\n /* ---- Root ---- */\n\n const Root = forwardRef<HTMLDivElement, DataGridToolbarRootProps>(\n (props, ref) => {\n const slotSeam = useSlotSeam();\n const root = (\n <parts.Root ref={ref} data-component=\"data-grid-toolbar\" {...props} />\n );\n // In the grid's slot, the grid's own seam is the nearest one, even\n // under a lifted provider for another grid.\n return slotSeam ? (\n <TableToolbarProvider seam={slotSeam}>{root}</TableToolbarProvider>\n ) : (\n root\n );\n },\n );\n Root.displayName = 'DataGrid.Toolbar';\n\n /* ---- Parts with DataGrid-shaped props ---- */\n\n const QuickSearch = (props: DataGridToolbarQuickSearchProps) => (\n <parts.QuickSearch {...props} />\n );\n QuickSearch.displayName = 'DataGrid.Toolbar.QuickSearch';\n\n const FilterChips = (_props: DataGridToolbarFilterChipsProps) => (\n <parts.FilterChips />\n );\n FilterChips.displayName = 'DataGrid.Toolbar.FilterChips';\n\n /**\n * Pills for one `select` column (or, in server mode, a host key). Any other\n * field renders nothing and warns in development: v9 would evaluate a set\n * model with the column's own (wrong) filter fn.\n */\n const FacetFilter = ({\n field,\n options,\n label,\n }: DataGridToolbarFacetFilterProps) => {\n const seam = parts.useSeam('FacetFilter');\n const column = seam.getColumns().find((c) => c.id === field);\n // A DataGrid seam exports every row exactly in client mode, so a host key\n // (no column) is allowed when it does not.\n const allowed = !seam.isReady()\n ? true\n : column\n ? column.filterKind === 'select' && !column.masked\n : !seam.features.exportsAllRows;\n useEffect(() => {\n if (!allowed && isDevelopment()) {\n console.warn(\n `DataGridToolbar.FacetFilter: \"${field}\" is not a column with filter { kind: 'select' }` +\n ' (or a host key in server mode); the pills are not rendered.',\n );\n }\n }, [allowed, field]);\n if (!allowed) return null;\n return <parts.FacetFilter field={field} options={options} label={label} />;\n };\n FacetFilter.displayName = 'DataGrid.Toolbar.FacetFilter';\n\n const ColumnToggle = forwardRef<\n HTMLButtonElement,\n DataGridToolbarColumnToggleProps\n >((props, ref) => <parts.ColumnToggle ref={ref} {...props} />);\n ColumnToggle.displayName = 'DataGrid.Toolbar.ColumnToggle';\n\n const Print = forwardRef<HTMLButtonElement, DataGridToolbarPrintProps>(\n (props, ref) => <parts.Print ref={ref} {...props} />,\n );\n Print.displayName = 'DataGrid.Toolbar.Print';\n\n const Refresh = forwardRef<HTMLButtonElement, DataGridToolbarRefreshProps>(\n (props, ref) => <parts.Refresh ref={ref} {...props} />,\n );\n Refresh.displayName = 'DataGrid.Toolbar.Refresh';\n\n const BulkAction = forwardRef<\n HTMLButtonElement,\n DataGridToolbarBulkActionProps\n >((props, ref) => <parts.BulkAction ref={ref} {...props} />);\n BulkAction.displayName = 'DataGrid.Toolbar.BulkAction';\n\n const DEFAULT_EXPORT_ITEMS: Exclude<DataGridExportFormat, 'custom'>[] = [\n 'csv',\n 'xlsx',\n 'pdf',\n ];\n\n /**\n * One export item. Built-ins write every filtered row (client mode); in\n * server mode the grid holds one page, so they render disabled with the\n * reason. `custom` always runs and gets the action context.\n */\n const ExportMenuItem = (props: DataGridToolbarExportMenuItemProps) => {\n const { t } = useTranslation('ui');\n const seam = parts.useSeam('ExportMenu.Item');\n const builtIn = props.format !== 'custom';\n const disabled = builtIn && !seam.features.exportsAllRows;\n const handleSelect = useCallback(() => {\n if (props.format === 'custom') {\n props.onExport(actionContextOf(seam));\n return;\n }\n const snapshot = seam.getExportSnapshot();\n if (!snapshot) return;\n const fileName =\n props.fileName ??\n exportFileName(dataGridSeamCaption(seam), props.format);\n if (props.format === 'csv') {\n seam.exportCsv(fileName);\n return;\n }\n const table = snapshotToTable(snapshot);\n if (props.format === 'xlsx') void writeTableXlsx(table, { fileName });\n else void writeTablePdf(table, { fileName });\n }, [props, seam]);\n return (\n <parts.ExportMenuItemBase\n format={props.format}\n label={props.label}\n onSelect={handleSelect}\n disabled={disabled}\n description={\n disabled ? t('dataGrid.toolbar.exportPageOnly') : undefined\n }\n />\n );\n };\n ExportMenuItem.displayName = 'DataGrid.Toolbar.ExportMenu.Item';\n\n const ExportMenu = forwardRef<\n HTMLButtonElement,\n DataGridToolbarExportMenuProps\n >(({ children, ...rest }, ref) => (\n <parts.ExportMenu ref={ref} {...rest}>\n {children ??\n DEFAULT_EXPORT_ITEMS.map((f) => <ExportMenuItem key={f} format={f} />)}\n </parts.ExportMenu>\n ));\n ExportMenu.displayName = 'DataGrid.Toolbar.ExportMenu';\n\n // These leaves render a single DS <IconButton> trigger, so IconButtonGroup\n // accepts them as direct children (see its rendersIconButton DEV check).\n for (const leaf of [ColumnToggle, Print, Refresh, ExportMenu]) {\n (leaf as { rendersIconButton?: boolean }).rendersIconButton = true;\n }\n // Folded into a group's \"More\" menu, Print and Refresh render the shared\n // part's menu item (their action is not an onClick prop).\n Object.assign(Print, { overflowMenuItem: parts.Print.overflowMenuItem });\n Object.assign(Refresh, { overflowMenuItem: parts.Refresh.overflowMenuItem });\n\n const FilterBar = parts.FilterBar;\n const Actions = parts.Actions;\n\n return Object.assign(Root, {\n FilterBar,\n Actions,\n QuickSearch,\n FilterChips,\n FacetFilter,\n ColumnToggle,\n ExportMenu: Object.assign(ExportMenu, { Item: ExportMenuItem }),\n Print,\n Refresh,\n BulkAction,\n });\n}\n\n/**\n * The DataGrid toolbar. Put it in the grid's `toolbar` prop, or lift it into\n * a page header under `DataGridToolbarProvider`.\n */\nexport const DataGridToolbar = /* @__PURE__ */ createDataGridToolbar();\n"],"names":["useSlotSeam","_a","useDataGridContext","UNBOUND_SEAM","DataGridToolbarProvider","getGrid","children","bound","setBound","useState","useEffect","resolve","handle","seam","getDataGridToolbarSeam","prev","dataGridMountSignal","TableToolbarProvider","createDataGridToolbar","parts","createTableToolbarParts","caller","Root","forwardRef","props","ref","slotSeam","root","jsx","QuickSearch","FilterChips","_props","FacetFilter","field","options","label","column","c","allowed","isDevelopment","ColumnToggle","Print","Refresh","BulkAction","DEFAULT_EXPORT_ITEMS","ExportMenuItem","t","useTranslation","disabled","handleSelect","useCallback","actionContextOf","snapshot","fileName","exportFileName","dataGridSeamCaption","table","snapshotToTable","writeTableXlsx","writeTablePdf","ExportMenu","rest","f","leaf","FilterBar","Actions","DataGridToolbar"],"mappings":"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"}
1
+ {"version":3,"file":"toolbar-CC-Ls_eC.js","sources":["../../src/components/data-grid/toolbar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* DataGridToolbar: the shared table toolbar parts over DataGrid. */\n/* */\n/* The parts live in `_shared/table-toolbar/` and reach the grid only */\n/* through its `TableToolbarSeam` (`./toolbar-seam.ts`). Inside the */\n/* grid's `toolbar` slot they find it through `DataGridContext`; a */\n/* toolbar lifted into a page header uses `DataGridToolbarProvider`. */\n/* Callbacks get a `ToolbarActionContext` (ids and an export snapshot), */\n/* never an engine API. No AG Grid, no DataTable import. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TableToolbarProvider } from '../_shared/table-toolbar/context';\nimport {\n exportFileName,\n snapshotToTable,\n writeTablePdf,\n writeTableXlsx,\n} from '../_shared/table-toolbar/export-files';\nimport {\n actionContextOf,\n createTableToolbarParts,\n} from '../_shared/table-toolbar/parts';\nimport type { TableToolbarSeam } from '../_shared/table-toolbar/seam';\nimport { isDevelopment } from '../_shared/is-development';\nimport {\n dataGridMountSignal,\n getDataGridToolbarSeam,\n useDataGridContext,\n} from './grid-context';\nimport { dataGridSeamCaption } from './toolbar-seam';\nimport type {\n DataGridExportFormat,\n DataGridHandle,\n DataGridToolbarBulkActionProps,\n DataGridToolbarColumnToggleProps,\n DataGridToolbarExportMenuItemProps,\n DataGridToolbarExportMenuProps,\n DataGridToolbarFacetFilterProps,\n DataGridToolbarFilterChipsProps,\n DataGridToolbarPrintProps,\n DataGridToolbarProviderProps,\n DataGridToolbarQuickSearchProps,\n DataGridToolbarRefreshProps,\n DataGridToolbarRootProps,\n} from './types';\n\n/** The grid's own seam when the part sits in its `toolbar` slot. */\nfunction useSlotSeam(): TableToolbarSeam | null {\n return useDataGridContext()?.toolbarSeam ?? null;\n}\n\n/* ------------------------------------------------------------------ */\n/* Lifted toolbar: DataGridToolbarProvider */\n/* ------------------------------------------------------------------ */\n\n/** A seam with nothing behind it, for a lifted toolbar whose grid has not\n * mounted yet: reads are empty, writes do nothing, `isReady()` is false. */\nconst UNBOUND_SEAM: TableToolbarSeam = {\n features: {\n syncsFilterInputs: true,\n exportsAllRows: false,\n keyboardReorder: true,\n },\n isReady: () => false,\n subscribe: () => () => {},\n getColumns: () => [],\n setColumnVisible: () => {},\n moveColumn: () => {},\n getQuickFilter: () => '',\n setQuickFilter: () => {},\n getFilterModel: () => ({}),\n setColumnFilter: () => {},\n clearAllFilters: () => {},\n setFacet: () => {},\n getFacet: () => null,\n getSelectionCount: () => 0,\n getSelectedRowIds: () => [],\n getExportSnapshot: () => undefined,\n exportCsv: () => {},\n print: () => {},\n};\n\ninterface Bound {\n handle: DataGridHandle | null;\n seam: TableToolbarSeam | null;\n}\n\n/**\n * For a toolbar outside the grid (a page header). Binds to whatever\n * `getGrid()` returns, once after mount and again whenever any DataGrid\n * mounts or unmounts (`dataGridMountSignal`): no polling. Until a grid is\n * bound the parts are inert.\n */\nexport function DataGridToolbarProvider({\n getGrid,\n children,\n}: DataGridToolbarProviderProps) {\n const [bound, setBound] = useState<Bound>({ handle: null, seam: null });\n useEffect(() => {\n const resolve = () => {\n const handle = getGrid() ?? null;\n const seam = getDataGridToolbarSeam(handle);\n setBound((prev) =>\n prev.handle === handle && prev.seam === seam ? prev : { handle, seam },\n );\n };\n resolve();\n return dataGridMountSignal.subscribe(resolve);\n }, [getGrid]);\n return (\n <TableToolbarProvider seam={bound.seam ?? UNBOUND_SEAM}>\n {children}\n </TableToolbarProvider>\n );\n}\n\n/**\n * Builds the toolbar and its parts. One call, at module level, marked pure:\n * a bundler drops it (and every shared part, DropdownMenu, Tag and Kbd with\n * it) from an app that imports `DataGrid` without `DataGridToolbar`.\n */\nfunction createDataGridToolbar() {\n const parts = createTableToolbarParts({\n prefix: 'DataGrid.Toolbar',\n missingProvider: (caller) =>\n `${caller} must be rendered in a DataGrid's \\`toolbar\\` slot or inside <DataGridToolbarProvider>.`,\n useEngineSeam: useSlotSeam,\n });\n\n /* ---- Root ---- */\n\n const Root = forwardRef<HTMLDivElement, DataGridToolbarRootProps>(\n (props, ref) => {\n const slotSeam = useSlotSeam();\n const root = (\n <parts.Root ref={ref} data-component=\"data-grid-toolbar\" {...props} />\n );\n // In the grid's slot, the grid's own seam is the nearest one, even\n // under a lifted provider for another grid.\n return slotSeam ? (\n <TableToolbarProvider seam={slotSeam}>{root}</TableToolbarProvider>\n ) : (\n root\n );\n },\n );\n Root.displayName = 'DataGrid.Toolbar';\n\n /* ---- Parts with DataGrid-shaped props ---- */\n\n const QuickSearch = (props: DataGridToolbarQuickSearchProps) => (\n <parts.QuickSearch {...props} />\n );\n QuickSearch.displayName = 'DataGrid.Toolbar.QuickSearch';\n\n const FilterChips = (_props: DataGridToolbarFilterChipsProps) => (\n <parts.FilterChips />\n );\n FilterChips.displayName = 'DataGrid.Toolbar.FilterChips';\n\n /**\n * Pills for one `select` column (or, in server mode, a host key). Any other\n * field renders nothing and warns in development: v9 would evaluate a set\n * model with the column's own (wrong) filter fn.\n */\n const FacetFilter = ({\n field,\n options,\n label,\n }: DataGridToolbarFacetFilterProps) => {\n const seam = parts.useSeam('FacetFilter');\n const column = seam.getColumns().find((c) => c.id === field);\n // A DataGrid seam exports every row exactly in client mode, so a host key\n // (no column) is allowed when it does not.\n const allowed = !seam.isReady()\n ? true\n : column\n ? column.filterKind === 'select' && !column.masked\n : !seam.features.exportsAllRows;\n useEffect(() => {\n if (!allowed && isDevelopment()) {\n console.warn(\n `DataGridToolbar.FacetFilter: \"${field}\" is not a column with filter { kind: 'select' }` +\n ' (or a host key in server mode); the pills are not rendered.',\n );\n }\n }, [allowed, field]);\n if (!allowed) return null;\n return <parts.FacetFilter field={field} options={options} label={label} />;\n };\n FacetFilter.displayName = 'DataGrid.Toolbar.FacetFilter';\n\n const ColumnToggle = forwardRef<\n HTMLButtonElement,\n DataGridToolbarColumnToggleProps\n >((props, ref) => <parts.ColumnToggle ref={ref} {...props} />);\n ColumnToggle.displayName = 'DataGrid.Toolbar.ColumnToggle';\n\n const Print = forwardRef<HTMLButtonElement, DataGridToolbarPrintProps>(\n (props, ref) => <parts.Print ref={ref} {...props} />,\n );\n Print.displayName = 'DataGrid.Toolbar.Print';\n\n const Refresh = forwardRef<HTMLButtonElement, DataGridToolbarRefreshProps>(\n (props, ref) => <parts.Refresh ref={ref} {...props} />,\n );\n Refresh.displayName = 'DataGrid.Toolbar.Refresh';\n\n const BulkAction = forwardRef<\n HTMLButtonElement,\n DataGridToolbarBulkActionProps\n >((props, ref) => <parts.BulkAction ref={ref} {...props} />);\n BulkAction.displayName = 'DataGrid.Toolbar.BulkAction';\n\n const DEFAULT_EXPORT_ITEMS: Exclude<DataGridExportFormat, 'custom'>[] = [\n 'csv',\n 'xlsx',\n 'pdf',\n ];\n\n /**\n * One export item. Built-ins write every filtered row (client mode); in\n * server mode the grid holds one page, so they render disabled with the\n * reason. `custom` always runs and gets the action context.\n */\n const ExportMenuItem = (props: DataGridToolbarExportMenuItemProps) => {\n const { t } = useTranslation('ui');\n const seam = parts.useSeam('ExportMenu.Item');\n const builtIn = props.format !== 'custom';\n const disabled = builtIn && !seam.features.exportsAllRows;\n const handleSelect = useCallback(() => {\n if (props.format === 'custom') {\n props.onExport(actionContextOf(seam));\n return;\n }\n const snapshot = seam.getExportSnapshot();\n if (!snapshot) return;\n const fileName =\n props.fileName ??\n exportFileName(dataGridSeamCaption(seam), props.format);\n if (props.format === 'csv') {\n seam.exportCsv(fileName);\n return;\n }\n const table = snapshotToTable(snapshot);\n if (props.format === 'xlsx') void writeTableXlsx(table, { fileName });\n else void writeTablePdf(table, { fileName });\n }, [props, seam]);\n return (\n <parts.ExportMenuItemBase\n format={props.format}\n label={props.label}\n onSelect={handleSelect}\n disabled={disabled}\n description={\n disabled ? t('dataGrid.toolbar.exportPageOnly') : undefined\n }\n />\n );\n };\n ExportMenuItem.displayName = 'DataGrid.Toolbar.ExportMenu.Item';\n\n const ExportMenu = forwardRef<\n HTMLButtonElement,\n DataGridToolbarExportMenuProps\n >(({ children, ...rest }, ref) => (\n <parts.ExportMenu ref={ref} {...rest}>\n {children ??\n DEFAULT_EXPORT_ITEMS.map((f) => <ExportMenuItem key={f} format={f} />)}\n </parts.ExportMenu>\n ));\n ExportMenu.displayName = 'DataGrid.Toolbar.ExportMenu';\n\n // These leaves render a single DS <IconButton> trigger, so IconButtonGroup\n // accepts them as direct children (see its rendersIconButton DEV check).\n for (const leaf of [ColumnToggle, Print, Refresh, ExportMenu]) {\n (leaf as { rendersIconButton?: boolean }).rendersIconButton = true;\n }\n // Folded into a group's \"More\" menu, Print and Refresh render the shared\n // part's menu item (their action is not an onClick prop).\n Object.assign(Print, { overflowMenuItem: parts.Print.overflowMenuItem });\n Object.assign(Refresh, { overflowMenuItem: parts.Refresh.overflowMenuItem });\n\n const FilterBar = parts.FilterBar;\n const Actions = parts.Actions;\n\n return Object.assign(Root, {\n FilterBar,\n Actions,\n QuickSearch,\n FilterChips,\n FacetFilter,\n ColumnToggle,\n ExportMenu: Object.assign(ExportMenu, { Item: ExportMenuItem }),\n Print,\n Refresh,\n BulkAction,\n });\n}\n\n/**\n * The DataGrid toolbar. Put it in the grid's `toolbar` prop, or lift it into\n * a page header under `DataGridToolbarProvider`.\n */\nexport const DataGridToolbar = /* @__PURE__ */ createDataGridToolbar();\n"],"names":["useSlotSeam","_a","useDataGridContext","UNBOUND_SEAM","DataGridToolbarProvider","getGrid","children","bound","setBound","useState","useEffect","resolve","handle","seam","getDataGridToolbarSeam","prev","dataGridMountSignal","TableToolbarProvider","createDataGridToolbar","parts","createTableToolbarParts","caller","Root","forwardRef","props","ref","slotSeam","root","jsx","QuickSearch","FilterChips","_props","FacetFilter","field","options","label","column","c","allowed","isDevelopment","ColumnToggle","Print","Refresh","BulkAction","DEFAULT_EXPORT_ITEMS","ExportMenuItem","t","useTranslation","disabled","handleSelect","useCallback","actionContextOf","snapshot","fileName","exportFileName","dataGridSeamCaption","table","snapshotToTable","writeTableXlsx","writeTablePdf","ExportMenu","rest","f","leaf","FilterBar","Actions","DataGridToolbar"],"mappings":";;;;;;;;AAiDA,SAASA,IAAuC;;AAC9C,WAAOC,IAAAC,EAAA,MAAA,gBAAAD,EAAsB,gBAAe;AAC9C;AAQA,MAAME,IAAiC;AAAA,EACrC,UAAU;AAAA,IACR,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EAAA;AAAA,EAEnB,SAAS,MAAM;AAAA,EACf,WAAW,MAAM,MAAM;AAAA,EAAC;AAAA,EACxB,YAAY,MAAM,CAAA;AAAA,EAClB,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,gBAAgB,MAAM;AAAA,EACtB,gBAAgB,MAAM;AAAA,EAAC;AAAA,EACvB,gBAAgB,OAAO,CAAA;AAAA,EACvB,iBAAiB,MAAM;AAAA,EAAC;AAAA,EACxB,iBAAiB,MAAM;AAAA,EAAC;AAAA,EACxB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAU,MAAM;AAAA,EAChB,mBAAmB,MAAM;AAAA,EACzB,mBAAmB,MAAM,CAAA;AAAA,EACzB,mBAAmB,MAAA;AAAA;AAAA,EACnB,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,OAAO,MAAM;AAAA,EAAC;AAChB;AAaO,SAASC,EAAwB;AAAA,EACtC,SAAAC;AAAA,EACA,UAAAC;AACF,GAAiC;AAC/B,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAgB,EAAE,QAAQ,MAAM,MAAM,MAAM;AACtE,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAU,MAAM;AACpB,YAAMC,IAASP,OAAa,MACtBQ,IAAOC,EAAuBF,CAAM;AAC1C,MAAAJ;AAAA,QAAS,CAACO,MACRA,EAAK,WAAWH,KAAUG,EAAK,SAASF,IAAOE,IAAO,EAAE,QAAAH,GAAQ,MAAAC,EAAA;AAAA,MAAK;AAAA,IAEzE;AACA,WAAAF,EAAA,GACOK,EAAoB,UAAUL,CAAO;AAAA,EAC9C,GAAG,CAACN,CAAO,CAAC,qBAETY,GAAA,EAAqB,MAAMV,EAAM,QAAQJ,GACvC,UAAAG,GACH;AAEJ;AAOA,SAASY,IAAwB;AAC/B,QAAMC,IAAQC,EAAwB;AAAA,IACpC,QAAQ;AAAA,IACR,iBAAiB,CAACC,MAChB,GAAGA,CAAM;AAAA,IACX,eAAerB;AAAA,EAAA,CAChB,GAIKsB,IAAOC;AAAA,IACX,CAACC,GAAOC,MAAQ;AACd,YAAMC,IAAW1B,EAAA,GACX2B,sBACHR,EAAM,MAAN,EAAW,KAAAM,GAAU,kBAAe,qBAAqB,GAAGD,GAAO;AAItE,aAAOE,IACL,gBAAAE,EAACX,GAAA,EAAqB,MAAMS,GAAW,aAAK,IAE5CC;AAAA,IAEJ;AAAA,EAAA;AAEF,EAAAL,EAAK,cAAc;AAInB,QAAMO,IAAc,CAACL,MACnB,gBAAAI,EAACT,EAAM,aAAN,EAAmB,GAAGK,GAAO;AAEhC,EAAAK,EAAY,cAAc;AAE1B,QAAMC,IAAc,CAACC,MACnB,gBAAAH,EAACT,EAAM,aAAN,EAAkB;AAErB,EAAAW,EAAY,cAAc;AAO1B,QAAME,IAAc,CAAC;AAAA,IACnB,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,EAAA,MACqC;AACrC,UAAMtB,IAAOM,EAAM,QAAQ,aAAa,GAClCiB,IAASvB,EAAK,aAAa,KAAK,CAACwB,MAAMA,EAAE,OAAOJ,CAAK,GAGrDK,IAAWzB,EAAK,QAAA,IAElBuB,IACEA,EAAO,eAAe,YAAY,CAACA,EAAO,SAC1C,CAACvB,EAAK,SAAS,iBAHjB;AAYJ,WARAH,EAAU,MAAM;AACd,MAAI,CAAC4B,KAAWC,OACd,QAAQ;AAAA,QACN,iCAAiCN,CAAK;AAAA,MAAA;AAAA,IAI5C,GAAG,CAACK,GAASL,CAAK,CAAC,GACdK,sBACGnB,EAAM,aAAN,EAAkB,OAAAc,GAAc,SAAAC,GAAkB,OAAAC,GAAc,IADnD;AAAA,EAEvB;AACA,EAAAH,EAAY,cAAc;AAE1B,QAAMQ,IAAejB,EAGnB,CAACC,GAAOC,MAAQ,gBAAAG,EAACT,EAAM,cAAN,EAAmB,KAAAM,GAAW,GAAGD,EAAA,CAAO,CAAE;AAC7D,EAAAgB,EAAa,cAAc;AAE3B,QAAMC,IAAQlB;AAAA,IACZ,CAACC,GAAOC,MAAQ,gBAAAG,EAACT,EAAM,OAAN,EAAY,KAAAM,GAAW,GAAGD,EAAA,CAAO;AAAA,EAAA;AAEpD,EAAAiB,EAAM,cAAc;AAEpB,QAAMC,IAAUnB;AAAA,IACd,CAACC,GAAOC,MAAQ,gBAAAG,EAACT,EAAM,SAAN,EAAc,KAAAM,GAAW,GAAGD,EAAA,CAAO;AAAA,EAAA;AAEtD,EAAAkB,EAAQ,cAAc;AAEtB,QAAMC,IAAapB,EAGjB,CAACC,GAAOC,MAAQ,gBAAAG,EAACT,EAAM,YAAN,EAAiB,KAAAM,GAAW,GAAGD,EAAA,CAAO,CAAE;AAC3D,EAAAmB,EAAW,cAAc;AAEzB,QAAMC,IAAkE;AAAA,IACtE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAQIC,IAAiB,CAACrB,MAA8C;AACpE,UAAM,EAAE,GAAAsB,EAAA,IAAMC,EAAe,IAAI,GAC3BlC,IAAOM,EAAM,QAAQ,iBAAiB,GAEtC6B,IADUxB,EAAM,WAAW,YACL,CAACX,EAAK,SAAS,gBACrCoC,IAAeC,EAAY,MAAM;AACrC,UAAI1B,EAAM,WAAW,UAAU;AAC7B,QAAAA,EAAM,SAAS2B,EAAgBtC,CAAI,CAAC;AACpC;AAAA,MACF;AACA,YAAMuC,IAAWvC,EAAK,kBAAA;AACtB,UAAI,CAACuC,EAAU;AACf,YAAMC,IACJ7B,EAAM,YACN8B,EAAeC,EAAoB1C,CAAI,GAAGW,EAAM,MAAM;AACxD,UAAIA,EAAM,WAAW,OAAO;AAC1B,QAAAX,EAAK,UAAUwC,CAAQ;AACvB;AAAA,MACF;AACA,YAAMG,IAAQC,EAAgBL,CAAQ;AACtC,MAAI5B,EAAM,WAAW,SAAakC,EAAeF,GAAO,EAAE,UAAAH,GAAU,IAC1DM,EAAcH,GAAO,EAAE,UAAAH,GAAU;AAAA,IAC7C,GAAG,CAAC7B,GAAOX,CAAI,CAAC;AAChB,WACE,gBAAAe;AAAA,MAACT,EAAM;AAAA,MAAN;AAAA,QACC,QAAQK,EAAM;AAAA,QACd,OAAOA,EAAM;AAAA,QACb,UAAUyB;AAAA,QACV,UAAAD;AAAA,QACA,aACEA,IAAWF,EAAE,iCAAiC,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAI1D;AACA,EAAAD,EAAe,cAAc;AAE7B,QAAMe,IAAarC,EAGjB,CAAC,EAAE,UAAAjB,GAAU,GAAGuD,EAAA,GAAQpC,MACxB,gBAAAG,EAACT,EAAM,YAAN,EAAiB,KAAAM,GAAW,GAAGoC,GAC7B,UAAAvD,KACCsC,EAAqB,IAAI,CAACkB,MAAM,gBAAAlC,EAACiB,GAAA,EAAuB,QAAQiB,EAAA,GAAXA,CAAc,CAAE,EAAA,CACzE,CACD;AACD,EAAAF,EAAW,cAAc;AAIzB,aAAWG,KAAQ,CAACvB,GAAcC,GAAOC,GAASkB,CAAU;AACzD,IAAAG,EAAyC,oBAAoB;AAIhE,SAAO,OAAOtB,GAAO,EAAE,kBAAkBtB,EAAM,MAAM,kBAAkB,GACvE,OAAO,OAAOuB,GAAS,EAAE,kBAAkBvB,EAAM,QAAQ,kBAAkB;AAE3E,QAAM6C,IAAY7C,EAAM,WAClB8C,IAAU9C,EAAM;AAEtB,SAAO,OAAO,OAAOG,GAAM;AAAA,IACzB,WAAA0C;AAAA,IACA,SAAAC;AAAA,IACA,aAAApC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAE;AAAA,IACA,cAAAQ;AAAA,IACA,YAAY,OAAO,OAAOoB,GAAY,EAAE,MAAMf,GAAgB;AAAA,IAC9D,OAAAJ;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,CACD;AACH;AAMO,MAAMuB,IAAkC,gBAAAhD,EAAA;"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.127.1",
3
+ "packageVersion": "1.127.2",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -1,2 +1,2 @@
1
- /* @alfadocs/ui-kit 1.127.1 browser-support.js. Generated by scripts/build-browser-support.mjs: do not edit. */
1
+ /* @alfadocs/ui-kit 1.127.2 browser-support.js. Generated by scripts/build-browser-support.mjs: do not edit. */
2
2
  (function(){var j=[{id:"class-static-block",syntax:"{ class Probe { static { } } }"},{id:"object-has-own",check:function(e){return typeof e.Object.hasOwn=="function"}},{id:"structured-clone",check:function(e){return typeof e.structuredClone=="function"}}],C="alfadocs-browser-support",B="alfadocs:browser-support",R="AlfadocsBrowserSupport",U="AlfadocsBrowserSupportConfig",E="alfadocs.browserSupport.dismissedAt",D="alfadocs-browser-support",P="alfadocs-browser-support-title",A=0,W=1440*60*1e3,f="__alfadocsBrowserSupportProbe";function F(e){var r=e.document.currentScript;return r&&(r.nonce||r.getAttribute("nonce"))||""}function _(e,r,a){var t=e.document,o=t.createElement("script");a&&o.setAttribute("nonce",a),o.text=r;var s=t.head||t.documentElement;s.appendChild(o),s.removeChild(o)}function I(e,r){var a=F(e);if(!a)try{return new e.Function(r),!0}catch(o){if(o&&o.name==="SyntaxError")return!1}var t=e;try{return t[f]=0,_(e,"window."+f+" = 1;",a),t[f]!==1?null:(_(e,r+"\nwindow."+f+" = 2;",a),t[f]===2)}catch(o){return null}finally{delete t[f]}}function T(e,r){for(var a=[],t=!1,o=0;o<r.length;o++){var s=r[o],n=!0;if(s.syntax!==void 0)n=I(e,s.syntax);else if(s.check)try{n=s.check(e)}catch(i){n=!1}n===null?t=!0:n||a.push(s.id)}return a.length?a:t?null:a}function N(e,r){var a=String(e||"").toLowerCase().split(/[-_]/)[0];return a==="cn"&&(a="zh"),r.indexOf(a)>=0?a:r.indexOf("en")>=0?"en":r[0]}function M(e){var r=e.userAgent||"";return/iPad|iPhone|iPod/.test(r)?"ios":/Macintosh/.test(r)?(e.maxTouchPoints||0)>1?"ios":"mac":"other"}var w=[["Edge",/\b(?:Edg|EdgA|EdgiOS)\/(\d+)/],["Opera",/\b(?:OPR|OPT)\/(\d+)/],["Samsung Internet",/\bSamsungBrowser\/(\d+)/],["Firefox",/\b(?:Firefox|FxiOS)\/(\d+)/],["Chrome",/\b(?:Chrome|CriOS)\/(\d+)/],["Safari",/\bVersion\/(\d+(?:\.\d+)?)[\s\S]*\bSafari\//]];function L(e,r){for(var a=e.userAgent||"",t=0;t<w.length;t++){var o=w[t][1].exec(a);if(o){var s=w[t][0];if(r==="ios"&&s!=="Safari"){var n=/OS (\d+(?:_\d+)?) like Mac OS X/.exec(a),i=/iPhone|iPod/.test(a)?"iOS":"iPadOS";return{name:s,label:s+" ("+i+(n?" "+n[1].replace("_","."):"")+")"}}return{name:s,label:s+" "+o[1]}}}return null}function S(e,r,a){return e.replace(new RegExp("\\{\\{"+r+"\\}\\}","g"),function(){return a})}function H(e,r){if(!e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;var a=new Date(e+"T00:00:00Z");if(isNaN(a.getTime()))return null;try{var t=r==="en"?"en-GB":r==="pt"?"pt-PT":r;return a.toLocaleDateString(t,{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"})}catch(o){return e}}function G(e,r,a,t){var o=a?S(e.title,"browser",a.label):e.titleUnknown,s=t?S(e.reasonWithDate,"date",t):e.reason,n=r==="ios"?e.steps.ios:r==="mac"&&a&&a.name==="Safari"?e.steps.macSafari:a?S(e.steps.other,"browser",a.name):e.steps.otherUnknown;return{title:o,text:s+" "+n}}function q(e){return e&&(/^https:\/\//i.test(e)||/^\/(?![/\\])/.test(e))?e:null}var z="http://www.w3.org/2000/svg";function y(e,r){for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&e.setAttribute(a,r[a])}function V(e,r){var a=e.createElementNS(z,"svg");y(a,r.attrs);for(var t=0;t<r.children.length;t++){var o=e.createElementNS(z,r.children[t].tag);y(o,r.children[t].attrs),a.appendChild(o)}return a}function p(e,r,a,t){var o=e.createElement(r);return o.className=a,t!==void 0&&o.appendChild(e.createTextNode(t)),o}function Z(e,r){var a=C,t=r.messages,o=G(t,r.device,r.browser,r.supportEnds),s=p(e,"div",a+" "+a+"--"+r.placement);if(s.setAttribute("data-component","browser-support-alert"),s.setAttribute("data-placement",r.placement),s.setAttribute("role",r.placement==="page"?"alert":"status"),s.setAttribute("lang",r.locale),s.setAttribute("dir",r.locale==="ar"?"rtl":"ltr"),r.icon){var n=p(e,"span",a+"__icon");n.setAttribute("aria-hidden","true"),n.appendChild(V(e,r.icon)),s.appendChild(n)}var i=p(e,"div",a+"__body"),l=p(e,"p",a+"__title",o.title);A+=1,l.id=P+"-"+A,r.placement==="page"&&(l.setAttribute("role","heading"),l.setAttribute("aria-level","2")),i.appendChild(l),i.appendChild(p(e,"p",a+"__text",o.text));var b=q(r.helpHref);if(b){var h=p(e,"a",a+"__link",t.help);h.setAttribute("href",b),i.appendChild(h)}s.appendChild(i);var u=r.onDismiss;if(r.placement==="banner"&&u){var d=p(e,"button",a+"__dismiss",t.dismiss);d.setAttribute("type","button"),d.setAttribute("aria-describedby",l.id);var g=u;d.addEventListener("click",function(){s.parentNode&&s.parentNode.removeChild(s),g()}),s.appendChild(d)}return s}function J(e){var r={},a=e.document.currentScript;a&&a.getAttribute&&(r.placement=a.getAttribute("data-placement")||void 0,r.locale=a.getAttribute("data-locale")||void 0,r.helpHref=a.getAttribute("data-help-href")||void 0,r.supportEnds=a.getAttribute("data-support-ends")||void 0);var t=e[U];return t&&(r.placement||(r.placement=t.placement),r.locale||(r.locale=t.locale),r.helpHref||(r.helpHref=t.helpHref),r.supportEnds||(r.supportEnds=t.supportEnds)),r}function K(e,r){try{var a=Number(e.localStorage.getItem(E));return a>0&&r-a<W}catch(t){return!1}}function Y(e,r){try{e.localStorage.setItem(E,String(r))}catch(a){}}function $(e,r){try{var a;if(typeof e.CustomEvent=="function")a=new e.CustomEvent(B,{detail:r});else{var t=e.document.createEvent("CustomEvent");t.initCustomEvent(B,!1,!1,r),a=t}e.dispatchEvent(a)}catch(o){}}function Q(e,r){var a=e.document.body,t=a.style.paddingBottom,o=0;try{o=parseFloat(e.getComputedStyle(a).paddingBottom)||0}catch(n){o=0}function s(){if(r.parentNode){var n=e.innerHeight-r.getBoundingClientRect().top;a.style.paddingBottom=Math.max(0,o+n)+"px"}}return s(),e.addEventListener("resize",s),function(){e.removeEventListener("resize",s),a.style.paddingBottom=t}}function X(e,r){e.document.body?r():e.document.addEventListener("DOMContentLoaded",r)}function O(e,r,a){var t=a&&a.now!==void 0?a.now:new e.Date().getTime(),o=a&&a.requirements||j,s=J(e),n=s.placement==="page"?"page":"banner",i=new RegExp("[?&]"+D+"=preview(&|$)").test(e.location.search||""),l=T(e,o),b=l===null?null:l.length===0,h=M(e.navigator),u=L(e.navigator,h),d={supported:b,missing:l||[],shown:!1,placement:n,preview:i,browser:u?u.label:null};e[R]=d;var g=i||b===!1&&!(n==="banner"&&K(e,t));if(!g)return d;var m=N(s.locale||e.document.documentElement.getAttribute("lang"),r.locales);return X(e,function(){var c=e.document;if(!c.querySelector("."+C)){var x=c.createElement("style");x.appendChild(c.createTextNode(r.css)),(c.head||c.documentElement).appendChild(x);var k=function(){},v=Z(c,{placement:n,locale:m,messages:r.messages[m],device:h,browser:u,supportEnds:H(s.supportEnds,m),helpHref:s.helpHref,icon:r.icon,onDismiss:function(){k(),i||Y(e,new e.Date().getTime())}});n==="page"?c.body.insertBefore(v,c.body.firstChild):(c.body.appendChild(v),k=Q(e,v)),d.shown=!0,$(e,d)}}),d}O(window,{css:".alfadocs-browser-support{--ad-bs-surface:#fff9eb;--ad-bs-border:#fac634;--ad-bs-text:#695316;--ad-bs-ring:#6761e5;--ad-bs-shadow:0 10px 30px #0000000f;--ad-bs-font:'Space Grotesk', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:16px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:44px;--ad-bs-focus-width:2px;--ad-bs-focus-offset:2px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#f0eee8;--ad-bs-border:#695316;--ad-bs-ring:#39357e;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px}\n.theme-dark .alfadocs-browser-support{--ad-bs-surface:#3e3d50;--ad-bs-text:#fdedc0;--ad-bs-ring:#e040fb;--ad-bs-shadow:0 10px 30px #0006}\n.theme-dark.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#2e2e3d;--ad-bs-border:#fdedc0;--ad-bs-text:#fdedc0;--ad-bs-ring:#fa76fc;--ad-bs-shadow:0 10px 30px #0006;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.alfadocs-browser-support,.alfadocs-browser-support *{box-sizing:border-box}\n.alfadocs-browser-support{display:flex;flex-wrap:wrap;align-items:flex-start;padding:var(--ad-bs-space);border:var(--ad-bs-border-width) solid var(--ad-bs-border);border-radius:var(--ad-bs-radius);background:var(--ad-bs-surface);color:var(--ad-bs-text);font-family:var(--ad-bs-font);font-size:var(--ad-bs-font-size);line-height:var(--ad-bs-line-height);text-align:start}\n.alfadocs-browser-support--page{width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-width:var(--ad-bs-page-width);margin-block-start:var(--ad-bs-space);margin-block-end:var(--ad-bs-space);margin-inline-start:auto;margin-inline-end:auto}\n.alfadocs-browser-support--banner{position:fixed;z-index:var(--ad-bs-z);bottom:var(--ad-bs-space);inset-inline-start:var(--ad-bs-space);width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-height:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));overflow-y:auto;box-shadow:var(--ad-bs-shadow)}\n.alfadocs-browser-support__icon{flex:none;display:inline-flex;margin-inline-end:var(--ad-bs-space-sm)}\n.alfadocs-browser-support__icon svg{display:block;width:var(--ad-bs-icon);height:var(--ad-bs-icon)}\n.alfadocs-browser-support__body{flex:1 1 calc(var(--ad-bs-space) * 12);min-width:0;padding-inline-end:var(--ad-bs-space)}\n.alfadocs-browser-support__title,.alfadocs-browser-support__text{margin:0;font-size:inherit;line-height:inherit}\n.alfadocs-browser-support__title,.alfadocs-browser-support__link,.alfadocs-browser-support__dismiss{font-weight:var(--ad-bs-weight)}\n.alfadocs-browser-support__text{margin-block-start:var(--ad-bs-space-xs)}\n.alfadocs-browser-support .alfadocs-browser-support__link,.alfadocs-browser-support .alfadocs-browser-support__link:hover,.alfadocs-browser-support .alfadocs-browser-support__link:focus{display:inline-flex;align-items:center;min-height:var(--ad-bs-target);color:inherit;text-decoration:underline}\n.alfadocs-browser-support__dismiss{flex:none;min-height:var(--ad-bs-target);margin:0;margin-inline-start:auto;padding-block-start:0;padding-block-end:0;padding-inline-start:var(--ad-bs-space);padding-inline-end:var(--ad-bs-space);border:var(--ad-bs-border-width) solid currentColor;border-radius:var(--ad-bs-radius);background:transparent;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;cursor:pointer}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus,.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus{outline:var(--ad-bs-focus-width) solid var(--ad-bs-ring);outline-offset:var(--ad-bs-focus-offset);box-shadow:0 0 0 var(--ad-bs-focus-offset) var(--ad-bs-surface),0 0 0 calc(var(--ad-bs-focus-offset) + var(--ad-bs-focus-width)) var(--ad-bs-ring)}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus:not(:focus-visible),.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus:not(:focus-visible){outline:none;box-shadow:none}\n@media (forced-colors:active){.alfadocs-browser-support{border-color:CanvasText}.alfadocs-browser-support__dismiss{border-color:ButtonText}}\n@media print{.alfadocs-browser-support--banner{display:none}}",icon:{attrs:{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-triangle-alert","aria-hidden":"true",focusable:"false"},children:[{tag:"path",attrs:{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}},{tag:"path",attrs:{d:"M12 9v4"}},{tag:"path",attrs:{d:"M12 17h.01"}}]},locales:["en","it","de","ar","fr","es","pt","nl","ro","sq","tr","pl","sv","ru","el","ja","zh","hi"],messages:{en:{title:"{{browser}} is out of date",titleUnknown:"Your browser is out of date",reason:"Older browsers miss security fixes, and Alfadocs will soon stop supporting this one.",reasonWithDate:"Older browsers miss security fixes, and Alfadocs will stop supporting this one on {{date}}.",steps:{ios:"Go to Settings, then General, then Software Update. If no update is offered, this device is too old for Alfadocs.",macSafari:"Update macOS to get a newer Safari, or use the latest Chrome or Firefox.",other:"Update {{browser}} to its latest version.",otherUnknown:"Install the latest version of Chrome, Edge or Firefox."},help:"How to update",dismiss:"Hide for today"},it:{title:"Il browser {{browser}} \xE8 obsoleto",titleUnknown:"Il tuo browser \xE8 obsoleto",reason:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 presto di supportare questo browser.",reasonWithDate:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 di supportare questo browser il {{date}}.",steps:{ios:"Apri Impostazioni, poi Generali, poi Aggiornamento software. Se non viene proposto alcun aggiornamento, questo dispositivo \xE8 troppo vecchio per Alfadocs.",macSafari:"Aggiorna macOS per avere un Safari pi\xF9 recente, oppure usa l'ultima versione di Chrome o Firefox.",other:"Aggiorna {{browser}} all'ultima versione.",otherUnknown:"Installa l'ultima versione di Chrome, Edge o Firefox."},help:"Come aggiornare",dismiss:"Nascondi per oggi"},de:{title:"Der Browser {{browser}} ist veraltet",titleUnknown:"Ihr Browser ist veraltet",reason:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser bald nicht mehr unterst\xFCtzen.",reasonWithDate:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser am {{date}} nicht mehr unterst\xFCtzen.",steps:{ios:"\xD6ffnen Sie Einstellungen, dann Allgemein, dann Softwareupdate. Wird kein Update angeboten, ist dieses Ger\xE4t zu alt f\xFCr Alfadocs.",macSafari:"Aktualisieren Sie macOS, um ein neueres Safari zu erhalten, oder verwenden Sie die neueste Version von Chrome oder Firefox.",other:"Aktualisieren Sie {{browser}} auf die neueste Version.",otherUnknown:"Installieren Sie die neueste Version von Chrome, Edge oder Firefox."},help:"So aktualisieren Sie",dismiss:"F\xFCr heute ausblenden"},ar:{title:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D {{browser}} \u0642\u062F\u064A\u0645",titleUnknown:"\u0645\u062A\u0635\u0641\u062D\u0643 \u0642\u062F\u064A\u0645",reason:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0642\u0631\u064A\u0628\u064B\u0627 \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D.",reasonWithDate:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0628\u062A\u0627\u0631\u064A\u062E {{date}}.",steps:{ios:"\u0627\u0641\u062A\u062D \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A\u060C \u062B\u0645 \u0639\u0627\u0645\u060C \u062B\u0645 \u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C. \u0625\u0630\u0627 \u0644\u0645 \u064A\u0638\u0647\u0631 \u0623\u064A \u062A\u062D\u062F\u064A\u062B\u060C \u0641\u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0642\u062F\u064A\u0645 \u062C\u062F\u064B\u0627 \u0644\u062A\u0634\u063A\u064A\u0644 Alfadocs.",macSafari:"\u062D\u062F\u0651\u062B macOS \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0625\u0635\u062F\u0627\u0631 \u0623\u062D\u062F\u062B \u0645\u0646 Safari\u060C \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0645 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Firefox.",other:"\u062D\u062F\u0651\u062B {{browser}} \u0625\u0644\u0649 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631.",otherUnknown:"\u062B\u0628\u0651\u062A \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Edge \u0623\u0648 Firefox."},help:"\u0643\u064A\u0641\u064A\u0629 \u0627\u0644\u062A\u062D\u062F\u064A\u062B",dismiss:"\u0625\u062E\u0641\u0627\u0621 \u0644\u0644\u064A\u0648\u0645"},fr:{title:"Le navigateur {{browser}} est obsol\xE8te",titleUnknown:"Votre navigateur est obsol\xE8te",reason:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra bient\xF4t plus en charge celui-ci.",reasonWithDate:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra plus en charge celui-ci le {{date}}.",steps:{ios:"Ouvrez R\xE9glages, puis G\xE9n\xE9ral, puis Mise \xE0 jour logicielle. Si aucune mise \xE0 jour n'est propos\xE9e, cet appareil est trop ancien pour Alfadocs.",macSafari:"Mettez \xE0 jour macOS pour obtenir un Safari plus r\xE9cent, ou utilisez la derni\xE8re version de Chrome ou de Firefox.",other:"Mettez \xE0 jour {{browser}} vers sa derni\xE8re version.",otherUnknown:"Installez la derni\xE8re version de Chrome, Edge ou Firefox."},help:"Comment mettre \xE0 jour",dismiss:"Masquer pour aujourd'hui"},es:{title:"El navegador {{browser}} est\xE1 desactualizado",titleUnknown:"Su navegador est\xE1 desactualizado",reason:"Los navegadores antiguos carecen de correcciones de seguridad, y pronto Alfadocs dejar\xE1 de admitir este navegador.",reasonWithDate:"Los navegadores antiguos carecen de correcciones de seguridad, y Alfadocs dejar\xE1 de admitir este navegador el {{date}}.",steps:{ios:"Abra Ajustes, luego General y despu\xE9s Actualizaci\xF3n de software. Si no se ofrece ninguna actualizaci\xF3n, este dispositivo es demasiado antiguo para Alfadocs.",macSafari:"Actualice macOS para obtener un Safari m\xE1s reciente, o use la \xFAltima versi\xF3n de Chrome o Firefox.",other:"Actualice {{browser}} a su \xFAltima versi\xF3n.",otherUnknown:"Instale la \xFAltima versi\xF3n de Chrome, Edge o Firefox."},help:"C\xF3mo actualizar",dismiss:"Ocultar por hoy"},pt:{title:"O navegador {{browser}} est\xE1 desatualizado",titleUnknown:"O seu navegador est\xE1 desatualizado",reason:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 em breve de suportar este navegador.",reasonWithDate:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 de suportar este navegador a {{date}}.",steps:{ios:"Abra Defini\xE7\xF5es, depois Geral e depois Atualiza\xE7\xE3o de Software. Se n\xE3o for oferecida nenhuma atualiza\xE7\xE3o, este dispositivo \xE9 demasiado antigo para o Alfadocs.",macSafari:"Atualize o macOS para obter um Safari mais recente, ou use a vers\xE3o mais recente do Chrome ou do Firefox.",other:"Atualize {{browser}} para a vers\xE3o mais recente.",otherUnknown:"Instale a vers\xE3o mais recente do Chrome, Edge ou Firefox."},help:"Como atualizar",dismiss:"Ocultar por hoje"},nl:{title:"De browser {{browser}} is verouderd",titleUnknown:"Deze browser is verouderd",reason:"Oude browsers missen beveiligingsupdates en Alfadocs stopt binnenkort met de ondersteuning van deze browser.",reasonWithDate:"Oude browsers missen beveiligingsupdates en Alfadocs stopt op {{date}} met de ondersteuning van deze browser.",steps:{ios:"Open Instellingen, dan Algemeen, dan Software-update. Als er geen update wordt aangeboden, is dit apparaat te oud voor Alfadocs.",macSafari:"Werk macOS bij voor een nieuwere Safari, of gebruik de nieuwste versie van Chrome of Firefox.",other:"Werk {{browser}} bij naar de nieuwste versie.",otherUnknown:"Installeer de nieuwste versie van Chrome, Edge of Firefox."},help:"Zo werk je bij",dismiss:"Vandaag verbergen"},ro:{title:"Browserul {{browser}} este \xEEnvechit",titleUnknown:"Browserul dumneavoastr\u0103 este \xEEnvechit",reason:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar \xEEn cur\xE2nd Alfadocs nu va mai suporta acest browser.",reasonWithDate:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar Alfadocs nu va mai suporta acest browser \xEEncep\xE2nd cu {{date}}.",steps:{ios:"Deschide\u021Bi Set\u0103ri, apoi General, apoi Actualizare software. Dac\u0103 nu este oferit\u0103 nicio actualizare, acest dispozitiv este prea vechi pentru Alfadocs.",macSafari:"Actualiza\u021Bi macOS pentru a ob\u021Bine un Safari mai nou sau folosi\u021Bi cea mai recent\u0103 versiune de Chrome sau Firefox.",other:"Actualiza\u021Bi {{browser}} la cea mai recent\u0103 versiune.",otherUnknown:"Instala\u021Bi cea mai recent\u0103 versiune de Chrome, Edge sau Firefox."},help:"Cum actualiza\u021Bi",dismiss:"Ascunde\u021Bi pentru azi"},sq:{title:"Shfletuesi {{browser}} \xEBsht\xEB i vjetruar",titleUnknown:"Shfletuesi juaj \xEBsht\xEB i vjetruar",reason:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs s\xEB shpejti do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi.",reasonWithDate:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi m\xEB {{date}}.",steps:{ios:"Hapni Cil\xEBsimet (Settings), pastaj T\xEB p\xEBrgjithshme (General), pastaj P\xEBrdit\xEBsimi i softuerit (Software Update). N\xEBse nuk ofrohet asnj\xEB p\xEBrdit\xEBsim, kjo pajisje \xEBsht\xEB shum\xEB e vjet\xEBr p\xEBr Alfadocs.",macSafari:"P\xEBrdit\xEBsoni macOS p\xEBr t\xEB pasur nj\xEB Safari m\xEB t\xEB ri, ose p\xEBrdorni versionin m\xEB t\xEB fundit t\xEB Chrome ose Firefox.",other:"P\xEBrdit\xEBsoni {{browser}} n\xEB versionin m\xEB t\xEB fundit.",otherUnknown:"Instaloni versionin m\xEB t\xEB fundit t\xEB Chrome, Edge ose Firefox."},help:"Si t\xEB p\xEBrdit\xEBsoni",dismiss:"Fshihni p\xEBr sot"},tr:{title:"{{browser}} taray\u0131c\u0131s\u0131 g\xFCncel de\u011Fil",titleUnknown:"Taray\u0131c\u0131n\u0131z g\xFCncel de\u011Fil",reason:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs yak\u0131nda bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",reasonWithDate:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs {{date}} tarihinde bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",steps:{ios:"Ayarlar'\u0131, ard\u0131ndan Genel'i, ard\u0131ndan Yaz\u0131l\u0131m G\xFCncelleme'yi a\xE7\u0131n. G\xFCncelleme sunulmuyorsa bu cihaz Alfadocs i\xE7in \xE7ok eski.",macSafari:"Daha yeni bir Safari i\xE7in macOS'i g\xFCncelleyin veya Chrome ya da Firefox'un en son s\xFCr\xFCm\xFCn\xFC kullan\u0131n.",other:"{{browser}} taray\u0131c\u0131s\u0131n\u0131 en son s\xFCr\xFCme g\xFCncelleyin.",otherUnknown:"Chrome, Edge veya Firefox'un en son s\xFCr\xFCm\xFCn\xFC y\xFCkleyin."},help:"Nas\u0131l g\xFCncellenir",dismiss:"Bug\xFCn gizle"},pl:{title:"Przegl\u0105darka {{browser}} jest nieaktualna",titleUnknown:"Twoja przegl\u0105darka jest nieaktualna",reason:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs wkr\xF3tce przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119.",reasonWithDate:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119 {{date}}.",steps:{ios:"Otw\xF3rz Ustawienia, potem Og\xF3lne, potem Aktualizacja oprogramowania. Je\u015Bli nie ma dost\u0119pnej aktualizacji, to urz\u0105dzenie jest zbyt stare dla Alfadocs.",macSafari:"Zaktualizuj macOS, aby dosta\u0107 nowsz\u0105 wersj\u0119 Safari, albo u\u017Cyj najnowszej wersji Chrome lub Firefox.",other:"Zaktualizuj przegl\u0105dark\u0119 {{browser}} do najnowszej wersji.",otherUnknown:"Zainstaluj najnowsz\u0105 wersj\u0119 Chrome, Edge lub Firefox."},help:"Jak zaktualizowa\u0107",dismiss:"Ukryj na dzi\u015B"},sv:{title:"Webbl\xE4saren {{browser}} \xE4r f\xF6r\xE5ldrad",titleUnknown:"Din webbl\xE4sare \xE4r f\xF6r\xE5ldrad",reason:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar snart att st\xF6dja den h\xE4r webbl\xE4saren.",reasonWithDate:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar st\xF6dja den h\xE4r webbl\xE4saren den {{date}}.",steps:{ios:"\xD6ppna Inst\xE4llningar, sedan Allm\xE4nt och sedan Programuppdatering. Om ingen uppdatering erbjuds \xE4r den h\xE4r enheten f\xF6r gammal f\xF6r Alfadocs.",macSafari:"Uppdatera macOS f\xF6r att f\xE5 en nyare Safari, eller anv\xE4nd den senaste versionen av Chrome eller Firefox.",other:"Uppdatera {{browser}} till den senaste versionen.",otherUnknown:"Installera den senaste versionen av Chrome, Edge eller Firefox."},help:"S\xE5 uppdaterar du",dismiss:"D\xF6lj f\xF6r idag"},ru:{title:"\u0411\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0443\u0441\u0442\u0430\u0440\u0435\u043B",titleUnknown:"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043B",reason:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u0441\u043A\u043E\u0440\u043E \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.",reasonWithDate:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 {{date}}.",steps:{ios:"\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u041F\u041E\xBB. \u0415\u0441\u043B\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F, \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0441\u0442\u0430\u0440\u043E\u0435 \u0434\u043B\u044F Alfadocs.",macSafari:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 macOS, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E Safari, \u0438\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome \u0438\u043B\u0438 Firefox.",other:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.",otherUnknown:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome, Edge \u0438\u043B\u0438 Firefox."},help:"\u041A\u0430\u043A \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C",dismiss:"\u0421\u043A\u0440\u044B\u0442\u044C \u043D\u0430 \u0441\u0435\u0433\u043E\u0434\u043D\u044F"},el:{title:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",titleUnknown:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03AE\u03C2 \u03C3\u03B1\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",reason:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03C3\u03CD\u03BD\u03C4\u03BF\u03BC\u03B1 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2.",reasonWithDate:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03C3\u03C4\u03B9\u03C2 {{date}}.",steps:{ios:"\u0391\u03BD\u03BF\u03AF\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2, \u03BC\u03B5\u03C4\u03AC \u0393\u03B5\u03BD\u03B9\u03BA\u03AC \u03BA\u03B1\u03B9 \u03BC\u03B5\u03C4\u03AC \u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03BB\u03BF\u03B3\u03B9\u03C3\u03BC\u03B9\u03BA\u03BF\u03CD. \u0391\u03BD \u03B4\u03B5\u03BD \u03C0\u03C1\u03BF\u03C3\u03C6\u03AD\u03C1\u03B5\u03C4\u03B1\u03B9 \u03B5\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7, \u03B1\u03C5\u03C4\u03AE \u03B7 \u03C3\u03C5\u03C3\u03BA\u03B5\u03C5\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03CD \u03C0\u03B1\u03BB\u03B9\u03AC \u03B3\u03B9\u03B1 \u03C4\u03BF Alfadocs.",macSafari:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF macOS \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03BA\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03BD\u03B5\u03CC\u03C4\u03B5\u03C1\u03BF Safari \u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome \u03AE \u03C4\u03BF\u03C5 Firefox.",other:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03C3\u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7.",otherUnknown:"\u0395\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome, \u03C4\u03BF\u03C5 Edge \u03AE \u03C4\u03BF\u03C5 Firefox."},help:"\u03A0\u03CE\u03C2 \u03BD\u03B1 \u03B5\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03B5\u03C4\u03B5",dismiss:"\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03B3\u03B9\u03B1 \u03C3\u03AE\u03BC\u03B5\u03C1\u03B1"},ja:{title:"{{browser}}\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",titleUnknown:"\u304A\u4F7F\u3044\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",reason:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u3082\u9593\u3082\u306A\u304F\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",reasonWithDate:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u306F{{date}}\u306B\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",steps:{ios:"\u300C\u8A2D\u5B9A\u300D\u3001\u300C\u4E00\u822C\u300D\u3001\u300C\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u30FB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u300D\u306E\u9806\u306B\u958B\u304D\u307E\u3059\u3002\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u304C\u8868\u793A\u3055\u308C\u306A\u3044\u5834\u5408\u3001\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u306FAlfadocs\u306B\u5BFE\u5FDC\u3059\u308B\u306B\u306F\u53E4\u3059\u304E\u307E\u3059\u3002",macSafari:"macOS\u3092\u66F4\u65B0\u3057\u3066\u65B0\u3057\u3044Safari\u3092\u5165\u624B\u3059\u308B\u304B\u3001\u6700\u65B0\u306EChrome\u307E\u305F\u306FFirefox\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",other:"{{browser}}\u3092\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",otherUnknown:"Chrome\u3001Edge\u3001\u307E\u305F\u306FFirefox\u306E\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},help:"\u66F4\u65B0\u65B9\u6CD5",dismiss:"\u4ECA\u65E5\u306F\u975E\u8868\u793A"},zh:{title:"{{browser}} \u5DF2\u8FC7\u65F6",titleUnknown:"\u60A8\u7684\u6D4F\u89C8\u5668\u5DF2\u8FC7\u65F6",reason:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u4E5F\u5373\u5C06\u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",reasonWithDate:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u5C06\u4E8E {{date}} \u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",steps:{ios:"\u4F9D\u6B21\u6253\u5F00\u201C\u8BBE\u7F6E\u201D\u3001\u201C\u901A\u7528\u201D\u3001\u201C\u8F6F\u4EF6\u66F4\u65B0\u201D\u3002\u5982\u679C\u6CA1\u6709\u53EF\u7528\u66F4\u65B0\uFF0C\u8BF4\u660E\u6B64\u8BBE\u5907\u592A\u65E7\uFF0C\u65E0\u6CD5\u4F7F\u7528 Alfadocs\u3002",macSafari:"\u8BF7\u66F4\u65B0 macOS \u4EE5\u83B7\u5F97\u66F4\u65B0\u7248\u672C\u7684 Safari\uFF0C\u6216\u4F7F\u7528\u6700\u65B0\u7248 Chrome \u6216 Firefox\u3002",other:"\u8BF7\u5C06 {{browser}} \u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C\u3002",otherUnknown:"\u8BF7\u5B89\u88C5\u6700\u65B0\u7248 Chrome\u3001Edge \u6216 Firefox\u3002"},help:"\u5982\u4F55\u66F4\u65B0",dismiss:"\u4ECA\u65E5\u9690\u85CF"},hi:{title:"{{browser}} \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",titleUnknown:"\u0906\u092A\u0915\u093E \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",reason:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs \u091C\u0932\u094D\u0926 \u0939\u0940 \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",reasonWithDate:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs {{date}} \u0915\u094B \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",steps:{ios:"\u0938\u0947\u091F\u093F\u0902\u0917 \u0916\u094B\u0932\u0947\u0902, \u092B\u093F\u0930 \u0938\u093E\u092E\u093E\u0928\u094D\u092F, \u092B\u093F\u0930 \u0938\u0949\u092B\u093C\u094D\u091F\u0935\u0947\u092F\u0930 \u0905\u092A\u0921\u0947\u091F\u0964 \u0905\u0917\u0930 \u0915\u094B\u0908 \u0905\u092A\u0921\u0947\u091F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u093E, \u0924\u094B \u092F\u0939 \u0921\u093F\u0935\u093E\u0907\u0938 Alfadocs \u0915\u0947 \u0932\u093F\u090F \u092C\u0939\u0941\u0924 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u0948\u0964",macSafari:"\u0928\u092F\u093E Safari \u092A\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F macOS \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902, \u092F\u093E Chrome \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0947\u0902\u0964",other:"{{browser}} \u0915\u094B \u0909\u0938\u0915\u0947 \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u092E\u0947\u0902 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902\u0964",otherUnknown:"Chrome, Edge \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902\u0964"},help:"\u0905\u092A\u0921\u0947\u091F \u0915\u0948\u0938\u0947 \u0915\u0930\u0947\u0902",dismiss:"\u0906\u091C \u0915\u0947 \u0932\u093F\u090F \u091B\u093F\u092A\u093E\u090F\u0902"}}});})();
@@ -37,10 +37,14 @@ export interface BillLineColumnDeps {
37
37
  /**
38
38
  * The columns. The working columns come first after the pinned description
39
39
  * (quantity, item, status, warnings), then Amount, whose footer holds the
40
- * totals: 1,108 px with the 52 px checkbox, inside the 1,152 px an `xl`
40
+ * totals: 1,092 px with the 52 px checkbox, inside the 1,152 px an `xl`
41
41
  * Dialog gives its body. The figures to check against the paper invoice
42
- * follow; all of it is 1,548 px, so it fits a 1,600 px window without
43
- * scrolling. Widths are DataGrid `size` numbers (the column API, not CSS);
42
+ * follow; all of it is 1,636 px, and a narrower box scrolls them sideways
43
+ * while the description stays pinned. Every column is wide enough for the
44
+ * longest word of its header in each of the 18 languages, with a margin
45
+ * for the few pixels by which text is wider on other systems, since
46
+ * headers wrap between words and are not hyphenated (story "Header words
47
+ * stay whole"). Widths are DataGrid `size` numbers (the column API, not CSS);
44
48
  * the table is in fixed layout. No sorting, filtering, hiding or moving
45
49
  * (D10), and no responsive tiers: a column hidden at 200% zoom would have
46
50
  * no way back, so the table scrolls sideways instead (WCAG 1.4.10).
@@ -1 +1 @@
1
- {"version":3,"file":"bill-line-table.columns.d.ts","sourceRoot":"","sources":["../../../src/components/bill-line-table/bill-line-table.columns.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUzC,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAwB5B,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAElB,WAAW,EACX,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AAsBjC,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,4BAA4B;IAC5B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAUD,eAAO,MAAM,yBAAyB,6CACa,CAAC;AAEpD,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,iDAElC,CAAC;AAMF,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9D,kEAAkE;IAClE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;CACxB;AA4qBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,cAAc,CAAC,WAAW,CAAC,EAAE,CAoN/B;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,kBAAkB,EAAE,GACnC,cAAc,EAAE,CAElB"}
1
+ {"version":3,"file":"bill-line-table.columns.d.ts","sourceRoot":"","sources":["../../../src/components/bill-line-table/bill-line-table.columns.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUzC,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAwB5B,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAElB,WAAW,EACX,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AAsBjC,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,4BAA4B;IAC5B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAUD,eAAO,MAAM,yBAAyB,6CACa,CAAC;AAEpD,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,iDAElC,CAAC;AAMF,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9D,kEAAkE;IAClE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;CACxB;AA4qBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,cAAc,CAAC,WAAW,CAAC,EAAE,CAuN/B;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,kBAAkB,EAAE,GACnC,cAAc,EAAE,CAElB"}
@@ -1,4 +1,4 @@
1
- import { B as l, a as L, b as i, c as I, d as s, e as _, f as t, g as n, h as B, i as T, j as E, k as N, l as A, m as o, n as d, o as g, p as u, q as U, r as m, s as C, t as D } from "../../_chunks/bill-line-table-BRxX0Awq.js";
1
+ import { B as l, a as L, b as i, c as I, d as s, e as _, f as t, g as n, h as B, i as T, j as E, k as N, l as A, m as o, n as d, o as g, p as u, q as U, r as m, s as C, t as D } from "../../_chunks/bill-line-table-CzYzg-Qh.js";
2
2
  export {
3
3
  l as BILL_LINE_ITEM_NAME_MAX_LENGTH,
4
4
  L as BILL_LINE_MAX_QUANTITY,
@@ -1,4 +1,4 @@
1
- import { B as S, a as T, b as a, c as I, d as B, e as s, f as A, g as E, h as O, i as l, j as D, k as N, l as e, m as U, u as R } from "../../_chunks/default-tabs-yEfqAPuT.js";
1
+ import { B as S, a as T, b as a, c as I, d as B, e as s, f as A, g as E, h as O, i as l, j as D, k as N, l as e, m as U, u as R } from "../../_chunks/default-tabs-DOuHEKI5.js";
2
2
  export {
3
3
  S as BILL_ACTION_DISABLED_REASONS,
4
4
  T as BILL_COUNTERPARTY_KINDS,
@@ -1 +1 @@
1
- {"version":3,"file":"data-grid.variants.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/data-grid.variants.ts"],"names":[],"mappings":"AA8BA;0DAC0D;AAC1D,eAAO,MAAM,aAAa;;8EAWzB,CAAC;AAEF;gCACgC;AAChC,eAAO,MAAM,gBAAgB;;;;8EAgC5B,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY;;8EAWvB,CAAC;AAEH,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,oFAE9B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY,oFAExB,CAAC;AAUF,eAAO,MAAM,aAAa;;8EAazB,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,WAAW;;;8EAgBtB,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,cAAc;;8EAQzB,CAAC;AAEH,uBAAuB;AACvB,eAAO,MAAM,YAAY;;;;;;;;;;;;8EAmKxB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,oFAEzB,CAAC;AAMF,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB;;8EAWjC,CAAC;AAIF,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AAQtC,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,oFAM7B,CAAC;AAEH,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB;;8EAQ3B,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF;;;;;;;;;;;0DAW0D;AAC1D,eAAO,MAAM,iBAAiB;;8EA0B7B,CAAC;AAEF;;;2BAG2B;AAC3B,eAAO,MAAM,sBAAsB,6DACyB,CAAC;AAM7D,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB;;8EAWhC,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,oFAAiD,CAAC;AAE/E,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,oFAA4C,CAAC;AAE/E,wCAAwC;AACxC,eAAO,MAAM,mBAAmB;;8EAS9B,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,oFAE7B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,oFAA8B,CAAC;AAE1D;;2EAE2E;AAC3E,eAAO,MAAM,mBAAmB,oFAG9B,CAAC;AAEH,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF;;;;mDAImD;AACnD,eAAO,MAAM,qBAAqB,+DAC4B,CAAC;AAE/D,4DAA4D;AAC5D,eAAO,MAAM,YAAY,oFAAiD,CAAC"}
1
+ {"version":3,"file":"data-grid.variants.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/data-grid.variants.ts"],"names":[],"mappings":"AA8BA;0DAC0D;AAC1D,eAAO,MAAM,aAAa;;8EAWzB,CAAC;AAEF;gCACgC;AAChC,eAAO,MAAM,gBAAgB;;;;8EAgC5B,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY;;8EAWvB,CAAC;AAEH,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,oFAE9B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY,oFAExB,CAAC;AAUF,eAAO,MAAM,aAAa;;8EAazB,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,WAAW;;;8EAgBtB,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,cAAc;;8EAQzB,CAAC;AAEH,uBAAuB;AACvB,eAAO,MAAM,YAAY;;;;;;;;;;;;8EAuKxB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,oFAEzB,CAAC;AAMF,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB;;8EAWjC,CAAC;AAIF,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AAQtC,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,oFAM7B,CAAC;AAEH,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB;;8EAQ3B,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF;;;;;;;;;;;0DAW0D;AAC1D,eAAO,MAAM,iBAAiB;;8EA0B7B,CAAC;AAEF;;;2BAG2B;AAC3B,eAAO,MAAM,sBAAsB,6DACyB,CAAC;AAM7D,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB;;8EAWhC,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,oFAAiD,CAAC;AAE/E,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,oFAA4C,CAAC;AAE/E,wCAAwC;AACxC,eAAO,MAAM,mBAAmB;;8EAS9B,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,oFAE7B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,oFAA8B,CAAC;AAE1D;;2EAE2E;AAC3E,eAAO,MAAM,mBAAmB,oFAG9B,CAAC;AAEH,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,oFAE/B,CAAC;AAEF;;;;mDAImD;AACnD,eAAO,MAAM,qBAAqB,+DAC4B,CAAC;AAE/D,4DAA4D;AAC5D,eAAO,MAAM,YAAY,oFAAiD,CAAC"}
@@ -1,5 +1,5 @@
1
- import { D as _, a as D, b as r, c as E, d as I, e as T, f as G } from "../../_chunks/data-grid-bzvkQ3kc.js";
2
- import { D as s, a as R } from "../../_chunks/toolbar-Co46MEn9.js";
1
+ import { D as _, a as D, b as r, c as E, d as I, e as T, f as G } from "../../_chunks/data-grid-C9xlUMLt.js";
2
+ import { D as s, a as R } from "../../_chunks/toolbar-CC-Ls_eC.js";
3
3
  export {
4
4
  _ as DATA_GRID_DEFAULT_PAGE_SIZE,
5
5
  D as DATA_GRID_MAX_SORT_LEVELS,
@@ -1 +1 @@
1
- {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-upload-list/columns.tsx"],"names":[],"mappings":"AAeA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAItE,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAgB3E,OAAO,EAIL,KAAK,0BAA0B,EAChC,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,gBAAgB,CAAC,0BAA0B,CAAC,EAC1D,SAAS,EAAE,OAAO,GACjB,YAAY,CAAC,eAAe,CAAC,EAAE,CAsBjC;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,SAAS,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;CACtD;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,WAAW,EACX,UAAU,EACV,UAAU,GACX,EAAE,kCAAkC,GAAG,cAAc,CAAC,eAAe,CAAC,EAAE,CA0IxE"}
1
+ {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-upload-list/columns.tsx"],"names":[],"mappings":"AAeA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAItE,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAgB3E,OAAO,EAIL,KAAK,0BAA0B,EAChC,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,gBAAgB,CAAC,0BAA0B,CAAC,EAC1D,SAAS,EAAE,OAAO,GACjB,YAAY,CAAC,eAAe,CAAC,EAAE,CAsBjC;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,SAAS,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;CACtD;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,WAAW,EACX,UAAU,EACV,UAAU,GACX,EAAE,kCAAkC,GAAG,cAAc,CAAC,eAAe,CAAC,EAAE,CA4IxE"}
@@ -1,4 +1,4 @@
1
- import { I as O, a, b as L, c as N, d as s, i as S } from "../../_chunks/invoice-upload-list-CgS_TBuX.js";
1
+ import { I as O, a, b as L, c as N, d as s, i as S } from "../../_chunks/invoice-upload-list-tJY7W1g_.js";
2
2
  export {
3
3
  O as INVOICE_DOCUMENT_KINDS,
4
4
  a as INVOICE_SUPPLIER_KINDS,