@adapttable/unstyled 0.2.1 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["RANGE_OP_LABEL_KEYS","RANGE_OPS","RANGE_SUFFIXES","EyeIcon","PinIcon","GripIcon","ACTIONS_COLUMN_KEY","PIN_Z","ACTIONS_COLUMN_KEY"],"sources":["../src/components/AutoFilterForm.tsx","../src/cx.ts","../src/components/FilterPanel.tsx","../src/components/FilterPopover.tsx","../src/components/icons.tsx","../src/components/menuPopover.ts","../src/components/SavedViewsMenu.tsx","../src/components/chrome.tsx","../src/components/ColumnMenu.tsx","../src/components/tables.tsx","../src/DataTable.tsx"],"sourcesContent":["import {\n type FilterDef,\n filterLabel,\n type FilterValue,\n RANGE_OP_LABEL_KEYS,\n RANGE_OPS,\n RANGE_SUFFIXES,\n type RangeOp,\n readRangeWidget,\n resolveLabels,\n type TableLabels,\n type TableSource,\n useFilterOptions,\n writeRangeWidget,\n} from \"@adapttable/core\";\nimport { type ReactElement, type ReactNode, useState } from \"react\";\n\nimport type { DataTableClassNames } from \"../types\";\n\n/* Part names shared by more than one field shape. */\nconst FIELD_PART = \"filter-field\";\nconst LABEL_PART = \"filter-label\";\n\n/** A filter-bag value as input text (`undefined` renders empty). */\nfunction asText(value: FilterValue): string {\n return String(value ?? \"\");\n}\n\n/** A `multiSelect` bag value as an array, tolerating a scalar from the URL. */\nfunction selectedValues(value: FilterValue): string[] {\n if (Array.isArray(value)) return value;\n if (value == null || value === \"\") return [];\n return [String(value)];\n}\n\n/** Props shared by every per-definition field component. */\ninterface DefFieldProps<TRow> {\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n classNames: DataTableClassNames;\n}\n\ninterface GroupFieldProps {\n caption: string;\n classNames: DataTableClassNames;\n children: ReactNode;\n}\n\n/** `<fieldset>` + `<legend>` wrapper for multi-control fields. */\nfunction GroupField({\n caption,\n classNames,\n children,\n}: Readonly<GroupFieldProps>) {\n return (\n <fieldset\n data-adapttable-part={FIELD_PART}\n className={classNames.filterField}\n >\n <legend\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {caption}\n </legend>\n {children}\n </fieldset>\n );\n}\n\ninterface BagInputProps<TRow> {\n source: TableSource<TRow>;\n stateKey: string;\n type: \"text\" | \"date\" | \"number\";\n placeholder?: string;\n classNames: DataTableClassNames;\n}\n\n/** One input bound to a filter-bag state key (empty text clears it). */\nfunction BagInput<TRow>({\n source,\n stateKey,\n type,\n placeholder,\n classNames,\n}: Readonly<BagInputProps<TRow>>) {\n return (\n <input\n type={type}\n placeholder={placeholder}\n data-adapttable-part=\"filter-input\"\n className={classNames.filterInput}\n value={asText(source.extra[stateKey])}\n onChange={(e) => source.setExtra(stateKey, e.currentTarget.value)}\n />\n );\n}\n\nfunction TextField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n return (\n <label data-adapttable-part={FIELD_PART} className={classNames.filterField}>\n <span\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {filterLabel(def)}\n </span>{\" \"}\n <BagInput\n source={source}\n stateKey={def.key}\n type=\"text\"\n placeholder={def.placeholder}\n classNames={classNames}\n />\n </label>\n );\n}\n\nfunction SelectField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n // `def.options` may be a static array, an async loader, or a leftover\n // \"auto\" — never map it directly; the hook resolves all three shapes.\n const { options, loading } = useFilterOptions(def);\n return (\n <label data-adapttable-part={FIELD_PART} className={classNames.filterField}>\n <span\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {filterLabel(def)}\n </span>{\" \"}\n <select\n data-adapttable-part=\"filter-select\"\n className={classNames.filterSelect}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n >\n {loading ? (\n <option value=\"\" disabled>\n …\n </option>\n ) : (\n <>\n <option value=\"\">All</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </>\n )}\n </select>\n </label>\n );\n}\n\nfunction MultiSelectField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n const selected = selectedValues(source.extra[def.key]);\n // Same contract as SelectField: the hook resolves arrays / loaders / \"auto\".\n const { options, loading } = useFilterOptions(def);\n return (\n <GroupField caption={filterLabel(def)} classNames={classNames}>\n <div\n data-adapttable-part=\"filter-checkbox-group\"\n className={classNames.filterCheckboxGroup}\n >\n {loading ? (\n <span\n data-adapttable-part=\"filter-options-loading\"\n className={classNames.filterOptionsLoading}\n >\n …\n </span>\n ) : (\n options.map((option) => (\n <label\n key={option.value}\n data-adapttable-part=\"filter-checkbox\"\n className={classNames.filterCheckbox}\n >\n <input\n type=\"checkbox\"\n checked={selected.includes(option.value)}\n onChange={(e) =>\n source.setExtra(\n def.key,\n e.currentTarget.checked\n ? [...selected, option.value]\n : selected.filter((v) => v !== option.value)\n )\n }\n />{\" \"}\n {option.label}\n </label>\n ))\n )}\n </div>\n </GroupField>\n );\n}\n\ninterface RangeValueInputProps {\n type: \"date\" | \"number\";\n /** Placeholder AND accessible name (`Value`, `From`, or `To`). */\n label: string;\n value: string;\n onValue: (next: string) => void;\n classNames: DataTableClassNames;\n}\n\n/** One bound of a range widget; the parent owns the write-through. */\nfunction RangeValueInput({\n type,\n label,\n value,\n onValue,\n classNames,\n}: Readonly<RangeValueInputProps>) {\n return (\n <input\n type={type}\n style={{ flex: \"1 1 7rem\", minWidth: \"7rem\" }}\n placeholder={label}\n aria-label={label}\n data-adapttable-part=\"filter-input\"\n className={classNames.filterInput}\n value={value}\n onChange={(e) => onValue(e.currentTarget.value)}\n />\n );\n}\n\ninterface RangeFieldProps<TRow> extends DefFieldProps<TRow> {\n /** Input type AND the `RANGE_OP_LABEL_KEYS` flavour (number vs date). */\n inputType: \"date\" | \"number\";\n suffixes: { readonly start: string; readonly end: string };\n labels: Required<TableLabels>;\n}\n\n/**\n * Operator-first range field: a comparison `<select>` (its placeholder\n * option clears the pair), then ONE value input — or a labeled From/To\n * pair for `between`. The persisted state stays the inclusive\n * `<key><start>` / `<key><end>` pair, written through `setExtras`.\n */\nfunction RangeField<TRow>({\n def,\n source,\n classNames,\n inputType,\n suffixes,\n labels,\n}: Readonly<RangeFieldProps<TRow>>) {\n const lowKey = def.key + suffixes.start;\n const highKey = def.key + suffixes.end;\n // The chosen comparison is widget-local UI state (an operator with no\n // value persists nothing); it seeds from the persisted pair, so a\n // URL-restored pair reopens on its matching operator.\n const [op, setOp] = useState<RangeOp | undefined>(\n () => readRangeWidget(source.extra, lowKey, highKey).op\n );\n // Values stay bag-driven so chips / Clear all reset them live. The\n // single-value operators read the bound they write — `lte` the upper.\n const a = asText(source.extra[op === \"lte\" ? highKey : lowKey]);\n const b = asText(source.extra[highKey]);\n const write = (nextOp: RangeOp | undefined, nextA: string, nextB: string) =>\n source.setExtras(writeRangeWidget(nextOp, nextA, nextB, lowKey, highKey));\n const opLabelKeys = RANGE_OP_LABEL_KEYS[inputType];\n return (\n <GroupField caption={filterLabel(def)} classNames={classNames}>\n {/* Structural layout only (like the toolbar): the operator keeps a\n constant width; values fill the rest and wrap when they don't fit\n (date inputs have a wide native minimum). */}\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8 }}>\n <select\n style={{ flex: \"0 0 8.5rem\", width: \"8.5rem\" }}\n aria-label={labels.operator}\n data-adapttable-part=\"filter-operator\"\n className={classNames.filterOperator}\n value={op ?? \"\"}\n onChange={(e) => {\n // Find (not cast) the next operator; \"\" → undefined → clear.\n const next = RANGE_OPS.find((o) => o === e.currentTarget.value);\n setOp(next);\n write(next, a, b);\n }}\n >\n <option value=\"\">{labels.operator}</option>\n {RANGE_OPS.map((o) => (\n <option key={o} value={o}>\n {labels[opLabelKeys[o]]}\n </option>\n ))}\n </select>\n {op === \"between\" && (\n <>\n <RangeValueInput\n type={inputType}\n label={labels.from}\n value={a}\n onValue={(next) => write(op, next, b)}\n classNames={classNames}\n />\n <RangeValueInput\n type={inputType}\n label={labels.to}\n value={b}\n onValue={(next) => write(op, a, next)}\n classNames={classNames}\n />\n </>\n )}\n {op !== undefined && op !== \"between\" && (\n <RangeValueInput\n type={inputType}\n label={labels.value}\n value={a}\n onValue={(next) => write(op, next, \"\")}\n classNames={classNames}\n />\n )}\n </div>\n </GroupField>\n );\n}\n\ninterface FilterFieldProps<TRow> extends DefFieldProps<TRow> {\n labels: Required<TableLabels>;\n}\n\nfunction FilterField<TRow>({\n def,\n source,\n classNames,\n labels,\n}: Readonly<FilterFieldProps<TRow>>): ReactElement {\n switch (def.type) {\n case \"text\":\n return <TextField def={def} source={source} classNames={classNames} />;\n case \"select\":\n return <SelectField def={def} source={source} classNames={classNames} />;\n case \"multiSelect\":\n return (\n <MultiSelectField def={def} source={source} classNames={classNames} />\n );\n case \"dateRange\":\n return (\n <RangeField\n def={def}\n source={source}\n classNames={classNames}\n inputType=\"date\"\n suffixes={RANGE_SUFFIXES.dateRange}\n labels={labels}\n />\n );\n case \"numberRange\":\n return (\n <RangeField\n def={def}\n source={source}\n classNames={classNames}\n inputType=\"number\"\n suffixes={RANGE_SUFFIXES.numberRange}\n labels={labels}\n />\n );\n }\n}\n\n/** Props for {@link AutoFilterForm}. */\nexport interface AutoFilterFormProps<TRow> {\n /** The resolved filter definitions, in render order. */\n defs: readonly FilterDef<TRow>[];\n /** The table source whose filter bag the controls read and write. */\n source: TableSource<TRow>;\n /** Per-part class name overrides (the `filter*` keys). */\n classNames?: DataTableClassNames;\n /**\n * Label overrides for the range widgets (`operator`, `value`, `from`,\n * `to`, and the `op*` operator names); English defaults merge in.\n */\n labels?: TableLabels;\n}\n\n/**\n * The auto-built filter form for the declarative `filters` array: one\n * semantic field per definition (`text` input, `select` with an \"All\"\n * option, `multiSelect` checkbox list, operator-first `dateRange` /\n * `numberRange` widgets), each carrying `data-adapttable-part` hooks and\n * `classNames` overrides. Controls read `source.extra` and write through\n * `source.setExtra` / `source.setExtras` — an empty value clears its key.\n *\n * @typeParam TRow - The row type.\n */\nexport function AutoFilterForm<TRow>({\n defs,\n source,\n classNames = {},\n labels,\n}: Readonly<AutoFilterFormProps<TRow>>) {\n const resolvedLabels = resolveLabels(labels);\n return (\n <>\n {defs.map((def) => (\n <FilterField\n key={def.key}\n def={def}\n source={source}\n classNames={classNames}\n labels={resolvedLabels}\n />\n ))}\n </>\n );\n}\n","/**\n * Join class-name parts, dropping falsy values. Tiny `clsx`-style helper\n * so the unstyled adapter has no runtime dependencies.\n *\n * @param parts - Class names or falsy values.\n * @returns The space-joined class string.\n */\nexport function cx(...parts: (string | false | null | undefined)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Props for {@link FilterPanel}. */\nexport interface FilterPanelProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n onClearFilters?: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n classNames: DataTableClassNames;\n}\n\n/** Backdrop + side drawer for caller-provided filter widgets. */\nexport function FilterPanel({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n classNames,\n}: Readonly<FilterPanelProps>) {\n const panelRef = useRef<HTMLDialogElement>(null);\n // Keep the latest onClose without re-running the open/close effect on every\n // parent render (which would restore focus prematurely).\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n // While open: close on Escape, move focus into the panel, and restore focus\n // to the trigger on close — basic dialog a11y the hand-rolled drawer needs.\n useEffect(() => {\n if (!open) return;\n const trigger = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onCloseRef.current();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n trigger?.focus?.();\n };\n }, [open]);\n\n if (!open) return null;\n\n // PORTAL to <body>: the drawer is position-fixed, and any transformed /\n // filtered ancestor (animations, marketing chrome) would otherwise become\n // its containing block — re-anchoring the \"fixed\" sheet inside the page.\n // Open-only rendering keeps this SSR-safe.\n return createPortal(\n <>\n <button\n type=\"button\"\n aria-label={labels.cancel}\n data-adapttable-part=\"filters-backdrop\"\n className={cx(\n \"adapttable-filters-backdrop\",\n classNames.filtersBackdrop\n )}\n onClick={onClose}\n />\n <dialog\n ref={panelRef}\n open\n tabIndex={-1}\n aria-modal=\"true\"\n aria-label={labels.filters}\n data-adapttable-part=\"filters-panel\"\n // Real dir, not just the styling hook: the portal moves the dialog\n // out of the table's [dir] subtree, so logical insets (and the\n // panel's own text direction) must carry their own context.\n dir={dir}\n data-dir={dir}\n className={cx(\"adapttable-filters-panel\", classNames.filtersPanel)}\n // Structural side-sheet geometry (consumer classes style the\n // surface): the <dialog> UA stylesheet centers via auto margins and\n // inset-inline 0/0 — pin to the inline END edge, full height,\n // following the writing direction.\n style={{\n position: \"fixed\",\n insetBlock: 0,\n insetInlineEnd: 0,\n insetInlineStart: \"auto\",\n margin: 0,\n maxHeight: \"none\",\n maxWidth: \"none\",\n height: \"100%\",\n zIndex: 200,\n }}\n >\n <header\n data-adapttable-part=\"filters-header\"\n className={classNames.filtersHeader}\n >\n <h3\n data-adapttable-part=\"filters-title\"\n className={classNames.filtersTitle}\n >\n {labels.filters}\n {activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\"}\n </h3>\n <button\n type=\"button\"\n aria-label={labels.cancel}\n data-adapttable-part=\"filters-close\"\n className={classNames.filtersClose}\n onClick={onClose}\n >\n ×\n </button>\n </header>\n <div\n data-adapttable-part=\"filters-body\"\n className={classNames.filtersBody}\n >\n {filters}\n </div>\n <footer\n data-adapttable-part=\"filters-footer\"\n className={classNames.filtersFooter}\n >\n <button\n type=\"button\"\n onClick={() => onClearFilters?.()}\n disabled={activeFilterCount === 0}\n data-adapttable-part=\"filters-clear\"\n className={classNames.filtersClear}\n >\n {labels.clearAll}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n data-adapttable-part=\"filters-done\"\n className={classNames.filtersDone}\n >\n {labels.applyFilters}\n </button>\n </footer>\n </dialog>\n </>,\n document.body\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Props for {@link FilterPopover}. */\nexport interface FilterPopoverProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n onClearFilters?: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n classNames: DataTableClassNames;\n /** The Filters trigger button — the popover anchors beneath it. */\n children: ReactNode;\n}\n\n/**\n * Anchored filter card (the default filter container). Opens beneath the\n * Filters button with NO backdrop — the background stays visible and\n * interactive; clicking outside the popover/anchor or pressing Escape closes\n * it. This is the plain-DOM mirror of the Mantine reference; pair with\n * `filtersMode=\"drawer\"` for the slide-in panel (`FilterPanel`) instead.\n */\nexport function FilterPopover({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n classNames,\n children,\n}: Readonly<FilterPopoverProps>) {\n // Keep the latest onClose without re-running the close effect on every\n // parent render.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const rootRef = useRef<HTMLSpanElement>(null);\n const cardRef = useRef<HTMLDivElement>(null);\n\n // No scrim: close on an outside click or Escape — the background stays\n // interactive. We listen for `click` (not `mousedown`) and ignore events\n // while a control inside the popover still holds focus, so a caller's native\n // `<select>` / date / number picker — whose popup dispatches a document-level\n // event targeting outside the popover DOM — never closes it mid-edit.\n useEffect(() => {\n if (!open) return;\n const onClick = (event: MouseEvent) => {\n // The listener only lives while the anchor span is mounted, so the ref\n // is always set here.\n const root = rootRef.current!;\n if (root.contains(event.target as Node)) return;\n // A control inside the CARD (not the trigger) still holds focus → keep\n // open so native picker popups don't dismiss it mid-edit.\n if (cardRef.current?.contains(document.activeElement)) return;\n onCloseRef.current();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n onCloseRef.current();\n // Escape strands keyboard focus inside the removed card — hand it back\n // to the trigger (the anchored child button).\n rootRef.current?.querySelector(\"button\")?.focus();\n };\n document.addEventListener(\"click\", onClick);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"click\", onClick);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n // RTL flips which edge the card aligns to: anchor to the inline-start so it\n // stays under the button on both writing directions.\n const side = dir === \"rtl\" ? { left: 0 } : { right: 0 };\n\n return (\n <span\n ref={rootRef}\n data-adapttable-part=\"filters-anchor\"\n className={cx(\"adapttable-filters-anchor\", classNames.filtersAnchor)}\n style={{ position: \"relative\", display: \"inline-flex\" }}\n >\n {children}\n {open && (\n <div\n ref={cardRef}\n data-adapttable-part=\"filters-popover\"\n data-dir={dir}\n className={cx(\n \"adapttable-filters-popover\",\n classNames.filtersPopover\n )}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 200, ...side }}\n >\n <header\n data-adapttable-part=\"filters-header\"\n className={classNames.filtersHeader}\n >\n <h3\n data-adapttable-part=\"filters-title\"\n className={classNames.filtersTitle}\n >\n {labels.filters}\n {activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\"}\n </h3>\n <button\n type=\"button\"\n onClick={() => onClearFilters?.()}\n disabled={activeFilterCount === 0}\n data-adapttable-part=\"filters-clear\"\n className={classNames.filtersClear}\n >\n {labels.clearAll}\n </button>\n </header>\n <div\n data-adapttable-part=\"filters-body\"\n className={classNames.filtersBody}\n >\n {filters}\n </div>\n </div>\n )}\n </span>\n );\n}\n","import type { ReactNode } from \"react\";\n\ninterface IconProps {\n size?: number;\n className?: string;\n}\n\nfunction Svg({\n size = 16,\n className,\n children,\n}: Readonly<IconProps & { children: ReactNode }>) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {children}\n </svg>\n );\n}\n\n/** Magnifying-glass search glyph (inline SVG, `currentColor`). */\nexport const SearchIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </Svg>\n);\n\n/** Funnel glyph for the Filters button (inline SVG, `currentColor`). */\nexport const FiltersIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <path d=\"M3 4h18l-7 8v6l-4 2v-8L3 4Z\" />\n </Svg>\n);\n\n/**\n * Right-pointing chevron (▸) for the expand-row button. The button carries a\n * `data-expanded` attribute so consumers rotate the glyph with their own CSS\n * (e.g. `[data-expanded] svg { transform: rotate(90deg) }`).\n */\nexport const ChevronIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <path d=\"m9 6 6 6-6 6\" />\n </Svg>\n);\n","import type { CSSProperties, Dispatch, RefObject, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\n\n/**\n * Inline style for an absolutely-positioned toolbar menu panel. The extra\n * `margin`/`border`/`padding`/`minInlineSize` zeros neutralise `<fieldset>`\n * defaults so the same style works for any panel element.\n */\nexport const MENU_PANEL_STYLE: CSSProperties = {\n position: \"absolute\",\n zIndex: 200,\n insetInlineEnd: 0,\n margin: 0,\n border: 0,\n padding: 0,\n minInlineSize: 0,\n};\n\n/** Disclosure state shared by the toolbar menu popovers. */\nexport interface MenuPopoverState {\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n /** Attach to the wrapper — pointer-downs inside it do not close the panel. */\n rootRef: RefObject<HTMLDivElement | null>;\n /** Attach to the trigger — Escape hands keyboard focus back to it. */\n triggerRef: RefObject<HTMLButtonElement | null>;\n}\n\n/**\n * Disclosure behaviour for the toolbar menus (ColumnMenu, SavedViewsMenu):\n * open/close state that also closes on outside mousedown or Escape, with\n * Escape restoring focus to the trigger.\n */\nexport function useMenuPopover(): MenuPopoverState {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const onKey = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n setOpen(false);\n // Escape strands keyboard focus inside the removed panel — hand it\n // back to the trigger (outside clicks keep their own focus target).\n triggerRef.current?.focus();\n };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n return { open, setOpen, rootRef, triggerRef };\n}\n","import type { TableLabels, UseSavedViewsOptions } from \"@adapttable/core\";\nimport { useSavedViews } from \"@adapttable/core\";\nimport { useState } from \"react\";\n\nimport type { DataTableClassNames } from \"../types\";\nimport { MENU_PANEL_STYLE, useMenuPopover } from \"./menuPopover\";\n\n/** The label strings the saved-views menu renders. */\nexport type SavedViewsLabels = Pick<\n Required<TableLabels>,\n \"savedViews\" | \"saveView\" | \"viewName\" | \"deleteView\"\n>;\n\nexport interface SavedViewsMenuProps {\n /** Wiring for core's `useSavedViews` — storage key, storage, adapter, urlKey. */\n options: UseSavedViewsOptions;\n labels: SavedViewsLabels;\n classNames: DataTableClassNames;\n}\n\n/**\n * Saved-views popover: a disclosure button + a panel listing the saved views\n * (click applies one; each has a delete button) above a save row that\n * captures the table's CURRENT state under a typed name. Built on core's\n * `useSavedViews`; closes on outside-click or Escape. Ships no styles —\n * target the `data-adapttable-part` hooks or the `views*` className slots.\n */\nexport function SavedViewsMenu({\n options,\n labels,\n classNames,\n}: Readonly<SavedViewsMenuProps>) {\n const { views, save, apply, remove } = useSavedViews(options);\n const { open, setOpen, rootRef, triggerRef } = useMenuPopover();\n const [name, setName] = useState(\"\");\n const trimmed = name.trim();\n\n return (\n <div\n ref={rootRef}\n data-adapttable-part=\"views-menu\"\n style={{ position: \"relative\" }}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"true\"\n data-adapttable-part=\"views-button\"\n data-active={open || undefined}\n className={classNames.viewsButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onClick={() => setOpen((v) => !v)}\n >\n {labels.savedViews}\n </button>\n {open && (\n <div\n data-adapttable-part=\"views-panel\"\n className={classNames.viewsPanel}\n style={MENU_PANEL_STYLE}\n >\n {views.map((view) => (\n <div\n key={view.name}\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <button\n type=\"button\"\n data-adapttable-part=\"views-item\"\n className={classNames.viewsItem}\n onClick={() => {\n apply(view.name);\n setOpen(false);\n }}\n >\n {view.name}\n </button>\n <button\n type=\"button\"\n aria-label={`${labels.deleteView}: ${view.name}`}\n data-adapttable-part=\"views-delete\"\n className={classNames.viewsDelete}\n onClick={() => remove(view.name)}\n >\n ×\n </button>\n </div>\n ))}\n <hr data-adapttable-part=\"views-divider\" />\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <input\n aria-label={labels.viewName}\n placeholder={labels.viewName}\n data-adapttable-part=\"views-input\"\n className={classNames.viewsInput}\n value={name}\n onChange={(e) => setName(e.currentTarget.value)}\n />\n <button\n type=\"button\"\n disabled={trimmed === \"\"}\n data-adapttable-part=\"views-save\"\n className={classNames.viewsSave}\n onClick={() => {\n save(trimmed);\n setName(\"\");\n }}\n >\n {labels.saveView}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import {\n type ActiveFilterChip,\n type BulkBarChromeProps,\n pageSizeOptions,\n type PaginationInfo,\n resolveDisabledReason,\n type TableLabels,\n type TableSource,\n useBulkActionRunner,\n} from \"@adapttable/core\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Removable filter-chip strip. Renders nothing when empty. */\nexport function Chips({\n chips,\n onClearAll,\n labels,\n classNames,\n}: Readonly<{\n chips: readonly ActiveFilterChip[];\n /** Clear-all handler — always defined (`chrome.clearFilters`). */\n onClearAll: () => void;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n if (chips.length === 0) return null;\n return (\n <ul\n aria-label={labels.filters}\n data-adapttable-part=\"chips\"\n className={classNames.chips}\n >\n {chips.map((chip) => (\n <li\n key={chip.key}\n data-adapttable-part=\"chip\"\n className={classNames.chip}\n >\n {chip.label}\n <button\n type=\"button\"\n aria-label={`${labels.clearAll}: ${chip.label}`}\n data-adapttable-part=\"chip-remove\"\n className={classNames.chipRemove}\n onClick={chip.onRemove}\n >\n ×\n </button>\n </li>\n ))}\n {/* Clear-all wears the same chip part as its siblings, so consumers\n style it for free and no bare list marker leaks through. */}\n <li data-adapttable-part=\"chip\" className={classNames.chip}>\n <button\n type=\"button\"\n data-adapttable-part=\"chip-remove\"\n className={classNames.chipRemove}\n onClick={onClearAll}\n >\n {labels.clearAll}\n </button>\n </li>\n </ul>\n );\n}\n\n/** Selection toolbar with bulk-action buttons. */\nexport function BulkBar({\n selection,\n total,\n bulkActions,\n confirm,\n labels,\n classNames,\n}: Readonly<BulkBarChromeProps & { classNames: DataTableClassNames }>) {\n const {\n selectedIds,\n selectedCount,\n clear,\n headerState,\n visibleIds,\n allMatching,\n selectAllMatching,\n } = selection;\n const { pending, run } = useBulkActionRunner({\n confirm,\n cancelLabel: labels.cancel,\n onComplete: clear,\n });\n if (selectedCount === 0) return null;\n const ids = [...selectedIds];\n // Offer the cross-page scope only when a full page is selected and more\n // rows match elsewhere; once active, actions run against the whole set.\n const showBanner = headerState === \"all\" && total > visibleIds.length;\n const scope = allMatching ? { allMatching: true, total } : undefined;\n\n return (\n <div data-adapttable-part=\"bulk-bar\" className={classNames.bulkBar}>\n <span>{labels.selectedCount(selectedCount)}</span>\n {showBanner && (\n <div\n data-adapttable-part=\"select-all-banner\"\n className={classNames.selectAllBanner}\n >\n <span\n data-adapttable-part=\"select-all-text\"\n className={classNames.selectAllText}\n >\n {allMatching\n ? labels.allMatchingSelected(total)\n : labels.pageSelected(visibleIds.length)}\n </span>\n <button\n type=\"button\"\n data-adapttable-part=\"select-all-button\"\n className={classNames.selectAllButton}\n onClick={allMatching ? clear : selectAllMatching}\n >\n {allMatching ? labels.clearAll : labels.selectAllMatching(total)}\n </button>\n </div>\n )}\n <button type=\"button\" onClick={clear} disabled={pending !== null}>\n {labels.clearAll}\n </button>\n {bulkActions.map((action) => {\n const reason = resolveDisabledReason(action.disabledReason?.(ids));\n return (\n <button\n key={action.key}\n type=\"button\"\n title={reason}\n disabled={reason !== undefined || pending !== null}\n data-adapttable-part=\"bulk-button\"\n data-color={action.color}\n className={classNames.bulkButton}\n onClick={() => run(action, ids, scope)}\n >\n {action.icon}\n {action.label}\n </button>\n );\n })}\n </div>\n );\n}\n\n/** The rows-per-page selector shared by the toolbar (infinite) and footer. */\nexport function RowsPerPageSelect({\n source,\n labels,\n classNames,\n}: Readonly<{\n source: Pick<TableSource<unknown>, \"limit\" | \"setLimit\">;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n return (\n <label>\n {labels.rowsPerPage}{\" \"}\n <select\n aria-label={labels.rowsPerPage}\n data-adapttable-part=\"rows-per-page\"\n className={classNames.rowsPerPageSelect}\n value={source.limit}\n onChange={(e) => source.setLimit(Number(e.currentTarget.value))}\n >\n {pageSizeOptions(source.limit).map((n) => (\n <option key={n} value={n}>\n {n}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\n/** Prev/next pager with a rows-per-page select. */\nexport function Footer({\n pagination,\n source,\n labels,\n classNames,\n}: Readonly<{\n pagination: PaginationInfo;\n source: {\n limit: number;\n total: number;\n setPage: (n: number) => void;\n setLimit: (n: number) => void;\n };\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n const { safePage, totalPages, fromIndex, toIndex } = pagination;\n return (\n <div data-adapttable-part=\"footer\" className={classNames.footer}>\n <RowsPerPageSelect\n source={source}\n labels={labels}\n classNames={classNames}\n />\n {source.total > 0 && (\n <span>\n {labels.showing({\n from: fromIndex,\n to: toIndex,\n total: source.total,\n })}\n </span>\n )}\n <span>{labels.pageOf({ page: safePage, total: totalPages })}</span>\n <button\n type=\"button\"\n aria-label={labels.previousPage}\n data-adapttable-part=\"page-prev\"\n className={classNames.pageButton}\n disabled={safePage <= 1}\n onClick={() => source.setPage(safePage - 1)}\n >\n ‹\n </button>\n <button\n type=\"button\"\n aria-label={labels.nextPage}\n data-adapttable-part=\"page-next\"\n className={classNames.pageButton}\n disabled={safePage >= totalPages}\n onClick={() => source.setPage(safePage + 1)}\n >\n ›\n </button>\n </div>\n );\n}\n\n/** Inline error with optional retry. */\nexport function ErrorState({\n error,\n labels,\n onRetry,\n classNames,\n}: Readonly<{\n error: Error;\n labels: Required<TableLabels>;\n onRetry?: () => void;\n classNames: DataTableClassNames;\n}>) {\n return (\n <div role=\"alert\" data-adapttable-part=\"error\" className={classNames.error}>\n <strong>{labels.errorTitle}</strong>\n <p>{labels.errorMessage}</p>\n <small>{error.message}</small>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n data-adapttable-part=\"retry\"\n className={classNames.retryButton}\n >\n {labels.retry}\n </button>\n )}\n </div>\n );\n}\n\nfunction loadingLineWidth(column: number, total: number): string {\n if (column === 0) return \"70%\";\n if (column === total - 1) return \"42%\";\n return \"55%\";\n}\n\n/** Skeleton-ish loading placeholder (semantic, unstyled). */\nexport function LoadingState({\n rows,\n columns,\n variant,\n labels,\n classNames,\n hasActions = false,\n}: Readonly<{\n rows: number;\n columns: number;\n variant: \"table\" | \"cards\";\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n hasActions?: boolean;\n}>) {\n const rowKeys = Array.from({ length: rows }, (_, i) => i);\n const dataColumns = Math.max(columns, 1);\n const columnCount = dataColumns + (hasActions ? 1 : 0);\n const columnKeys = Array.from({ length: columnCount }, (_, i) => i);\n return (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n data-adapttable-part=\"loading\"\n className={cx(classNames.loading)}\n >\n {variant === \"table\" ? (\n <table data-adapttable-part=\"loading-table\">\n <thead>\n <tr data-adapttable-part=\"loading-header-row\">\n {columnKeys.map((column) => (\n <th key={column} data-adapttable-part=\"loading-header-cell\">\n <span\n data-adapttable-part=\"loading-line\"\n style={{ width: loadingLineWidth(column, columnCount) }}\n />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rowKeys.map((row) => (\n <tr key={row} data-adapttable-part=\"loading-row\">\n {columnKeys.map((column) => (\n <td key={column} data-adapttable-part=\"loading-cell\">\n <span\n data-adapttable-part=\"loading-line\"\n style={{\n width: loadingLineWidth(column, columnCount),\n }}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n <div data-adapttable-part=\"loading-cards\">\n {rowKeys.map((row) => (\n <div key={row} data-adapttable-part=\"loading-card\">\n {columnKeys\n .slice(0, Math.min(4, columnKeys.length))\n .map((column) => (\n <span\n key={column}\n data-adapttable-part=\"loading-line\"\n style={{\n width: loadingLineWidth(column, columnKeys.length),\n }}\n />\n ))}\n </div>\n ))}\n </div>\n )}\n <span className=\"adapttable-sr-only\">{labels.loading}</span>\n </div>\n );\n}\n","import type {\n ColumnDragState,\n ColumnMenuChromeProps,\n ColumnMenuLabels,\n ColumnMenuRow,\n UseColumnLayoutResult,\n} from \"@adapttable/core\";\nimport {\n ACTIONS_COLUMN_KEY,\n columnMenuRows,\n columnReorderKeyProps,\n EyeIcon,\n GripIcon,\n nextPinSide,\n pinActionLabel,\n PinIcon,\n useColumnDragState,\n} from \"@adapttable/core\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\nimport { MENU_PANEL_STYLE, useMenuPopover } from \"./menuPopover\";\n\n/** Menu labels: the shared chrome contract plus the actions row's name. */\ntype ColumnMenuRowLabels = ColumnMenuLabels & { actions: string };\n\n/** The eye toggle shared by data-column rows and the actions row. */\nfunction VisibilityToggle({\n hidden,\n name,\n labels,\n classNames,\n onToggle,\n}: Readonly<{\n hidden: boolean;\n name: string;\n labels: Pick<ColumnMenuLabels, \"showColumn\" | \"hideColumn\">;\n classNames: DataTableClassNames;\n onToggle: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-visibility\"\n data-active={!hidden || undefined}\n aria-pressed={!hidden}\n aria-label={`${hidden ? labels.showColumn : labels.hideColumn}: ${name}`}\n className={classNames.columnMenuVisibility}\n onClick={onToggle}\n >\n <EyeIcon off={hidden} />\n </button>\n );\n}\n\n/** The row's name caption, shared by data-column rows and the actions row. */\nfunction RowName({\n hidden,\n name,\n classNames,\n}: Readonly<{\n hidden: boolean;\n name: string;\n classNames: DataTableClassNames;\n}>) {\n return (\n <span\n data-adapttable-part=\"column-menu-label\"\n data-hidden={hidden || undefined}\n className={classNames.columnMenuLabel}\n >\n {name}\n </span>\n );\n}\n\n/** The pin toggle shared by data-column rows and the actions row. */\nfunction PinToggle({\n active,\n actionLabel,\n classNames,\n onClick,\n}: Readonly<{\n active: boolean;\n /** What clicking will DO next (e.g. \"Pin right: Actions\"). */\n actionLabel: string;\n classNames: DataTableClassNames;\n onClick: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-pin\"\n data-active={active || undefined}\n aria-pressed={active}\n aria-label={actionLabel}\n className={classNames.columnMenuPin}\n onClick={onClick}\n >\n <PinIcon />\n </button>\n );\n}\n\ninterface ColumnMenuRowProps<TRow> {\n row: ColumnMenuRow<TRow>;\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuLabels;\n classNames: DataTableClassNames;\n drag: ColumnDragState;\n}\n\nfunction ColumnMenuRowItem<TRow>({\n row,\n layout,\n labels,\n classNames,\n drag,\n}: Readonly<ColumnMenuRowProps<TRow>>) {\n const { key, name, hidden, pinned, index } = row;\n return (\n <div\n data-adapttable-part=\"column-menu-item\"\n data-hidden={hidden || undefined}\n data-pinned={pinned}\n className={classNames.columnMenuItem}\n style={{ cursor: \"grab\" }}\n {...drag.rowDragProps(key, index)}\n {...drag.dropProps(index, layout.move)}\n {...drag.rowAttrs(key, index)}\n >\n <span\n data-adapttable-part=\"column-menu-grip\"\n className={classNames.columnMenuGrip}\n {...columnReorderKeyProps(\n key,\n index,\n layout.move,\n `${labels.moveLeft} / ${labels.moveRight}: ${name}`\n )}\n >\n <GripIcon />\n </span>\n <VisibilityToggle\n hidden={hidden}\n name={name}\n labels={labels}\n classNames={classNames}\n onToggle={() => layout.toggleVisible(key)}\n />\n <RowName hidden={hidden} name={name} classNames={classNames} />\n <PinToggle\n active={pinned !== undefined}\n actionLabel={`${pinActionLabel(pinned, labels)}: ${name}`}\n classNames={classNames}\n onClick={() => layout.setPinned(key, nextPinSide(pinned))}\n />\n </div>\n );\n}\n\ninterface ActionsMenuRowProps<TRow> {\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuRowLabels;\n classNames: DataTableClassNames;\n}\n\n/**\n * The injected row-actions column as a first-class menu row: the same eye\n * toggle as a data column plus a ONE-CLICK end-pin toggle (right ↔ unpinned).\n * The column always trails, so there is no left pin and no reorder grip.\n */\nfunction ActionsMenuRowItem<TRow>({\n layout,\n labels,\n classNames,\n}: Readonly<ActionsMenuRowProps<TRow>>) {\n const hidden = layout.isHidden(ACTIONS_COLUMN_KEY);\n const pinned = layout.state.pinned[ACTIONS_COLUMN_KEY] !== undefined;\n const name = labels.actions;\n return (\n <div\n data-adapttable-part=\"column-menu-item\"\n data-actions=\"\"\n data-hidden={hidden || undefined}\n data-pinned={pinned ? \"right\" : undefined}\n className={classNames.columnMenuItem}\n >\n <VisibilityToggle\n hidden={hidden}\n name={name}\n labels={labels}\n classNames={classNames}\n onToggle={() => layout.toggleVisible(ACTIONS_COLUMN_KEY)}\n />\n <RowName hidden={hidden} name={name} classNames={classNames} />\n <PinToggle\n active={pinned}\n actionLabel={`${pinned ? labels.unpin : labels.pinRight}: ${name}`}\n classNames={classNames}\n onClick={() =>\n layout.setPinned(ACTIONS_COLUMN_KEY, pinned ? undefined : \"right\")\n }\n />\n </div>\n );\n}\n\nexport interface ColumnMenuProps<TRow> extends ColumnMenuChromeProps<TRow> {\n classNames: DataTableClassNames;\n /** Resolved labels — the shared contract plus the actions row's name. */\n labels: ColumnMenuRowLabels;\n /**\n * Whether the table renders row actions. When true the menu lists the\n * injected actions column as a separated trailing row, so it hides and\n * end-pins like any data column.\n */\n hasRowActions?: boolean;\n}\n\n/**\n * Column-management popover: a disclosure button + a panel where each column\n * has a drag grip (reorder), an eye toggle (show/hide), and a pin toggle.\n * Closes on outside-click or Escape. Ships no styles — target the\n * `data-adapttable-part` hooks or the `columnMenu*` className slots.\n */\nexport function ColumnMenu<TRow>({\n allColumns,\n layout,\n labels,\n classNames,\n hasRowActions,\n}: Readonly<ColumnMenuProps<TRow>>) {\n const drag = useColumnDragState();\n const { open, setOpen, rootRef, triggerRef } = useMenuPopover();\n\n return (\n <div\n ref={rootRef}\n data-adapttable-part=\"column-menu\"\n className={classNames.columnMenu}\n style={{ position: \"relative\" }}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"true\"\n data-adapttable-part=\"column-menu-button\"\n data-active={open || undefined}\n className={classNames.columnMenuButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onClick={() => setOpen((v) => !v)}\n >\n {labels.columns}\n </button>\n {open && (\n <fieldset\n aria-label={labels.columns}\n data-adapttable-part=\"column-menu-panel\"\n className={classNames.columnMenuPanel}\n style={MENU_PANEL_STYLE}\n >\n <div\n data-adapttable-part=\"column-menu-header\"\n className={classNames.columnMenuHeader}\n >\n <span\n data-adapttable-part=\"column-menu-title\"\n className={classNames.columnMenuTitle}\n >\n {labels.columns}\n </span>\n </div>\n {columnMenuRows(allColumns, layout).map((row) => (\n <ColumnMenuRowItem\n key={row.key}\n row={row}\n layout={layout}\n labels={labels}\n classNames={classNames}\n drag={drag}\n />\n ))}\n {hasRowActions && (\n <>\n <hr\n data-adapttable-part=\"column-menu-separator\"\n className={classNames.columnMenuSeparator}\n />\n <ActionsMenuRowItem\n layout={layout}\n labels={labels}\n classNames={classNames}\n />\n </>\n )}\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-reset\"\n className={cx(classNames.columnMenuReset)}\n onClick={() => layout.reset()}\n >\n {labels.resetColumns}\n </button>\n </fieldset>\n )}\n </div>\n );\n}\n","import {\n type ColumnDef,\n columnResizeHandleProps,\n type ConfirmHandler,\n edgePinStyle,\n headerGroupRow,\n PIN_Z,\n type PinLeads,\n pinnedCellStyle,\n pinnedColumnWidth,\n type PinOffset,\n resolveDisabledReason,\n resolveVirtualRows,\n type RowAction,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n type TableLabels,\n tableMinWidth,\n tableRenderModel,\n type UseDataTableResult,\n useHorizontalOverflow,\n} from \"@adapttable/core\";\nimport type { CSSProperties, MouseEvent, ReactElement, ReactNode } from \"react\";\nimport { memo, useCallback, useMemo, useRef } from \"react\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\nimport { ChevronIcon } from \"./icons\";\n\n/** Inline style for an absolutely-positioned column-resize handle. */\nconst RESIZE_HANDLE_STYLE: CSSProperties = {\n position: \"absolute\",\n insetInlineEnd: 0,\n top: 0,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n};\n\n// The leading checkbox (44px) and trailing actions (120px) columns pin to the\n// edge alongside the data columns, which therefore start past them.\nconst SELECTION_WIDTH = 44;\nconst ACTIONS_WIDTH = 120;\n\n/**\n * Scroll-box style: a `maxHeight`-bounded box scrolls on both axes; otherwise\n * the wrapper scrolls sideways only when something needs it (a pinned column,\n * or measured horizontal overflow). When the table fits, the wrapper carries\n * NO overflow style — `overflow-x: auto` makes `overflow-y` compute to `auto`\n * too, which would trap a page-scroll sticky header inside the box.\n */\nfunction scrollBoxStyle(\n maxHeight: number | undefined,\n scrollX: boolean\n): CSSProperties | undefined {\n if (maxHeight != null) {\n return { maxHeight, overflowX: \"auto\", overflowY: \"auto\" };\n }\n return scrollX ? { overflowX: \"auto\" } : undefined;\n}\n\ninterface SharedProps<TRow> extends SharedTableRenderProps<TRow> {\n classNames: DataTableClassNames;\n /**\n * Whether the user pinned the injected actions column to the inline end\n * (one click in the Columns menu) — sticks it independently of any data\n * pin on that side.\n */\n actionsPinned?: boolean;\n}\n\nfunction RowActionButtons<TRow>({\n row,\n actions,\n confirm,\n cancelLabel,\n classNames,\n}: Readonly<{\n row: TRow;\n actions: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n classNames: DataTableClassNames;\n}>) {\n return (\n <>\n {actions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(action.disabledReason?.(row));\n const disabled =\n reason !== undefined || (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so attach the\n // handler only when the action can run.\n const handleClick = disabled\n ? undefined\n : (e: MouseEvent) => {\n e.stopPropagation();\n runRowAction(action, row, confirm, cancelLabel);\n };\n return (\n <button\n key={action.key}\n type=\"button\"\n disabled={disabled}\n title={reason}\n aria-label={action.label}\n data-adapttable-part=\"action-button\"\n data-color={action.color}\n className={classNames.actionButton}\n onClick={handleClick}\n >\n {action.icon ?? action.label}\n </button>\n );\n })}\n </>\n );\n}\n\n/**\n * The expand/collapse chevron, shared by desktop rows and mobile cards. The\n * `data-expanded` attribute is the styling hook for rotating the glyph\n * (`rowClickProps`' interactive-child guard keeps the click off the row).\n */\nfunction ExpandButton({\n expanded,\n labels,\n classNames,\n onToggle,\n}: Readonly<{\n expanded: boolean;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n onToggle: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"expand-button\"\n data-expanded={expanded ? \"\" : undefined}\n className={classNames.expandButton}\n aria-expanded={expanded}\n aria-label={expanded ? labels.collapseRow : labels.expandRow}\n onClick={onToggle}\n >\n <ChevronIcon size={14} />\n </button>\n );\n}\n\n/**\n * Props for the memoized desktop row. The comparator below checks ONLY the\n * visual inputs (row data, selected/expanded state, column + width + class\n * identities, the pin signature); everything else — `table`, the latest-ref\n * callback wrappers, `confirm`, `pinOffset`, `measureElement` — is either\n * stable or only consulted when one of the compared inputs re-renders the\n * row, so a fresh identity there must not (and does not) defeat the memo.\n */\ninterface DesktopRowProps<TRow> {\n row: TRow;\n index: number;\n /** Stable row id (selection + expansion key). */\n id: string;\n /** Headless model (prop-getters); a fresh object every render — uncompared. */\n table: UseDataTableResult<TRow>;\n columns: ColumnDef<TRow>[];\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n /** `undefined` = no selection column; otherwise the row's selected state. */\n selected: boolean | undefined;\n /** `undefined` = no expansion column; otherwise the row's expanded state. */\n expanded: boolean | undefined;\n showActions: boolean;\n rowActions?: RowAction<TRow>[];\n confirm: ConfirmHandler;\n /** Full-width colSpan (expansion + selection + data + actions), core-computed. */\n columnSpan: number;\n /**\n * Comparator-only input: body cells inherit widths from the header's table\n * layout, but a width change must still re-render pinned rows (insets).\n */\n columnWidths?: Readonly<Record<string, number>>;\n pinOffset?: (key: string) => PinOffset | undefined;\n /** Value-comparable digest of every column's pin side + inset. */\n pinSignature: string;\n hasLeftPin: boolean;\n hasRightPin: boolean;\n /** Whether the actions column is user-pinned (sticks without a data pin). */\n actionsPinned: boolean;\n /** Pre-computed `rowClassName(row, index)` output (value-compared). */\n rowClass: string | undefined;\n clickable: boolean;\n hasPrefetch: boolean;\n /* Latest-ref wrappers from DesktopTable — identity-stable for the mount. */\n onRowClick: (row: TRow) => void;\n onPrefetch: (row: TRow) => void;\n onToggleSelect: (id: string) => void;\n onToggleExpand: (id: string) => void;\n renderDetail: (row: TRow) => ReactNode;\n measureElement?: (element: Element | null) => void;\n}\n\n/**\n * `React.memo` comparator: re-render a row only when one of its VISUAL\n * inputs changes. A search keystroke or another row's checkbox re-renders\n * the table shell, but every unchanged row bails out here (accessors and\n * Cell render-props are not re-invoked).\n */\nfunction desktopRowPropsEqual<TRow>(\n prev: Readonly<DesktopRowProps<TRow>>,\n next: Readonly<DesktopRowProps<TRow>>\n): boolean {\n return (\n prev.row === next.row &&\n prev.index === next.index &&\n prev.id === next.id &&\n prev.selected === next.selected &&\n prev.expanded === next.expanded &&\n prev.columns === next.columns &&\n prev.labels === next.labels &&\n prev.classNames === next.classNames &&\n prev.showActions === next.showActions &&\n prev.rowActions === next.rowActions &&\n prev.columnSpan === next.columnSpan &&\n prev.columnWidths === next.columnWidths &&\n prev.pinSignature === next.pinSignature &&\n prev.hasLeftPin === next.hasLeftPin &&\n prev.hasRightPin === next.hasRightPin &&\n prev.actionsPinned === next.actionsPinned &&\n prev.rowClass === next.rowClass &&\n prev.clickable === next.clickable &&\n prev.hasPrefetch === next.hasPrefetch\n );\n}\n\nfunction DesktopRowBase<TRow>(\n props: Readonly<DesktopRowProps<TRow>>\n): ReactElement {\n const {\n row,\n index,\n id,\n table,\n columns,\n labels,\n classNames,\n selected,\n expanded,\n showActions,\n rowActions,\n confirm,\n columnSpan,\n pinOffset,\n hasLeftPin,\n hasRightPin,\n actionsPinned,\n rowClass,\n clickable,\n hasPrefetch,\n onRowClick,\n onPrefetch,\n onToggleSelect,\n onToggleExpand,\n renderDetail,\n measureElement,\n } = props;\n const expandable = expanded !== undefined;\n const leads: PinLeads = {\n left: selected === undefined ? 0 : SELECTION_WIDTH,\n right: showActions ? ACTIONS_WIDTH : 0,\n };\n const bodyPinStyle = (key: string): CSSProperties | undefined =>\n pinnedCellStyle(pinOffset?.(key), PIN_Z.body, leads);\n const rowProps = { ...table.getRowProps(row, index) };\n delete rowProps.key;\n return (\n <>\n <tr\n {...rowProps}\n {...rowClickProps(row, clickable ? onRowClick : undefined)}\n ref={measureElement}\n data-adapttable-part=\"row\"\n data-selected={selected ? \"\" : undefined}\n data-clickable={clickable ? \"\" : undefined}\n className={cx(classNames.row, rowClass)}\n onMouseEnter={hasPrefetch ? () => onPrefetch(row) : undefined}\n >\n {expandable && (\n <td\n data-adapttable-part=\"expand-cell\"\n className={classNames.expandCell}\n >\n <ExpandButton\n expanded={expanded}\n labels={labels}\n classNames={classNames}\n onToggle={() => onToggleExpand(id)}\n />\n </td>\n )}\n {selected !== undefined && (\n <td\n data-adapttable-part=\"selection-cell\"\n data-pinned={hasLeftPin ? \"left\" : undefined}\n style={edgePinStyle(\"left\", hasLeftPin, PIN_Z.body)}\n className={cx(classNames.cell, classNames.selectionCell)}\n >\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selected}\n onChange={() => onToggleSelect(id)}\n className={classNames.checkbox}\n />\n </td>\n )}\n {columns.map((column) => {\n const pinStyle = bodyPinStyle(column.key);\n return (\n <td\n key={column.key}\n {...table.getCellProps(column, pinStyle && { style: pinStyle })}\n data-adapttable-part=\"cell\"\n data-pinned={pinOffset?.(column.key)?.side}\n className={classNames.cell}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </td>\n );\n })}\n {showActions && (\n <td\n data-adapttable-part=\"actions-cell\"\n data-pinned={hasRightPin || actionsPinned ? \"right\" : undefined}\n style={edgePinStyle(\n \"right\",\n hasRightPin || actionsPinned,\n PIN_Z.body\n )}\n className={cx(classNames.cell, classNames.actionsCell)}\n >\n <RowActionButtons\n row={row}\n actions={rowActions!}\n confirm={confirm}\n cancelLabel={labels.cancel}\n classNames={classNames}\n />\n </td>\n )}\n </tr>\n {expandable && expanded && (\n <tr data-adapttable-part=\"detail-row\" className={classNames.detailRow}>\n <td\n colSpan={columnSpan}\n data-adapttable-part=\"detail-cell\"\n className={classNames.detailCell}\n >\n {renderDetail(row)}\n </td>\n </tr>\n )}\n </>\n );\n}\n\n/**\n * One memoized row component per `DesktopTable` instantiation. A factory\n * (called once through `useMemo`) instead of a module-level `memo(...)`\n * because `React.memo` erases a generic component's type parameter — the\n * factory keeps `TRow` without a type cast.\n */\nfunction createDesktopRow<TRow>() {\n return memo<DesktopRowProps<TRow>>(DesktopRowBase, desktopRowPropsEqual);\n}\n\n/** Desktop semantic `<table>` rendering. */\nexport function DesktopTable<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n classNames,\n prefetch,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n stickyHeader = false,\n stickyTop = 0,\n pinOffset,\n maxHeight,\n virtualScrollRef,\n setWidth,\n columnWidths,\n resizeLabel = \"Resize column\",\n actionsPinned = false,\n}: Readonly<SharedProps<TRow>>) {\n // The model's columnSpan already counts the expand chevron column (core\n // only counts it when BOTH `renderRowDetail` and `expansion` arrive).\n const { columns, selection, labels, showActions, entries, columnSpan } =\n tableRenderModel({\n table,\n rows,\n rowActions,\n getRowId,\n rowEntries,\n renderRowDetail,\n expansion,\n });\n // The actions column sticks when the user end-pins IT in the Columns menu —\n // independently of any data pin on that side (and only while it renders).\n const stickActions = showActions && actionsPinned;\n // Expansion is active only when BOTH halves arrive (the chrome only builds\n // the state when `renderRowDetail` is set).\n const expansionState = renderRowDetail ? expansion : undefined;\n const expandable = expansionState !== undefined;\n\n // The memoized row compares visual inputs only; callbacks reach it through\n // these identity-stable wrappers that always invoke the LATEST handler\n // (selection.toggle and friends change identity with the selection, and a\n // bailed-out row must never fire a stale closure — controlled selection\n // would otherwise compute from an outdated set).\n const live = useRef({\n selection,\n expansion: expansionState,\n onRowClick,\n prefetch,\n renderRowDetail,\n });\n live.current = {\n selection,\n expansion: expansionState,\n onRowClick,\n prefetch,\n renderRowDetail,\n };\n const onToggleSelect = useCallback(\n (id: string) => live.current.selection?.toggle(id),\n []\n );\n const onToggleExpand = useCallback(\n (id: string) => live.current.expansion?.toggle(id),\n []\n );\n const handleRowClick = useCallback(\n (row: TRow) => live.current.onRowClick?.(row),\n []\n );\n const handlePrefetch = useCallback(\n (row: TRow) => live.current.prefetch?.(row),\n []\n );\n const renderDetail = useCallback(\n (row: TRow) => live.current.renderRowDetail?.(row),\n []\n );\n const Row = useMemo(() => createDesktopRow<TRow>(), []);\n\n // Measures the always-rendered scroll-box wrapper so it can turn into a\n // horizontal scroller exactly while the table is wider than it.\n const { ref: overflowRef, overflowing } =\n useHorizontalOverflow<HTMLDivElement>();\n\n // Stick the header *cells* (a `<thead>` does not pin against the document\n // scroller). The adapter ships no colours, so consumers must give their\n // `headerCell` class an opaque background — the `data-sticky`/`data-pinned`\n // hooks make that easy to target.\n // Inside a maxHeight scroll box the box itself is the sticky context, so\n // the header pins to ITS top — a viewport offset would float it mid-box.\n // ANY scroll container (maxHeight, pins, measured overflow) is the sticky\n // context: pin to ITS top — a viewport offset would shove the header down\n // into the rows. A user-pinned actions column counts: it needs the same\n // horizontal scroll container to stick to.\n const hasPinned =\n columns.some((c) => pinOffset?.(c.key) != null) || stickActions;\n const inScrollBox = maxHeight != null || hasPinned || overflowing;\n const stickyStyle: CSSProperties | undefined = stickyHeader\n ? {\n position: \"sticky\",\n top: inScrollBox ? 0 : stickyTop,\n zIndex: PIN_Z.header,\n }\n : undefined;\n const stickyAttr = stickyHeader || undefined;\n const leads: PinLeads = {\n left: selection ? SELECTION_WIDTH : 0,\n right: showActions ? ACTIONS_WIDTH : 0,\n };\n const hasLeftPin = columns.some((c) => pinOffset?.(c.key)?.side === \"left\");\n const hasRightPin = columns.some((c) => pinOffset?.(c.key)?.side === \"right\");\n // A value-comparable digest of the pin layout: while it is unchanged, a\n // memoized row's previous pin styles are still correct, so `pinOffset`'s\n // identity itself stays out of the row comparator.\n const pinSignature = columns\n .map((c) => {\n const pin = pinOffset?.(c.key);\n return pin ? `${c.key}:${pin.side}:${pin.inset}` : \"\";\n })\n .join(\"|\");\n // Pinned header cells need both the sticky-top and sticky-left/right styles;\n // body cells only the side. Header pins sit above the sticky header so later\n // headers never paint over them on horizontal scroll.\n const headPinStyle = (key: string): CSSProperties | undefined =>\n pinnedCellStyle(pinOffset?.(key), PIN_Z.headerPinned, leads);\n const headStyle = (column: ColumnDef<TRow>): CSSProperties | undefined => {\n const key = column.key;\n const pin = headPinStyle(key);\n // A pinned column renders at the width its sticky inset assumed, so\n // stacked pins stay flush even with no declared width.\n const width = pin\n ? pinnedColumnWidth(column, columnWidths)\n : columnWidths?.[key];\n if (!stickyStyle && !pin && width == null && !setWidth) return undefined;\n // Leave `width` out when unset so merging never clobbers the declared\n // column width the core prop-getter already provides.\n const merged: CSSProperties = {\n ...stickyStyle,\n ...pin,\n ...(width != null && { width }),\n };\n // The resize handle is absolutely positioned, so the cell needs a\n // positioning context when it is not already sticky/pinned.\n if (setWidth && !merged.position) merged.position = \"relative\";\n return merged;\n };\n // The checkbox / actions edge cells pin to their side when a data column\n // there is pinned (corner-sticky in the header).\n const edgeHeadStyle = (\n side: \"left\" | \"right\",\n active: boolean\n ): CSSProperties | undefined => {\n const edge = edgePinStyle(side, active, PIN_Z.headerPinned);\n if (!stickyStyle && !edge) return undefined;\n return { ...stickyStyle, ...edge };\n };\n const columnName = (column: ColumnDef<TRow>): string =>\n typeof column.header === \"string\" ? column.header : column.key;\n // Fixed-width columns get a real table min-width (their sum), so the table\n // overflows and scrolls horizontally instead of squishing columns to fit.\n const minWidth = tableMinWidth(columns, {\n widths: columnWidths,\n extra:\n (selection ? SELECTION_WIDTH : 0) + (showActions ? ACTIONS_WIDTH : 0),\n });\n\n // The grouped header row (when any visible column declares a `group`) and\n // the footer summary both align under the data columns, so the leading\n // expand/selection and trailing actions columns get unlabeled pad cells.\n const groups = headerGroupRow(columns);\n const summary = summaryRow?.(rows);\n const groupPad = (\n <th data-adapttable-part=\"group-cell\" className={classNames.groupCell} />\n );\n const summaryPad = (\n <td\n data-adapttable-part=\"summary-cell\"\n className={classNames.summaryCell}\n />\n );\n\n const tableEl = (\n <table\n {...table.getTableProps()}\n data-adapttable-part=\"table\"\n className={classNames.table}\n style={minWidth > 0 ? { minWidth } : undefined}\n >\n <thead data-adapttable-part=\"thead\" className={classNames.thead}>\n {groups && (\n <tr data-adapttable-part=\"group-row\" className={classNames.groupRow}>\n {expandable && groupPad}\n {selection && groupPad}\n {groups.map((group) => (\n <th\n key={group.key}\n colSpan={group.span}\n data-adapttable-part=\"group-cell\"\n className={classNames.groupCell}\n >\n {group.label}\n </th>\n ))}\n {showActions && groupPad}\n </tr>\n )}\n <tr\n {...table.getHeaderRowProps()}\n data-adapttable-part=\"header-row\"\n className={classNames.headerRow}\n >\n {expandable && (\n <th\n aria-label={labels.expandRow}\n data-adapttable-part=\"expand-header\"\n data-sticky={stickyAttr}\n style={stickyStyle}\n className={cx(classNames.headerCell, classNames.expandHeader)}\n />\n )}\n {selection && (\n <th\n data-adapttable-part=\"selection-header\"\n data-sticky={stickyAttr}\n data-pinned={hasLeftPin ? \"left\" : undefined}\n style={edgeHeadStyle(\"left\", hasLeftPin)}\n className={cx(classNames.headerCell, classNames.selectionCell)}\n >\n <input\n type=\"checkbox\"\n aria-label={labels.selectAll}\n checked={selection.headerState === \"all\"}\n ref={(el) => {\n if (el) el.indeterminate = selection.headerState === \"some\";\n }}\n onChange={selection.toggleAll}\n className={classNames.checkbox}\n />\n </th>\n )}\n {columns.map((column) => {\n // Route the local sticky/pin/width style THROUGH the prop-getter\n // so it merges with core's alignment + declared width instead of\n // replacing them (a bare `style=` after the spread would).\n const localStyle = headStyle(column);\n const headerProps = table.getHeaderCellProps(\n column,\n localStyle && { style: localStyle }\n );\n const active = table.sortBy === column.key;\n // Spread the core prop-getter as-is so React hands the click\n // EVENT to core's onClick (shift-click chains a multi-sort\n // level). Its `data-sort-index` doubles as the badge content.\n const sortButtonProps = table.getSortButtonProps(column);\n const sortIndex = sortButtonProps[\"data-sort-index\"];\n return (\n <th\n key={column.key}\n {...headerProps}\n data-adapttable-part=\"header-cell\"\n data-sorted={active ? table.sortDir : undefined}\n data-sticky={stickyAttr}\n data-pinned={pinOffset?.(column.key)?.side}\n className={classNames.headerCell}\n >\n {column.sortable ? (\n <button\n {...sortButtonProps}\n data-adapttable-part=\"sort-button\"\n className={classNames.sortButton}\n >\n {column.header}\n {typeof sortIndex === \"number\" && (\n <span\n data-adapttable-part=\"sort-index\"\n className={classNames.sortIndex}\n >\n {sortIndex}\n </span>\n )}\n <span aria-hidden> {sortGlyph(active, table.sortDir)}</span>\n </button>\n ) : (\n column.header\n )}\n {setWidth && (\n <span\n {...columnResizeHandleProps(\n column.key,\n setWidth,\n `${resizeLabel}: ${columnName(column)}`\n )}\n data-adapttable-part=\"resize-handle\"\n className={classNames.resizeHandle}\n style={RESIZE_HANDLE_STYLE}\n />\n )}\n </th>\n );\n })}\n {showActions && (\n <th\n data-adapttable-part=\"actions-header\"\n data-sticky={stickyAttr}\n data-pinned={hasRightPin || stickActions ? \"right\" : undefined}\n style={edgeHeadStyle(\"right\", hasRightPin || stickActions)}\n className={cx(classNames.headerCell, classNames.actionsCell)}\n >\n {labels.actions}\n </th>\n )}\n </tr>\n </thead>\n <tbody data-adapttable-part=\"tbody\" className={classNames.tbody}>\n {paddingTop > 0 && (\n <tr>\n <td\n colSpan={columnSpan}\n style={{ height: paddingTop, padding: 0 }}\n />\n </tr>\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Row\n key={key}\n row={row}\n index={index}\n id={id}\n table={table}\n columns={columns}\n labels={labels}\n classNames={classNames}\n selected={selection ? selection.isSelected(id) : undefined}\n expanded={\n expansionState ? expansionState.isExpanded(id) : undefined\n }\n showActions={showActions}\n rowActions={rowActions}\n confirm={confirm}\n columnSpan={columnSpan}\n columnWidths={columnWidths}\n pinOffset={pinOffset}\n pinSignature={pinSignature}\n hasLeftPin={hasLeftPin}\n hasRightPin={hasRightPin}\n actionsPinned={stickActions}\n rowClass={rowClassName?.(row, index)}\n clickable={Boolean(onRowClick)}\n hasPrefetch={Boolean(prefetch)}\n onRowClick={handleRowClick}\n onPrefetch={handlePrefetch}\n onToggleSelect={onToggleSelect}\n onToggleExpand={onToggleExpand}\n renderDetail={renderDetail}\n measureElement={measureElement}\n />\n );\n })}\n {paddingBottom > 0 && (\n <tr>\n <td\n colSpan={columnSpan}\n style={{ height: paddingBottom, padding: 0 }}\n />\n </tr>\n )}\n </tbody>\n {summary && (\n <tfoot data-adapttable-part=\"summary\" className={classNames.summary}>\n <tr\n data-adapttable-part=\"summary-row\"\n className={classNames.summaryRow}\n >\n {expandable && summaryPad}\n {selection && summaryPad}\n {columns.map((column) => (\n <td\n key={column.key}\n data-adapttable-part=\"summary-cell\"\n className={classNames.summaryCell}\n >\n {summary[column.key]}\n </td>\n ))}\n {showActions && summaryPad}\n </tr>\n </tfoot>\n )}\n </table>\n );\n\n // The wrapper ALWAYS renders so the overflow hook has an element to\n // measure, but it gains a scroll style only when something needs one: a\n // pinned column (which needs a horizontal scroll container to stick to), a\n // table measurably wider than its container, or a bounding `maxHeight`.\n // While the table fits, the wrapper carries NO overflow style — see\n // `scrollBoxStyle` for the page-scroll sticky-header trap that avoids.\n return (\n <div\n ref={(node) => {\n overflowRef(node);\n virtualScrollRef?.(node);\n }}\n data-adapttable-part=\"scroll-box\"\n style={scrollBoxStyle(maxHeight, hasPinned || overflowing)}\n >\n {tableEl}\n </div>\n );\n}\n\n/** Mobile card-list rendering. */\nexport function MobileCards<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n classNames,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n}: Readonly<SharedProps<TRow>>) {\n const { columns, selection, labels } = table;\n const entries = resolveVirtualRows(rows, getRowId, rowEntries);\n const expansionState = renderRowDetail ? expansion : undefined;\n const summary = summaryRow?.(rows);\n return (\n <ul\n {...table.getTableProps({ role: undefined })}\n data-adapttable-part=\"cards\"\n className={classNames.cards}\n style={{ listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {paddingTop > 0 && (\n <li\n aria-hidden\n data-adapttable-part=\"virtual-spacer\"\n style={{ height: paddingTop }}\n />\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n const expanded = expansionState?.isExpanded(id) ?? false;\n return (\n <li\n key={key}\n {...rowClickProps(row, onRowClick)}\n ref={measureElement}\n data-index={index}\n data-adapttable-part=\"card\"\n data-selected={selection?.isSelected(id) ? \"\" : undefined}\n data-clickable={onRowClick ? \"\" : undefined}\n className={cx(classNames.card, rowClassName?.(row, index))}\n >\n {selection && (\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selection.isSelected(id)}\n onChange={() => selection.toggle(id)}\n className={classNames.checkbox}\n />\n )}\n {expansionState && (\n <ExpandButton\n expanded={expanded}\n labels={labels}\n classNames={classNames}\n onToggle={() => expansionState.toggle(id)}\n />\n )}\n {columns.map((column) => (\n <div\n key={column.key}\n data-adapttable-part=\"card-row\"\n className={classNames.cardRow}\n >\n <span\n data-adapttable-part=\"card-label\"\n className={classNames.cardLabel}\n >\n {cardLabel(column)}\n </span>\n <span\n data-adapttable-part=\"card-value\"\n className={classNames.cardValue}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </span>\n </div>\n ))}\n {rowActions && rowActions.length > 0 && (\n <div\n data-adapttable-part=\"card-actions\"\n className={classNames.actionsCell}\n >\n <RowActionButtons\n row={row}\n actions={rowActions}\n confirm={confirm}\n cancelLabel={labels.cancel}\n classNames={classNames}\n />\n </div>\n )}\n {expanded && (\n // Inside the measured card `<li>`, so the virtualizer's size\n // measurement tracks the open detail panel.\n <div\n data-adapttable-part=\"card-detail\"\n className={classNames.cardDetail}\n >\n {renderRowDetail!(row)}\n </div>\n )}\n </li>\n );\n })}\n {paddingBottom > 0 && (\n <li\n aria-hidden\n data-adapttable-part=\"virtual-spacer\"\n style={{ height: paddingBottom }}\n />\n )}\n {summary && (\n <li\n data-adapttable-part=\"summary-card\"\n className={classNames.summaryCard}\n >\n {columns\n .filter((column) => summary[column.key] !== undefined)\n .map((column) => (\n <div\n key={column.key}\n data-adapttable-part=\"card-row\"\n className={classNames.cardRow}\n >\n <span\n data-adapttable-part=\"card-label\"\n className={classNames.cardLabel}\n >\n {cardLabel(column)}\n </span>\n <span\n data-adapttable-part=\"card-value\"\n className={classNames.cardValue}\n >\n {summary[column.key]}\n </span>\n </div>\n ))}\n </li>\n )}\n </ul>\n );\n}\n\nfunction sortGlyph(active: boolean, dir: \"asc\" | \"desc\" | undefined): string {\n if (!active) return \"↕\";\n return dir === \"asc\" ? \"↑\" : \"↓\";\n}\n\nfunction cardLabel<TRow>(column: ColumnDef<TRow>): string {\n return (\n column.mobileLabel ??\n (typeof column.header === \"string\" ? column.header : column.key)\n );\n}\n","import {\n ACTIONS_COLUMN_KEY,\n isDeclarativeFilters,\n type TableSource,\n type TableVirtualization,\n useChromeBodyData,\n useChromeScrollReset,\n useFilterTriggerToggle,\n useTableChrome,\n useTableData,\n} from \"@adapttable/core\";\nimport type { ReactElement, ReactNode, RefObject } from \"react\";\nimport { useRef, useState } from \"react\";\n\nimport { AutoFilterForm } from \"./components/AutoFilterForm\";\nimport {\n BulkBar,\n Chips,\n ErrorState,\n Footer,\n LoadingState,\n RowsPerPageSelect,\n} from \"./components/chrome\";\nimport { ColumnMenu } from \"./components/ColumnMenu\";\nimport { FilterPanel } from \"./components/FilterPanel\";\nimport { FilterPopover } from \"./components/FilterPopover\";\nimport { FiltersIcon, SearchIcon } from \"./components/icons\";\nimport { SavedViewsMenu } from \"./components/SavedViewsMenu\";\nimport { DesktopTable, MobileCards } from \"./components/tables\";\nimport { cx } from \"./cx\";\nimport type { DataTableClassNames, DataTableProps } from \"./types\";\n\n// A stable default: the memoized desktop rows compare `classNames` by\n// identity, so an inline `{}` default would defeat them on every render.\nconst NO_CLASSNAMES: DataTableClassNames = {};\n\n/**\n * `DataTableProps` after tier resolution: the source is definite (whichever\n * tier provided it) and `filters` is plain JSX (the auto-built form when the\n * caller passed the declarative array).\n */\ntype ResolvedDataTableProps<TRow> = Omit<\n DataTableProps<TRow>,\n \"source\" | \"filters\"\n> & {\n source: TableSource<TRow>;\n filters?: ReactNode;\n};\n\ninterface DataTableBodyProps<TRow> {\n chrome: ReturnType<typeof useTableChrome<TRow>>;\n props: Readonly<ResolvedDataTableProps<TRow>>;\n classNames: NonNullable<DataTableProps<TRow>[\"classNames\"]>;\n confirm: ReturnType<typeof useTableChrome<TRow>>[\"confirm\"];\n getRowId: ReturnType<typeof useTableChrome<TRow>>[\"getRowId\"];\n virtualization: TableVirtualization<TRow>;\n virtualScrollRef: (node: HTMLElement | null) => void;\n labels: ReturnType<typeof useTableChrome<TRow>>[\"table\"][\"labels\"];\n}\n\nfunction DataTableBody<TRow>({\n chrome,\n props,\n classNames,\n confirm,\n getRowId,\n virtualization,\n virtualScrollRef,\n labels,\n}: Readonly<DataTableBodyProps<TRow>>): ReactElement {\n // The injected actions column obeys the user column layout like any data\n // column: hiding it strips `rowActions` before the renderers (desktop and\n // cards alike), and an end-pin sticks it without needing a data pin.\n const rowActions = chrome.columnLayout.isHidden(ACTIONS_COLUMN_KEY)\n ? undefined\n : props.rowActions;\n const actionsPinned =\n (rowActions?.length ?? 0) > 0 &&\n chrome.columnLayout.state.pinned[ACTIONS_COLUMN_KEY] !== undefined;\n if (chrome.body === \"skeleton\") {\n return (\n <>\n {props.slots?.skeleton ?? props.loadingState ?? (\n <LoadingState\n rows={props.skeletonRows ?? props.source.limit}\n columns={chrome.table.columns.length}\n variant={chrome.isMobile ? \"cards\" : \"table\"}\n labels={labels}\n classNames={classNames}\n hasActions={(rowActions?.length ?? 0) > 0}\n />\n )}\n </>\n );\n }\n if (chrome.body === \"empty\") {\n // \"noResults\" means an active search/filter matched nothing — say so and\n // offer a clear CTA; \"noData\" means the source itself is empty.\n const noResults = chrome.emptyVariant === \"noResults\";\n return (\n <>\n {props.slots?.empty ?? props.emptyState ?? (\n <output data-adapttable-part=\"empty\" className={classNames.empty}>\n {noResults ? labels.noResults : labels.noData}\n {noResults && (\n <button\n type=\"button\"\n data-adapttable-part=\"empty-clear\"\n className={classNames.emptyClear}\n onClick={chrome.clearFilters}\n >\n {labels.clearAll}\n </button>\n )}\n </output>\n )}\n </>\n );\n }\n const Renderer = chrome.isMobile ? MobileCards : DesktopTable;\n return (\n <Renderer\n table={chrome.table}\n rows={props.source.rows}\n rowActions={rowActions}\n actionsPinned={actionsPinned}\n confirm={confirm}\n getRowId={getRowId}\n classNames={classNames}\n prefetch={props.prefetch}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n stickyHeader={props.stickyHeader}\n stickyTop={props.stickyTop}\n pinOffset={chrome.columnLayout.pinOffset}\n maxHeight={props.maxHeight}\n virtualScrollRef={virtualScrollRef}\n setWidth={\n props.resizableColumns ? chrome.columnLayout.setWidth : undefined\n }\n columnWidths={chrome.columnLayout.state.widths}\n resizeLabel={labels.resizeColumn}\n />\n );\n}\n\n/**\n * Headless, unstyled AdaptTable for Tailwind / shadcn / custom CSS. Renders\n * semantic HTML with `data-adapttable-part` hooks and `className` overrides;\n * ships no styles of its own. Built on the `@adapttable/core` prop-getters.\n *\n * @typeParam TRow - The row type.\n */\nexport function DataTable<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const {\n data,\n total,\n loading,\n onQueryChange,\n urlAdapter,\n urlKey,\n searchPlaceholder,\n sortByOptions,\n dir,\n hideSearch,\n filtersMode = \"popover\",\n bulkActions,\n classNames = NO_CLASSNAMES,\n toolbar: customToolbar,\n } = props;\n\n const density = props.density ?? \"comfortable\";\n\n // Resolve the data tier (prebuilt source > server > frontend) and the\n // declarative-filter runtime (URL keys, chip labels, predicate).\n const { source, runtime } = useTableData<TRow>({\n locale: props.locale,\n source: props.source,\n data,\n total,\n loading,\n onQueryChange,\n adapter: props.urlSync === false ? undefined : urlAdapter,\n enabled: props.urlSync,\n urlKey,\n columns: props.columns,\n filters: props.filters,\n });\n\n // The declarative array becomes the auto-built form; JSX passes through.\n const autoForm =\n runtime.defs.length > 0 ? (\n <AutoFilterForm\n defs={runtime.defs}\n source={source}\n classNames={classNames}\n labels={props.labels}\n />\n ) : undefined;\n // Column-level `filter` shorthands alone must still render the auto form —\n // only explicit JSX takes over the drawing.\n const filters =\n isDeclarativeFilters(props.filters) || props.filters === undefined\n ? autoForm\n : props.filters;\n\n // Everything downstream sees the RESOLVED source and plain-JSX filters,\n // with the runtime's chip labels under the caller's overrides.\n const chromeProps: ResolvedDataTableProps<TRow> = {\n ...props,\n source,\n filters,\n filterLabels: { ...runtime.filterLabels, ...props.filterLabels },\n };\n\n const chrome = useTableChrome<TRow>(chromeProps);\n const { table, confirm, getRowId } = chrome;\n const { labels } = table;\n const [filtersOpen, setFiltersOpen] = useState(false);\n const filtersTrigger = useFilterTriggerToggle(filtersOpen, setFiltersOpen);\n const rootRef = useRef<HTMLDivElement>(null);\n useChromeScrollReset(rootRef, chrome, chromeProps);\n const bodyData = useChromeBodyData(chrome, chromeProps);\n const { virtualization, canLoadMore } = bodyData;\n // React 18's `ref` attribute rejects core's `RefObject<HTMLDivElement |\n // null>` through interface variance; the same object viewed through its\n // structural shape attaches fine.\n const loadMoreRef: RefObject<HTMLDivElement | null> = bodyData.loadMoreRef;\n const searchProps = table.getSearchInputProps(\n searchPlaceholder ? { placeholder: searchPlaceholder } : undefined\n );\n // Explicit options win; otherwise auto-derive on mobile, where the card\n // layout has no clickable headers to sort by.\n const sortOptions =\n sortByOptions ?? (chrome.isMobile ? table.sortByOptions : undefined);\n\n const filtersButton = (\n <button\n type=\"button\"\n aria-expanded={filtersMode === \"popover\" ? filtersOpen : undefined}\n data-active={filtersOpen || undefined}\n data-adapttable-part=\"filters-button\"\n className={classNames.filtersButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onPointerDown={filtersTrigger.onPointerDown}\n onClick={filtersTrigger.onClick}\n >\n <span\n data-adapttable-part=\"filters-icon\"\n className={classNames.filtersIcon}\n style={{ display: \"inline-flex\" }}\n >\n <FiltersIcon />\n </span>\n {labels.filters}\n {chrome.activeFilterCount > 0 && (\n <span\n data-adapttable-part=\"filters-count\"\n className={classNames.filtersCount}\n >\n {chrome.activeFilterCount}\n </span>\n )}\n </button>\n );\n\n return (\n <div\n ref={rootRef}\n dir={dir}\n data-adapttable-part=\"root\"\n data-mobile={chrome.isMobile || undefined}\n data-density={density}\n data-refreshing={chrome.isRefreshing || undefined}\n // The root wraps the whole table region, so a background refresh marks\n // it busy for assistive tech (the indicator below is decorative-ish).\n aria-busy={chrome.isRefreshing || undefined}\n className={cx(\"adapttable\", classNames.root)}\n >\n <div\n data-adapttable-part=\"toolbar\"\n className={classNames.toolbar}\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n rowGap: 8,\n }}\n >\n {!hideSearch && (\n <span\n data-adapttable-part=\"search-field\"\n className={classNames.searchField}\n style={{\n flex: 1,\n minWidth: 0,\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n <span\n data-adapttable-part=\"search-icon\"\n className={classNames.searchIcon}\n style={{ display: \"inline-flex\" }}\n >\n <SearchIcon size={14} />\n </span>\n <input\n {...searchProps}\n data-adapttable-part=\"search\"\n className={classNames.search}\n style={{ flex: 1, minWidth: 0 }}\n />\n </span>\n )}\n {sortOptions && sortOptions.length > 0 && (\n <label>\n {labels.sortBy}{\" \"}\n <select\n aria-label={labels.sortBy}\n data-adapttable-part=\"sort-select\"\n className={classNames.sortSelect}\n value={source.sortBy ?? \"\"}\n onChange={(e) =>\n source.setSort(\n e.currentTarget.value || undefined,\n source.sortDir ?? \"asc\"\n )\n }\n >\n <option value=\"\">—</option>\n {sortOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n )}\n {customToolbar}\n {filters &&\n (filtersMode === \"popover\" ? (\n <FilterPopover\n open={filtersOpen}\n onClose={() => setFiltersOpen(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={labels}\n dir={dir}\n classNames={classNames}\n >\n {filtersButton}\n </FilterPopover>\n ) : (\n filtersButton\n ))}\n {props.enableColumnMenu && !chrome.isMobile && (\n <ColumnMenu\n allColumns={chrome.allColumns}\n layout={chrome.columnLayout}\n labels={labels}\n classNames={classNames}\n hasRowActions={(props.rowActions?.length ?? 0) > 0}\n />\n )}\n {props.savedViews && (\n // The menu must capture/apply through the SAME URL backend and\n // namespace the table reads, so those default from the table's\n // own props (explicit option values still win).\n <SavedViewsMenu\n options={{ adapter: urlAdapter, urlKey, ...props.savedViews }}\n labels={labels}\n classNames={classNames}\n />\n )}\n {canLoadMore && (\n <RowsPerPageSelect\n source={source}\n labels={labels}\n classNames={classNames}\n />\n )}\n </div>\n\n {filters && filtersMode === \"drawer\" && (\n <FilterPanel\n open={filtersOpen}\n onClose={() => setFiltersOpen(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={labels}\n dir={dir}\n classNames={classNames}\n />\n )}\n\n <Chips\n chips={chrome.mergedChips}\n onClearAll={chrome.clearFilters}\n labels={labels}\n classNames={classNames}\n />\n\n {table.selection && bulkActions && (\n <BulkBar\n selection={table.selection}\n total={source.total}\n bulkActions={bulkActions}\n confirm={confirm}\n labels={labels}\n classNames={classNames}\n />\n )}\n\n {chrome.isRefreshing && (\n // Native indeterminate progress (no `value`) — implicit progressbar\n // role with correct semantics on every device.\n <progress\n aria-label={labels.loading}\n data-adapttable-part=\"refresh-indicator\"\n className={classNames.refreshIndicator}\n />\n )}\n\n {source.error ? (\n <ErrorState\n error={source.error}\n labels={labels}\n onRetry={source.refetch ? () => void source.refetch?.() : undefined}\n classNames={classNames}\n />\n ) : (\n <DataTableBody\n chrome={chrome}\n props={chromeProps}\n classNames={classNames}\n confirm={confirm}\n getRowId={getRowId}\n virtualization={virtualization}\n virtualScrollRef={bodyData.virtualScrollRef}\n labels={labels}\n />\n )}\n\n {canLoadMore && source.hasNextPage && (\n <div\n ref={loadMoreRef}\n data-adapttable-part=\"load-more\"\n className={classNames.loadMore}\n >\n <button\n type=\"button\"\n disabled={source.isFetchingNextPage}\n data-adapttable-part=\"load-more-button\"\n className={classNames.loadMoreButton}\n onClick={() => source.fetchNextPage()}\n >\n {labels.loadMore}\n </button>\n </div>\n )}\n\n {chrome.showFooter && (\n <Footer\n pagination={table.pagination}\n source={source}\n labels={labels}\n classNames={classNames}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["filterLabel","RANGE_OP_LABEL_KEYS","RANGE_OPS","RANGE_SUFFIXES","readRangeWidget","resolveLabels","useFilterOptions","writeRangeWidget","useState","FIELD_PART","LABEL_PART","asText","value","String","selectedValues","Array","isArray","GroupField","t0","$","_c","caption","classNames","children","t1","t2","filterField","BagInput","source","stateKey","type","placeholder","filterInput","extra","t3","t4","e","setExtra","currentTarget","t5","TextField","def","key","t6","SelectField","options","loading","filterSelect","t7","t8","t9","map","_temp","t10","t11","option","label","MultiSelectField","selected","T0","filterOptionsLoading","filterCheckbox","includes","checked","filter","v","filterCheckboxGroup","RangeValueInput","onValue","Symbol","for","flex","minWidth","RangeField","inputType","suffixes","labels","lowKey","start","highKey","end","op","setOp","a","b","nextOp","nextA","nextB","setExtras","write","opLabelKeys","display","flexWrap","gap","width","operator","filterOperator","t12","t13","next","find","o","t14","t15","o_0","t16","t17","from","to","next_0","next_1","t18","undefined","next_2","t19","t20","FilterField","dateRange","numberRange","AutoFilterForm","defs","resolvedLabels","cx","parts","filter","Boolean","join","useEffect","useRef","createPortal","cx","FilterPanel","open","onClose","filters","activeFilterCount","onClearFilters","labels","dir","classNames","panelRef","onCloseRef","current","trigger","document","activeElement","focus","onKeyDown","event","key","addEventListener","removeEventListener","cancel","filtersBackdrop","filtersPanel","position","insetBlock","insetInlineEnd","insetInlineStart","margin","maxHeight","maxWidth","height","zIndex","filtersHeader","filtersTitle","filtersClose","filtersBody","filtersFooter","filtersClear","clearAll","filtersDone","applyFilters","body","useEffect","useRef","cx","FilterPopover","open","onClose","filters","activeFilterCount","onClearFilters","labels","dir","classNames","children","onCloseRef","current","rootRef","cardRef","onClick","event","root","contains","target","document","activeElement","onKeyDown","key","querySelector","focus","addEventListener","removeEventListener","side","left","right","filtersAnchor","position","display","filtersPopover","top","zIndex","filtersHeader","filtersTitle","filtersClear","clearAll","filtersBody","Svg","t0","$","_c","size","t1","className","children","undefined","t2","SearchIcon","p","Symbol","for","FiltersIcon","ChevronIcon","useEffect","useRef","useState","MENU_PANEL_STYLE","position","zIndex","insetInlineEnd","margin","border","padding","minInlineSize","useMenuPopover","$","_c","open","setOpen","rootRef","triggerRef","t0","t1","onDown","event","current","contains","target","onKey","event_0","key","focus","document","addEventListener","removeEventListener","t2","useSavedViews","useState","MENU_PANEL_STYLE","useMenuPopover","SavedViewsMenu","t0","$","_c","options","labels","classNames","views","save","apply","remove","open","setOpen","rootRef","triggerRef","name","setName","t1","trim","trimmed","t2","Symbol","for","position","t3","undefined","t4","flexShrink","whiteSpace","t5","_temp","t6","viewsButton","savedViews","t7","viewsDelete","viewsInput","viewsItem","viewsPanel","viewsSave","deleteView","saveView","viewName","map","view","display","alignItems","e","currentTarget","value","t8","v","pageSizeOptions","resolveDisabledReason","useBulkActionRunner","cx","Chips","t0","$","_c","chips","onClearAll","labels","classNames","length","t1","filters","t2","t3","chip","chipRemove","clearAll","t4","key","label","onRemove","map","t5","t6","BulkBar","selection","total","bulkActions","confirm","selectedIds","selectedCount","clear","headerState","visibleIds","allMatching","selectAllMatching","cancel","cancelLabel","onComplete","pending","run","bulkBar","bulkButton","selectAllBanner","selectAllButton","selectAllText","ids","showBanner","scope","undefined","allMatchingSelected","pageSelected","t7","t8","action","reason","disabledReason","color","icon","RowsPerPageSelect","source","rowsPerPage","rowsPerPageSelect","limit","e","setLimit","Number","currentTarget","value","_temp","n","Footer","pagination","safePage","totalPages","fromIndex","toIndex","footer","showing","from","to","pageOf","page","setPage","pageButton","previousPage","t9","t10","t11","nextPage","t12","ErrorState","error","onRetry","errorTitle","errorMessage","message","retryButton","retry","loadingLineWidth","column","LoadingState","rows","columns","variant","hasActions","Array","_temp2","rowKeys","dataColumns","Math","max","columnCount","loading","columnKeys","_temp3","width","row","column_0","row_0","slice","min","column_1","__0","i_0","i","_","ACTIONS_COLUMN_KEY","columnMenuRows","columnReorderKeyProps","EyeIcon","GripIcon","nextPinSide","pinActionLabel","PinIcon","useColumnDragState","cx","MENU_PANEL_STYLE","useMenuPopover","VisibilityToggle","t0","$","_c","hidden","name","labels","classNames","onToggle","t1","undefined","t2","t3","showColumn","hideColumn","t4","t5","columnMenuVisibility","RowName","columnMenuLabel","PinToggle","active","actionLabel","onClick","Symbol","for","columnMenuPin","ColumnMenuRowItem","row","layout","drag","key","pinned","index","columnMenuItem","cursor","rowDragProps","move","dropProps","t6","rowAttrs","t7","columnMenuGrip","t8","moveLeft","moveRight","t9","t10","t11","t12","toggleVisible","t13","t14","t15","t16","t17","t18","setPinned","t19","t20","ActionsMenuRowItem","isHidden","state","actions","unpin","pinRight","ColumnMenu","allColumns","hasRowActions","open","setOpen","rootRef","triggerRef","position","flexShrink","whiteSpace","_temp","columnMenuButton","columns","columnMenuPanel","columnMenuHeader","columnMenuTitle","map","columnMenuSeparator","columnMenuReset","reset","resetColumns","columnMenu","v","columnResizeHandleProps","edgePinStyle","headerGroupRow","PIN_Z","pinnedCellStyle","pinnedColumnWidth","resolveDisabledReason","resolveVirtualRows","rowClickProps","runRowAction","tableMinWidth","tableRenderModel","useHorizontalOverflow","memo","useCallback","useMemo","useRef","cx","ChevronIcon","RESIZE_HANDLE_STYLE","position","insetInlineEnd","top","height","width","cursor","touchAction","userSelect","SELECTION_WIDTH","ACTIONS_WIDTH","scrollBoxStyle","maxHeight","scrollX","overflowX","overflowY","undefined","RowActionButtons","t0","$","_c","row","actions","confirm","cancelLabel","classNames","t1","t2","action","isHidden","reason","disabledReason","disabled","isDisabled","handleClick","e","stopPropagation","key","label","color","actionButton","icon","map","ExpandButton","expanded","labels","onToggle","collapseRow","expandRow","t3","Symbol","for","t4","expandButton","desktopRowPropsEqual","prev","next","index","id","selected","columns","showActions","rowActions","columnSpan","columnWidths","pinSignature","hasLeftPin","hasRightPin","actionsPinned","rowClass","clickable","hasPrefetch","DesktopRowBase","props","table","pinOffset","onRowClick","onPrefetch","onToggleSelect","onToggleExpand","renderDetail","measureElement","expandable","t10","t11","t12","t5","t6","t7","t8","t9","leads","left","right","bodyPinStyle","body","t13","getRowProps","rowProps","t14","expandCell","cell","checkbox","selectionCell","selectRow","column","pinStyle","getCellProps","style","side","Cell","accessor","actionsCell","cancel","t15","detailCell","detailRow","t16","createDesktopRow","DesktopTable","rows","getRowId","prefetch","rowClassName","renderRowDetail","summaryRow","expansion","rowEntries","paddingTop","paddingBottom","stickyHeader","stickyTop","virtualScrollRef","setWidth","resizeLabel","selection","entries","stickActions","expansionState","live","current","toggle","handleRowClick","handlePrefetch","Row","ref","overflowRef","overflowing","hasPinned","some","c","inScrollBox","stickyStyle","zIndex","header","stickyAttr","pin","inset","join","headPinStyle","headerPinned","headStyle","merged","edgeHeadStyle","active","edge","columnName","minWidth","widths","extra","groups","summary","groupPad","groupCell","summaryPad","summaryCell","tableEl","getTableProps","thead","groupRow","group","span","getHeaderRowProps","headerRow","headerCell","expandHeader","selectAll","headerState","el","indeterminate","toggleAll","localStyle","headerProps","getHeaderCellProps","sortBy","sortButtonProps","getSortButtonProps","sortIndex","sortDir","sortable","sortButton","sortGlyph","resizeHandle","tbody","padding","isSelected","isExpanded","Boolean","node","MobileCards","role","cards","listStyle","margin","card","cardRow","cardLabel","cardValue","length","cardDetail","summaryCard","filter","column_0","column_1","dir","mobileLabel","ACTIONS_COLUMN_KEY","isDeclarativeFilters","useChromeBodyData","useChromeScrollReset","useFilterTriggerToggle","useTableChrome","useTableData","useRef","useState","AutoFilterForm","BulkBar","Chips","ErrorState","Footer","LoadingState","RowsPerPageSelect","ColumnMenu","FilterPanel","FilterPopover","FiltersIcon","SearchIcon","SavedViewsMenu","DesktopTable","MobileCards","cx","NO_CLASSNAMES","DataTableBody","t0","$","_c","chrome","props","classNames","confirm","getRowId","virtualization","virtualScrollRef","labels","rowActions","columnLayout","isHidden","undefined","actionsPinned","length","state","pinned","body","t1","isMobile","table","loadingState","skeletonRows","slots","skeleton","source","limit","columns","t2","noResults","emptyVariant","clearFilters","emptyState","empty","noData","emptyClear","clearAll","Renderer","detail","expansion","enabled","rows","t3","resizableColumns","setWidth","t4","pinOffset","widths","resizeColumn","maxHeight","onRowClick","prefetch","renderRowDetail","rowClassName","stickyHeader","stickyTop","summaryRow","measureElement","paddingBottom","paddingTop","DataTable","data","total","loading","onQueryChange","urlAdapter","urlKey","searchPlaceholder","sortByOptions","dir","hideSearch","filtersMode","bulkActions","toolbar","customToolbar","density","runtime","locale","adapter","urlSync","filters","autoForm","defs","chromeProps","filterLabels","filtersOpen","setFiltersOpen","filtersTrigger","rootRef","bodyData","canLoadMore","loadMoreRef","searchProps","getSearchInputProps","placeholder","sortOptions","filtersButton","flexShrink","whiteSpace","onPointerDown","onClick","filtersIcon","display","activeFilterCount","filtersCount","isRefreshing","root","flexWrap","alignItems","rowGap","searchField","flex","minWidth","searchIcon","search","sortBy","sortSelect","e","setSort","currentTarget","value","sortDir","map","o","label","enableColumnMenu","allColumns","savedViews","mergedChips","selection","refreshIndicator","error","refetch","hasNextPage","loadMore","isFetchingNextPage","loadMoreButton","fetchNextPage","showFooter","pagination"],"sources":["../src/components/AutoFilterForm.tsx","../src/cx.ts","../src/components/FilterPanel.tsx","../src/components/FilterPopover.tsx","../src/components/icons.tsx","../src/components/menuPopover.ts","../src/components/SavedViewsMenu.tsx","../src/components/chrome.tsx","../src/components/ColumnMenu.tsx","../src/components/tables.tsx","../src/DataTable.tsx"],"sourcesContent":["import {\n type FilterDef,\n filterLabel,\n type FilterValue,\n RANGE_OP_LABEL_KEYS,\n RANGE_OPS,\n RANGE_SUFFIXES,\n type RangeOp,\n readRangeWidget,\n resolveLabels,\n type TableLabels,\n type TableSource,\n useFilterOptions,\n writeRangeWidget,\n} from \"@adapttable/core\";\nimport { type ReactElement, type ReactNode, useState } from \"react\";\n\nimport type { DataTableClassNames } from \"../types\";\n\n/* Part names shared by more than one field shape. */\nconst FIELD_PART = \"filter-field\";\nconst LABEL_PART = \"filter-label\";\n\n/** A filter-bag value as input text (`undefined` renders empty). */\nfunction asText(value: FilterValue): string {\n return String(value ?? \"\");\n}\n\n/** A `multiSelect` bag value as an array, tolerating a scalar from the URL. */\nfunction selectedValues(value: FilterValue): string[] {\n if (Array.isArray(value)) return value;\n if (value == null || value === \"\") return [];\n return [String(value)];\n}\n\n/** Props shared by every per-definition field component. */\ninterface DefFieldProps<TRow> {\n def: FilterDef<TRow>;\n source: TableSource<TRow>;\n classNames: DataTableClassNames;\n}\n\ninterface GroupFieldProps {\n caption: string;\n classNames: DataTableClassNames;\n children: ReactNode;\n}\n\n/** `<fieldset>` + `<legend>` wrapper for multi-control fields. */\nfunction GroupField({\n caption,\n classNames,\n children,\n}: Readonly<GroupFieldProps>) {\n return (\n <fieldset\n data-adapttable-part={FIELD_PART}\n className={classNames.filterField}\n >\n <legend\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {caption}\n </legend>\n {children}\n </fieldset>\n );\n}\n\ninterface BagInputProps<TRow> {\n source: TableSource<TRow>;\n stateKey: string;\n type: \"text\" | \"date\" | \"number\";\n placeholder?: string;\n classNames: DataTableClassNames;\n}\n\n/** One input bound to a filter-bag state key (empty text clears it). */\nfunction BagInput<TRow>({\n source,\n stateKey,\n type,\n placeholder,\n classNames,\n}: Readonly<BagInputProps<TRow>>) {\n return (\n <input\n type={type}\n placeholder={placeholder}\n data-adapttable-part=\"filter-input\"\n className={classNames.filterInput}\n value={asText(source.extra[stateKey])}\n onChange={(e) => source.setExtra(stateKey, e.currentTarget.value)}\n />\n );\n}\n\nfunction TextField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n return (\n <label data-adapttable-part={FIELD_PART} className={classNames.filterField}>\n <span\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {filterLabel(def)}\n </span>{\" \"}\n <BagInput\n source={source}\n stateKey={def.key}\n type=\"text\"\n placeholder={def.placeholder}\n classNames={classNames}\n />\n </label>\n );\n}\n\nfunction SelectField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n // `def.options` may be a static array, an async loader, or a leftover\n // \"auto\" — never map it directly; the hook resolves all three shapes.\n const { options, loading } = useFilterOptions(def);\n return (\n <label data-adapttable-part={FIELD_PART} className={classNames.filterField}>\n <span\n data-adapttable-part={LABEL_PART}\n className={classNames.filterLabel}\n >\n {filterLabel(def)}\n </span>{\" \"}\n <select\n data-adapttable-part=\"filter-select\"\n className={classNames.filterSelect}\n value={asText(source.extra[def.key])}\n onChange={(e) => source.setExtra(def.key, e.currentTarget.value)}\n >\n {loading ? (\n <option value=\"\" disabled>\n …\n </option>\n ) : (\n <>\n <option value=\"\">All</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </>\n )}\n </select>\n </label>\n );\n}\n\nfunction MultiSelectField<TRow>({\n def,\n source,\n classNames,\n}: Readonly<DefFieldProps<TRow>>) {\n const selected = selectedValues(source.extra[def.key]);\n // Same contract as SelectField: the hook resolves arrays / loaders / \"auto\".\n const { options, loading } = useFilterOptions(def);\n return (\n <GroupField caption={filterLabel(def)} classNames={classNames}>\n <div\n data-adapttable-part=\"filter-checkbox-group\"\n className={classNames.filterCheckboxGroup}\n >\n {loading ? (\n <span\n data-adapttable-part=\"filter-options-loading\"\n className={classNames.filterOptionsLoading}\n >\n …\n </span>\n ) : (\n options.map((option) => (\n <label\n key={option.value}\n data-adapttable-part=\"filter-checkbox\"\n className={classNames.filterCheckbox}\n >\n <input\n type=\"checkbox\"\n checked={selected.includes(option.value)}\n onChange={(e) =>\n source.setExtra(\n def.key,\n e.currentTarget.checked\n ? [...selected, option.value]\n : selected.filter((v) => v !== option.value)\n )\n }\n />{\" \"}\n {option.label}\n </label>\n ))\n )}\n </div>\n </GroupField>\n );\n}\n\ninterface RangeValueInputProps {\n type: \"date\" | \"number\";\n /** Placeholder AND accessible name (`Value`, `From`, or `To`). */\n label: string;\n value: string;\n onValue: (next: string) => void;\n classNames: DataTableClassNames;\n}\n\n/** One bound of a range widget; the parent owns the write-through. */\nfunction RangeValueInput({\n type,\n label,\n value,\n onValue,\n classNames,\n}: Readonly<RangeValueInputProps>) {\n return (\n <input\n type={type}\n style={{ flex: \"1 1 7rem\", minWidth: \"7rem\" }}\n placeholder={label}\n aria-label={label}\n data-adapttable-part=\"filter-input\"\n className={classNames.filterInput}\n value={value}\n onChange={(e) => onValue(e.currentTarget.value)}\n />\n );\n}\n\ninterface RangeFieldProps<TRow> extends DefFieldProps<TRow> {\n /** Input type AND the `RANGE_OP_LABEL_KEYS` flavour (number vs date). */\n inputType: \"date\" | \"number\";\n suffixes: { readonly start: string; readonly end: string };\n labels: Required<TableLabels>;\n}\n\n/**\n * Operator-first range field: a comparison `<select>` (its placeholder\n * option clears the pair), then ONE value input — or a labeled From/To\n * pair for `between`. The persisted state stays the inclusive\n * `<key><start>` / `<key><end>` pair, written through `setExtras`.\n */\nfunction RangeField<TRow>({\n def,\n source,\n classNames,\n inputType,\n suffixes,\n labels,\n}: Readonly<RangeFieldProps<TRow>>) {\n const lowKey = def.key + suffixes.start;\n const highKey = def.key + suffixes.end;\n // The chosen comparison is widget-local UI state (an operator with no\n // value persists nothing); it seeds from the persisted pair, so a\n // URL-restored pair reopens on its matching operator.\n const [op, setOp] = useState<RangeOp | undefined>(\n () => readRangeWidget(source.extra, lowKey, highKey).op\n );\n // Values stay bag-driven so chips / Clear all reset them live. The\n // single-value operators read the bound they write — `lte` the upper.\n const a = asText(source.extra[op === \"lte\" ? highKey : lowKey]);\n const b = asText(source.extra[highKey]);\n const write = (nextOp: RangeOp | undefined, nextA: string, nextB: string) =>\n source.setExtras(writeRangeWidget(nextOp, nextA, nextB, lowKey, highKey));\n const opLabelKeys = RANGE_OP_LABEL_KEYS[inputType];\n return (\n <GroupField caption={filterLabel(def)} classNames={classNames}>\n {/* Structural layout only (like the toolbar): the operator keeps a\n constant width; values fill the rest and wrap when they don't fit\n (date inputs have a wide native minimum). */}\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8 }}>\n <select\n style={{ flex: \"0 0 8.5rem\", width: \"8.5rem\" }}\n aria-label={labels.operator}\n data-adapttable-part=\"filter-operator\"\n className={classNames.filterOperator}\n value={op ?? \"\"}\n onChange={(e) => {\n // Find (not cast) the next operator; \"\" → undefined → clear.\n const next = RANGE_OPS.find((o) => o === e.currentTarget.value);\n setOp(next);\n write(next, a, b);\n }}\n >\n <option value=\"\">{labels.operator}</option>\n {RANGE_OPS.map((o) => (\n <option key={o} value={o}>\n {labels[opLabelKeys[o]]}\n </option>\n ))}\n </select>\n {op === \"between\" && (\n <>\n <RangeValueInput\n type={inputType}\n label={labels.from}\n value={a}\n onValue={(next) => write(op, next, b)}\n classNames={classNames}\n />\n <RangeValueInput\n type={inputType}\n label={labels.to}\n value={b}\n onValue={(next) => write(op, a, next)}\n classNames={classNames}\n />\n </>\n )}\n {op !== undefined && op !== \"between\" && (\n <RangeValueInput\n type={inputType}\n label={labels.value}\n value={a}\n onValue={(next) => write(op, next, \"\")}\n classNames={classNames}\n />\n )}\n </div>\n </GroupField>\n );\n}\n\ninterface FilterFieldProps<TRow> extends DefFieldProps<TRow> {\n labels: Required<TableLabels>;\n}\n\nfunction FilterField<TRow>({\n def,\n source,\n classNames,\n labels,\n}: Readonly<FilterFieldProps<TRow>>): ReactElement {\n switch (def.type) {\n case \"text\":\n return <TextField def={def} source={source} classNames={classNames} />;\n case \"select\":\n return <SelectField def={def} source={source} classNames={classNames} />;\n case \"multiSelect\":\n return (\n <MultiSelectField def={def} source={source} classNames={classNames} />\n );\n case \"dateRange\":\n return (\n <RangeField\n def={def}\n source={source}\n classNames={classNames}\n inputType=\"date\"\n suffixes={RANGE_SUFFIXES.dateRange}\n labels={labels}\n />\n );\n case \"numberRange\":\n return (\n <RangeField\n def={def}\n source={source}\n classNames={classNames}\n inputType=\"number\"\n suffixes={RANGE_SUFFIXES.numberRange}\n labels={labels}\n />\n );\n }\n}\n\n/** Props for {@link AutoFilterForm}. */\nexport interface AutoFilterFormProps<TRow> {\n /** The resolved filter definitions, in render order. */\n defs: readonly FilterDef<TRow>[];\n /** The table source whose filter bag the controls read and write. */\n source: TableSource<TRow>;\n /** Per-part class name overrides (the `filter*` keys). */\n classNames?: DataTableClassNames;\n /**\n * Label overrides for the range widgets (`operator`, `value`, `from`,\n * `to`, and the `op*` operator names); English defaults merge in.\n */\n labels?: TableLabels;\n}\n\n/**\n * The auto-built filter form for the declarative `filters` array: one\n * semantic field per definition (`text` input, `select` with an \"All\"\n * option, `multiSelect` checkbox list, operator-first `dateRange` /\n * `numberRange` widgets), each carrying `data-adapttable-part` hooks and\n * `classNames` overrides. Controls read `source.extra` and write through\n * `source.setExtra` / `source.setExtras` — an empty value clears its key.\n *\n * @typeParam TRow - The row type.\n */\nexport function AutoFilterForm<TRow>({\n defs,\n source,\n classNames = {},\n labels,\n}: Readonly<AutoFilterFormProps<TRow>>) {\n const resolvedLabels = resolveLabels(labels);\n return (\n <>\n {defs.map((def) => (\n <FilterField\n key={def.key}\n def={def}\n source={source}\n classNames={classNames}\n labels={resolvedLabels}\n />\n ))}\n </>\n );\n}\n","/**\n * Join class-name parts, dropping falsy values. Tiny `clsx`-style helper\n * so the unstyled adapter has no runtime dependencies.\n *\n * @param parts - Class names or falsy values.\n * @returns The space-joined class string.\n */\nexport function cx(...parts: (string | false | null | undefined)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Props for {@link FilterPanel}. */\nexport interface FilterPanelProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n onClearFilters?: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n classNames: DataTableClassNames;\n}\n\n/** Backdrop + side drawer for caller-provided filter widgets. */\nexport function FilterPanel({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n classNames,\n}: Readonly<FilterPanelProps>) {\n const panelRef = useRef<HTMLDialogElement>(null);\n // Keep the latest onClose without re-running the open/close effect on every\n // parent render (which would restore focus prematurely).\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n // While open: close on Escape, move focus into the panel, and restore focus\n // to the trigger on close — basic dialog a11y the hand-rolled drawer needs.\n useEffect(() => {\n if (!open) return;\n const trigger = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onCloseRef.current();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n trigger?.focus?.();\n };\n }, [open]);\n\n if (!open) return null;\n\n // PORTAL to <body>: the drawer is position-fixed, and any transformed /\n // filtered ancestor (animations, marketing chrome) would otherwise become\n // its containing block — re-anchoring the \"fixed\" sheet inside the page.\n // Open-only rendering keeps this SSR-safe.\n return createPortal(\n <>\n <button\n type=\"button\"\n aria-label={labels.cancel}\n data-adapttable-part=\"filters-backdrop\"\n className={cx(\n \"adapttable-filters-backdrop\",\n classNames.filtersBackdrop\n )}\n onClick={onClose}\n />\n <dialog\n ref={panelRef}\n open\n tabIndex={-1}\n aria-modal=\"true\"\n aria-label={labels.filters}\n data-adapttable-part=\"filters-panel\"\n // Real dir, not just the styling hook: the portal moves the dialog\n // out of the table's [dir] subtree, so logical insets (and the\n // panel's own text direction) must carry their own context.\n dir={dir}\n data-dir={dir}\n className={cx(\"adapttable-filters-panel\", classNames.filtersPanel)}\n // Structural side-sheet geometry (consumer classes style the\n // surface): the <dialog> UA stylesheet centers via auto margins and\n // inset-inline 0/0 — pin to the inline END edge, full height,\n // following the writing direction.\n style={{\n position: \"fixed\",\n insetBlock: 0,\n insetInlineEnd: 0,\n insetInlineStart: \"auto\",\n margin: 0,\n maxHeight: \"none\",\n maxWidth: \"none\",\n height: \"100%\",\n zIndex: 200,\n }}\n >\n <header\n data-adapttable-part=\"filters-header\"\n className={classNames.filtersHeader}\n >\n <h3\n data-adapttable-part=\"filters-title\"\n className={classNames.filtersTitle}\n >\n {labels.filters}\n {activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\"}\n </h3>\n <button\n type=\"button\"\n aria-label={labels.cancel}\n data-adapttable-part=\"filters-close\"\n className={classNames.filtersClose}\n onClick={onClose}\n >\n ×\n </button>\n </header>\n <div\n data-adapttable-part=\"filters-body\"\n className={classNames.filtersBody}\n >\n {filters}\n </div>\n <footer\n data-adapttable-part=\"filters-footer\"\n className={classNames.filtersFooter}\n >\n <button\n type=\"button\"\n onClick={() => onClearFilters?.()}\n disabled={activeFilterCount === 0}\n data-adapttable-part=\"filters-clear\"\n className={classNames.filtersClear}\n >\n {labels.clearAll}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n data-adapttable-part=\"filters-done\"\n className={classNames.filtersDone}\n >\n {labels.applyFilters}\n </button>\n </footer>\n </dialog>\n </>,\n document.body\n );\n}\n","import type { Direction, TableLabels } from \"@adapttable/core\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Props for {@link FilterPopover}. */\nexport interface FilterPopoverProps {\n open: boolean;\n onClose: () => void;\n filters: ReactNode;\n activeFilterCount: number;\n onClearFilters?: () => void;\n labels: Required<TableLabels>;\n dir?: Direction;\n classNames: DataTableClassNames;\n /** The Filters trigger button — the popover anchors beneath it. */\n children: ReactNode;\n}\n\n/**\n * Anchored filter card (the default filter container). Opens beneath the\n * Filters button with NO backdrop — the background stays visible and\n * interactive; clicking outside the popover/anchor or pressing Escape closes\n * it. This is the plain-DOM mirror of the Mantine reference; pair with\n * `filtersMode=\"drawer\"` for the slide-in panel (`FilterPanel`) instead.\n */\nexport function FilterPopover({\n open,\n onClose,\n filters,\n activeFilterCount,\n onClearFilters,\n labels,\n dir = \"ltr\",\n classNames,\n children,\n}: Readonly<FilterPopoverProps>) {\n // Keep the latest onClose without re-running the close effect on every\n // parent render.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const rootRef = useRef<HTMLSpanElement>(null);\n const cardRef = useRef<HTMLDivElement>(null);\n\n // No scrim: close on an outside click or Escape — the background stays\n // interactive. We listen for `click` (not `mousedown`) and ignore events\n // while a control inside the popover still holds focus, so a caller's native\n // `<select>` / date / number picker — whose popup dispatches a document-level\n // event targeting outside the popover DOM — never closes it mid-edit.\n useEffect(() => {\n if (!open) return;\n const onClick = (event: MouseEvent) => {\n // The listener only lives while the anchor span is mounted, so the ref\n // is always set here.\n const root = rootRef.current!;\n if (root.contains(event.target as Node)) return;\n // A control inside the CARD (not the trigger) still holds focus → keep\n // open so native picker popups don't dismiss it mid-edit.\n if (cardRef.current?.contains(document.activeElement)) return;\n onCloseRef.current();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n onCloseRef.current();\n // Escape strands keyboard focus inside the removed card — hand it back\n // to the trigger (the anchored child button).\n rootRef.current?.querySelector(\"button\")?.focus();\n };\n document.addEventListener(\"click\", onClick);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"click\", onClick);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n // RTL flips which edge the card aligns to: anchor to the inline-start so it\n // stays under the button on both writing directions.\n const side = dir === \"rtl\" ? { left: 0 } : { right: 0 };\n\n return (\n <span\n ref={rootRef}\n data-adapttable-part=\"filters-anchor\"\n className={cx(\"adapttable-filters-anchor\", classNames.filtersAnchor)}\n style={{ position: \"relative\", display: \"inline-flex\" }}\n >\n {children}\n {open && (\n <div\n ref={cardRef}\n data-adapttable-part=\"filters-popover\"\n data-dir={dir}\n className={cx(\n \"adapttable-filters-popover\",\n classNames.filtersPopover\n )}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 200, ...side }}\n >\n <header\n data-adapttable-part=\"filters-header\"\n className={classNames.filtersHeader}\n >\n <h3\n data-adapttable-part=\"filters-title\"\n className={classNames.filtersTitle}\n >\n {labels.filters}\n {activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\"}\n </h3>\n <button\n type=\"button\"\n onClick={() => onClearFilters?.()}\n disabled={activeFilterCount === 0}\n data-adapttable-part=\"filters-clear\"\n className={classNames.filtersClear}\n >\n {labels.clearAll}\n </button>\n </header>\n <div\n data-adapttable-part=\"filters-body\"\n className={classNames.filtersBody}\n >\n {filters}\n </div>\n </div>\n )}\n </span>\n );\n}\n","import type { ReactNode } from \"react\";\n\ninterface IconProps {\n size?: number;\n className?: string;\n}\n\nfunction Svg({\n size = 16,\n className,\n children,\n}: Readonly<IconProps & { children: ReactNode }>) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {children}\n </svg>\n );\n}\n\n/** Magnifying-glass search glyph (inline SVG, `currentColor`). */\nexport const SearchIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </Svg>\n);\n\n/** Funnel glyph for the Filters button (inline SVG, `currentColor`). */\nexport const FiltersIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <path d=\"M3 4h18l-7 8v6l-4 2v-8L3 4Z\" />\n </Svg>\n);\n\n/**\n * Right-pointing chevron (▸) for the expand-row button. The button carries a\n * `data-expanded` attribute so consumers rotate the glyph with their own CSS\n * (e.g. `[data-expanded] svg { transform: rotate(90deg) }`).\n */\nexport const ChevronIcon = (p: Readonly<IconProps>) => (\n <Svg {...p}>\n <path d=\"m9 6 6 6-6 6\" />\n </Svg>\n);\n","import type { CSSProperties, Dispatch, RefObject, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\n\n/**\n * Inline style for an absolutely-positioned toolbar menu panel. The extra\n * `margin`/`border`/`padding`/`minInlineSize` zeros neutralise `<fieldset>`\n * defaults so the same style works for any panel element.\n */\nexport const MENU_PANEL_STYLE: CSSProperties = {\n position: \"absolute\",\n zIndex: 200,\n insetInlineEnd: 0,\n margin: 0,\n border: 0,\n padding: 0,\n minInlineSize: 0,\n};\n\n/** Disclosure state shared by the toolbar menu popovers. */\nexport interface MenuPopoverState {\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n /** Attach to the wrapper — pointer-downs inside it do not close the panel. */\n rootRef: RefObject<HTMLDivElement | null>;\n /** Attach to the trigger — Escape hands keyboard focus back to it. */\n triggerRef: RefObject<HTMLButtonElement | null>;\n}\n\n/**\n * Disclosure behaviour for the toolbar menus (ColumnMenu, SavedViewsMenu):\n * open/close state that also closes on outside mousedown or Escape, with\n * Escape restoring focus to the trigger.\n */\nexport function useMenuPopover(): MenuPopoverState {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const onKey = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n setOpen(false);\n // Escape strands keyboard focus inside the removed panel — hand it\n // back to the trigger (outside clicks keep their own focus target).\n triggerRef.current?.focus();\n };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n return { open, setOpen, rootRef, triggerRef };\n}\n","import type { TableLabels, UseSavedViewsOptions } from \"@adapttable/core\";\nimport { useSavedViews } from \"@adapttable/core\";\nimport { useState } from \"react\";\n\nimport type { DataTableClassNames } from \"../types\";\nimport { MENU_PANEL_STYLE, useMenuPopover } from \"./menuPopover\";\n\n/** The label strings the saved-views menu renders. */\nexport type SavedViewsLabels = Pick<\n Required<TableLabels>,\n \"savedViews\" | \"saveView\" | \"viewName\" | \"deleteView\"\n>;\n\nexport interface SavedViewsMenuProps {\n /** Wiring for core's `useSavedViews` — storage key, storage, adapter, urlKey. */\n options: UseSavedViewsOptions;\n labels: SavedViewsLabels;\n classNames: DataTableClassNames;\n}\n\n/**\n * Saved-views popover: a disclosure button + a panel listing the saved views\n * (click applies one; each has a delete button) above a save row that\n * captures the table's CURRENT state under a typed name. Built on core's\n * `useSavedViews`; closes on outside-click or Escape. Ships no styles —\n * target the `data-adapttable-part` hooks or the `views*` className slots.\n */\nexport function SavedViewsMenu({\n options,\n labels,\n classNames,\n}: Readonly<SavedViewsMenuProps>) {\n const { views, save, apply, remove } = useSavedViews(options);\n const { open, setOpen, rootRef, triggerRef } = useMenuPopover();\n const [name, setName] = useState(\"\");\n const trimmed = name.trim();\n\n return (\n <div\n ref={rootRef}\n data-adapttable-part=\"views-menu\"\n style={{ position: \"relative\" }}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"true\"\n data-adapttable-part=\"views-button\"\n data-active={open || undefined}\n className={classNames.viewsButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onClick={() => setOpen((v) => !v)}\n >\n {labels.savedViews}\n </button>\n {open && (\n <div\n data-adapttable-part=\"views-panel\"\n className={classNames.viewsPanel}\n style={MENU_PANEL_STYLE}\n >\n {views.map((view) => (\n <div\n key={view.name}\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <button\n type=\"button\"\n data-adapttable-part=\"views-item\"\n className={classNames.viewsItem}\n onClick={() => {\n apply(view.name);\n setOpen(false);\n }}\n >\n {view.name}\n </button>\n <button\n type=\"button\"\n aria-label={`${labels.deleteView}: ${view.name}`}\n data-adapttable-part=\"views-delete\"\n className={classNames.viewsDelete}\n onClick={() => remove(view.name)}\n >\n ×\n </button>\n </div>\n ))}\n <hr data-adapttable-part=\"views-divider\" />\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <input\n aria-label={labels.viewName}\n placeholder={labels.viewName}\n data-adapttable-part=\"views-input\"\n className={classNames.viewsInput}\n value={name}\n onChange={(e) => setName(e.currentTarget.value)}\n />\n <button\n type=\"button\"\n disabled={trimmed === \"\"}\n data-adapttable-part=\"views-save\"\n className={classNames.viewsSave}\n onClick={() => {\n save(trimmed);\n setName(\"\");\n }}\n >\n {labels.saveView}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import {\n type ActiveFilterChip,\n type BulkBarChromeProps,\n pageSizeOptions,\n type PaginationInfo,\n resolveDisabledReason,\n type TableLabels,\n type TableSource,\n useBulkActionRunner,\n} from \"@adapttable/core\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\n\n/** Removable filter-chip strip. Renders nothing when empty. */\nexport function Chips({\n chips,\n onClearAll,\n labels,\n classNames,\n}: Readonly<{\n chips: readonly ActiveFilterChip[];\n /** Clear-all handler — always defined (`chrome.clearFilters`). */\n onClearAll: () => void;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n if (chips.length === 0) return null;\n return (\n <ul\n aria-label={labels.filters}\n data-adapttable-part=\"chips\"\n className={classNames.chips}\n >\n {chips.map((chip) => (\n <li\n key={chip.key}\n data-adapttable-part=\"chip\"\n className={classNames.chip}\n >\n {chip.label}\n <button\n type=\"button\"\n aria-label={`${labels.clearAll}: ${chip.label}`}\n data-adapttable-part=\"chip-remove\"\n className={classNames.chipRemove}\n onClick={chip.onRemove}\n >\n ×\n </button>\n </li>\n ))}\n {/* Clear-all wears the same chip part as its siblings, so consumers\n style it for free and no bare list marker leaks through. */}\n <li data-adapttable-part=\"chip\" className={classNames.chip}>\n <button\n type=\"button\"\n data-adapttable-part=\"chip-remove\"\n className={classNames.chipRemove}\n onClick={onClearAll}\n >\n {labels.clearAll}\n </button>\n </li>\n </ul>\n );\n}\n\n/** Selection toolbar with bulk-action buttons. */\nexport function BulkBar({\n selection,\n total,\n bulkActions,\n confirm,\n labels,\n classNames,\n}: Readonly<BulkBarChromeProps & { classNames: DataTableClassNames }>) {\n const {\n selectedIds,\n selectedCount,\n clear,\n headerState,\n visibleIds,\n allMatching,\n selectAllMatching,\n } = selection;\n const { pending, run } = useBulkActionRunner({\n confirm,\n cancelLabel: labels.cancel,\n onComplete: clear,\n });\n if (selectedCount === 0) return null;\n const ids = [...selectedIds];\n // Offer the cross-page scope only when a full page is selected and more\n // rows match elsewhere; once active, actions run against the whole set.\n const showBanner = headerState === \"all\" && total > visibleIds.length;\n const scope = allMatching ? { allMatching: true, total } : undefined;\n\n return (\n <div data-adapttable-part=\"bulk-bar\" className={classNames.bulkBar}>\n <span>{labels.selectedCount(selectedCount)}</span>\n {showBanner && (\n <div\n data-adapttable-part=\"select-all-banner\"\n className={classNames.selectAllBanner}\n >\n <span\n data-adapttable-part=\"select-all-text\"\n className={classNames.selectAllText}\n >\n {allMatching\n ? labels.allMatchingSelected(total)\n : labels.pageSelected(visibleIds.length)}\n </span>\n <button\n type=\"button\"\n data-adapttable-part=\"select-all-button\"\n className={classNames.selectAllButton}\n onClick={allMatching ? clear : selectAllMatching}\n >\n {allMatching ? labels.clearAll : labels.selectAllMatching(total)}\n </button>\n </div>\n )}\n <button type=\"button\" onClick={clear} disabled={pending !== null}>\n {labels.clearAll}\n </button>\n {bulkActions.map((action) => {\n const reason = resolveDisabledReason(action.disabledReason?.(ids));\n return (\n <button\n key={action.key}\n type=\"button\"\n title={reason}\n disabled={reason !== undefined || pending !== null}\n data-adapttable-part=\"bulk-button\"\n data-color={action.color}\n className={classNames.bulkButton}\n onClick={() => run(action, ids, scope)}\n >\n {action.icon}\n {action.label}\n </button>\n );\n })}\n </div>\n );\n}\n\n/** The rows-per-page selector shared by the toolbar (infinite) and footer. */\nexport function RowsPerPageSelect({\n source,\n labels,\n classNames,\n}: Readonly<{\n source: Pick<TableSource<unknown>, \"limit\" | \"setLimit\">;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n return (\n <label>\n {labels.rowsPerPage}{\" \"}\n <select\n aria-label={labels.rowsPerPage}\n data-adapttable-part=\"rows-per-page\"\n className={classNames.rowsPerPageSelect}\n value={source.limit}\n onChange={(e) => source.setLimit(Number(e.currentTarget.value))}\n >\n {pageSizeOptions(source.limit).map((n) => (\n <option key={n} value={n}>\n {n}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\n/** Prev/next pager with a rows-per-page select. */\nexport function Footer({\n pagination,\n source,\n labels,\n classNames,\n}: Readonly<{\n pagination: PaginationInfo;\n source: {\n limit: number;\n total: number;\n setPage: (n: number) => void;\n setLimit: (n: number) => void;\n };\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n}>) {\n const { safePage, totalPages, fromIndex, toIndex } = pagination;\n return (\n <div data-adapttable-part=\"footer\" className={classNames.footer}>\n <RowsPerPageSelect\n source={source}\n labels={labels}\n classNames={classNames}\n />\n {source.total > 0 && (\n <span>\n {labels.showing({\n from: fromIndex,\n to: toIndex,\n total: source.total,\n })}\n </span>\n )}\n <span>{labels.pageOf({ page: safePage, total: totalPages })}</span>\n <button\n type=\"button\"\n aria-label={labels.previousPage}\n data-adapttable-part=\"page-prev\"\n className={classNames.pageButton}\n disabled={safePage <= 1}\n onClick={() => source.setPage(safePage - 1)}\n >\n ‹\n </button>\n <button\n type=\"button\"\n aria-label={labels.nextPage}\n data-adapttable-part=\"page-next\"\n className={classNames.pageButton}\n disabled={safePage >= totalPages}\n onClick={() => source.setPage(safePage + 1)}\n >\n ›\n </button>\n </div>\n );\n}\n\n/** Inline error with optional retry. */\nexport function ErrorState({\n error,\n labels,\n onRetry,\n classNames,\n}: Readonly<{\n error: Error;\n labels: Required<TableLabels>;\n onRetry?: () => void;\n classNames: DataTableClassNames;\n}>) {\n return (\n <div role=\"alert\" data-adapttable-part=\"error\" className={classNames.error}>\n <strong>{labels.errorTitle}</strong>\n <p>{labels.errorMessage}</p>\n <small>{error.message}</small>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n data-adapttable-part=\"retry\"\n className={classNames.retryButton}\n >\n {labels.retry}\n </button>\n )}\n </div>\n );\n}\n\nfunction loadingLineWidth(column: number, total: number): string {\n if (column === 0) return \"70%\";\n if (column === total - 1) return \"42%\";\n return \"55%\";\n}\n\n/** Skeleton-ish loading placeholder (semantic, unstyled). */\nexport function LoadingState({\n rows,\n columns,\n variant,\n labels,\n classNames,\n hasActions = false,\n}: Readonly<{\n rows: number;\n columns: number;\n variant: \"table\" | \"cards\";\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n hasActions?: boolean;\n}>) {\n const rowKeys = Array.from({ length: rows }, (_, i) => i);\n const dataColumns = Math.max(columns, 1);\n const columnCount = dataColumns + (hasActions ? 1 : 0);\n const columnKeys = Array.from({ length: columnCount }, (_, i) => i);\n return (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n data-adapttable-part=\"loading\"\n className={cx(classNames.loading)}\n >\n {variant === \"table\" ? (\n <table data-adapttable-part=\"loading-table\">\n <thead>\n <tr data-adapttable-part=\"loading-header-row\">\n {columnKeys.map((column) => (\n <th key={column} data-adapttable-part=\"loading-header-cell\">\n <span\n data-adapttable-part=\"loading-line\"\n style={{ width: loadingLineWidth(column, columnCount) }}\n />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rowKeys.map((row) => (\n <tr key={row} data-adapttable-part=\"loading-row\">\n {columnKeys.map((column) => (\n <td key={column} data-adapttable-part=\"loading-cell\">\n <span\n data-adapttable-part=\"loading-line\"\n style={{\n width: loadingLineWidth(column, columnCount),\n }}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n <div data-adapttable-part=\"loading-cards\">\n {rowKeys.map((row) => (\n <div key={row} data-adapttable-part=\"loading-card\">\n {columnKeys\n .slice(0, Math.min(4, columnKeys.length))\n .map((column) => (\n <span\n key={column}\n data-adapttable-part=\"loading-line\"\n style={{\n width: loadingLineWidth(column, columnKeys.length),\n }}\n />\n ))}\n </div>\n ))}\n </div>\n )}\n <span className=\"adapttable-sr-only\">{labels.loading}</span>\n </div>\n );\n}\n","import type {\n ColumnDragState,\n ColumnMenuChromeProps,\n ColumnMenuLabels,\n ColumnMenuRow,\n UseColumnLayoutResult,\n} from \"@adapttable/core\";\nimport {\n ACTIONS_COLUMN_KEY,\n columnMenuRows,\n columnReorderKeyProps,\n EyeIcon,\n GripIcon,\n nextPinSide,\n pinActionLabel,\n PinIcon,\n useColumnDragState,\n} from \"@adapttable/core\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\nimport { MENU_PANEL_STYLE, useMenuPopover } from \"./menuPopover\";\n\n/** Menu labels: the shared chrome contract plus the actions row's name. */\ntype ColumnMenuRowLabels = ColumnMenuLabels & { actions: string };\n\n/** The eye toggle shared by data-column rows and the actions row. */\nfunction VisibilityToggle({\n hidden,\n name,\n labels,\n classNames,\n onToggle,\n}: Readonly<{\n hidden: boolean;\n name: string;\n labels: Pick<ColumnMenuLabels, \"showColumn\" | \"hideColumn\">;\n classNames: DataTableClassNames;\n onToggle: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-visibility\"\n data-active={!hidden || undefined}\n aria-pressed={!hidden}\n aria-label={`${hidden ? labels.showColumn : labels.hideColumn}: ${name}`}\n className={classNames.columnMenuVisibility}\n onClick={onToggle}\n >\n <EyeIcon off={hidden} />\n </button>\n );\n}\n\n/** The row's name caption, shared by data-column rows and the actions row. */\nfunction RowName({\n hidden,\n name,\n classNames,\n}: Readonly<{\n hidden: boolean;\n name: string;\n classNames: DataTableClassNames;\n}>) {\n return (\n <span\n data-adapttable-part=\"column-menu-label\"\n data-hidden={hidden || undefined}\n className={classNames.columnMenuLabel}\n >\n {name}\n </span>\n );\n}\n\n/** The pin toggle shared by data-column rows and the actions row. */\nfunction PinToggle({\n active,\n actionLabel,\n classNames,\n onClick,\n}: Readonly<{\n active: boolean;\n /** What clicking will DO next (e.g. \"Pin right: Actions\"). */\n actionLabel: string;\n classNames: DataTableClassNames;\n onClick: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-pin\"\n data-active={active || undefined}\n aria-pressed={active}\n aria-label={actionLabel}\n className={classNames.columnMenuPin}\n onClick={onClick}\n >\n <PinIcon />\n </button>\n );\n}\n\ninterface ColumnMenuRowProps<TRow> {\n row: ColumnMenuRow<TRow>;\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuLabels;\n classNames: DataTableClassNames;\n drag: ColumnDragState;\n}\n\nfunction ColumnMenuRowItem<TRow>({\n row,\n layout,\n labels,\n classNames,\n drag,\n}: Readonly<ColumnMenuRowProps<TRow>>) {\n const { key, name, hidden, pinned, index } = row;\n return (\n <div\n data-adapttable-part=\"column-menu-item\"\n data-hidden={hidden || undefined}\n data-pinned={pinned}\n className={classNames.columnMenuItem}\n style={{ cursor: \"grab\" }}\n {...drag.rowDragProps(key, index)}\n {...drag.dropProps(index, layout.move)}\n {...drag.rowAttrs(key, index)}\n >\n <span\n data-adapttable-part=\"column-menu-grip\"\n className={classNames.columnMenuGrip}\n {...columnReorderKeyProps(\n key,\n index,\n layout.move,\n `${labels.moveLeft} / ${labels.moveRight}: ${name}`\n )}\n >\n <GripIcon />\n </span>\n <VisibilityToggle\n hidden={hidden}\n name={name}\n labels={labels}\n classNames={classNames}\n onToggle={() => layout.toggleVisible(key)}\n />\n <RowName hidden={hidden} name={name} classNames={classNames} />\n <PinToggle\n active={pinned !== undefined}\n actionLabel={`${pinActionLabel(pinned, labels)}: ${name}`}\n classNames={classNames}\n onClick={() => layout.setPinned(key, nextPinSide(pinned))}\n />\n </div>\n );\n}\n\ninterface ActionsMenuRowProps<TRow> {\n layout: UseColumnLayoutResult<TRow>;\n labels: ColumnMenuRowLabels;\n classNames: DataTableClassNames;\n}\n\n/**\n * The injected row-actions column as a first-class menu row: the same eye\n * toggle as a data column plus a ONE-CLICK end-pin toggle (right ↔ unpinned).\n * The column always trails, so there is no left pin and no reorder grip.\n */\nfunction ActionsMenuRowItem<TRow>({\n layout,\n labels,\n classNames,\n}: Readonly<ActionsMenuRowProps<TRow>>) {\n const hidden = layout.isHidden(ACTIONS_COLUMN_KEY);\n const pinned = layout.state.pinned[ACTIONS_COLUMN_KEY] !== undefined;\n const name = labels.actions;\n return (\n <div\n data-adapttable-part=\"column-menu-item\"\n data-actions=\"\"\n data-hidden={hidden || undefined}\n data-pinned={pinned ? \"right\" : undefined}\n className={classNames.columnMenuItem}\n >\n <VisibilityToggle\n hidden={hidden}\n name={name}\n labels={labels}\n classNames={classNames}\n onToggle={() => layout.toggleVisible(ACTIONS_COLUMN_KEY)}\n />\n <RowName hidden={hidden} name={name} classNames={classNames} />\n <PinToggle\n active={pinned}\n actionLabel={`${pinned ? labels.unpin : labels.pinRight}: ${name}`}\n classNames={classNames}\n onClick={() =>\n layout.setPinned(ACTIONS_COLUMN_KEY, pinned ? undefined : \"right\")\n }\n />\n </div>\n );\n}\n\nexport interface ColumnMenuProps<TRow> extends ColumnMenuChromeProps<TRow> {\n classNames: DataTableClassNames;\n /** Resolved labels — the shared contract plus the actions row's name. */\n labels: ColumnMenuRowLabels;\n /**\n * Whether the table renders row actions. When true the menu lists the\n * injected actions column as a separated trailing row, so it hides and\n * end-pins like any data column.\n */\n hasRowActions?: boolean;\n}\n\n/**\n * Column-management popover: a disclosure button + a panel where each column\n * has a drag grip (reorder), an eye toggle (show/hide), and a pin toggle.\n * Closes on outside-click or Escape. Ships no styles — target the\n * `data-adapttable-part` hooks or the `columnMenu*` className slots.\n */\nexport function ColumnMenu<TRow>({\n allColumns,\n layout,\n labels,\n classNames,\n hasRowActions,\n}: Readonly<ColumnMenuProps<TRow>>) {\n const drag = useColumnDragState();\n const { open, setOpen, rootRef, triggerRef } = useMenuPopover();\n\n return (\n <div\n ref={rootRef}\n data-adapttable-part=\"column-menu\"\n className={classNames.columnMenu}\n style={{ position: \"relative\" }}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"true\"\n data-adapttable-part=\"column-menu-button\"\n data-active={open || undefined}\n className={classNames.columnMenuButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onClick={() => setOpen((v) => !v)}\n >\n {labels.columns}\n </button>\n {open && (\n <fieldset\n aria-label={labels.columns}\n data-adapttable-part=\"column-menu-panel\"\n className={classNames.columnMenuPanel}\n style={MENU_PANEL_STYLE}\n >\n <div\n data-adapttable-part=\"column-menu-header\"\n className={classNames.columnMenuHeader}\n >\n <span\n data-adapttable-part=\"column-menu-title\"\n className={classNames.columnMenuTitle}\n >\n {labels.columns}\n </span>\n </div>\n {columnMenuRows(allColumns, layout).map((row) => (\n <ColumnMenuRowItem\n key={row.key}\n row={row}\n layout={layout}\n labels={labels}\n classNames={classNames}\n drag={drag}\n />\n ))}\n {hasRowActions && (\n <>\n <hr\n data-adapttable-part=\"column-menu-separator\"\n className={classNames.columnMenuSeparator}\n />\n <ActionsMenuRowItem\n layout={layout}\n labels={labels}\n classNames={classNames}\n />\n </>\n )}\n <button\n type=\"button\"\n data-adapttable-part=\"column-menu-reset\"\n className={cx(classNames.columnMenuReset)}\n onClick={() => layout.reset()}\n >\n {labels.resetColumns}\n </button>\n </fieldset>\n )}\n </div>\n );\n}\n","import {\n type ColumnDef,\n columnResizeHandleProps,\n type ConfirmHandler,\n edgePinStyle,\n headerGroupRow,\n PIN_Z,\n type PinLeads,\n pinnedCellStyle,\n pinnedColumnWidth,\n type PinOffset,\n resolveDisabledReason,\n resolveVirtualRows,\n type RowAction,\n rowClickProps,\n runRowAction,\n type SharedTableRenderProps,\n type TableLabels,\n tableMinWidth,\n tableRenderModel,\n type UseDataTableResult,\n useHorizontalOverflow,\n} from \"@adapttable/core\";\nimport type { CSSProperties, MouseEvent, ReactElement, ReactNode } from \"react\";\nimport { memo, useCallback, useMemo, useRef } from \"react\";\n\nimport { cx } from \"../cx\";\nimport type { DataTableClassNames } from \"../types\";\nimport { ChevronIcon } from \"./icons\";\n\n/** Inline style for an absolutely-positioned column-resize handle. */\nconst RESIZE_HANDLE_STYLE: CSSProperties = {\n position: \"absolute\",\n insetInlineEnd: 0,\n top: 0,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n};\n\n// The leading checkbox (44px) and trailing actions (120px) columns pin to the\n// edge alongside the data columns, which therefore start past them.\nconst SELECTION_WIDTH = 44;\nconst ACTIONS_WIDTH = 120;\n\n/**\n * Scroll-box style: a `maxHeight`-bounded box scrolls on both axes; otherwise\n * the wrapper scrolls sideways only when something needs it (a pinned column,\n * or measured horizontal overflow). When the table fits, the wrapper carries\n * NO overflow style — `overflow-x: auto` makes `overflow-y` compute to `auto`\n * too, which would trap a page-scroll sticky header inside the box.\n */\nfunction scrollBoxStyle(\n maxHeight: number | undefined,\n scrollX: boolean\n): CSSProperties | undefined {\n if (maxHeight != null) {\n return { maxHeight, overflowX: \"auto\", overflowY: \"auto\" };\n }\n return scrollX ? { overflowX: \"auto\" } : undefined;\n}\n\ninterface SharedProps<TRow> extends SharedTableRenderProps<TRow> {\n classNames: DataTableClassNames;\n /**\n * Whether the user pinned the injected actions column to the inline end\n * (one click in the Columns menu) — sticks it independently of any data\n * pin on that side.\n */\n actionsPinned?: boolean;\n}\n\nfunction RowActionButtons<TRow>({\n row,\n actions,\n confirm,\n cancelLabel,\n classNames,\n}: Readonly<{\n row: TRow;\n actions: RowAction<TRow>[];\n confirm: ConfirmHandler;\n cancelLabel: string;\n classNames: DataTableClassNames;\n}>) {\n return (\n <>\n {actions.map((action) => {\n if (action.isHidden?.(row)) return null;\n const reason = resolveDisabledReason(action.disabledReason?.(row));\n const disabled =\n reason !== undefined || (action.isDisabled?.(row) ?? false);\n // The disabled attribute already blocks activation, so attach the\n // handler only when the action can run.\n const handleClick = disabled\n ? undefined\n : (e: MouseEvent) => {\n e.stopPropagation();\n runRowAction(action, row, confirm, cancelLabel);\n };\n return (\n <button\n key={action.key}\n type=\"button\"\n disabled={disabled}\n title={reason}\n aria-label={action.label}\n data-adapttable-part=\"action-button\"\n data-color={action.color}\n className={classNames.actionButton}\n onClick={handleClick}\n >\n {action.icon ?? action.label}\n </button>\n );\n })}\n </>\n );\n}\n\n/**\n * The expand/collapse chevron, shared by desktop rows and mobile cards. The\n * `data-expanded` attribute is the styling hook for rotating the glyph\n * (`rowClickProps`' interactive-child guard keeps the click off the row).\n */\nfunction ExpandButton({\n expanded,\n labels,\n classNames,\n onToggle,\n}: Readonly<{\n expanded: boolean;\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n onToggle: () => void;\n}>) {\n return (\n <button\n type=\"button\"\n data-adapttable-part=\"expand-button\"\n data-expanded={expanded ? \"\" : undefined}\n className={classNames.expandButton}\n aria-expanded={expanded}\n aria-label={expanded ? labels.collapseRow : labels.expandRow}\n onClick={onToggle}\n >\n <ChevronIcon size={14} />\n </button>\n );\n}\n\n/**\n * Props for the memoized desktop row. The comparator below checks ONLY the\n * visual inputs (row data, selected/expanded state, column + width + class\n * identities, the pin signature); everything else — `table`, the latest-ref\n * callback wrappers, `confirm`, `pinOffset`, `measureElement` — is either\n * stable or only consulted when one of the compared inputs re-renders the\n * row, so a fresh identity there must not (and does not) defeat the memo.\n */\ninterface DesktopRowProps<TRow> {\n row: TRow;\n index: number;\n /** Stable row id (selection + expansion key). */\n id: string;\n /** Headless model (prop-getters); a fresh object every render — uncompared. */\n table: UseDataTableResult<TRow>;\n columns: ColumnDef<TRow>[];\n labels: Required<TableLabels>;\n classNames: DataTableClassNames;\n /** `undefined` = no selection column; otherwise the row's selected state. */\n selected: boolean | undefined;\n /** `undefined` = no expansion column; otherwise the row's expanded state. */\n expanded: boolean | undefined;\n showActions: boolean;\n rowActions?: RowAction<TRow>[];\n confirm: ConfirmHandler;\n /** Full-width colSpan (expansion + selection + data + actions), core-computed. */\n columnSpan: number;\n /**\n * Comparator-only input: body cells inherit widths from the header's table\n * layout, but a width change must still re-render pinned rows (insets).\n */\n columnWidths?: Readonly<Record<string, number>>;\n pinOffset?: (key: string) => PinOffset | undefined;\n /** Value-comparable digest of every column's pin side + inset. */\n pinSignature: string;\n hasLeftPin: boolean;\n hasRightPin: boolean;\n /** Whether the actions column is user-pinned (sticks without a data pin). */\n actionsPinned: boolean;\n /** Pre-computed `rowClassName(row, index)` output (value-compared). */\n rowClass: string | undefined;\n clickable: boolean;\n hasPrefetch: boolean;\n /* Latest-ref wrappers from DesktopTable — identity-stable for the mount. */\n onRowClick: (row: TRow) => void;\n onPrefetch: (row: TRow) => void;\n onToggleSelect: (id: string) => void;\n onToggleExpand: (id: string) => void;\n renderDetail: (row: TRow) => ReactNode;\n measureElement?: (element: Element | null) => void;\n}\n\n/**\n * `React.memo` comparator: re-render a row only when one of its VISUAL\n * inputs changes. A search keystroke or another row's checkbox re-renders\n * the table shell, but every unchanged row bails out here (accessors and\n * Cell render-props are not re-invoked).\n */\nfunction desktopRowPropsEqual<TRow>(\n prev: Readonly<DesktopRowProps<TRow>>,\n next: Readonly<DesktopRowProps<TRow>>\n): boolean {\n return (\n prev.row === next.row &&\n prev.index === next.index &&\n prev.id === next.id &&\n prev.selected === next.selected &&\n prev.expanded === next.expanded &&\n prev.columns === next.columns &&\n prev.labels === next.labels &&\n prev.classNames === next.classNames &&\n prev.showActions === next.showActions &&\n prev.rowActions === next.rowActions &&\n prev.columnSpan === next.columnSpan &&\n prev.columnWidths === next.columnWidths &&\n prev.pinSignature === next.pinSignature &&\n prev.hasLeftPin === next.hasLeftPin &&\n prev.hasRightPin === next.hasRightPin &&\n prev.actionsPinned === next.actionsPinned &&\n prev.rowClass === next.rowClass &&\n prev.clickable === next.clickable &&\n prev.hasPrefetch === next.hasPrefetch\n );\n}\n\nfunction DesktopRowBase<TRow>(\n props: Readonly<DesktopRowProps<TRow>>\n): ReactElement {\n const {\n row,\n index,\n id,\n table,\n columns,\n labels,\n classNames,\n selected,\n expanded,\n showActions,\n rowActions,\n confirm,\n columnSpan,\n pinOffset,\n hasLeftPin,\n hasRightPin,\n actionsPinned,\n rowClass,\n clickable,\n hasPrefetch,\n onRowClick,\n onPrefetch,\n onToggleSelect,\n onToggleExpand,\n renderDetail,\n measureElement,\n } = props;\n const expandable = expanded !== undefined;\n const leads: PinLeads = {\n left: selected === undefined ? 0 : SELECTION_WIDTH,\n right: showActions ? ACTIONS_WIDTH : 0,\n };\n const bodyPinStyle = (key: string): CSSProperties | undefined =>\n pinnedCellStyle(pinOffset?.(key), PIN_Z.body, leads);\n const rowProps = { ...table.getRowProps(row, index) };\n delete rowProps.key;\n return (\n <>\n <tr\n {...rowProps}\n {...rowClickProps(row, clickable ? onRowClick : undefined)}\n ref={measureElement}\n data-adapttable-part=\"row\"\n data-selected={selected ? \"\" : undefined}\n data-clickable={clickable ? \"\" : undefined}\n className={cx(classNames.row, rowClass)}\n onMouseEnter={hasPrefetch ? () => onPrefetch(row) : undefined}\n >\n {expandable && (\n <td\n data-adapttable-part=\"expand-cell\"\n className={classNames.expandCell}\n >\n <ExpandButton\n expanded={expanded}\n labels={labels}\n classNames={classNames}\n onToggle={() => onToggleExpand(id)}\n />\n </td>\n )}\n {selected !== undefined && (\n <td\n data-adapttable-part=\"selection-cell\"\n data-pinned={hasLeftPin ? \"left\" : undefined}\n style={edgePinStyle(\"left\", hasLeftPin, PIN_Z.body)}\n className={cx(classNames.cell, classNames.selectionCell)}\n >\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selected}\n onChange={() => onToggleSelect(id)}\n className={classNames.checkbox}\n />\n </td>\n )}\n {columns.map((column) => {\n const pinStyle = bodyPinStyle(column.key);\n return (\n <td\n key={column.key}\n {...table.getCellProps(column, pinStyle && { style: pinStyle })}\n data-adapttable-part=\"cell\"\n data-pinned={pinOffset?.(column.key)?.side}\n className={classNames.cell}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </td>\n );\n })}\n {showActions && (\n <td\n data-adapttable-part=\"actions-cell\"\n data-pinned={hasRightPin || actionsPinned ? \"right\" : undefined}\n style={edgePinStyle(\n \"right\",\n hasRightPin || actionsPinned,\n PIN_Z.body\n )}\n className={cx(classNames.cell, classNames.actionsCell)}\n >\n <RowActionButtons\n row={row}\n actions={rowActions!}\n confirm={confirm}\n cancelLabel={labels.cancel}\n classNames={classNames}\n />\n </td>\n )}\n </tr>\n {expandable && expanded && (\n <tr data-adapttable-part=\"detail-row\" className={classNames.detailRow}>\n <td\n colSpan={columnSpan}\n data-adapttable-part=\"detail-cell\"\n className={classNames.detailCell}\n >\n {renderDetail(row)}\n </td>\n </tr>\n )}\n </>\n );\n}\n\n/**\n * One memoized row component per `DesktopTable` instantiation. A factory\n * (called once through `useMemo`) instead of a module-level `memo(...)`\n * because `React.memo` erases a generic component's type parameter — the\n * factory keeps `TRow` without a type cast.\n */\nfunction createDesktopRow<TRow>() {\n return memo<DesktopRowProps<TRow>>(DesktopRowBase, desktopRowPropsEqual);\n}\n\n/** Desktop semantic `<table>` rendering. */\nexport function DesktopTable<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n classNames,\n prefetch,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n stickyHeader = false,\n stickyTop = 0,\n pinOffset,\n maxHeight,\n virtualScrollRef,\n setWidth,\n columnWidths,\n resizeLabel = \"Resize column\",\n actionsPinned = false,\n}: Readonly<SharedProps<TRow>>) {\n // The model's columnSpan already counts the expand chevron column (core\n // only counts it when BOTH `renderRowDetail` and `expansion` arrive).\n const { columns, selection, labels, showActions, entries, columnSpan } =\n tableRenderModel({\n table,\n rows,\n rowActions,\n getRowId,\n rowEntries,\n renderRowDetail,\n expansion,\n });\n // The actions column sticks when the user end-pins IT in the Columns menu —\n // independently of any data pin on that side (and only while it renders).\n const stickActions = showActions && actionsPinned;\n // Expansion is active only when BOTH halves arrive (the chrome only builds\n // the state when `renderRowDetail` is set).\n const expansionState = renderRowDetail ? expansion : undefined;\n const expandable = expansionState !== undefined;\n\n // The memoized row compares visual inputs only; callbacks reach it through\n // these identity-stable wrappers that always invoke the LATEST handler\n // (selection.toggle and friends change identity with the selection, and a\n // bailed-out row must never fire a stale closure — controlled selection\n // would otherwise compute from an outdated set).\n const live = useRef({\n selection,\n expansion: expansionState,\n onRowClick,\n prefetch,\n renderRowDetail,\n });\n live.current = {\n selection,\n expansion: expansionState,\n onRowClick,\n prefetch,\n renderRowDetail,\n };\n const onToggleSelect = useCallback(\n (id: string) => live.current.selection?.toggle(id),\n []\n );\n const onToggleExpand = useCallback(\n (id: string) => live.current.expansion?.toggle(id),\n []\n );\n const handleRowClick = useCallback(\n (row: TRow) => live.current.onRowClick?.(row),\n []\n );\n const handlePrefetch = useCallback(\n (row: TRow) => live.current.prefetch?.(row),\n []\n );\n const renderDetail = useCallback(\n (row: TRow) => live.current.renderRowDetail?.(row),\n []\n );\n const Row = useMemo(() => createDesktopRow<TRow>(), []);\n\n // Measures the always-rendered scroll-box wrapper so it can turn into a\n // horizontal scroller exactly while the table is wider than it.\n const { ref: overflowRef, overflowing } =\n useHorizontalOverflow<HTMLDivElement>();\n\n // Stick the header *cells* (a `<thead>` does not pin against the document\n // scroller). The adapter ships no colours, so consumers must give their\n // `headerCell` class an opaque background — the `data-sticky`/`data-pinned`\n // hooks make that easy to target.\n // Inside a maxHeight scroll box the box itself is the sticky context, so\n // the header pins to ITS top — a viewport offset would float it mid-box.\n // ANY scroll container (maxHeight, pins, measured overflow) is the sticky\n // context: pin to ITS top — a viewport offset would shove the header down\n // into the rows. A user-pinned actions column counts: it needs the same\n // horizontal scroll container to stick to.\n const hasPinned =\n columns.some((c) => pinOffset?.(c.key) != null) || stickActions;\n const inScrollBox = maxHeight != null || hasPinned || overflowing;\n const stickyStyle: CSSProperties | undefined = stickyHeader\n ? {\n position: \"sticky\",\n top: inScrollBox ? 0 : stickyTop,\n zIndex: PIN_Z.header,\n }\n : undefined;\n const stickyAttr = stickyHeader || undefined;\n const leads: PinLeads = {\n left: selection ? SELECTION_WIDTH : 0,\n right: showActions ? ACTIONS_WIDTH : 0,\n };\n const hasLeftPin = columns.some((c) => pinOffset?.(c.key)?.side === \"left\");\n const hasRightPin = columns.some((c) => pinOffset?.(c.key)?.side === \"right\");\n // A value-comparable digest of the pin layout: while it is unchanged, a\n // memoized row's previous pin styles are still correct, so `pinOffset`'s\n // identity itself stays out of the row comparator.\n const pinSignature = columns\n .map((c) => {\n const pin = pinOffset?.(c.key);\n return pin ? `${c.key}:${pin.side}:${pin.inset}` : \"\";\n })\n .join(\"|\");\n // Pinned header cells need both the sticky-top and sticky-left/right styles;\n // body cells only the side. Header pins sit above the sticky header so later\n // headers never paint over them on horizontal scroll.\n const headPinStyle = (key: string): CSSProperties | undefined =>\n pinnedCellStyle(pinOffset?.(key), PIN_Z.headerPinned, leads);\n const headStyle = (column: ColumnDef<TRow>): CSSProperties | undefined => {\n const key = column.key;\n const pin = headPinStyle(key);\n // A pinned column renders at the width its sticky inset assumed, so\n // stacked pins stay flush even with no declared width.\n const width = pin\n ? pinnedColumnWidth(column, columnWidths)\n : columnWidths?.[key];\n if (!stickyStyle && !pin && width == null && !setWidth) return undefined;\n // Leave `width` out when unset so merging never clobbers the declared\n // column width the core prop-getter already provides.\n const merged: CSSProperties = {\n ...stickyStyle,\n ...pin,\n ...(width != null && { width }),\n };\n // The resize handle is absolutely positioned, so the cell needs a\n // positioning context when it is not already sticky/pinned.\n if (setWidth && !merged.position) merged.position = \"relative\";\n return merged;\n };\n // The checkbox / actions edge cells pin to their side when a data column\n // there is pinned (corner-sticky in the header).\n const edgeHeadStyle = (\n side: \"left\" | \"right\",\n active: boolean\n ): CSSProperties | undefined => {\n const edge = edgePinStyle(side, active, PIN_Z.headerPinned);\n if (!stickyStyle && !edge) return undefined;\n return { ...stickyStyle, ...edge };\n };\n const columnName = (column: ColumnDef<TRow>): string =>\n typeof column.header === \"string\" ? column.header : column.key;\n // Fixed-width columns get a real table min-width (their sum), so the table\n // overflows and scrolls horizontally instead of squishing columns to fit.\n const minWidth = tableMinWidth(columns, {\n widths: columnWidths,\n extra:\n (selection ? SELECTION_WIDTH : 0) + (showActions ? ACTIONS_WIDTH : 0),\n });\n\n // The grouped header row (when any visible column declares a `group`) and\n // the footer summary both align under the data columns, so the leading\n // expand/selection and trailing actions columns get unlabeled pad cells.\n const groups = headerGroupRow(columns);\n const summary = summaryRow?.(rows);\n const groupPad = (\n <th data-adapttable-part=\"group-cell\" className={classNames.groupCell} />\n );\n const summaryPad = (\n <td\n data-adapttable-part=\"summary-cell\"\n className={classNames.summaryCell}\n />\n );\n\n const tableEl = (\n <table\n {...table.getTableProps()}\n data-adapttable-part=\"table\"\n className={classNames.table}\n style={minWidth > 0 ? { minWidth } : undefined}\n >\n <thead data-adapttable-part=\"thead\" className={classNames.thead}>\n {groups && (\n <tr data-adapttable-part=\"group-row\" className={classNames.groupRow}>\n {expandable && groupPad}\n {selection && groupPad}\n {groups.map((group) => (\n <th\n key={group.key}\n colSpan={group.span}\n data-adapttable-part=\"group-cell\"\n className={classNames.groupCell}\n >\n {group.label}\n </th>\n ))}\n {showActions && groupPad}\n </tr>\n )}\n <tr\n {...table.getHeaderRowProps()}\n data-adapttable-part=\"header-row\"\n className={classNames.headerRow}\n >\n {expandable && (\n <th\n aria-label={labels.expandRow}\n data-adapttable-part=\"expand-header\"\n data-sticky={stickyAttr}\n style={stickyStyle}\n className={cx(classNames.headerCell, classNames.expandHeader)}\n />\n )}\n {selection && (\n <th\n data-adapttable-part=\"selection-header\"\n data-sticky={stickyAttr}\n data-pinned={hasLeftPin ? \"left\" : undefined}\n style={edgeHeadStyle(\"left\", hasLeftPin)}\n className={cx(classNames.headerCell, classNames.selectionCell)}\n >\n <input\n type=\"checkbox\"\n aria-label={labels.selectAll}\n checked={selection.headerState === \"all\"}\n ref={(el) => {\n if (el) el.indeterminate = selection.headerState === \"some\";\n }}\n onChange={selection.toggleAll}\n className={classNames.checkbox}\n />\n </th>\n )}\n {columns.map((column) => {\n // Route the local sticky/pin/width style THROUGH the prop-getter\n // so it merges with core's alignment + declared width instead of\n // replacing them (a bare `style=` after the spread would).\n const localStyle = headStyle(column);\n const headerProps = table.getHeaderCellProps(\n column,\n localStyle && { style: localStyle }\n );\n const active = table.sortBy === column.key;\n // Spread the core prop-getter as-is so React hands the click\n // EVENT to core's onClick (shift-click chains a multi-sort\n // level). Its `data-sort-index` doubles as the badge content.\n const sortButtonProps = table.getSortButtonProps(column);\n const sortIndex = sortButtonProps[\"data-sort-index\"];\n return (\n <th\n key={column.key}\n {...headerProps}\n data-adapttable-part=\"header-cell\"\n data-sorted={active ? table.sortDir : undefined}\n data-sticky={stickyAttr}\n data-pinned={pinOffset?.(column.key)?.side}\n className={classNames.headerCell}\n >\n {column.sortable ? (\n <button\n {...sortButtonProps}\n data-adapttable-part=\"sort-button\"\n className={classNames.sortButton}\n >\n {column.header}\n {typeof sortIndex === \"number\" && (\n <span\n data-adapttable-part=\"sort-index\"\n className={classNames.sortIndex}\n >\n {sortIndex}\n </span>\n )}\n <span aria-hidden> {sortGlyph(active, table.sortDir)}</span>\n </button>\n ) : (\n column.header\n )}\n {setWidth && (\n <span\n {...columnResizeHandleProps(\n column.key,\n setWidth,\n `${resizeLabel}: ${columnName(column)}`\n )}\n data-adapttable-part=\"resize-handle\"\n className={classNames.resizeHandle}\n style={RESIZE_HANDLE_STYLE}\n />\n )}\n </th>\n );\n })}\n {showActions && (\n <th\n data-adapttable-part=\"actions-header\"\n data-sticky={stickyAttr}\n data-pinned={hasRightPin || stickActions ? \"right\" : undefined}\n style={edgeHeadStyle(\"right\", hasRightPin || stickActions)}\n className={cx(classNames.headerCell, classNames.actionsCell)}\n >\n {labels.actions}\n </th>\n )}\n </tr>\n </thead>\n <tbody data-adapttable-part=\"tbody\" className={classNames.tbody}>\n {paddingTop > 0 && (\n <tr>\n <td\n colSpan={columnSpan}\n style={{ height: paddingTop, padding: 0 }}\n />\n </tr>\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n return (\n <Row\n key={key}\n row={row}\n index={index}\n id={id}\n table={table}\n columns={columns}\n labels={labels}\n classNames={classNames}\n selected={selection ? selection.isSelected(id) : undefined}\n expanded={\n expansionState ? expansionState.isExpanded(id) : undefined\n }\n showActions={showActions}\n rowActions={rowActions}\n confirm={confirm}\n columnSpan={columnSpan}\n columnWidths={columnWidths}\n pinOffset={pinOffset}\n pinSignature={pinSignature}\n hasLeftPin={hasLeftPin}\n hasRightPin={hasRightPin}\n actionsPinned={stickActions}\n rowClass={rowClassName?.(row, index)}\n clickable={Boolean(onRowClick)}\n hasPrefetch={Boolean(prefetch)}\n onRowClick={handleRowClick}\n onPrefetch={handlePrefetch}\n onToggleSelect={onToggleSelect}\n onToggleExpand={onToggleExpand}\n renderDetail={renderDetail}\n measureElement={measureElement}\n />\n );\n })}\n {paddingBottom > 0 && (\n <tr>\n <td\n colSpan={columnSpan}\n style={{ height: paddingBottom, padding: 0 }}\n />\n </tr>\n )}\n </tbody>\n {summary && (\n <tfoot data-adapttable-part=\"summary\" className={classNames.summary}>\n <tr\n data-adapttable-part=\"summary-row\"\n className={classNames.summaryRow}\n >\n {expandable && summaryPad}\n {selection && summaryPad}\n {columns.map((column) => (\n <td\n key={column.key}\n data-adapttable-part=\"summary-cell\"\n className={classNames.summaryCell}\n >\n {summary[column.key]}\n </td>\n ))}\n {showActions && summaryPad}\n </tr>\n </tfoot>\n )}\n </table>\n );\n\n // The wrapper ALWAYS renders so the overflow hook has an element to\n // measure, but it gains a scroll style only when something needs one: a\n // pinned column (which needs a horizontal scroll container to stick to), a\n // table measurably wider than its container, or a bounding `maxHeight`.\n // While the table fits, the wrapper carries NO overflow style — see\n // `scrollBoxStyle` for the page-scroll sticky-header trap that avoids.\n return (\n <div\n ref={(node) => {\n overflowRef(node);\n virtualScrollRef?.(node);\n }}\n data-adapttable-part=\"scroll-box\"\n style={scrollBoxStyle(maxHeight, hasPinned || overflowing)}\n >\n {tableEl}\n </div>\n );\n}\n\n/** Mobile card-list rendering. */\nexport function MobileCards<TRow>({\n table,\n rows,\n rowActions,\n confirm,\n getRowId,\n classNames,\n onRowClick,\n rowClassName,\n renderRowDetail,\n summaryRow,\n expansion,\n rowEntries,\n paddingTop = 0,\n paddingBottom = 0,\n measureElement,\n}: Readonly<SharedProps<TRow>>) {\n const { columns, selection, labels } = table;\n const entries = resolveVirtualRows(rows, getRowId, rowEntries);\n const expansionState = renderRowDetail ? expansion : undefined;\n const summary = summaryRow?.(rows);\n return (\n <ul\n {...table.getTableProps({ role: undefined })}\n data-adapttable-part=\"cards\"\n className={classNames.cards}\n style={{ listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {paddingTop > 0 && (\n <li\n aria-hidden\n data-adapttable-part=\"virtual-spacer\"\n style={{ height: paddingTop }}\n />\n )}\n {entries.map(({ row, index, key }) => {\n const id = getRowId(row);\n const expanded = expansionState?.isExpanded(id) ?? false;\n return (\n <li\n key={key}\n {...rowClickProps(row, onRowClick)}\n ref={measureElement}\n data-index={index}\n data-adapttable-part=\"card\"\n data-selected={selection?.isSelected(id) ? \"\" : undefined}\n data-clickable={onRowClick ? \"\" : undefined}\n className={cx(classNames.card, rowClassName?.(row, index))}\n >\n {selection && (\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selection.isSelected(id)}\n onChange={() => selection.toggle(id)}\n className={classNames.checkbox}\n />\n )}\n {expansionState && (\n <ExpandButton\n expanded={expanded}\n labels={labels}\n classNames={classNames}\n onToggle={() => expansionState.toggle(id)}\n />\n )}\n {columns.map((column) => (\n <div\n key={column.key}\n data-adapttable-part=\"card-row\"\n className={classNames.cardRow}\n >\n <span\n data-adapttable-part=\"card-label\"\n className={classNames.cardLabel}\n >\n {cardLabel(column)}\n </span>\n <span\n data-adapttable-part=\"card-value\"\n className={classNames.cardValue}\n >\n {column.Cell ? (\n <column.Cell row={row} rowIndex={index} />\n ) : (\n column.accessor?.(row)\n )}\n </span>\n </div>\n ))}\n {rowActions && rowActions.length > 0 && (\n <div\n data-adapttable-part=\"card-actions\"\n className={classNames.actionsCell}\n >\n <RowActionButtons\n row={row}\n actions={rowActions}\n confirm={confirm}\n cancelLabel={labels.cancel}\n classNames={classNames}\n />\n </div>\n )}\n {expanded && (\n // Inside the measured card `<li>`, so the virtualizer's size\n // measurement tracks the open detail panel.\n <div\n data-adapttable-part=\"card-detail\"\n className={classNames.cardDetail}\n >\n {renderRowDetail!(row)}\n </div>\n )}\n </li>\n );\n })}\n {paddingBottom > 0 && (\n <li\n aria-hidden\n data-adapttable-part=\"virtual-spacer\"\n style={{ height: paddingBottom }}\n />\n )}\n {summary && (\n <li\n data-adapttable-part=\"summary-card\"\n className={classNames.summaryCard}\n >\n {columns\n .filter((column) => summary[column.key] !== undefined)\n .map((column) => (\n <div\n key={column.key}\n data-adapttable-part=\"card-row\"\n className={classNames.cardRow}\n >\n <span\n data-adapttable-part=\"card-label\"\n className={classNames.cardLabel}\n >\n {cardLabel(column)}\n </span>\n <span\n data-adapttable-part=\"card-value\"\n className={classNames.cardValue}\n >\n {summary[column.key]}\n </span>\n </div>\n ))}\n </li>\n )}\n </ul>\n );\n}\n\nfunction sortGlyph(active: boolean, dir: \"asc\" | \"desc\" | undefined): string {\n if (!active) return \"↕\";\n return dir === \"asc\" ? \"↑\" : \"↓\";\n}\n\nfunction cardLabel<TRow>(column: ColumnDef<TRow>): string {\n return (\n column.mobileLabel ??\n (typeof column.header === \"string\" ? column.header : column.key)\n );\n}\n","import {\n ACTIONS_COLUMN_KEY,\n isDeclarativeFilters,\n type TableSource,\n type TableVirtualization,\n useChromeBodyData,\n useChromeScrollReset,\n useFilterTriggerToggle,\n useTableChrome,\n useTableData,\n} from \"@adapttable/core\";\nimport type { ReactElement, ReactNode, RefObject } from \"react\";\nimport { useRef, useState } from \"react\";\n\nimport { AutoFilterForm } from \"./components/AutoFilterForm\";\nimport {\n BulkBar,\n Chips,\n ErrorState,\n Footer,\n LoadingState,\n RowsPerPageSelect,\n} from \"./components/chrome\";\nimport { ColumnMenu } from \"./components/ColumnMenu\";\nimport { FilterPanel } from \"./components/FilterPanel\";\nimport { FilterPopover } from \"./components/FilterPopover\";\nimport { FiltersIcon, SearchIcon } from \"./components/icons\";\nimport { SavedViewsMenu } from \"./components/SavedViewsMenu\";\nimport { DesktopTable, MobileCards } from \"./components/tables\";\nimport { cx } from \"./cx\";\nimport type { DataTableClassNames, DataTableProps } from \"./types\";\n\n// A stable default: the memoized desktop rows compare `classNames` by\n// identity, so an inline `{}` default would defeat them on every render.\nconst NO_CLASSNAMES: DataTableClassNames = {};\n\n/**\n * `DataTableProps` after tier resolution: the source is definite (whichever\n * tier provided it) and `filters` is plain JSX (the auto-built form when the\n * caller passed the declarative array).\n */\ntype ResolvedDataTableProps<TRow> = Omit<\n DataTableProps<TRow>,\n \"source\" | \"filters\"\n> & {\n source: TableSource<TRow>;\n filters?: ReactNode;\n};\n\ninterface DataTableBodyProps<TRow> {\n chrome: ReturnType<typeof useTableChrome<TRow>>;\n props: Readonly<ResolvedDataTableProps<TRow>>;\n classNames: NonNullable<DataTableProps<TRow>[\"classNames\"]>;\n confirm: ReturnType<typeof useTableChrome<TRow>>[\"confirm\"];\n getRowId: ReturnType<typeof useTableChrome<TRow>>[\"getRowId\"];\n virtualization: TableVirtualization<TRow>;\n virtualScrollRef: (node: HTMLElement | null) => void;\n labels: ReturnType<typeof useTableChrome<TRow>>[\"table\"][\"labels\"];\n}\n\nfunction DataTableBody<TRow>({\n chrome,\n props,\n classNames,\n confirm,\n getRowId,\n virtualization,\n virtualScrollRef,\n labels,\n}: Readonly<DataTableBodyProps<TRow>>): ReactElement {\n // The injected actions column obeys the user column layout like any data\n // column: hiding it strips `rowActions` before the renderers (desktop and\n // cards alike), and an end-pin sticks it without needing a data pin.\n const rowActions = chrome.columnLayout.isHidden(ACTIONS_COLUMN_KEY)\n ? undefined\n : props.rowActions;\n const actionsPinned =\n (rowActions?.length ?? 0) > 0 &&\n chrome.columnLayout.state.pinned[ACTIONS_COLUMN_KEY] !== undefined;\n if (chrome.body === \"skeleton\") {\n return (\n <>\n {props.slots?.skeleton ?? props.loadingState ?? (\n <LoadingState\n rows={props.skeletonRows ?? props.source.limit}\n columns={chrome.table.columns.length}\n variant={chrome.isMobile ? \"cards\" : \"table\"}\n labels={labels}\n classNames={classNames}\n hasActions={(rowActions?.length ?? 0) > 0}\n />\n )}\n </>\n );\n }\n if (chrome.body === \"empty\") {\n // \"noResults\" means an active search/filter matched nothing — say so and\n // offer a clear CTA; \"noData\" means the source itself is empty.\n const noResults = chrome.emptyVariant === \"noResults\";\n return (\n <>\n {props.slots?.empty ?? props.emptyState ?? (\n <output data-adapttable-part=\"empty\" className={classNames.empty}>\n {noResults ? labels.noResults : labels.noData}\n {noResults && (\n <button\n type=\"button\"\n data-adapttable-part=\"empty-clear\"\n className={classNames.emptyClear}\n onClick={chrome.clearFilters}\n >\n {labels.clearAll}\n </button>\n )}\n </output>\n )}\n </>\n );\n }\n const Renderer = chrome.isMobile ? MobileCards : DesktopTable;\n return (\n <Renderer\n table={chrome.table}\n rows={props.source.rows}\n rowActions={rowActions}\n actionsPinned={actionsPinned}\n confirm={confirm}\n getRowId={getRowId}\n classNames={classNames}\n prefetch={props.prefetch}\n onRowClick={props.onRowClick}\n rowClassName={props.rowClassName}\n renderRowDetail={props.renderRowDetail}\n summaryRow={props.summaryRow}\n expansion={chrome.detail?.expansion}\n rowEntries={virtualization.enabled ? virtualization.rows : undefined}\n paddingTop={virtualization.paddingTop}\n paddingBottom={virtualization.paddingBottom}\n measureElement={virtualization.measureElement}\n stickyHeader={props.stickyHeader}\n stickyTop={props.stickyTop}\n pinOffset={chrome.columnLayout.pinOffset}\n maxHeight={props.maxHeight}\n virtualScrollRef={virtualScrollRef}\n setWidth={\n props.resizableColumns ? chrome.columnLayout.setWidth : undefined\n }\n columnWidths={chrome.columnLayout.state.widths}\n resizeLabel={labels.resizeColumn}\n />\n );\n}\n\n/**\n * Headless, unstyled AdaptTable for Tailwind / shadcn / custom CSS. Renders\n * semantic HTML with `data-adapttable-part` hooks and `className` overrides;\n * ships no styles of its own. Built on the `@adapttable/core` prop-getters.\n *\n * @typeParam TRow - The row type.\n */\nexport function DataTable<TRow>(props: Readonly<DataTableProps<TRow>>) {\n const {\n data,\n total,\n loading,\n onQueryChange,\n urlAdapter,\n urlKey,\n searchPlaceholder,\n sortByOptions,\n dir,\n hideSearch,\n filtersMode = \"popover\",\n bulkActions,\n classNames = NO_CLASSNAMES,\n toolbar: customToolbar,\n } = props;\n\n const density = props.density ?? \"comfortable\";\n\n // Resolve the data tier (prebuilt source > server > frontend) and the\n // declarative-filter runtime (URL keys, chip labels, predicate).\n const { source, runtime } = useTableData<TRow>({\n locale: props.locale,\n source: props.source,\n data,\n total,\n loading,\n onQueryChange,\n adapter: props.urlSync === false ? undefined : urlAdapter,\n enabled: props.urlSync,\n urlKey,\n columns: props.columns,\n filters: props.filters,\n });\n\n // The declarative array becomes the auto-built form; JSX passes through.\n const autoForm =\n runtime.defs.length > 0 ? (\n <AutoFilterForm\n defs={runtime.defs}\n source={source}\n classNames={classNames}\n labels={props.labels}\n />\n ) : undefined;\n // Column-level `filter` shorthands alone must still render the auto form —\n // only explicit JSX takes over the drawing.\n const filters =\n isDeclarativeFilters(props.filters) || props.filters === undefined\n ? autoForm\n : props.filters;\n\n // Everything downstream sees the RESOLVED source and plain-JSX filters,\n // with the runtime's chip labels under the caller's overrides.\n const chromeProps: ResolvedDataTableProps<TRow> = {\n ...props,\n source,\n filters,\n filterLabels: { ...runtime.filterLabels, ...props.filterLabels },\n };\n\n const chrome = useTableChrome<TRow>(chromeProps);\n const { table, confirm, getRowId } = chrome;\n const { labels } = table;\n const [filtersOpen, setFiltersOpen] = useState(false);\n const filtersTrigger = useFilterTriggerToggle(filtersOpen, setFiltersOpen);\n const rootRef = useRef<HTMLDivElement>(null);\n useChromeScrollReset(rootRef, chrome, chromeProps);\n const bodyData = useChromeBodyData(chrome, chromeProps);\n const { virtualization, canLoadMore } = bodyData;\n // React 18's `ref` attribute rejects core's `RefObject<HTMLDivElement |\n // null>` through interface variance; the same object viewed through its\n // structural shape attaches fine.\n const loadMoreRef: RefObject<HTMLDivElement | null> = bodyData.loadMoreRef;\n const searchProps = table.getSearchInputProps(\n searchPlaceholder ? { placeholder: searchPlaceholder } : undefined\n );\n // Explicit options win; otherwise auto-derive on mobile, where the card\n // layout has no clickable headers to sort by.\n const sortOptions =\n sortByOptions ?? (chrome.isMobile ? table.sortByOptions : undefined);\n\n const filtersButton = (\n <button\n type=\"button\"\n aria-expanded={filtersMode === \"popover\" ? filtersOpen : undefined}\n data-active={filtersOpen || undefined}\n data-adapttable-part=\"filters-button\"\n className={classNames.filtersButton}\n style={{ flexShrink: 0, whiteSpace: \"nowrap\" }}\n onPointerDown={filtersTrigger.onPointerDown}\n onClick={filtersTrigger.onClick}\n >\n <span\n data-adapttable-part=\"filters-icon\"\n className={classNames.filtersIcon}\n style={{ display: \"inline-flex\" }}\n >\n <FiltersIcon />\n </span>\n {labels.filters}\n {chrome.activeFilterCount > 0 && (\n <span\n data-adapttable-part=\"filters-count\"\n className={classNames.filtersCount}\n >\n {chrome.activeFilterCount}\n </span>\n )}\n </button>\n );\n\n return (\n <div\n ref={rootRef}\n dir={dir}\n data-adapttable-part=\"root\"\n data-mobile={chrome.isMobile || undefined}\n data-density={density}\n data-refreshing={chrome.isRefreshing || undefined}\n // The root wraps the whole table region, so a background refresh marks\n // it busy for assistive tech (the indicator below is decorative-ish).\n aria-busy={chrome.isRefreshing || undefined}\n className={cx(\"adapttable\", classNames.root)}\n >\n <div\n data-adapttable-part=\"toolbar\"\n className={classNames.toolbar}\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n rowGap: 8,\n }}\n >\n {!hideSearch && (\n <span\n data-adapttable-part=\"search-field\"\n className={classNames.searchField}\n style={{\n flex: 1,\n minWidth: 0,\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n <span\n data-adapttable-part=\"search-icon\"\n className={classNames.searchIcon}\n style={{ display: \"inline-flex\" }}\n >\n <SearchIcon size={14} />\n </span>\n <input\n {...searchProps}\n data-adapttable-part=\"search\"\n className={classNames.search}\n style={{ flex: 1, minWidth: 0 }}\n />\n </span>\n )}\n {sortOptions && sortOptions.length > 0 && (\n <label>\n {labels.sortBy}{\" \"}\n <select\n aria-label={labels.sortBy}\n data-adapttable-part=\"sort-select\"\n className={classNames.sortSelect}\n value={source.sortBy ?? \"\"}\n onChange={(e) =>\n source.setSort(\n e.currentTarget.value || undefined,\n source.sortDir ?? \"asc\"\n )\n }\n >\n <option value=\"\">—</option>\n {sortOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n )}\n {customToolbar}\n {filters &&\n (filtersMode === \"popover\" ? (\n <FilterPopover\n open={filtersOpen}\n onClose={() => setFiltersOpen(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={labels}\n dir={dir}\n classNames={classNames}\n >\n {filtersButton}\n </FilterPopover>\n ) : (\n filtersButton\n ))}\n {props.enableColumnMenu && !chrome.isMobile && (\n <ColumnMenu\n allColumns={chrome.allColumns}\n layout={chrome.columnLayout}\n labels={labels}\n classNames={classNames}\n hasRowActions={(props.rowActions?.length ?? 0) > 0}\n />\n )}\n {props.savedViews && (\n // The menu must capture/apply through the SAME URL backend and\n // namespace the table reads, so those default from the table's\n // own props (explicit option values still win).\n <SavedViewsMenu\n options={{ adapter: urlAdapter, urlKey, ...props.savedViews }}\n labels={labels}\n classNames={classNames}\n />\n )}\n {canLoadMore && (\n <RowsPerPageSelect\n source={source}\n labels={labels}\n classNames={classNames}\n />\n )}\n </div>\n\n {filters && filtersMode === \"drawer\" && (\n <FilterPanel\n open={filtersOpen}\n onClose={() => setFiltersOpen(false)}\n filters={filters}\n activeFilterCount={chrome.activeFilterCount}\n onClearFilters={chrome.clearFilters}\n labels={labels}\n dir={dir}\n classNames={classNames}\n />\n )}\n\n <Chips\n chips={chrome.mergedChips}\n onClearAll={chrome.clearFilters}\n labels={labels}\n classNames={classNames}\n />\n\n {table.selection && bulkActions && (\n <BulkBar\n selection={table.selection}\n total={source.total}\n bulkActions={bulkActions}\n confirm={confirm}\n labels={labels}\n classNames={classNames}\n />\n )}\n\n {chrome.isRefreshing && (\n // Native indeterminate progress (no `value`) — implicit progressbar\n // role with correct semantics on every device.\n <progress\n aria-label={labels.loading}\n data-adapttable-part=\"refresh-indicator\"\n className={classNames.refreshIndicator}\n />\n )}\n\n {source.error ? (\n <ErrorState\n error={source.error}\n labels={labels}\n onRetry={source.refetch ? () => void source.refetch?.() : undefined}\n classNames={classNames}\n />\n ) : (\n <DataTableBody\n chrome={chrome}\n props={chromeProps}\n classNames={classNames}\n confirm={confirm}\n getRowId={getRowId}\n virtualization={virtualization}\n virtualScrollRef={bodyData.virtualScrollRef}\n labels={labels}\n />\n )}\n\n {canLoadMore && source.hasNextPage && (\n <div\n ref={loadMoreRef}\n data-adapttable-part=\"load-more\"\n className={classNames.loadMore}\n >\n <button\n type=\"button\"\n disabled={source.isFetchingNextPage}\n data-adapttable-part=\"load-more-button\"\n className={classNames.loadMoreButton}\n onClick={() => source.fetchNextPage()}\n >\n {labels.loadMore}\n </button>\n </div>\n )}\n\n {chrome.showFooter && (\n <Footer\n pagination={table.pagination}\n source={source}\n labels={labels}\n classNames={classNames}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}