@ux-builder/ui 0.0.0-stage → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +275 -0
- package/README.md +293 -2
- package/THIRD-PARTY-NOTICES.md +195 -0
- package/catalogue.json +19424 -0
- package/dist/icons.js +2 -0
- package/dist/index.js +537 -0
- package/dist/index.js.map +1 -0
- package/dist/patterns.css +900 -0
- package/dist/patterns.js +4235 -0
- package/dist/patterns.js.map +1 -0
- package/dist/shared-Bom_GJww.js +18858 -0
- package/dist/shared-Bom_GJww.js.map +1 -0
- package/dist/shared-CjrUPFqv.js +1501 -0
- package/dist/shared-CjrUPFqv.js.map +1 -0
- package/dist/ui.css +997 -0
- package/licenses/carbon.LICENSE +201 -0
- package/licenses/fluent.LICENSE +24 -0
- package/licenses/lucide.LICENSE +43 -0
- package/licenses/material.LICENSE +202 -0
- package/licenses/vendored.json +214 -0
- package/lint/core.mjs +158 -0
- package/lint/eslint.mjs +128 -0
- package/lint/stylelint.mjs +35 -0
- package/package.json +104 -4
- package/skill/ux-builder-ui/SKILL.md +280 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","names":["SIZE_CLASSES","_Fragment","_Fragment","_Fragment","_Fragment","_Fragment","Skeleton","Dialog","Icon","TextField","Checkbox","ProgressBar","Button","MenuButton","Select","Switch","Sheet","RadioGroup","Pagination","DateRangePicker","Tabs","TextArea","Fragment$1","SIZE_CLASSES$1","ATTR","step","n","fallback","join","c","Stack","Tag","rest","className","gap","align","Cluster","justify","wrap","Grid","counts","last","columns","Page","width","SplitView","show","ratio","primaryLabel","primary","secondaryLabel","secondary","isCurrent","item","current","holdsCurrent","NavGroup","open","setOpen","useState","id","useId","o","NavItem","on","onNavigate","e","PrimaryNav","label","items","it","WorkspaceSwitcher","now","workspaces","w","query","setQuery","active","setActive","button","useRef","popup","input","base","useEffect","outside","searchAt","onSwitch","shown","close","pick","onKey","a","searchLabel","i","emptyLabel","AppShell","drawer","setDrawer","mainId","side","bar","nav","moreLabel","adapt","wide","onWide","go","navigate","shell","skipLabel","brand","actions","navLabel","breadcrumbs","children","inner","KINDS","DEFAULT_ACTION","ErrorScreen","k","kind","d","title","SIZE_CLASSES","sizeClassOf","min","useSizeClass","size","setSize","useLayoutEffect","el","ref","ro","entry","sizeAtLeast","useStickyClearance","scroller","before","apply","PageHeader","status","secondaryActions","overflow","overflowLabel","description","FilterBar","f","onSearchChange","search","onOpenFilters","filtersOpen","filters","filtersLabel","appliedLabel","onRemoveFilter","removeLabel","onClearAll","clearLabel","FilterPanel","mode","footer","closeLabel","onClose","FilterSection","defaultOpen","count","STATES","StatePanel","s","activeLabel","onClearFilters","onRetry","retryLabel","action","BulkActionBar","rtl","selectedText","onClearSelection","useUnsavedChangesWarning","dirty","warn","useFormState","formId","values","setValues","initial","touched","setTouched","submitted","setSubmitted","attempt","setAttempt","busy","setBusy","start","errors","useMemo","validate","m","idOf","useCallback","name","field","v","submit","onSubmit","to","ErrorSummary","entries","message","FormSection","FormPage","keep","asking","setAsking","form","submitLabel","onCancel","cancelLabel","discardTitle","discardText","keepLabel","discardLabel","useWide","setWide","QuickEdit","body","ConfirmDialog","cancel","typed","setTyped","ready","requireTyping","objectName","consequence","onConfirm","confirmLabel","typeLabel","READY","useListQuery","defaultsRef","defaults","read","p","get","key","sk","sd","onPop","next","q","change","put","priorityKeys","marked","cell","row","SelectAll","rows","selected","keyOf","r","onChange","CollectionList","root","panelOpen","setPanelOpen","rowKey","nameOf","rowLabel","prio","filtering","state","select","onSelectedChange","panelMode","toggleSort","onSortChange","sort","menu","rowActions","rowActionsLabel","check","where","selectRowLabel","loadingRows","pageSize","results","selectable","caption","selectAllLabel","dir","total","onPageChange","empty","statusPill","filterPanel","showResultsLabel","bulkActions","DescriptionList","KIND","stamp","t","Timeline","sorted","events","order","b","fmt","locale","when","kindLabels","TabsSection","fromUrl","param","tabs","value","setValue","defaultValue","RecordDetail","panel","emptyTitle","emptyText","notFoundTitle","back","activity","fields","tabsParam","tabsLabel","activityLabel","ListDetail","list","detailRef","view","setView","focusId","setFocusId","index","focusOption","onSelect","track","pane","listLabel","renderItem","backLabel","detail","DIRECTION","StatTile","words","ChartFrame","legend","l","table","hideTableLabel","showTableLabel","Dashboard","at","refreshedAt","dateRange","refreshedLabel","tiles","charts","ReportViewer","onRun","parameters","runLabel","parametersLabel","onExport","exportLabel","onPrint","printLabel","applied","SettingsPage","sections","usable","own","setOwn","headings","choose","formData","out","FD","Wizard","all","review","steps","reviewTitle","data","setAt","setErrors","setData","heading","problems","finishLabel","nextLabel","onSaveDraft","saveDraftLabel","STATUS","TaskList","done","completedText","statusLabels","ReviewConfirm","result","changeLabel","EditableGrid","grid","narrow","pos","setPos","editing","setEditing","sheet","setSheet","numeric","sum","target","focusCell","commit","col","move","add","newRow","remove","saveSheet","err","errId","isEditing","editLabel","totalLabel","addLabel","saveLabel","SHORTCUTS","WorkQueue","shortcuts","setShortcuts","rejecting","setRejecting","comment","setComment","tried","setTried","help","setHelp","commentRef","onIndexChange","act","onApprove","people","onAssign","onReject","STEPS","ImportFlow","setStep","file","setFile","mapping","setMapping","over","setOver","take","onFile","failedRowsHref","preview","onMap","onCommit","ExportDialog","format","setFormat","formats","chosen","setChosen","toggle","x","progress","Board","dragging","setDragging","of","cards","card","moveLabel","onMove","column","withHeading","day","same","addDays","iso","Calendar","viewProp","ownView","setOwnView","anchor","date","focus","setFocus","time","longDay","weekday","evs","onViewChange","dates","dt","first","weeks","focusDay","weekStart","sizeText","Attachments","removing","setRemoving","onUpload","uploadLabel","files","onRemove","useDrillPath","path","setPath","write","DrillDown","trail","PeriodComparison","diff","previous","pct","comparison","currentLabel","previousLabel","PrintLayout","host","toLight","runDate","logo","PivotTable","groups","ids","visible","g","focusRow","Fragment","ReportBuilder","setM","setG","setName","set","y","cols","groupings","measures","onSave","Subscriptions","adding","setAdding","deleting","setDeleting","draft","setDraft","onPause","onAdd","recipients","onDelete","EMAIL","UsersAndRoles","inviting","setInviting","email","setEmail","role","setRole","roles","bad","roleLabel","members","onRoleChange","onInvite","PermissionsMatrix","permissions","has","yes","no","AuditLog","person","setPerson","setAction","range","setRange","onFilter","NotificationCentre","unread","notifications","onMarkAllRead","onMarkRead","preferences","onPreferenceChange","Integrations","onDisconnect","onConnect","ApiKeys","copied","setCopied","revoking","setRevoking","onCreate","created","onCreatedClose","keys","onRevoke","ItemList","HomeScreen","assigned","recent","CommandPalette","recentLabel","flat","buttonLabel","placeholder","onSearch","ContextMenu","owner","openAt","child","cloneElement"],"sources":["../src/patterns/Layout.jsx","../src/patterns/Navigation.jsx","../src/patterns/ErrorScreen.jsx","../src/patterns/Regions.jsx","../src/patterns/Forms.jsx","../src/patterns/CollectionList.jsx","../src/patterns/Record.jsx","../src/patterns/Reporting.jsx","../src/patterns/Settings.jsx","../src/patterns/Workflow.jsx","../src/patterns/EditableGrid.jsx","../src/patterns/WorkQueue.jsx","../src/patterns/ImportExport.jsx","../src/patterns/Planning.jsx","../src/patterns/Analysis.jsx","../src/patterns/Admin.jsx","../src/patterns/Notifications.jsx","../src/patterns/Home.jsx"],"sourcesContent":["/* Layout primitives: content-free arrangements that decide only space,\n alignment and columns, from the theme's tokens. Each adapts to the width\n it is given, not the window (ADR-021), so a page in a narrow embed or a\n side pane lays out as it would on a phone. Styles are in patterns.css. */\n\nconst SIZE_CLASSES = [\"compact\", \"medium\", \"expanded\", \"large\", \"extraLarge\"];\nconst ATTR = { compact: \"compact\", medium: \"medium\", expanded: \"expanded\", large: \"large\", extraLarge: \"extra-large\" };\n\n// A space step 0-8 (--piq-space-N; 0 is no gap). Anything else falls back.\nconst step = (n, fallback) => (Number.isInteger(n) && n >= 0 && n <= 8 ? n : fallback);\nconst join = (...c) => c.filter(Boolean).join(\" \");\n\n/* A vertical run of children with one of the theme's space steps between\n them. gap is a step from 0 to 8. */\nexport function Stack({ gap = 4, align = \"stretch\", as: Tag = \"div\", className, children, ...rest }) {\n return (\n <Tag className={join(\"piq-stack\", className)} data-gap={step(gap, 4)} data-align={align} {...rest}>\n {children}\n </Tag>\n );\n}\n\n/* A row of children that wraps onto further rows when it runs out of width:\n buttons, tags, filters. justify is start, center, end or between. */\nexport function Cluster({ gap = 3, justify = \"start\", align = \"center\", wrap = true, as: Tag = \"div\", className, children, ...rest }) {\n return (\n <Tag className={join(\"piq-cluster\", className)} data-gap={step(gap, 3)} data-justify={justify} data-align={align} data-wrap={wrap ? \"true\" : \"false\"} {...rest}>\n {children}\n </Tag>\n );\n}\n\n/* Equal columns whose count follows the width the grid is given, per size\n class: columns is a number for every class, or { compact, medium,\n expanded, large, extraLarge } where a class left out keeps the previous\n class's count. Counts run from 1 to 6. */\nexport function Grid({ columns = { compact: 1, medium: 2, expanded: 3, large: 4 }, gap = 4, as: Tag = \"div\", className, children, ...rest }) {\n const counts = {};\n let last = 1;\n for (const c of SIZE_CLASSES) {\n const n = typeof columns === \"number\" ? columns : columns?.[c];\n last = Number.isInteger(n) ? Math.min(6, Math.max(1, n)) : last;\n counts[`data-cols-${ATTR[c]}`] = last;\n }\n return (\n <div className={join(\"piq-grid\", className)} data-gap={step(gap, 4)} {...counts}>\n <Tag className=\"piq-grid__items\" {...rest}>{children}</Tag>\n </div>\n );\n}\n\n/* The frame of a screen's content: the design system's page gutter for the\n size class, and a maximum width (page, form or reading) centred in the\n space. */\nexport function Page({ width = \"page\", as: Tag = \"div\", className, children, ...rest }) {\n return (\n <div className={join(\"piq-page\", className)} data-width={width}>\n <Tag className=\"piq-page__body\" {...rest}>{children}</Tag>\n </div>\n );\n}\n\n/* Two panes: side by side from the expanded size class up, and below it one\n pane at a time, the one named by show (primary or secondary). The app\n decides which pane shows, for example the detail once a record is chosen.\n ratio is 1:1, 1:2 or 2:1. */\nexport function SplitView({ primary, secondary, show = \"primary\", ratio = \"1:2\", primaryLabel, secondaryLabel, className, ...rest }) {\n return (\n <div className={join(\"piq-split\", className)} data-show={show === \"secondary\" ? \"secondary\" : \"primary\"} data-ratio={ratio} {...rest}>\n <div className=\"piq-split__panes\">\n <div className=\"piq-split__pane\" data-pane=\"primary\" role={primaryLabel ? \"region\" : undefined} aria-label={primaryLabel}>{primary}</div>\n <div className=\"piq-split__pane\" data-pane=\"secondary\" role={secondaryLabel ? \"region\" : undefined} aria-label={secondaryLabel}>{secondary}</div>\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { MenuButton } from \"../widgets/MenuButton.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\n\nconst isCurrent = (item, current) => item.current === true || (current !== undefined && item.id === current);\nconst holdsCurrent = (item, current) => isCurrent(item, current) || (item.items ?? []).some((c) => holdsCurrent(c, current));\n\nfunction NavGroup({ item, current, onNavigate }) {\n const [open, setOpen] = useState(() => holdsCurrent(item, current));\n const id = useId();\n return (\n <li className=\"piq-primary-nav__item\">\n <button type=\"button\" className=\"piq-primary-nav__link piq-primary-nav__group\" aria-expanded={open} aria-controls={id} onClick={() => setOpen((o) => !o)}>\n {item.icon && <Icon name={item.icon} />}\n <span className=\"piq-primary-nav__label\">{item.label}</span>\n <Icon name={open ? \"chevron-up\" : \"chevron-down\"} className=\"piq-primary-nav__chevron\" />\n </button>\n <ul id={id} className=\"piq-primary-nav__list piq-primary-nav__sublist\" hidden={!open}>\n {item.items.map((c) => <NavItem key={c.id ?? c.label} item={c} current={current} onNavigate={onNavigate} />)}\n </ul>\n </li>\n );\n}\n\nfunction NavItem({ item, current, onNavigate }) {\n if (item.items?.length) return <NavGroup item={item} current={current} onNavigate={onNavigate} />;\n const on = isCurrent(item, current);\n return (\n <li className=\"piq-primary-nav__item\">\n <a href={item.href} className=\"piq-primary-nav__link\" aria-current={on ? \"page\" : undefined}\n onClick={(e) => { if (onNavigate) { e.preventDefault(); onNavigate(item, e); } }}>\n {item.icon && <Icon name={item.icon} />}\n <span className=\"piq-primary-nav__label\">{item.label}</span>\n </a>\n </li>\n );\n}\n\n/* An app's main navigation: destinations as links in a labelled navigation\n landmark, the current one marked (aria-current=\"page\") and shown by the\n design system's active state. A destination with items is a group that\n opens and closes by a disclosure button, open while it holds the current\n page. items: [{ id, label, href, icon?, items? }]; current is the id of the\n current destination. onNavigate(item, event), if given, replaces following\n the link, for an app's own router. */\nexport function PrimaryNav({ items = [], current, label = \"Main\", onNavigate, className, ...rest }) {\n return (\n <nav aria-label={label} className={`piq-primary-nav${className ? ` ${className}` : \"\"}`} {...rest}>\n <ul className=\"piq-primary-nav__list\">\n {items.map((it) => <NavItem key={it.id ?? it.label} item={it} current={current} onNavigate={onNavigate} />)}\n </ul>\n </nav>\n );\n}\n\n/* The workspace or tenant switcher in an app's top bar. Up to seven\n workspaces it is a menu; from eight (searchAt) its popup has a search that\n narrows the list, as a combobox: type to filter, Up and Down to move,\n Enter to switch, Escape to close and return to the button.\n workspaces: [{ id, label }]. */\nexport function WorkspaceSwitcher({ workspaces = [], current, onSwitch, label = \"Workspace\", searchLabel = \"Search workspaces\", searchAt = 8, emptyLabel = \"No workspace matches\", className }) {\n const now = workspaces.find((w) => w.id === current) ?? workspaces[0];\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [active, setActive] = useState(0);\n const button = useRef(null), popup = useRef(null), input = useRef(null);\n const base = useId();\n\n useEffect(() => { if (open) input.current?.focus(); }, [open]);\n useEffect(() => {\n if (!open) return undefined;\n const outside = (e) => { if (!button.current?.contains(e.target) && !popup.current?.contains(e.target)) setOpen(false); };\n document.addEventListener(\"mousedown\", outside);\n return () => document.removeEventListener(\"mousedown\", outside);\n }, [open]);\n\n if (workspaces.length < searchAt) {\n return (\n <MenuButton className={className} variant=\"text\" label={now?.label} buttonLabel={`${label}: ${now?.label ?? \"\"}`}\n items={workspaces.map((w) => ({ label: w.label, checked: w.id === now?.id, onSelect: () => onSwitch?.(w.id) }))} />\n );\n }\n\n const shown = workspaces.filter((w) => w.label.toLowerCase().includes(query.trim().toLowerCase()));\n const close = () => { setOpen(false); setQuery(\"\"); setActive(0); button.current?.focus(); };\n const pick = (w) => { close(); if (w.id !== now?.id) onSwitch?.(w.id); };\n function onKey(e) {\n if (e.key === \"ArrowDown\") { e.preventDefault(); setActive((a) => Math.min(a + 1, shown.length - 1)); }\n else if (e.key === \"ArrowUp\") { e.preventDefault(); setActive((a) => Math.max(a - 1, 0)); }\n else if (e.key === \"Enter\") { e.preventDefault(); if (shown[active]) pick(shown[active]); }\n else if (e.key === \"Escape\") { e.preventDefault(); close(); }\n }\n\n return (\n <div className={`piq-menubutton piq-workspace${className ? ` ${className}` : \"\"}`}>\n <Button ref={button} variant=\"text\" aria-haspopup=\"dialog\" aria-expanded={open} aria-label={`${label}: ${now?.label ?? \"\"}`} onClick={() => (open ? close() : setOpen(true))}>\n {now?.label}\n <Icon name=\"chevron-down\" className=\"piq-menubutton__chevron\" />\n </Button>\n {open && (\n <div ref={popup} role=\"dialog\" aria-label={label} className=\"piq-menu piq-menubutton__menu piq-workspace__popup\">\n <input ref={input} type=\"search\" role=\"combobox\" className=\"piq-field__input piq-workspace__search\" aria-label={searchLabel} aria-expanded=\"true\" aria-controls={`${base}-list`}\n aria-autocomplete=\"list\" aria-activedescendant={shown[active] ? `${base}-${shown[active].id}` : undefined}\n value={query} onChange={(e) => { setQuery(e.target.value); setActive(0); }} onKeyDown={onKey} />\n <ul id={`${base}-list`} role=\"listbox\" aria-label={label} className=\"piq-workspace__list\">\n {shown.map((w, i) => (\n <li key={w.id} id={`${base}-${w.id}`} role=\"option\" aria-selected={w.id === now?.id} className={`piq-menu__item${i === active ? \" is-hover\" : \"\"}`}\n onMouseDown={(e) => e.preventDefault()} onClick={() => pick(w)}>{w.label}</li>\n ))}\n </ul>\n {!shown.length && <p className=\"piq-workspace__empty\" role=\"status\">{emptyLabel}</p>}\n </div>\n )}\n </div>\n );\n}\n\n/* The frame of an app: its navigation, a top bar for the brand, workspace and\n account, and the content. Navigation follows the window: from the expanded\n size class a persistent side navigation in the design system's style; at\n medium a rail; below it a bottom bar with up to five destinations (four\n and More when there are more), the rest in a drawer. The content scrolls\n between the bars, so neither ever covers what has focus.\n nav and current are PrimaryNav's items and current; brand, actions and\n breadcrumbs are slots. adapt=\"container\" lays the shell out by the width of\n the element it is in rather than the window, for a preview or an embed\n (give that element a height). */\nexport function AppShell({ nav = [], current, navLabel = \"Main\", brand, actions, breadcrumbs, onNavigate, moreLabel = \"More\", skipLabel = \"Skip to content\", adapt = \"window\", children, className }) {\n const [drawer, setDrawer] = useState(false);\n const mainId = useId();\n const side = useRef(null);\n const bar = nav.length <= 5 ? nav : [...nav.slice(0, 4), { id: \"piq-more\", label: moreLabel, icon: \"more\", more: true }];\n\n useEffect(() => {\n if (!drawer || adapt === \"container\" || typeof window.matchMedia !== \"function\") return undefined;\n const wide = window.matchMedia(\"(min-width: 600px)\");\n const onWide = () => {\n if (!wide.matches) return;\n setDrawer(false);\n // After the sheet has given focus back: the current destination in the side navigation.\n requestAnimationFrame(() => side.current?.querySelector('[aria-current=\"page\"]')?.focus());\n };\n wide.addEventListener(\"change\", onWide);\n return () => wide.removeEventListener(\"change\", onWide);\n }, [drawer]);\n\n const go = (item) => (e) => {\n if (item.more || item.items?.length) { e.preventDefault(); setDrawer(true); return; }\n if (onNavigate) { e.preventDefault(); onNavigate(item, e); }\n };\n const navigate = onNavigate ? (item, e) => { setDrawer(false); onNavigate(item, e); } : undefined;\n\n const shell = (\n <div className={`piq-shell${className ? ` ${className}` : \"\"}`} data-adapt={adapt === \"container\" ? \"container\" : undefined}>\n <a className=\"piq-shell__skip\" href={`#${mainId}`}>{skipLabel}</a>\n <header className=\"piq-shell__top\">\n {brand && <div className=\"piq-shell__brand\">{brand}</div>}\n {actions && <div className=\"piq-shell__actions\">{actions}</div>}\n </header>\n <div ref={side} className=\"piq-shell__side\">\n <PrimaryNav items={nav} current={current} label={navLabel} onNavigate={onNavigate} />\n </div>\n <main id={mainId} className=\"piq-shell__main\" tabIndex={-1}>\n {breadcrumbs && <div className=\"piq-shell__breadcrumbs\">{breadcrumbs}</div>}\n {children}\n </main>\n <nav className=\"piq-shell__bar\" aria-label={navLabel}>\n <ul className=\"piq-shell__bar-list\">\n {bar.map((it) => {\n const on = !it.more && holdsCurrent(it, current);\n const inner = <>{it.icon && <Icon name={it.icon} />}<span className=\"piq-shell__bar-label\">{it.label}</span></>;\n return (\n <li key={it.id ?? it.label}>\n {it.more || it.items?.length\n ? <button type=\"button\" className=\"piq-shell__bar-item\" aria-haspopup=\"dialog\" aria-expanded={drawer} data-current={on || undefined} onClick={go(it)}>{inner}</button>\n : <a href={it.href} className=\"piq-shell__bar-item\" aria-current={on ? \"page\" : undefined} onClick={go(it)}>{inner}</a>}\n </li>\n );\n })}\n </ul>\n </nav>\n <Sheet open={drawer} onClose={() => setDrawer(false)} label={navLabel} side=\"start\">\n <PrimaryNav items={nav} current={current} label={navLabel} onNavigate={navigate} />\n </Sheet>\n </div>\n );\n return adapt === \"container\" ? <div className=\"piq-shell-frame\">{shell}</div> : shell;\n}\n","import { Button } from \"../widgets/Button.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\n\nconst KINDS = {\n \"not-found\": { icon: \"search\", title: \"We can't find that page\", text: \"The link may be out of date, or the page may have moved.\" },\n forbidden: { icon: \"lock\", title: \"You don't have access to this page\", text: \"Ask the person who manages this workspace to give you access.\" },\n offline: { icon: \"warning\", title: \"You're offline\", text: \"Check your connection. What you were doing is kept on this page.\" },\n maintenance: { icon: \"settings\", title: \"This service is being updated\", text: \"It will be back shortly. Try again in a few minutes.\" },\n \"session-expired\": { icon: \"user\", title: \"Your session has ended\", text: \"For your security you were signed out. Sign in again to carry on.\" },\n};\nconst DEFAULT_ACTION = {\n \"not-found\": { label: \"Go to the start\", href: \"/\" },\n forbidden: { label: \"Go back\", back: true },\n offline: { label: \"Try again\", reload: true },\n maintenance: { label: \"Try again\", reload: true },\n \"session-expired\": { label: \"Sign in again\", reload: true },\n};\n\n/* A whole screen that says something went wrong and how to go on: not found,\n no permission, offline, maintenance or an expired session (kind). One\n level-1 heading states what happened. The app can replace the title, text\n and actions; without actions it offers the kind's own way forward (the\n start page, back, or try again). */\nexport function ErrorScreen({ kind = \"not-found\", title, children, actions, className, ...rest }) {\n const k = KINDS[kind] ?? KINDS[\"not-found\"];\n const d = DEFAULT_ACTION[kind] ?? DEFAULT_ACTION[\"not-found\"];\n const fallback = d.href\n ? <a className=\"piq-btn\" href={d.href}>{d.label}</a>\n : <Button onClick={() => (d.back ? window.history.back() : window.location.reload())}>{d.label}</Button>;\n return (\n <section className={`piq-error-screen${className ? ` ${className}` : \"\"}`} data-kind={kind} {...rest}>\n <Icon name={k.icon} className=\"piq-error-screen__mark\" />\n <h1 className=\"piq-error-screen__title\">{title ?? k.title}</h1>\n <div className=\"piq-error-screen__text\">{children ?? <p>{k.text}</p>}</div>\n <div className=\"piq-error-screen__actions\">{actions ?? fallback}</div>\n </section>\n );\n}\n","import { useId, useLayoutEffect, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { MenuButton } from \"../widgets/MenuButton.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\n\n/* The lower bound of each size class in CSS px (ADR-021): the same numbers as\n --piq-size-breakpoint-* and patterns.css's queries. */\nexport const SIZE_CLASSES = { compact: 0, medium: 600, expanded: 840, large: 1200, \"extra-large\": 1600 };\n\n/* The size class a width falls in: compact, medium, expanded, large or\n extra-large. */\nexport function sizeClassOf(width) {\n return Object.entries(SIZE_CLASSES).filter(([, min]) => width >= min).at(-1)[0];\n}\n\n/* The size class of an element's own width, kept up to date as it resizes.\n For behaviour that must change with width (a panel inline or in a sheet);\n layout itself changes in CSS. compact until measured. */\nexport function useSizeClass(ref) {\n const [size, setSize] = useState(\"compact\");\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el || typeof ResizeObserver !== \"function\") return undefined;\n setSize(sizeClassOf(el.getBoundingClientRect().width));\n const ro = new ResizeObserver(([entry]) => setSize(sizeClassOf(entry.contentRect.width)));\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref]);\n return size;\n}\n/* Whether a size class is at least another: sizeAtLeast(size, \"expanded\"). */\nexport function sizeAtLeast(size, min) {\n return SIZE_CLASSES[size] >= SIZE_CLASSES[min];\n}\n\n/* Keeps a sticky bar's own height clear at the bottom of the area that\n scrolls it, while active, so focus scrolled into view never lands under the\n bar (WCAG 2.4.11), even when the bar wraps onto two lines. */\nexport function useStickyClearance(ref, active = true) {\n useLayoutEffect(() => {\n const el = ref.current;\n if (!active || !el) return undefined;\n let scroller = el.parentElement;\n while (scroller && !/(auto|scroll)/.test(getComputedStyle(scroller).overflowY)) scroller = scroller.parentElement;\n scroller ??= document.scrollingElement ?? document.documentElement;\n const before = scroller.style.scrollPaddingBlockEnd;\n const apply = () => { scroller.style.scrollPaddingBlockEnd = `${el.getBoundingClientRect().height + 8}px`; };\n apply();\n const ro = typeof ResizeObserver === \"function\" ? new ResizeObserver(apply) : null;\n ro?.observe(el);\n return () => { ro?.disconnect(); scroller.style.scrollPaddingBlockEnd = before; };\n }, [ref, active]);\n}\n\n/* The top of a screen: one level-1 heading, optional breadcrumbs and status,\n the primary action, secondary actions beside it, and any further actions\n in a More menu (overflow: MenuButton items). Its size follows the design\n system's page-header variant. */\nexport function PageHeader({ title, breadcrumbs, status, description, actions, secondaryActions, overflow, overflowLabel = \"More actions\", className }) {\n return (\n <header className={`piq-page-header${className ? ` ${className}` : \"\"}`}>\n {breadcrumbs}\n <div className=\"piq-page-header__row\">\n <div className=\"piq-page-header__heading\">\n <h1 className=\"piq-page-header__title\">{title}</h1>\n {status}\n </div>\n {(actions || secondaryActions || overflow?.length) && (\n <div className=\"piq-page-header__actions\">\n {secondaryActions}\n {actions}\n {overflow?.length ? <MenuButton icon=\"more\" buttonLabel={overflowLabel} variant=\"text\" align=\"end\" items={overflow} /> : null}\n </div>\n )}\n </div>\n {description && <p className=\"piq-page-header__description\">{description}</p>}\n </header>\n );\n}\n\n/* Search and filtering above a list: a search field, the applied filters as\n removable chips with Clear all, and a Filters button that opens the filter\n panel and shows how many are applied. Where it has little width (compact)\n only the search and the Filters button show. filters: [{ id, label }]. */\nexport function FilterBar({ search, onSearchChange, searchLabel = \"Search\", filters = [], onRemoveFilter, onClearAll, clearLabel = \"Clear all\", onOpenFilters, filtersOpen, filtersLabel = \"Filters\", appliedLabel = \"Applied filters\", removeLabel = (f) => `Remove filter: ${f.label}`, children, className }) {\n const id = useId();\n return (\n <div className={`piq-filter-bar${className ? ` ${className}` : \"\"}`}>\n <div className=\"piq-filter-bar__row\">\n {onSearchChange && (\n <div role=\"search\" className=\"piq-filter-bar__search\">\n <label className=\"piq-visually-hidden\" htmlFor={id}>{searchLabel}</label>\n <Icon name=\"search\" className=\"piq-filter-bar__search-icon\" />\n <input id={id} type=\"search\" className=\"piq-field__input\" placeholder={searchLabel} value={search ?? \"\"} onChange={(e) => onSearchChange(e.target.value)} />\n </div>\n )}\n {children}\n {onOpenFilters && (\n <Button variant=\"secondary\" className=\"piq-filter-bar__open\" aria-expanded={filtersOpen} onClick={onOpenFilters}>\n <Icon name=\"filter\" />\n {filters.length ? `${filtersLabel} (${filters.length})` : filtersLabel}\n </Button>\n )}\n </div>\n {filters.length > 0 && (\n <ul className=\"piq-filter-bar__chips\" aria-label={appliedLabel}>\n {filters.map((f) => (\n <li key={f.id} className=\"piq-chip\">\n <span>{f.label}</span>\n {onRemoveFilter && <button type=\"button\" className=\"piq-chip__remove\" aria-label={removeLabel(f)} onClick={() => onRemoveFilter(f)}><Icon name=\"close\" /></button>}\n </li>\n ))}\n {onClearAll && <li><Button variant=\"text\" size=\"sm\" onClick={onClearAll}>{clearLabel}</Button></li>}\n </ul>\n )}\n </div>\n );\n}\n\n/* The filters themselves, in collapsible sections (FilterSection): a side\n panel beside the list (mode inline), or a full-screen sheet where there is\n little width (mode sheet). CollectionList chooses the mode by its width. */\nexport function FilterPanel({ open = false, onClose, mode = \"inline\", title = \"Filters\", closeLabel = \"Close filters\", footer, children, className }) {\n if (mode === \"sheet\") {\n return <Sheet open={open} onClose={onClose} title={title} side=\"full\" closeLabel={closeLabel} className={className}>{children}{footer}</Sheet>;\n }\n if (!open) return null;\n return (\n <aside className={`piq-filter-panel${className ? ` ${className}` : \"\"}`} aria-label={title}>\n <div className=\"piq-filter-panel__head\">\n <h2 className=\"piq-filter-panel__title\">{title}</h2>\n <Button variant=\"text\" aria-label={closeLabel} onClick={() => onClose?.()}><Icon name=\"close\" /></Button>\n </div>\n {children}\n {footer}\n </aside>\n );\n}\n\n/* One group of filters that opens and closes, with an optional count of\n matching records. */\nexport function FilterSection({ title, count, defaultOpen = true, children, className }) {\n return (\n <details className={`piq-filter-section${className ? ` ${className}` : \"\"}`} open={defaultOpen}>\n <summary className=\"piq-filter-section__title\">\n {title}\n {count != null && <span className=\"piq-filter-section__count\">{count}</span>}\n </summary>\n <div className=\"piq-filter-section__body\">{children}</div>\n </details>\n );\n}\n\nconst STATES = {\n empty: { icon: \"add\", title: \"Nothing here yet\", text: \"When there is something to show, it will be listed here.\" },\n \"no-results\": { icon: \"search\", title: \"No results match\", text: \"Try different words, or remove a filter.\" },\n forbidden: { icon: \"lock\", title: \"You don't have access to this\", text: \"Ask the person who manages this workspace to give you access.\" },\n error: { icon: \"error\", title: \"This didn't load\", text: \"Something went wrong on our side. Try again.\" },\n partial: { icon: \"warning\", title: \"Some of this didn't load\", text: \"What loaded is shown below. Try again for the rest.\" },\n};\n\n/* What a list or region shows when it has no content to show: first use\n (empty), nothing matching (no-results, with the active filters and a way\n to clear them), no permission (forbidden), a failed load (error, with\n retry) or a partial load (partial). Each says what happened and offers the\n next action, and is announced to screen readers. */\nexport function StatePanel({ kind = \"empty\", title, children, action, filters = [], onClearFilters, clearLabel = \"Clear filters\", onRetry, retryLabel = \"Try again\", activeLabel = \"Active filters:\", className }) {\n const s = STATES[kind] ?? STATES.empty;\n return (\n <div className={`piq-state-panel${className ? ` ${className}` : \"\"}`} data-kind={kind} role={kind === \"error\" ? \"alert\" : \"status\"}>\n <Icon name={s.icon} className=\"piq-state-panel__mark\" />\n <p className=\"piq-state-panel__title\">{title ?? s.title}</p>\n <div className=\"piq-state-panel__text\">{children ?? <p>{s.text}</p>}</div>\n {kind === \"no-results\" && filters.length > 0 && <p className=\"piq-state-panel__filters\">{activeLabel} {filters.map((f) => f.label).join(\", \")}</p>}\n <div className=\"piq-state-panel__actions\">\n {kind === \"no-results\" && onClearFilters && <Button variant=\"secondary\" onClick={onClearFilters}>{clearLabel}</Button>}\n {(kind === \"error\" || kind === \"partial\") && onRetry && <Button onClick={onRetry}>{retryLabel}</Button>}\n {action}\n </div>\n </div>\n );\n}\n\n/* The actions for the selected rows, shown while any are selected, with how\n many are selected; the count is announced as it changes. A toolbar: arrow\n keys move between its controls. Place it after the list: it sticks to the\n bottom of the screen. */\nexport function BulkActionBar({ count = 0, children, onClearSelection, clearLabel = \"Clear selection\", label = \"Bulk actions\", selectedText = (n) => `${n} selected`, className }) {\n const bar = useRef(null);\n useStickyClearance(bar, count > 0);\n function onKey(e) {\n if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n const items = [...e.currentTarget.querySelectorAll(\"button:not([disabled]), a[href], input:not([disabled])\")];\n const i = items.indexOf(document.activeElement);\n if (i < 0) return;\n const rtl = getComputedStyle(e.currentTarget).direction === \"rtl\";\n const step = (e.key === \"ArrowRight\") !== rtl ? 1 : -1;\n e.preventDefault();\n items[(i + step + items.length) % items.length].focus();\n }\n return (\n <>\n <span className=\"piq-visually-hidden\" role=\"status\" aria-live=\"polite\">{count ? selectedText(count) : \"\"}</span>\n {count > 0 && (\n <div ref={bar} role=\"toolbar\" aria-label={label} className={`piq-bulk-bar${className ? ` ${className}` : \"\"}`} onKeyDown={onKey}>\n <span className=\"piq-bulk-bar__count\">{selectedText(count)}</span>\n <div className=\"piq-bulk-bar__actions\">{children}</div>\n {onClearSelection && <Button variant=\"text\" onClick={onClearSelection}>{clearLabel}</Button>}\n </div>\n )}\n </>\n );\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { PageHeader, useStickyClearance } from \"./Regions.jsx\";\n\n/* Warns before the page is left with unsaved changes (the browser's own\n prompt on reload, close or a link out of the app). An app's router should\n also block its own navigation while dirty is true. */\nexport function useUnsavedChangesWarning(dirty) {\n useEffect(() => {\n if (!dirty) return undefined;\n const warn = (e) => { e.preventDefault(); e.returnValue = \"\"; };\n window.addEventListener(\"beforeunload\", warn);\n return () => window.removeEventListener(\"beforeunload\", warn);\n }, [dirty]);\n}\n\n/* A form's values, errors and submission, as the form patterns expect.\n validate(values) returns { field: message } for what is wrong. An error\n shows once its field has been left (blur) or the form submitted, never\n while the user is still typing a first answer. field(name) gives a field\n widget its props: id, name, value, onChange, onBlur and error. submit()\n validates everything; with errors it shows the summary, otherwise calls\n onSubmit(values). dirty is true once a value differs from the initial. */\nexport function useFormState({ initial = {}, validate = () => ({}), onSubmit } = {}) {\n const formId = useId();\n const [values, setValues] = useState(initial);\n const [touched, setTouched] = useState({});\n const [submitted, setSubmitted] = useState(false);\n const [attempt, setAttempt] = useState(0);\n const [busy, setBusy] = useState(false);\n const start = useRef(initial);\n const errors = useMemo(() => Object.fromEntries(Object.entries(validate(values) ?? {}).filter(([, m]) => m)), [values, validate]);\n const dirty = Object.keys({ ...start.current, ...values }).some((k) => values[k] !== start.current[k]);\n const idOf = useCallback((name) => `${formId}-${name}`, [formId]);\n\n const field = (name) => ({\n id: idOf(name), name, value: values[name] ?? \"\",\n onChange: (e) => setValues((v) => ({ ...v, [name]: e?.target ? (e.target.type === \"checkbox\" ? e.target.checked : e.target.value) : e })),\n onBlur: () => setTouched((t) => ({ ...t, [name]: true })),\n error: touched[name] || submitted ? errors[name] : undefined,\n });\n async function submit(e) {\n e?.preventDefault?.();\n setSubmitted(true);\n setAttempt((n) => n + 1);\n if (Object.keys(errors).length) return false;\n setBusy(true);\n try { await onSubmit?.(values); start.current = values; } finally { setBusy(false); }\n return true;\n }\n const reset = (to = start.current) => { start.current = to; setValues(to); setTouched({}); setSubmitted(false); };\n const shownErrors = submitted ? errors : {};\n return { values, setValues, errors, shownErrors, field, submit, reset, dirty, busy, submitted, attempt, idOf };\n}\n\n/* The problems with a submitted form, at its top: a heading and a link to\n each invalid field. It takes focus when it appears, so keyboard and screen\n reader users learn what is wrong at once, and each link moves focus to its\n field. errors: { field: message }; idOf(field) gives each field's id. */\nexport function ErrorSummary({ errors = {}, idOf = (n) => n, title = \"There is a problem\", attempt = 0, className }) {\n const ref = useRef(null);\n const entries = Object.entries(errors);\n useEffect(() => { if (entries.length) ref.current?.focus(); }, [attempt]);\n if (!entries.length) return null;\n return (\n <div ref={ref} tabIndex={-1} className={`piq-error-summary${className ? ` ${className}` : \"\"}`} aria-labelledby={`${idOf(\"summary\")}-title`}>\n <h2 id={`${idOf(\"summary\")}-title`} className=\"piq-error-summary__title\">{title}</h2>\n <ul className=\"piq-error-summary__list\">\n {entries.map(([name, message]) => (\n <li key={name}>\n <a href={`#${idOf(name)}`} onClick={(e) => { e.preventDefault(); const f = document.getElementById(idOf(name)); f?.focus(); f?.scrollIntoView?.({ block: \"center\" }); }}>{message}</a>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/* A group of related fields with a heading. */\nexport function FormSection({ title, description, children, className }) {\n return (\n <fieldset className={`piq-form-section${className ? ` ${className}` : \"\"}`}>\n <legend className=\"piq-form-section__title\">{title}</legend>\n {description && <p className=\"piq-form-section__description\">{description}</p>}\n <div className=\"piq-form-section__fields\">{children}</div>\n </fieldset>\n );\n}\n\n/* A full-page form for creating or editing a record: one column of fields\n with labels above, no wider than the design system's form width; an error\n summary that takes focus when a submit finds problems; Save and Cancel in\n a bar that stays in view (and above the on-screen keyboard) without ever\n covering the focused field; a warning before leaving with unsaved changes,\n and a question before Cancel discards them. form comes from\n useFormState; fields go in children. */\nexport function FormPage({ title, breadcrumbs, description, form, onCancel, submitLabel = \"Save\", cancelLabel = \"Cancel\", discardTitle = \"Discard your changes?\", discardText = \"What you have typed will be lost.\", keepLabel = \"Keep editing\", discardLabel = \"Discard\", children, className }) {\n const bar = useRef(null);\n const keep = useRef(null);\n const [asking, setAsking] = useState(false);\n useStickyClearance(bar, true);\n useUnsavedChangesWarning(form?.dirty);\n const cancel = () => (form?.dirty ? setAsking(true) : onCancel?.());\n return (\n <form className={`piq-form-page${className ? ` ${className}` : \"\"}`} noValidate onSubmit={form?.submit}>\n <PageHeader title={title} breadcrumbs={breadcrumbs} description={description} />\n <ErrorSummary errors={form?.shownErrors} idOf={form?.idOf} attempt={form?.attempt} />\n <div className=\"piq-form-page__fields\">{children}</div>\n <div ref={bar} className=\"piq-form-page__actions\">\n <Button type=\"submit\" busy={form?.busy}>{submitLabel}</Button>\n {onCancel && <Button variant=\"secondary\" onClick={cancel}>{cancelLabel}</Button>}\n </div>\n <Dialog open={asking} onClose={() => setAsking(false)} role=\"alertdialog\" title={discardTitle} description={discardText} initialFocus={keep}\n actions={<><Button ref={keep} variant=\"secondary\" onClick={() => setAsking(false)}>{keepLabel}</Button><Button onClick={() => { setAsking(false); onCancel?.(); }}>{discardLabel}</Button></>} />\n </form>\n );\n}\n\nfunction useWide() {\n const query = \"(min-width: 600px)\";\n const [wide, setWide] = useState(() => typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(query).matches);\n useEffect(() => {\n if (typeof window.matchMedia !== \"function\") return undefined;\n const m = window.matchMedia(query);\n const on = () => setWide(m.matches);\n on();\n m.addEventListener(\"change\", on);\n return () => m.removeEventListener(\"change\", on);\n }, []);\n return wide;\n}\n\n/* A short form for a quick create or edit, without leaving the page: a modal\n dialog from the medium size class, a full-screen sheet below it. Focus\n stays inside while it is open and returns to the control that opened it.\n form comes from useFormState; fields go in children. */\nexport function QuickEdit({ open = false, onClose, title, form, submitLabel = \"Save\", cancelLabel = \"Cancel\", children, className }) {\n const wide = useWide();\n const body = (\n <form className=\"piq-quick-edit\" noValidate onSubmit={async (e) => { if (await form?.submit(e)) onClose?.(); }}>\n <ErrorSummary errors={form?.shownErrors} idOf={form?.idOf} attempt={form?.attempt} />\n <div className=\"piq-quick-edit__fields\">{children}</div>\n <div className=\"piq-quick-edit__actions\">\n <Button type=\"submit\" busy={form?.busy}>{submitLabel}</Button>\n <Button variant=\"secondary\" onClick={() => onClose?.()}>{cancelLabel}</Button>\n </div>\n </form>\n );\n return wide\n ? <Dialog open={open} onClose={onClose} title={title} className={className}>{body}</Dialog>\n : <Sheet open={open} onClose={onClose} title={title} side=\"full\" className={className}>{body}</Sheet>;\n}\n\n/* The question before a destructive action: it names the object and what\n will be lost, starts focus on Cancel, and with requireTyping makes the\n user type the object's name before the action becomes available. */\nexport function ConfirmDialog({ open = false, onConfirm, onCancel, title, objectName, consequence, confirmLabel = \"Delete\", cancelLabel = \"Cancel\", requireTyping = false, typeLabel = (name) => `Type ${name} to confirm`, className }) {\n const cancel = useRef(null);\n const [typed, setTyped] = useState(\"\");\n const id = useId();\n useEffect(() => { if (!open) setTyped(\"\"); }, [open]);\n const ready = !requireTyping || typed.trim() === String(objectName);\n return (\n <Dialog open={open} onClose={onCancel} role=\"alertdialog\" title={title ?? `Delete ${objectName}?`} description={consequence} initialFocus={cancel} className={`piq-confirm${className ? ` ${className}` : \"\"}`}\n actions={<>\n <Button ref={cancel} variant=\"secondary\" onClick={() => onCancel?.()}>{cancelLabel}</Button>\n <Button className=\"piq-confirm__action\" disabled={!ready} onClick={() => ready && onConfirm?.()}>{confirmLabel}</Button>\n </>}>\n {requireTyping && (\n <div className=\"piq-field\">\n <label className=\"piq-field__label\" htmlFor={id}>{typeLabel(objectName)}</label>\n <input id={id} className=\"piq-field__input\" autoComplete=\"off\" spellCheck={false} value={typed} onChange={(e) => setTyped(e.target.value)} />\n </div>\n )}\n </Dialog>\n );\n}\n","import { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { MenuButton } from \"../widgets/MenuButton.jsx\";\nimport { Pagination } from \"../widgets/Pagination.jsx\";\nimport { Skeleton } from \"../widgets/Loading.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { BulkActionBar, FilterBar, FilterPanel, PageHeader, StatePanel, sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\nconst READY = new Set([\"ready\", \"partial\"]);\n\n/* A list's query (page, page size, search, filters, sort) kept in the page's\n URL under a key, so it survives opening a record and coming back, can be\n shared, and follows Back and Forward. Returns [query, update]; update\n merges, and a change to search or filters returns to page 1. filters are\n ids; sort is { key, dir } with dir ascending or descending. */\nexport function useListQuery({ key = \"list\", defaults = {} } = {}) {\n const defaultsRef = useRef(null);\n defaultsRef.current = { page: 1, pageSize: 20, q: \"\", filters: [], sort: null, ...defaults };\n const read = useCallback(() => {\n const base = defaultsRef.current;\n if (typeof window === \"undefined\") return base;\n const p = new URLSearchParams(window.location.search);\n const get = (k) => p.get(`${key}.${k}`);\n const [sk, sd] = (get(\"sort\") ?? \"\").split(\":\");\n return {\n page: Number(get(\"page\")) || base.page,\n pageSize: Number(get(\"size\")) || base.pageSize,\n q: get(\"q\") ?? base.q,\n filters: get(\"f\") ? get(\"f\").split(\",\").filter(Boolean) : base.filters,\n sort: sk ? { key: sk, dir: sd === \"descending\" ? \"descending\" : \"ascending\" } : base.sort,\n };\n }, [key]);\n const [query, setQuery] = useState(read);\n\n useEffect(() => {\n const onPop = () => setQuery(read());\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [read]);\n\n const update = useCallback((change) => {\n setQuery((q) => {\n const base = defaultsRef.current;\n const next = { ...q, ...change };\n if ((\"q\" in change || \"filters\" in change) && !(\"page\" in change)) next.page = 1;\n const p = new URLSearchParams(window.location.search);\n const put = (k, v, d) => (v === d || v === \"\" || v == null ? p.delete(`${key}.${k}`) : p.set(`${key}.${k}`, v));\n put(\"page\", next.page, base.page);\n put(\"size\", next.pageSize, base.pageSize);\n put(\"q\", next.q, \"\");\n put(\"f\", next.filters.join(\",\"), \"\");\n put(\"sort\", next.sort ? `${next.sort.key}:${next.sort.dir}` : null, null);\n const s = p.toString();\n window.history.replaceState(window.history.state, \"\", `${window.location.pathname}${s ? `?${s}` : \"\"}${window.location.hash}`);\n return next;\n });\n }, [key]);\n return [query, update];\n}\n\nfunction priorityKeys(columns) {\n const marked = columns.filter((c) => c.priority).map((c) => c.key);\n return new Set(marked.length ? marked : columns.slice(0, 2).map((c) => c.key));\n}\nconst cell = (c, row) => (c.render ? c.render(row) : row[c.key]);\n\nfunction SelectAll({ rows, keyOf, selected, onChange, label }) {\n const ref = useRef(null);\n const on = rows.filter((r) => selected.includes(keyOf(r))).length;\n useEffect(() => { if (ref.current) ref.current.indeterminate = on > 0 && on < rows.length; }, [on, rows.length]);\n return (\n <label className=\"piq-collection__hit\"><input ref={ref} type=\"checkbox\" className=\"piq-check__box\" aria-label={label} checked={rows.length > 0 && on === rows.length}\n onChange={(e) => onChange(e.target.checked ? [...new Set([...selected, ...rows.map(keyOf)])] : selected.filter((k) => !rows.some((r) => keyOf(r) === k)))} /></label>\n );\n}\n\n/* A screen for finding and acting on records: the page header, search and\n filters, the records as a table (from the medium size class; only the\n priority columns until expanded) or as stacked items (compact), selection\n with bulk actions, row action menus, sorting, pagination, and a state\n panel for empty, no results, no permission, a failed or partial load, with\n skeletons while loading. The app supplies the rows of the current page and\n owns the query (useListQuery keeps it in the URL); the list fetches\n nothing. columns: [{ key, label, priority?, numeric?, sortable?, render? }]. */\nexport function CollectionList({\n title, breadcrumbs, statusPill, actions, secondaryActions, overflow,\n columns = [], rows = [], rowKey = \"id\", rowLabel, caption,\n status = \"ready\", onRetry,\n search, onSearchChange, searchLabel = \"Search\", filters = [], onRemoveFilter, onClearFilters, filterPanel, filtersLabel = \"Filters\",\n selectable = false, selected = [], onSelectedChange, bulkActions,\n rowActions, rowActionsLabel = (name) => `Actions for ${name}`, selectRowLabel = (name) => `Select ${name}`, selectAllLabel = \"Select all on this page\",\n sort, onSortChange,\n page = 1, pageSize = 20, total, onPageChange, pageSizes, onPageSizeChange,\n empty, showResultsLabel = \"Show results\", className,\n}) {\n const root = useRef(null);\n const size = useSizeClass(root);\n const [panelOpen, setPanelOpen] = useState(false);\n const base = useId();\n const keyOf = (r) => r[rowKey];\n const nameOf = (r) => String(rowLabel ? rowLabel(r) : r[columns[0]?.key] ?? keyOf(r));\n const prio = priorityKeys(columns);\n const filtering = filters.length > 0 || Boolean(search);\n const state = status === \"empty\" && filtering ? \"no-results\" : status;\n const select = (r, on) => onSelectedChange?.(on ? [...selected, keyOf(r)] : selected.filter((k) => k !== keyOf(r)));\n const panelMode = sizeAtLeast(size, \"expanded\") ? \"inline\" : \"sheet\";\n\n const toggleSort = (c) => onSortChange?.(sort?.key === c.key && sort.dir === \"ascending\" ? { key: c.key, dir: \"descending\" } : { key: c.key, dir: \"ascending\" });\n const menu = (r) => {\n const items = rowActions?.(r);\n return items?.length ? <MenuButton icon=\"more\" variant=\"text\" size=\"sm\" align=\"end\" buttonLabel={rowActionsLabel(nameOf(r))} items={items} /> : null;\n };\n const check = (r, where) => (\n <label className=\"piq-collection__hit\">\n <input type=\"checkbox\" className=\"piq-check__box\" id={`${base}-${where}-${keyOf(r)}`} aria-label={selectRowLabel(nameOf(r))}\n checked={selected.includes(keyOf(r))} onChange={(e) => select(r, e.target.checked)} />\n </label>\n );\n\n const loadingRows = Math.min(pageSize, 50);\n let results;\n if (state === \"loading\") {\n results = (\n <div className=\"piq-collection__results\" aria-busy=\"true\">\n <ul className=\"piq-collection__items\" aria-hidden=\"true\">\n {Array.from({ length: loadingRows }, (_, i) => <li key={i} className=\"piq-collection__item\"><Skeleton lines={2} /></li>)}\n </ul>\n <div className=\"piq-collection__table-wrap\" aria-hidden=\"true\">\n {/* The loaded table's own header and cells, so rows arrive where the skeletons were. */}\n <table className=\"piq-table piq-collection__table\">\n <thead><tr>\n {selectable && <th className=\"piq-collection__select\"><span className=\"piq-collection__hit\"><input type=\"checkbox\" className=\"piq-check__box\" disabled tabIndex={-1} /></span></th>}\n {columns.map((c) => <th key={c.key} data-priority={prio.has(c.key)} className={c.numeric ? \"piq-num\" : undefined}>{c.label}</th>)}\n {rowActions && <th className=\"piq-collection__actions\" />}\n </tr></thead>\n <tbody>\n {Array.from({ length: loadingRows }, (_, i) => (\n <tr key={i}>\n {selectable && <td className=\"piq-collection__select\"><span className=\"piq-collection__hit\"><input type=\"checkbox\" className=\"piq-check__box\" disabled tabIndex={-1} /></span></td>}\n {columns.map((c) => <td key={c.key} data-priority={prio.has(c.key)}><Skeleton /></td>)}\n {rowActions && <td className=\"piq-collection__actions\"><Button variant=\"text\" size=\"sm\" disabled tabIndex={-1}><Icon name=\"more\" /></Button></td>}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n } else if (!READY.has(state)) {\n results = (\n <div className=\"piq-collection__results\">\n {state === \"empty\" && empty ? empty : <StatePanel kind={state} filters={filters} onClearFilters={onClearFilters} onRetry={onRetry} />}\n </div>\n );\n } else {\n results = (\n <div className=\"piq-collection__results\">\n {state === \"partial\" && <StatePanel kind=\"partial\" onRetry={onRetry} />}\n <ul className=\"piq-collection__items\" aria-label={caption ?? title}>\n {rows.map((r) => {\n const shown = columns.filter((c) => prio.has(c.key));\n return (\n <li key={keyOf(r)} className=\"piq-collection__item\" data-selected={selectable && selected.includes(keyOf(r)) ? \"\" : undefined}>\n {selectable && check(r, \"item\")}\n <div className=\"piq-collection__fields\">\n {shown.map((c, i) => (i === 0\n ? <p key={c.key} className=\"piq-collection__primary\">{cell(c, r)}</p>\n : <p key={c.key} className=\"piq-collection__field\"><span className=\"piq-visually-hidden\">{c.label}: </span>{cell(c, r)}</p>))}\n </div>\n {menu(r)}\n </li>\n );\n })}\n </ul>\n <div className=\"piq-collection__table-wrap\">\n <table className=\"piq-table piq-collection__table\">\n {(caption ?? title) && <caption className=\"piq-visually-hidden\">{caption ?? title}</caption>}\n <thead>\n <tr>\n {selectable && <th scope=\"col\" className=\"piq-collection__select\"><SelectAll rows={rows} keyOf={keyOf} selected={selected} onChange={(next) => onSelectedChange?.(next)} label={selectAllLabel} /></th>}\n {columns.map((c) => {\n const dir = sort?.key === c.key ? sort.dir : undefined;\n return (\n <th key={c.key} scope=\"col\" data-priority={prio.has(c.key)} className={c.numeric ? \"piq-num\" : undefined} aria-sort={c.sortable ? dir ?? \"none\" : undefined}>\n {c.sortable && onSortChange\n ? <button type=\"button\" className=\"piq-table__sort\" onClick={() => toggleSort(c)}>{c.label}<span className=\"piq-table__arrow\" aria-hidden=\"true\">{dir === \"descending\" ? \"↓\" : dir === \"ascending\" ? \"↑\" : \"↕\"}</span></button>\n : c.label}\n </th>\n );\n })}\n {rowActions && <th scope=\"col\" className=\"piq-collection__actions\"><span className=\"piq-visually-hidden\">Actions</span></th>}\n </tr>\n </thead>\n <tbody>\n {rows.map((r) => (\n <tr key={keyOf(r)} data-selected={selectable && selected.includes(keyOf(r)) ? \"\" : undefined}>\n {selectable && <td className=\"piq-collection__select\">{check(r, \"row\")}</td>}\n {columns.map((c) => <td key={c.key} data-priority={prio.has(c.key)} className={c.numeric ? \"piq-num\" : undefined}>{cell(c, r)}</td>)}\n {rowActions && <td className=\"piq-collection__actions\">{menu(r)}</td>}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {total > 0 && onPageChange && <Pagination page={page} pageSize={pageSize} total={total} onPageChange={onPageChange} pageSizes={pageSizes} onPageSizeChange={onPageSizeChange} />}\n </div>\n );\n }\n\n return (\n <div ref={root} className={`piq-collection${className ? ` ${className}` : \"\"}`} data-size={size}>\n <PageHeader title={title} breadcrumbs={breadcrumbs} status={statusPill} actions={actions} secondaryActions={secondaryActions} overflow={overflow} />\n <FilterBar search={search} onSearchChange={onSearchChange} searchLabel={searchLabel} filters={filters} onRemoveFilter={onRemoveFilter} onClearAll={onClearFilters}\n onOpenFilters={filterPanel ? () => setPanelOpen((o) => !o) : undefined} filtersOpen={filterPanel ? panelOpen : undefined} filtersLabel={filtersLabel} />\n <div className=\"piq-collection__body\" data-panel={panelOpen && panelMode === \"inline\" ? \"open\" : undefined}>\n {filterPanel && (\n <FilterPanel open={panelOpen} mode={panelMode} title={filtersLabel} onClose={() => setPanelOpen(false)}\n footer={panelMode === \"sheet\" ? <Button onClick={() => setPanelOpen(false)}>{showResultsLabel}</Button> : null}>\n {filterPanel}\n </FilterPanel>\n )}\n {results}\n </div>\n {/* After the list in reading order, so it can stick to the bottom of the screen. */}\n {selectable && (\n <BulkActionBar count={selected.length} onClearSelection={() => onSelectedChange?.([])}>{bulkActions}</BulkActionBar>\n )}\n </div>\n );\n}\n","import { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Skeleton } from \"../widgets/Loading.jsx\";\nimport { Tabs } from \"../widgets/Tabs.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { SplitView } from \"./Layout.jsx\";\nimport { PageHeader, StatePanel, sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\n/* A record's fields as label and value pairs, read only: two columns where it\n has room (from the medium size class), one where it has not. An item with\n wide spans both columns. items: [{ label, value, wide? }]. */\nexport function DescriptionList({ items = [], className, ...rest }) {\n return (\n <div className={`piq-description-list${className ? ` ${className}` : \"\"}`} {...rest}>\n <dl className=\"piq-description-list__grid\">\n {items.map((it, i) => (\n <div key={it.key ?? i} className=\"piq-description-list__item\" data-wide={it.wide || undefined}>\n <dt className=\"piq-description-list__label\">{it.label}</dt>\n <dd className=\"piq-description-list__value\">{it.value ?? \"—\"}</dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\nconst KIND = { comment: { icon: \"edit\", label: \"Comment\" }, change: { icon: \"refresh\", label: \"Change\" }, system: { icon: \"info\", label: \"System\" } };\nconst stamp = (t) => (t instanceof Date ? t : new Date(t));\n\n/* What has happened to a record, in time order (newest first unless order\n is oldest): who, what and when, each kind of event (comment, change or\n system) named in text and marked with its own icon, so colour is never the\n only signal. events: [{ id, kind, actor, action, time, body? }]. */\nexport function Timeline({ events = [], label = \"Activity\", order = \"newest\", kindLabels = {}, locale, className }) {\n const sorted = [...events].sort((a, b) => (order === \"oldest\" ? 1 : -1) * (stamp(a.time) - stamp(b.time)));\n const fmt = new Intl.DateTimeFormat(locale, { dateStyle: \"medium\", timeStyle: \"short\" });\n return (\n <section className={`piq-timeline${className ? ` ${className}` : \"\"}`} aria-label={label}>\n <ol className=\"piq-timeline__list\">\n {sorted.map((e, i) => {\n const k = KIND[e.kind] ?? KIND.system;\n const when = stamp(e.time);\n return (\n <li key={e.id ?? i} className=\"piq-timeline__event\" data-kind={e.kind}>\n <Icon name={k.icon} className=\"piq-timeline__mark\" />\n <div className=\"piq-timeline__content\">\n <p className=\"piq-timeline__line\">\n <span className=\"piq-timeline__kind\">{kindLabels[e.kind] ?? k.label}</span>\n <span className=\"piq-timeline__actor\">{e.actor}</span>\n <span className=\"piq-timeline__action\">{e.action}</span>\n </p>\n <time className=\"piq-timeline__time\" dateTime={when.toISOString()}>{fmt.format(when)}</time>\n {e.body && <div className=\"piq-timeline__body\">{e.body}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n </section>\n );\n}\n\n/* Tabs whose selection is kept in the page's URL (param), so a reload or a\n shared link opens the same tab. Tabs and their counts as for Tabs:\n [{ id, label, panel, count? }]. */\nexport function TabsSection({ tabs = [], param = \"tab\", label, defaultValue, onChange, className }) {\n const fromUrl = () => {\n if (typeof window === \"undefined\") return undefined;\n const v = new URLSearchParams(window.location.search).get(param);\n return tabs.some((t) => String(t.id) === v) ? tabs.find((t) => String(t.id) === v).id : undefined;\n };\n const [value, setValue] = useState(() => fromUrl() ?? defaultValue ?? tabs[0]?.id);\n useEffect(() => {\n const onPop = () => setValue(fromUrl() ?? defaultValue ?? tabs[0]?.id);\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n });\n const change = (id) => {\n setValue(id);\n const p = new URLSearchParams(window.location.search);\n p.set(param, id);\n window.history.replaceState(window.history.state, \"\", `${window.location.pathname}?${p}${window.location.hash}`);\n onChange?.(id);\n };\n return <Tabs className={`piq-tabs-section${className ? ` ${className}` : \"\"}`} tabs={tabs} value={value} onChange={change} label={label} />;\n}\n\n/* One record: its page header (title, status and actions), its fields, its\n tabs and its activity, which sits beside the rest from the expanded size\n class. status is ready, loading, empty (no record chosen), error,\n forbidden or not-found; each but ready and loading shows a state panel. A\n back slot (for ListDetail) goes above the header. */\nexport function RecordDetail({ title, statusPill, actions, secondaryActions, overflow, breadcrumbs, back, fields, tabs, tabsParam = \"tab\", tabsLabel, activity, activityLabel = \"Activity\", status = \"ready\", onRetry, emptyTitle = \"Choose a record\", emptyText = \"Select a record in the list to see it here.\", notFoundTitle = \"This record no longer exists\", children, className }) {\n if (status !== \"ready\" && status !== \"loading\") {\n const panel = {\n empty: <StatePanel kind=\"empty\" title={emptyTitle}><p>{emptyText}</p></StatePanel>,\n error: <StatePanel kind=\"error\" onRetry={onRetry} />,\n forbidden: <StatePanel kind=\"forbidden\" />,\n \"not-found\": <StatePanel kind=\"empty\" title={notFoundTitle}><p>It may have been deleted or moved.</p></StatePanel>,\n }[status] ?? <StatePanel kind=\"error\" onRetry={onRetry} />;\n return <div className={`piq-record${className ? ` ${className}` : \"\"}`} data-status={status}>{back}{panel}</div>;\n }\n if (status === \"loading\") {\n return (\n <div className={`piq-record${className ? ` ${className}` : \"\"}`} data-status=\"loading\" aria-busy=\"true\">\n {back}\n <Skeleton variant=\"rect\" height={40} />\n <Skeleton lines={6} />\n </div>\n );\n }\n return (\n <article className={`piq-record${className ? ` ${className}` : \"\"}`} data-status=\"ready\">\n {back}\n <PageHeader title={title} breadcrumbs={breadcrumbs} status={statusPill} actions={actions} secondaryActions={secondaryActions} overflow={overflow} />\n <div className=\"piq-record__body\" data-activity={activity ? \"\" : undefined}>\n <div className=\"piq-record__main\">\n {fields?.length ? <DescriptionList items={fields} /> : null}\n {tabs?.length ? <TabsSection tabs={tabs} param={tabsParam} label={tabsLabel ?? title} /> : null}\n {children}\n </div>\n {activity && <aside className=\"piq-record__aside\" aria-label={activityLabel}><Timeline events={activity} label={activityLabel} /></aside>}\n </div>\n </article>\n );\n}\n\n/* A list of records with the chosen record's detail: side by side from the\n expanded size class, where selection follows the arrow keys; below it the\n list first, and choosing a record (Enter, Space or a click) opens its\n detail as its own view with Back, which returns to the list on that\n record. When two panes become one, the pane holding focus is the one\n kept, so focus is never lost. The list is a listbox: items render as\n text, actions live in the detail. items: [{ id, ... }]; renderItem(item)\n draws one; selected is the chosen id; onSelect(id) chooses one. */\nexport function ListDetail({ items = [], selected, onSelect, renderItem = (it) => it.label ?? it.id, listLabel = \"Records\", detail, backLabel = \"Back\", ratio = \"1:2\", className }) {\n const root = useRef(null), list = useRef(null), detailRef = useRef(null);\n const size = useSizeClass(root);\n const wide = sizeAtLeast(size, \"expanded\");\n const [view, setView] = useState(selected != null ? \"detail\" : \"list\");\n const [focusId, setFocusId] = useState(selected ?? items[0]?.id);\n const base = useId();\n const index = items.findIndex((it) => it.id === focusId);\n\n const focusOption = useCallback((id) => {\n [...(list.current?.querySelectorAll('[role=\"option\"]') ?? [])].find((o) => o.dataset.id === String(id))?.focus();\n }, []);\n const open = (id) => {\n onSelect?.(id);\n setFocusId(id);\n if (!wide) {\n setView(\"detail\");\n requestAnimationFrame(() => detailRef.current?.focus());\n }\n };\n function onKey(e) {\n let next = null;\n if (e.key === \"ArrowDown\") next = Math.min(index + 1, items.length - 1);\n else if (e.key === \"ArrowUp\") next = Math.max(index - 1, 0);\n else if (e.key === \"Home\") next = 0;\n else if (e.key === \"End\") next = items.length - 1;\n else if ((e.key === \"Enter\" || e.key === \" \") && focusId != null) { e.preventDefault(); open(focusId); return; }\n if (next === null || next < 0) return;\n e.preventDefault();\n const id = items[next].id;\n setFocusId(id);\n focusOption(id);\n if (wide) onSelect?.(id); // selection follows focus when the detail is beside the list\n }\n const back = () => { setView(\"list\"); requestAnimationFrame(() => focusOption(selected ?? focusId)); };\n // Wherever focus is, that pane is the one a single-pane layout keeps (AC4).\n const track = (pane) => () => { if (wide) setView(pane); };\n\n useEffect(() => { if (selected != null) setFocusId(selected); }, [selected]);\n\n return (\n <div ref={root} className={`piq-list-detail${className ? ` ${className}` : \"\"}`} data-size={size}>\n <SplitView show={view === \"detail\" ? \"secondary\" : \"primary\"} ratio={ratio}\n primary={\n <div onFocus={track(\"list\")}>\n <ul ref={list} role=\"listbox\" aria-label={listLabel} className=\"piq-list-detail__list\" onKeyDown={onKey}>\n {items.map((it) => (\n <li key={it.id} id={`${base}-${it.id}`} role=\"option\" data-id={it.id} aria-selected={it.id === selected}\n tabIndex={it.id === (focusId ?? items[0]?.id) ? 0 : -1} className=\"piq-list-detail__option\"\n onClick={() => open(it.id)} onFocus={() => setFocusId(it.id)}>\n {renderItem(it)}\n </li>\n ))}\n </ul>\n </div>\n }\n secondary={\n <div ref={detailRef} tabIndex={-1} className=\"piq-list-detail__detail\" onFocus={track(\"detail\")}>\n <Button variant=\"text\" className=\"piq-list-detail__back\" onClick={back}><Icon name=\"arrow-left\" />{backLabel}</Button>\n {detail}\n </div>\n } />\n </div>\n );\n}\n","import { useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { Skeleton } from \"../widgets/Loading.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { PageHeader, StatePanel, sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\nconst DIRECTION = { up: { icon: \"arrow-right\", word: \"up\" }, down: { icon: \"arrow-right\", word: \"down\" }, flat: { icon: \"arrow-right\", word: \"no change\" } };\n\n/* One figure that matters: its label, its value and, optionally, its change\n (change: { direction: up, down or flat, amount, comparison }), written out\n in words (\"up 8% on August\") so direction never depends on colour or an\n icon. */\nexport function StatTile({ label, value, change, words = DIRECTION, className }) {\n const d = change ? words[change.direction] ?? words.flat : null;\n return (\n <section className={`piq-stat-tile${className ? ` ${className}` : \"\"}`} aria-label={label}>\n <p className=\"piq-stat-tile__label\">{label}</p>\n <p className=\"piq-stat-tile__value\">{value}</p>\n {change && (\n <p className=\"piq-stat-tile__change\" data-direction={change.direction}>\n <Icon name={d.icon} className=\"piq-stat-tile__arrow\" />\n <span>{[d.word, change.direction === \"flat\" ? null : change.amount, change.comparison].filter(Boolean).join(\" \")}</span>\n </p>\n )}\n </section>\n );\n}\n\n/* The frame around a chart the app draws: a title, a legend in text, the\n chart, and a data table with the same values behind a button, for keyboard\n and screen-reader users and anyone who wants the numbers. status is ready,\n loading, empty or error, shown in the chart's own space; error offers\n retry. table: { columns: [{ key, label, numeric? }], rows }. legend:\n [{ label, marker? }], where marker is the series' swatch from the chart. */\nexport function ChartFrame({ title, description, legend = [], table, status = \"ready\", onRetry, showTableLabel = \"Show data table\", hideTableLabel = \"Hide data table\", emptyTitle = \"No data for this period\", actions, children, className }) {\n const [open, setOpen] = useState(false);\n const id = useId();\n let body = children;\n if (status === \"loading\") body = <div className=\"piq-chart-frame__state\" aria-busy=\"true\"><Skeleton variant=\"rect\" height=\"100%\" /></div>;\n else if (status === \"empty\") body = <div className=\"piq-chart-frame__state\"><StatePanel kind=\"empty\" title={emptyTitle}><p>Try a different date range or filters.</p></StatePanel></div>;\n else if (status === \"error\") body = <div className=\"piq-chart-frame__state\"><StatePanel kind=\"error\" onRetry={onRetry} /></div>;\n return (\n <figure className={`piq-chart-frame${className ? ` ${className}` : \"\"}`} aria-labelledby={`${id}-title`} data-status={status}>\n <div className=\"piq-chart-frame__head\">\n <figcaption id={`${id}-title`} className=\"piq-chart-frame__title\">{title}</figcaption>\n {actions && <div className=\"piq-chart-frame__actions\">{actions}</div>}\n </div>\n {description && <p className=\"piq-chart-frame__description\">{description}</p>}\n <div className=\"piq-chart-frame__chart\">{body}</div>\n {status === \"ready\" && legend.length > 0 && (\n <ul className=\"piq-chart-frame__legend\" aria-label=\"Legend\">\n {legend.map((l, i) => <li key={i} className=\"piq-chart-frame__legend-item\">{l.marker}<span>{l.label}</span></li>)}\n </ul>\n )}\n {status === \"ready\" && table && (\n <div className=\"piq-chart-frame__data\">\n <Button variant=\"text\" size=\"sm\" aria-expanded={open} aria-controls={`${id}-table`} onClick={() => setOpen((o) => !o)}>{open ? hideTableLabel : showTableLabel}</Button>\n <div id={`${id}-table`} hidden={!open} className=\"piq-table-wrap\">\n <table className=\"piq-table\">\n <caption className=\"piq-visually-hidden\">{title}</caption>\n <thead><tr>{table.columns.map((c) => <th key={c.key} scope=\"col\" className={c.numeric ? \"piq-num\" : undefined}>{c.label}</th>)}</tr></thead>\n <tbody>{table.rows.map((r, i) => <tr key={i}>{table.columns.map((c) => <td key={c.key} className={c.numeric ? \"piq-num\" : undefined}>{r[c.key]}</td>)}</tr>)}</tbody>\n </table>\n </div>\n </div>\n )}\n </figure>\n );\n}\n\nconst when = (t, locale) => (t ? new Intl.DateTimeFormat(locale, { timeStyle: \"short\" }).format(t instanceof Date ? t : new Date(t)) : null);\n\n/* A dashboard: page-wide filters, the date range and when the data was last\n refreshed, above a grid of number tiles (two across at compact size, four\n from expanded) and a grid of charts (one, then two across). filters and\n dateRange are slots; tiles and charts are lists of elements. */\nexport function Dashboard({ title, breadcrumbs, actions, filters, dateRange, refreshedAt, refreshedLabel = \"Last refreshed\", locale, tiles = [], charts = [], children, className }) {\n const at = when(refreshedAt, locale);\n return (\n <div className={`piq-dashboard${className ? ` ${className}` : \"\"}`}>\n <PageHeader title={title} breadcrumbs={breadcrumbs} actions={actions} />\n {(filters || dateRange || at) && (\n <div className=\"piq-dashboard__toolbar\">\n {filters}\n {dateRange}\n {at && <p className=\"piq-dashboard__refreshed\">{refreshedLabel} <time dateTime={new Date(refreshedAt).toISOString()}>{at}</time></p>}\n </div>\n )}\n {tiles.length > 0 && <div className=\"piq-dashboard__tiles\">{tiles}</div>}\n {charts.length > 0 && <div className=\"piq-dashboard__charts\">{charts}</div>}\n {children}\n </div>\n );\n}\n\n/* A report: its parameters, a Run action, and the results with a summary of\n the parameters they were run with above them at every size. Parameters sit\n in a side panel from the expanded size class, in a panel that opens and\n closes at medium, and in a sheet at compact. Export and Print are always\n offered; the printed page carries only the report. applied: [{ label,\n value }]. */\nexport function ReportViewer({ title, breadcrumbs, parameters, onRun, runLabel = \"Run report\", parametersLabel = \"Parameters\", applied = [], appliedLabel = \"Run with\", results, status = \"ready\", onRetry, onExport, exportLabel = \"Export\", onPrint, printLabel = \"Print\", className }) {\n const root = useRef(null);\n const size = useSizeClass(root);\n const [open, setOpen] = useState(false);\n const id = useId();\n const mode = sizeAtLeast(size, \"expanded\") ? \"side\" : sizeAtLeast(size, \"medium\") ? \"collapsible\" : \"sheet\";\n const form = (\n <form className=\"piq-report__form\" onSubmit={(e) => { e.preventDefault(); setOpen(false); onRun?.(); }}>\n {parameters}\n <Button type=\"submit\">{runLabel}</Button>\n </form>\n );\n const print = () => (onPrint ? onPrint() : window.print());\n return (\n <div ref={root} className={`piq-report${className ? ` ${className}` : \"\"}`} data-mode={mode}>\n <PageHeader title={title} breadcrumbs={breadcrumbs}\n actions={<div className=\"piq-report__actions\">\n {mode !== \"side\" && <Button variant=\"secondary\" aria-expanded={open} aria-controls={mode === \"collapsible\" ? `${id}-params` : undefined} onClick={() => setOpen((o) => !o)}><Icon name=\"filter\" />{parametersLabel}</Button>}\n {onExport && <Button variant=\"secondary\" onClick={onExport}><Icon name=\"download\" />{exportLabel}</Button>}\n <Button variant=\"secondary\" onClick={print}>{printLabel}</Button>\n </div>} />\n <div className=\"piq-report__body\">\n {mode === \"side\" && <aside className=\"piq-report__params\" aria-label={parametersLabel}>{form}</aside>}\n {mode === \"collapsible\" && <section id={`${id}-params`} className=\"piq-report__params\" aria-label={parametersLabel} hidden={!open}>{form}</section>}\n {mode === \"sheet\" && <Sheet open={open} onClose={() => setOpen(false)} title={parametersLabel} side=\"full\">{form}</Sheet>}\n <div className=\"piq-report__results\">\n {applied.length > 0 && (\n <dl className=\"piq-report__applied\" aria-label={appliedLabel}>\n {applied.map((a, i) => <div key={i} className=\"piq-chip\"><dt>{a.label}:</dt><dd>{a.value}</dd></div>)}\n </dl>\n )}\n {status === \"ready\" ? results : status === \"loading\" ? <div aria-busy=\"true\"><Skeleton lines={8} /></div> : <StatePanel kind={status} onRetry={onRetry} />}\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { SplitView } from \"./Layout.jsx\";\nimport { PageHeader, StatePanel, sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\n/* A settings screen: section navigation beside the current section from\n the expanded size class; below it the list of sections first, and a\n chosen section on its own with a link back to the list. Sections swap in\n place, so the current one is marked aria-current=\"true\"; choosing one moves\n focus to its heading. A section the user may not use is left out (hidden)\n or shown disabled with its reason (disabled: \"reason\"); with none left the\n screen says the user has no access. Sections stay mounted, so typed input\n survives a change of layout. sections: [{ id, label, content, disabled?,\n hidden? }]. */\nexport function SettingsPage({ title = \"Settings\", breadcrumbs, sections = [], current, onChange, navLabel = \"Settings sections\", backLabel = \"All settings\", className }) {\n const root = useRef(null);\n const size = useSizeClass(root);\n const wide = sizeAtLeast(size, \"expanded\");\n const shown = sections.filter((s) => !s.hidden);\n const usable = shown.filter((s) => !s.disabled);\n const [own, setOwn] = useState(current ?? usable[0]?.id);\n const active = current ?? own;\n const [view, setView] = useState(\"list\");\n const base = useId();\n const headings = useRef({});\n\n // From expanded up the current section is open, so a narrower layout keeps it open (AC6).\n useEffect(() => { if (wide && active != null) setView(\"section\"); }, [wide, active]);\n\n const choose = (id) => {\n if (current === undefined) setOwn(id);\n onChange?.(id);\n setView(\"section\");\n requestAnimationFrame(() => headings.current[id]?.focus());\n };\n const back = () => { setView(\"list\"); requestAnimationFrame(() => root.current?.querySelector(`[data-section=\"${active}\"]`)?.focus()); };\n\n if (!usable.length) {\n return (\n <div ref={root} className={`piq-settings${className ? ` ${className}` : \"\"}`}>\n <PageHeader title={title} breadcrumbs={breadcrumbs} />\n <StatePanel kind=\"forbidden\" />\n </div>\n );\n }\n\n return (\n <div ref={root} className={`piq-settings${className ? ` ${className}` : \"\"}`} data-size={size}>\n <PageHeader title={title} breadcrumbs={breadcrumbs} />\n <SplitView show={view === \"section\" ? \"secondary\" : \"primary\"}\n primary={\n <nav aria-label={navLabel} className=\"piq-settings__nav\">\n <ul className=\"piq-primary-nav__list\">\n {shown.map((s) => (\n <li key={s.id} className=\"piq-primary-nav__item\">\n <button type=\"button\" data-section={s.id} className=\"piq-primary-nav__link\" aria-current={s.id === active ? \"true\" : undefined}\n aria-disabled={s.disabled ? \"true\" : undefined} aria-describedby={s.disabled ? `${base}-${s.id}-why` : undefined}\n onClick={() => !s.disabled && choose(s.id)}>\n <span className=\"piq-primary-nav__label\">{s.label}</span>\n {!s.disabled && <Icon name=\"chevron-right\" className=\"piq-settings__chevron\" />}\n </button>\n {s.disabled && <p id={`${base}-${s.id}-why`} className=\"piq-settings__why\">{typeof s.disabled === \"string\" ? s.disabled : \"Not available to you\"}</p>}\n </li>\n ))}\n </ul>\n </nav>\n }\n secondary={\n <div className=\"piq-settings__sections\">\n <Button variant=\"text\" className=\"piq-settings__back\" onClick={back}><Icon name=\"arrow-left\" />{backLabel}</Button>\n {usable.map((s) => (\n <section key={s.id} className=\"piq-settings__section\" aria-labelledby={`${base}-${s.id}-h`} hidden={s.id !== active}>\n <h2 id={`${base}-${s.id}-h`} tabIndex={-1} ref={(el) => { headings.current[s.id] = el; }} className=\"piq-settings__heading\">{s.label}</h2>\n {s.content}\n </section>\n ))}\n </div>\n } />\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { ProgressBar } from \"../widgets/Loading.jsx\";\nimport { ErrorSummary } from \"./Forms.jsx\";\nimport { DescriptionList } from \"./Record.jsx\";\n\nconst formData = (form) => {\n if (!form) return {};\n const out = {};\n // The form's own window's FormData, so it works in any realm (an iframe, a test DOM).\n const FD = form.ownerDocument?.defaultView?.FormData ?? FormData;\n for (const [k, v] of new FD(form)) out[k] = k in out ? [].concat(out[k], v) : v;\n return out;\n};\n\n/* A task in steps: \"Step 2 of 5: Title\" with a step list from the medium size\n class and a progress bar below it; each step is checked before moving on;\n going back keeps every answer (all steps stay in one form); Save draft\n gives the app what has been entered; the last step is the review. A step\n is { id, title, content, validate? }: content is a node or a function of\n { data, errors } (data holds every answer so far, so a later step can show\n an earlier one instead of asking again, WCAG 3.3.7); validate(data)\n returns { field: message } for what is wrong. review(data) draws the last\n step. Fields need name attributes. */\nexport function Wizard({ title, steps = [], review, onSaveDraft, onFinish, saveDraftLabel = \"Save draft\", backLabel = \"Back\", nextLabel = \"Continue\", finishLabel = \"Submit\", reviewTitle = \"Check your answers\", className }) {\n const all = review ? [...steps, { id: \"review\", title: reviewTitle, content: ({ data }) => review(data) }] : steps;\n const [at, setAt] = useState(0);\n const [errors, setErrors] = useState({});\n const [attempt, setAttempt] = useState(0);\n const [data, setData] = useState({});\n const form = useRef(null), heading = useRef(null);\n const base = useId();\n const step = all[at];\n const last = at === all.length - 1;\n\n const read = () => formData(form.current);\n const go = (to) => { setData(read()); setErrors({}); setAt(to); requestAnimationFrame(() => heading.current?.focus()); };\n function next(e) {\n e.preventDefault();\n const now = read();\n const problems = Object.fromEntries(Object.entries(step.validate?.(now) ?? {}).filter(([, m]) => m));\n if (Object.keys(problems).length) { setData(now); setErrors(problems); setAttempt((n) => n + 1); return; }\n if (last) { onFinish?.(now); return; }\n go(at + 1);\n }\n const idOf = (name) => form.current?.elements.namedItem(name)?.id ?? name;\n\n return (\n <form ref={form} className={`piq-wizard${className ? ` ${className}` : \"\"}`} noValidate onSubmit={next}>\n {title && <p className=\"piq-wizard__task\">{title}</p>}\n <ol className=\"piq-wizard__steps\" aria-label=\"Steps\">\n {all.map((s, i) => <li key={s.id} className=\"piq-wizard__step\" aria-current={i === at ? \"step\" : undefined} data-done={i < at || undefined}>{s.title}</li>)}\n </ol>\n <div className=\"piq-wizard__progress\"><ProgressBar label={`Step ${at + 1} of ${all.length}`} value={at + 1} max={all.length} valueText={`Step ${at + 1} of ${all.length}`} /></div>\n <h2 ref={heading} tabIndex={-1} className=\"piq-wizard__heading\" id={`${base}-h`}>{`Step ${at + 1} of ${all.length}: ${step?.title ?? \"\"}`}</h2>\n <ErrorSummary errors={errors} idOf={idOf} attempt={attempt} />\n {all.map((s, i) => (\n <section key={s.id} className=\"piq-wizard__panel\" hidden={i !== at} aria-labelledby={i === at ? `${base}-h` : undefined}>\n {typeof s.content === \"function\" ? s.content({ data, errors: i === at ? errors : {} }) : s.content}\n </section>\n ))}\n <div className=\"piq-wizard__actions\">\n <Button type=\"submit\" onClick={(e) => { e.preventDefault(); next(e); }}>{last ? finishLabel : nextLabel}</Button>\n {at > 0 && <Button variant=\"secondary\" onClick={() => go(at - 1)}>{backLabel}</Button>}\n {onSaveDraft && <Button variant=\"text\" onClick={() => onSaveDraft(read())}>{saveDraftLabel}</Button>}\n </div>\n </form>\n );\n}\n\nconst STATUS = { \"not-started\": \"Not started\", \"in-progress\": \"In progress\", completed: \"Completed\" };\n\n/* A long form in independent sections, done in any order: each section a\n link with its status in text, and how many are completed. sections:\n [{ id, label, href, status: not-started, in-progress or completed }]. */\nexport function TaskList({ title, sections = [], statusLabels = STATUS, completedText = (n, t) => `${n} of ${t} sections completed`, onSelect, className }) {\n const done = sections.filter((s) => s.status === \"completed\").length;\n return (\n <section className={`piq-task-list${className ? ` ${className}` : \"\"}`} aria-label={title}>\n {title && <h2 className=\"piq-task-list__title\">{title}</h2>}\n <p className=\"piq-task-list__count\">{completedText(done, sections.length)}</p>\n <ol className=\"piq-task-list__items\">\n {sections.map((s) => (\n <li key={s.id} className=\"piq-task-list__item\">\n <a href={s.href} onClick={(e) => { if (onSelect) { e.preventDefault(); onSelect(s.id, e); } }} aria-describedby={`${s.id}-status`}>{s.label}</a>\n <strong id={`${s.id}-status`} className=\"piq-task-list__status\" data-status={s.status}>{statusLabels[s.status] ?? s.status}</strong>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\n/* Answers before they are sent: grouped by section with a Change link to\n each, and what submitting will do said before the submit button (WCAG\n 3.3.4). Once the app reports the result, a confirmation panel shows it\n with its reference. sections: [{ id, title, answers: [{ label, value }],\n href }]; result: { title, reference, text }. */\nexport function ReviewConfirm({ title = \"Check your answers\", sections = [], consequence, submitLabel = \"Submit\", onSubmit, changeLabel = \"Change\", result, className }) {\n const panel = useRef(null);\n useEffect(() => { if (result) panel.current?.focus(); }, [result]);\n if (result) {\n return (\n <div ref={panel} tabIndex={-1} className={`piq-confirmation${className ? ` ${className}` : \"\"}`} role=\"status\">\n <h2 className=\"piq-confirmation__title\">{result.title}</h2>\n {result.reference && <p className=\"piq-confirmation__reference\">Reference <strong>{result.reference}</strong></p>}\n {result.text && <p className=\"piq-confirmation__text\">{result.text}</p>}\n </div>\n );\n }\n return (\n <div className={`piq-review${className ? ` ${className}` : \"\"}`}>\n <h2 className=\"piq-review__title\">{title}</h2>\n {sections.map((s) => (\n <section key={s.id} className=\"piq-review__section\" aria-labelledby={`${s.id}-review`}>\n <div className=\"piq-review__head\">\n <h3 id={`${s.id}-review`} className=\"piq-review__section-title\">{s.title}</h3>\n <a href={s.href} className=\"piq-review__change\">{changeLabel}<span className=\"piq-visually-hidden\"> {s.title}</span></a>\n </div>\n <DescriptionList items={s.answers} />\n </section>\n ))}\n {consequence && <p className=\"piq-review__consequence\">{consequence}</p>}\n <Button onClick={() => onSubmit?.()}>{submitLabel}</Button>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { TextField } from \"../widgets/Field.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\n/* Rows edited in place, like a spreadsheet: the WAI-ARIA Grid pattern. The\n grid is one stop in the Tab order; arrow keys, Home and End move between\n cells; Enter or F2 edits a cell, Enter commits and Escape discards; rows are\n added and removed; an error the app reports is tied to its cell; a totals\n row sums the numeric columns. Below the medium size class a row is edited\n in a sheet. columns: [{ key, label, numeric?, editable? }]; rows and\n onChange(rows) hold the data; errors: { [rowKey]: { [column]: message } }. */\nexport function EditableGrid({ label, columns = [], rows = [], rowKey = \"id\", onChange, errors = {}, newRow = () => ({}), addLabel = \"Add row\", removeLabel = (n) => `Remove row ${n}`, editLabel = (n) => `Edit row ${n}`, totalLabel = \"Total\", saveLabel = \"Save\", className }) {\n const root = useRef(null), grid = useRef(null);\n const size = useSizeClass(root);\n const narrow = !sizeAtLeast(size, \"medium\");\n const [pos, setPos] = useState({ r: 0, c: 0 });\n const [editing, setEditing] = useState(null); // { r, c, value }\n const [sheet, setSheet] = useState(null); // { r, values }\n const base = useId();\n const keyOf = (row, i) => row[rowKey] ?? i;\n const width = columns.length + 1; // the last column holds the remove button\n const numeric = columns.filter((c) => c.numeric);\n const sum = (k) => rows.reduce((t, row) => t + (Number(row[k]) || 0), 0);\n\n const target = (r, c) => {\n const cell = grid.current?.querySelector(`[data-r=\"${r}\"][data-c=\"${c}\"]`);\n return cell?.querySelector(\"button\") ?? cell;\n };\n const focusCell = (r, c) => requestAnimationFrame(() => target(r, c)?.focus());\n useEffect(() => { if (pos.r >= rows.length && rows.length) setPos({ r: rows.length - 1, c: pos.c }); }, [rows.length, pos]);\n\n const commit = () => {\n const { r, c, value } = editing;\n const col = columns[c];\n onChange?.(rows.map((row, i) => (i === r ? { ...row, [col.key]: col.numeric && value !== \"\" ? Number(value) : value } : row)));\n setEditing(null);\n focusCell(r, c);\n };\n function onKey(e) {\n if (editing) {\n if (e.key === \"Enter\") { e.preventDefault(); commit(); }\n else if (e.key === \"Escape\") { e.preventDefault(); const { r, c } = editing; setEditing(null); focusCell(r, c); }\n return;\n }\n const { r, c } = pos;\n const move = { ArrowRight: [0, 1], ArrowLeft: [0, -1], ArrowDown: [1, 0], ArrowUp: [-1, 0] }[e.key];\n if (move) {\n e.preventDefault();\n const to = { r: Math.min(Math.max(r + move[0], 0), rows.length - 1), c: Math.min(Math.max(c + move[1], 0), width - 1) };\n setPos(to); focusCell(to.r, to.c); return;\n }\n if (e.key === \"Home\" || e.key === \"End\") { e.preventDefault(); const to = { r, c: e.key === \"Home\" ? 0 : width - 1 }; setPos(to); focusCell(to.r, to.c); return; }\n if ((e.key === \"Enter\" || e.key === \"F2\") && c < columns.length) {\n e.preventDefault();\n if (narrow) { setSheet({ r, values: { ...rows[r] } }); return; }\n if (columns[c].editable === false) return;\n setEditing({ r, c, value: rows[r]?.[columns[c].key] ?? \"\" });\n }\n }\n const add = () => { const next = [...rows, newRow()]; onChange?.(next); setPos({ r: next.length - 1, c: 0 }); focusCell(next.length - 1, 0); };\n const remove = (r) => { onChange?.(rows.filter((_, i) => i !== r)); const to = { r: Math.max(0, r - 1), c: 0 }; setPos(to); if (rows.length > 1) focusCell(to.r, 0); };\n const saveSheet = () => { const { r, values } = sheet; onChange?.(rows.map((row, i) => (i === r ? values : row))); setSheet(null); focusCell(r, 0); };\n\n return (\n <div ref={root} className={`piq-grid-edit${className ? ` ${className}` : \"\"}`} data-size={size}>\n <div className=\"piq-table-wrap\">\n <table ref={grid} role=\"grid\" aria-label={label} className=\"piq-table piq-grid-edit__table\" onKeyDown={onKey}>\n <thead><tr>{columns.map((c) => <th key={c.key} scope=\"col\" className={c.numeric ? \"piq-num\" : undefined}>{c.label}</th>)}<th scope=\"col\"><span className=\"piq-visually-hidden\">Actions</span></th></tr></thead>\n <tbody>\n {rows.map((row, r) => (\n <tr key={keyOf(row, r)}>\n {columns.map((col, c) => {\n const err = errors[keyOf(row, r)]?.[col.key];\n const errId = `${base}-${r}-${c}-err`;\n const isEditing = editing?.r === r && editing?.c === c;\n return (\n <td key={col.key} role=\"gridcell\" data-r={r} data-c={c} tabIndex={pos.r === r && pos.c === c && !isEditing ? 0 : -1}\n aria-invalid={err ? \"true\" : undefined} aria-describedby={err ? errId : undefined} aria-readonly={col.editable === false ? \"true\" : undefined}\n className={`${col.numeric ? \"piq-num \" : \"\"}piq-grid-edit__cell`} onFocus={() => setPos({ r, c })}\n onDoubleClick={() => (narrow ? setSheet({ r, values: { ...row } }) : col.editable !== false && setEditing({ r, c, value: row[col.key] ?? \"\" }))}>\n {isEditing\n ? <input autoFocus aria-label={`${col.label}, row ${r + 1}`} className=\"piq-field__input piq-grid-edit__input\" inputMode={col.numeric ? \"decimal\" : undefined}\n value={editing.value} onChange={(e) => setEditing({ ...editing, value: e.target.value })} onBlur={() => editing && commit()} />\n : <span className=\"piq-grid-edit__value\">{row[col.key]}</span>}\n {err && <span id={errId} className=\"piq-field__error\">{err}</span>}\n </td>\n );\n })}\n <td role=\"gridcell\" data-r={r} data-c={columns.length} className=\"piq-grid-edit__row-actions\">\n {narrow && <Button variant=\"text\" size=\"sm\" tabIndex={-1} aria-label={editLabel(r + 1)} onClick={() => setSheet({ r, values: { ...row } })}><Icon name=\"edit\" /></Button>}\n <Button variant=\"text\" size=\"sm\" tabIndex={pos.r === r && pos.c === columns.length ? 0 : -1} aria-label={removeLabel(r + 1)} onClick={() => remove(r)} onFocus={() => setPos({ r, c: columns.length })}><Icon name=\"delete\" /></Button>\n </td>\n </tr>\n ))}\n </tbody>\n {numeric.length > 0 && (\n <tfoot>\n <tr className=\"piq-grid-edit__totals\">\n {columns.map((c, i) => <td key={c.key} className={c.numeric ? \"piq-num\" : undefined}>{c.numeric ? sum(c.key) : i === 0 ? <strong>{totalLabel}</strong> : null}</td>)}\n <td />\n </tr>\n </tfoot>\n )}\n </table>\n </div>\n <Button variant=\"secondary\" onClick={add}><Icon name=\"add\" />{addLabel}</Button>\n <Sheet open={!!sheet} onClose={() => { const r = sheet?.r; setSheet(null); if (r != null) focusCell(r, 0); }} title={sheet ? editLabel(sheet.r + 1) : \"\"} side=\"bottom\">\n {sheet && (\n <form className=\"piq-quick-edit\" onSubmit={(e) => { e.preventDefault(); saveSheet(); }}>\n {columns.filter((c) => c.editable !== false).map((c) => (\n <TextField key={c.key} label={c.label} inputMode={c.numeric ? \"decimal\" : undefined} value={sheet.values[c.key] ?? \"\"}\n onChange={(e) => setSheet({ ...sheet, values: { ...sheet.values, [c.key]: c.numeric && e.target.value !== \"\" ? Number(e.target.value) : e.target.value } })} />\n ))}\n <div className=\"piq-quick-edit__actions\"><Button type=\"submit\">{saveLabel}</Button></div>\n </form>\n )}\n </Sheet>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Switch } from \"../widgets/Choice.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { TextArea } from \"../widgets/Field.jsx\";\nimport { MenuButton } from \"../widgets/MenuButton.jsx\";\nimport { StatePanel } from \"./Regions.jsx\";\n\nconst SHORTCUTS = [[\"J\", \"Next item\", \"next\"], [\"K\", \"Previous item\", \"previous\"], [\"A\", \"Approve\", \"approve\"], [\"R\", \"Reject\", \"reject\"]];\n\n/* Work through items one at a time: the item, its position (\"3 of 12\"),\n previous and next, approve, reject (a comment is required) and assign.\n Single-key shortcuts (J, K, A, R) can be turned off and never fire while\n typing (WCAG 2.1.4); a help dialog lists them. With no items it says there\n is nothing to review. items: [{ id, title, content }]; index and\n onIndexChange hold the position; people: [{ id, label }] to assign to. */\nexport function WorkQueue({ items = [], index = 0, onIndexChange, onApprove, onReject, onAssign, people = [], title = \"Review queue\", emptyTitle = \"Nothing to review\", emptyText = \"New items will appear here.\", className }) {\n const [shortcuts, setShortcuts] = useState(true);\n const [rejecting, setRejecting] = useState(false);\n const [comment, setComment] = useState(\"\");\n const [tried, setTried] = useState(false);\n const [help, setHelp] = useState(false);\n const commentRef = useRef(null);\n const base = useId();\n const i = Math.min(Math.max(index, 0), Math.max(items.length - 1, 0));\n const item = items[i];\n const go = (to) => { if (to >= 0 && to < items.length) onIndexChange?.(to); };\n const act = { next: () => go(i + 1), previous: () => go(i - 1), approve: () => item && onApprove?.(item), reject: () => item && setRejecting(true) };\n\n useEffect(() => {\n if (!shortcuts || !item) return undefined;\n const onKey = (e) => {\n if (e.ctrlKey || e.metaKey || e.altKey || e.defaultPrevented) return;\n if (e.target.closest?.(\"input, textarea, select, [contenteditable], dialog[open]\")) return;\n const s = SHORTCUTS.find(([k]) => k.toLowerCase() === e.key.toLowerCase());\n if (s) { e.preventDefault(); act[s[2]](); }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n });\n\n if (!items.length) return <section className={`piq-queue${className ? ` ${className}` : \"\"}`} aria-label={title}><StatePanel kind=\"empty\" title={emptyTitle}><p>{emptyText}</p></StatePanel></section>;\n\n const submitReject = (e) => {\n e.preventDefault();\n setTried(true);\n if (!comment.trim()) { commentRef.current?.querySelector(\"textarea\")?.focus(); return; }\n onReject?.(item, comment.trim());\n setRejecting(false); setComment(\"\"); setTried(false);\n };\n\n return (\n <section className={`piq-queue${className ? ` ${className}` : \"\"}`} aria-label={title}>\n <div className=\"piq-queue__bar\">\n <p className=\"piq-queue__position\" aria-live=\"polite\">{`${i + 1} of ${items.length}`}</p>\n <div className=\"piq-queue__nav\">\n <Button variant=\"secondary\" size=\"sm\" disabled={i === 0} onClick={act.previous}>Previous</Button>\n <Button variant=\"secondary\" size=\"sm\" disabled={i === items.length - 1} onClick={act.next}>Next</Button>\n </div>\n <Button variant=\"text\" size=\"sm\" aria-haspopup=\"dialog\" onClick={() => setHelp(true)}>Keyboard shortcuts</Button>\n </div>\n <article className=\"piq-queue__item\" aria-labelledby={`${base}-t`}>\n <h2 id={`${base}-t`} className=\"piq-queue__title\">{item.title}</h2>\n {item.content}\n </article>\n <div className=\"piq-queue__actions\">\n <Button onClick={act.approve}>Approve</Button>\n <Button variant=\"secondary\" onClick={act.reject}>Reject</Button>\n {people.length > 0 && <MenuButton label=\"Assign\" items={people.map((p) => ({ label: p.label, onSelect: () => onAssign?.(item, p) }))} />}\n </div>\n <Dialog open={rejecting} onClose={() => { setRejecting(false); setTried(false); }} title={`Reject ${item.title}`}>\n <form className=\"piq-quick-edit\" noValidate onSubmit={submitReject}>\n <div ref={commentRef}>\n <TextArea label=\"Comment\" required aria-required=\"true\" value={comment} onChange={(e) => setComment(e.target.value)}\n hint=\"Say why, so the author can fix it.\" error={tried && !comment.trim() ? \"A comment is required to reject\" : undefined} />\n </div>\n <div className=\"piq-quick-edit__actions\"><Button type=\"submit\">Reject</Button><Button variant=\"secondary\" onClick={() => setRejecting(false)}>Cancel</Button></div>\n </form>\n </Dialog>\n <Dialog open={help} onClose={() => setHelp(false)} title=\"Keyboard shortcuts\" actions={<Button variant=\"secondary\" onClick={() => setHelp(false)}>Close</Button>}>\n <table className=\"piq-table piq-queue__keys\">\n <thead><tr><th scope=\"col\">Key</th><th scope=\"col\">Action</th></tr></thead>\n <tbody>{SHORTCUTS.map(([k, label]) => <tr key={k}><td><kbd>{k}</kbd></td><td>{label}</td></tr>)}</tbody>\n </table>\n <Switch label=\"Use single-key shortcuts\" checked={shortcuts} onChange={(e) => setShortcuts(e.target.checked)} />\n </Dialog>\n </section>\n );\n}\n","import { useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Checkbox, RadioGroup } from \"../widgets/Choice.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { Select } from \"../widgets/Field.jsx\";\nimport { ProgressBar } from \"../widgets/Loading.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\n\nconst STEPS = [\"Upload\", \"Map columns\", \"Validate\", \"Preview\", \"Import\"];\n\n/* Bringing records in from a file, in steps: upload (a button, and drop as\n an extra, WCAG 2.5.7), map each file column to a field, validation errors\n by row with a file of the failed rows, a preview of the rows to save, then\n the import and the app's result report. The app reads, checks and saves:\n onFile(file), onMap(mapping), onCommit(); it supplies columns, fields,\n errors ([{ row, message }]), failedRowsHref, preview ({ columns, rows }) and\n result (a node). */\nexport function ImportFlow({ title = \"Import records\", onFile, columns = [], fields = [], onMap, errors = [], failedRowsHref, preview, onCommit, result, accept = \".csv,.xlsx\", className }) {\n const [step, setStep] = useState(0);\n const [file, setFile] = useState(null);\n const [mapping, setMapping] = useState({});\n const [over, setOver] = useState(false);\n const input = useRef(null);\n const base = useId();\n const take = (f) => { if (!f) return; setFile(f); onFile?.(f); };\n const at = result ? STEPS.length : step;\n\n let body;\n if (result) body = <div className=\"piq-import__result\" role=\"status\">{result}</div>;\n else if (step === 0) {\n body = (\n <div className={`piq-import__drop${over ? \" is-over\" : \"\"}`} onDragOver={(e) => { e.preventDefault(); setOver(true); }} onDragLeave={() => setOver(false)}\n onDrop={(e) => { e.preventDefault(); setOver(false); take(e.dataTransfer?.files?.[0]); }}>\n <Icon name=\"upload\" />\n <input ref={input} id={`${base}-file`} type=\"file\" accept={accept} className=\"piq-visually-hidden\" onChange={(e) => take(e.target.files?.[0])} />\n <Button variant=\"secondary\" onClick={() => input.current?.click()}>Choose a file</Button>\n <p className=\"piq-import__hint\">or drop it here</p>\n {file && <p className=\"piq-import__file\">{file.name}</p>}\n </div>\n );\n } else if (step === 1) {\n body = (\n <div className=\"piq-import__mapping\">\n {columns.map((c) => (\n <Select key={c} label={`File column “${c}”`} placeholder=\"Choose a field\" value={mapping[c] ?? \"\"} options={[...fields, { value: \"__skip\", label: \"Don't import\" }]}\n onChange={(e) => setMapping({ ...mapping, [c]: e.target.value })} />\n ))}\n </div>\n );\n } else if (step === 2) {\n body = errors.length ? (\n <div className=\"piq-import__errors\">\n <p>{`${errors.length} ${errors.length === 1 ? \"row needs\" : \"rows need\"} fixing. They will be skipped unless you fix the file and upload it again.`}</p>\n <ul>{errors.map((e, i) => <li key={i}><strong>{`Row ${e.row}`}</strong>{`: ${e.message}`}</li>)}</ul>\n {failedRowsHref && <a className=\"piq-btn piq-btn--secondary\" href={failedRowsHref} download><Icon name=\"download\" />Download the failed rows</a>}\n </div>\n ) : <p>Every row is ready to import.</p>;\n } else if (step === 3 || step === 4) {\n body = preview ? (\n <div className=\"piq-table-wrap\">\n <table className=\"piq-table\"><caption className=\"piq-visually-hidden\">Rows to import</caption>\n <thead><tr>{preview.columns.map((c) => <th key={c.key} scope=\"col\">{c.label}</th>)}</tr></thead>\n <tbody>{preview.rows.map((r, i) => <tr key={i}>{preview.columns.map((c) => <td key={c.key}>{r[c.key]}</td>)}</tr>)}</tbody>\n </table>\n </div>\n ) : null;\n }\n\n const next = () => { if (step === 1) onMap?.(mapping); setStep(step + 1); };\n return (\n <section className={`piq-import${className ? ` ${className}` : \"\"}`} aria-labelledby={`${base}-h`}>\n <h2 id={`${base}-h`} className=\"piq-import__title\">{title}</h2>\n <ol className=\"piq-wizard__steps piq-import__steps\" aria-label=\"Steps\">\n {STEPS.map((s, i) => <li key={s} className=\"piq-wizard__step\" aria-current={i === at ? \"step\" : undefined} data-done={i < at || undefined}>{s}</li>)}\n </ol>\n {body}\n {!result && (\n <div className=\"piq-wizard__actions\">\n {step < 3 && <Button disabled={step === 0 && !file} onClick={next}>Continue</Button>}\n {step === 3 && <Button onClick={() => { setStep(4); onCommit?.(); }}>{`Import ${preview?.rows.length ?? \"\"} rows`.replace(\" \", \" \")}</Button>}\n {step > 0 && step < 4 && <Button variant=\"secondary\" onClick={() => setStep(step - 1)}>Back</Button>}\n </div>\n )}\n </section>\n );\n}\n\n/* Taking records out: a modal dialog to choose the format and the fields,\n then the export runs; a long one shows its progress outside the dialog, so\n the user can close it and keep working, and announces when the file is\n ready with a link to it. formats and fields: [{ value, label }];\n onExport({ format, fields }); progress (0-100 while running, else null);\n ready: { href, label }. */\nexport function ExportDialog({ open = false, onClose, title = \"Export\", formats = [], fields = [], onExport, progress = null, ready, exportLabel = \"Export\", className }) {\n const [format, setFormat] = useState(formats[0]?.value);\n const [chosen, setChosen] = useState(fields.map((f) => f.value));\n const toggle = (v, on) => setChosen((c) => (on ? [...c, v] : c.filter((x) => x !== v)));\n return (\n <>\n <Dialog open={open} onClose={onClose} title={title} className={className}\n actions={<><Button disabled={!chosen.length} onClick={() => onExport?.({ format, fields: chosen })}>{exportLabel}</Button><Button variant=\"secondary\" onClick={() => onClose?.()}>Close</Button></>}>\n <RadioGroup label=\"Format\" name=\"export-format\" options={formats} value={format} onChange={(v) => setFormat(v?.target ? v.target.value : v)} />\n <fieldset className=\"piq-export__fields\"><legend className=\"piq-field__label\">Fields</legend>\n {fields.map((f) => <Checkbox key={f.value} label={f.label} checked={chosen.includes(f.value)} onChange={(e) => toggle(f.value, e.target.checked)} />)}\n </fieldset>\n {progress != null && <ProgressBar label=\"Exporting\" value={progress} showValue />}\n </Dialog>\n <div className=\"piq-export__status\" role=\"status\">\n {progress != null && !open && <ProgressBar label=\"Exporting\" value={progress} showValue />}\n {ready && <p className=\"piq-export__ready\">Your export is ready. <a href={ready.href} download>{ready.label ?? \"Download it\"}</a></p>}\n </div>\n </>\n );\n}\n","import { useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { MenuButton } from \"../widgets/MenuButton.jsx\";\nimport { Tabs } from \"../widgets/Tabs.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { ConfirmDialog } from \"./Forms.jsx\";\nimport { sizeAtLeast, useSizeClass } from \"./Regions.jsx\";\n\n/* Records grouped by status in columns, each headed with its count. A card\n moves by dragging it to a column or by its \"Move to\" menu, so dragging is\n never the only way (WCAG 2.5.7). Below the medium size class one column\n shows at a time, with tabs to switch. columns: [{ id, title }]; cards:\n [{ id, title, status, content? }]; onMove(card, status). */\nexport function Board({ label, columns = [], cards = [], onMove, moveLabel = \"Move to\", className }) {\n const root = useRef(null);\n const size = useSizeClass(root);\n const [dragging, setDragging] = useState(null);\n const of = (id) => cards.filter((c) => c.status === id);\n const heading = (col) => `${col.title} (${of(col.id).length})`;\n\n const card = (c) => (\n <li key={c.id} className=\"piq-board__card\" draggable onDragStart={(e) => { setDragging(c.id); e.dataTransfer?.setData(\"text/plain\", c.id); }} onDragEnd={() => setDragging(null)}>\n <p className=\"piq-board__card-title\">{c.title}</p>\n {c.content}\n <MenuButton label={moveLabel} size=\"sm\" variant=\"text\" buttonLabel={`${moveLabel}: ${c.title}`}\n items={columns.filter((x) => x.id !== c.status).map((x) => ({ label: x.title, onSelect: () => onMove?.(c, x.id) }))} />\n </li>\n );\n const column = (col, withHeading = true) => (\n <section key={col.id} className=\"piq-board__column\" aria-label={heading(col)}\n onDragOver={(e) => e.preventDefault()} onDrop={(e) => { e.preventDefault(); const id = e.dataTransfer?.getData(\"text/plain\") || dragging; const c = cards.find((x) => x.id === id); if (c && c.status !== col.id) onMove?.(c, col.id); setDragging(null); }}>\n {withHeading && <h3 className=\"piq-board__heading\">{heading(col)}</h3>}\n <ul className=\"piq-board__cards\">{of(col.id).map(card)}</ul>\n </section>\n );\n\n return (\n <div ref={root} className={`piq-board${className ? ` ${className}` : \"\"}`} role=\"region\" aria-label={label} data-size={size}>\n {sizeAtLeast(size, \"medium\")\n ? <div className=\"piq-board__columns\">{columns.map((c) => column(c))}</div>\n : <Tabs label={label} tabs={columns.map((c) => ({ id: c.id, label: c.title, count: of(c.id).length, panel: column(c, false) }))} />}\n </div>\n );\n}\n\nconst day = (d) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nconst same = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\nconst addDays = (d, n) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);\nconst iso = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}-${String(d.getDate()).padStart(2, \"0\")}`;\n\n/* Events in time: month, week and day views from a view switch. The month\n is a grid of days that the arrow keys move through (WAI-ARIA Grid); every\n event is named in text with its time. Below the medium size class it is\n an agenda list grouped by date. events: [{ id, title, start }] (start a\n date or ISO string); date is the day in view; view and onViewChange\n (month, week or day). */\nexport function Calendar({ label = \"Calendar\", events = [], date = new Date(), view: viewProp, onViewChange, locale, className }) {\n const root = useRef(null), grid = useRef(null);\n const size = useSizeClass(root);\n const [ownView, setOwnView] = useState(\"month\");\n const view = viewProp ?? ownView;\n const anchor = day(new Date(date));\n const [focus, setFocus] = useState(anchor);\n const base = useId();\n const time = new Intl.DateTimeFormat(locale, { hour: \"2-digit\", minute: \"2-digit\" });\n const longDay = new Intl.DateTimeFormat(locale, { weekday: \"long\", day: \"numeric\", month: \"long\" });\n const weekday = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n const evs = events.map((e) => ({ ...e, at: new Date(e.start) })).sort((a, b) => a.at - b.at);\n const on = (d) => evs.filter((e) => same(e.at, d));\n const item = (e) => <li key={e.id} className=\"piq-calendar__event\"><time dateTime={e.at.toISOString()}>{time.format(e.at)}</time> {e.title}</li>;\n const setView = (v) => { if (viewProp === undefined) setOwnView(v); onViewChange?.(v); };\n\n if (!sizeAtLeast(size, \"medium\")) {\n const dates = [...new Set(evs.map((e) => iso(e.at)))];\n return (\n <section ref={root} className={`piq-calendar piq-calendar--agenda${className ? ` ${className}` : \"\"}`} aria-label={label} data-size={size}>\n {dates.map((d) => { const dt = new Date(`${d}T00:00`); return (\n <div key={d} className=\"piq-calendar__agenda-day\"><h3 className=\"piq-calendar__date\">{longDay.format(dt)}</h3><ul className=\"piq-calendar__events\">{on(dt).map(item)}</ul></div>\n ); })}\n </section>\n );\n }\n\n const first = new Date(anchor.getFullYear(), anchor.getMonth(), 1);\n const start = addDays(first, -((first.getDay() + 6) % 7)); // weeks start on Monday\n const weeks = Array.from({ length: 6 }, (_, w) => Array.from({ length: 7 }, (_, d) => addDays(start, w * 7 + d)));\n const focusDay = (d) => { setFocus(d); requestAnimationFrame(() => grid.current?.querySelector(`[data-date=\"${iso(d)}\"]`)?.focus()); };\n function onKey(e) {\n const step = { ArrowRight: 1, ArrowLeft: -1, ArrowDown: 7, ArrowUp: -7 }[e.key];\n if (step) { e.preventDefault(); focusDay(addDays(focus, step)); }\n else if (e.key === \"Home\") { e.preventDefault(); focusDay(addDays(focus, -((focus.getDay() + 6) % 7))); }\n else if (e.key === \"End\") { e.preventDefault(); focusDay(addDays(focus, 6 - ((focus.getDay() + 6) % 7))); }\n }\n const weekStart = addDays(anchor, -((anchor.getDay() + 6) % 7));\n return (\n <section ref={root} className={`piq-calendar${className ? ` ${className}` : \"\"}`} aria-label={label} data-size={size}>\n <div className=\"piq-calendar__views\" role=\"radiogroup\" aria-label=\"View\">\n {[\"month\", \"week\", \"day\"].map((v) => <button key={v} type=\"button\" role=\"radio\" aria-checked={view === v} className=\"piq-calendar__view\" onClick={() => setView(v)}>{v[0].toUpperCase() + v.slice(1)}</button>)}\n </div>\n {view === \"month\" && (\n <table ref={grid} role=\"grid\" aria-label={new Intl.DateTimeFormat(locale, { month: \"long\", year: \"numeric\" }).format(anchor)} className=\"piq-calendar__month\" onKeyDown={onKey}>\n <thead><tr>{weeks[0].map((d) => <th key={iso(d)} scope=\"col\">{weekday.format(d)}</th>)}</tr></thead>\n <tbody>\n {weeks.map((w, i) => (\n <tr key={i}>{w.map((d) => (\n <td key={iso(d)} role=\"gridcell\" data-date={iso(d)} tabIndex={same(d, focus) ? 0 : -1} aria-label={longDay.format(d)} data-outside={d.getMonth() !== anchor.getMonth() || undefined}\n className=\"piq-calendar__day\" onFocus={() => setFocus(d)}>\n <span className=\"piq-calendar__number\" aria-hidden=\"true\">{d.getDate()}</span>\n <ul className=\"piq-calendar__events\">{on(d).map(item)}</ul>\n </td>\n ))}</tr>\n ))}\n </tbody>\n </table>\n )}\n {view === \"week\" && (\n <ol className=\"piq-calendar__week\" aria-label={`Week of ${longDay.format(weekStart)}`}>\n {Array.from({ length: 7 }, (_, i) => addDays(weekStart, i)).map((d) => <li key={iso(d)} className=\"piq-calendar__week-day\"><h3 className=\"piq-calendar__date\">{longDay.format(d)}</h3><ul className=\"piq-calendar__events\">{on(d).map(item)}</ul></li>)}\n </ol>\n )}\n {view === \"day\" && (\n <div className=\"piq-calendar__single\" id={`${base}-day`}><h3 className=\"piq-calendar__date\">{longDay.format(anchor)}</h3><ul className=\"piq-calendar__events\">{on(anchor).map(item)}</ul></div>\n )}\n </section>\n );\n}\n\nconst sizeText = (n) => (n >= 1048576 ? `${(n / 1048576).toFixed(1)} MB` : n >= 1024 ? `${Math.round(n / 1024)} KB` : `${n} B`);\n\n/* A record's files: upload by a button, or by dropping a file as an extra\n (WCAG 2.5.7); each file with its name (a link to it), type, size and\n version; removing one is confirmed. files: [{ id, name, href, type, size,\n version }]; onUpload(file); onRemove(file). */\nexport function Attachments({ label = \"Attachments\", files = [], onUpload, onRemove, accept, uploadLabel = \"Upload a file\", className }) {\n const input = useRef(null);\n const [over, setOver] = useState(false);\n const [removing, setRemoving] = useState(null);\n return (\n <section className={`piq-attachments${className ? ` ${className}` : \"\"}`} aria-label={label}\n onDragOver={(e) => { e.preventDefault(); setOver(true); }} onDragLeave={() => setOver(false)}\n onDrop={(e) => { e.preventDefault(); setOver(false); const f = e.dataTransfer?.files?.[0]; if (f) onUpload?.(f); }} data-over={over || undefined}>\n <div className=\"piq-attachments__bar\">\n <input ref={input} type=\"file\" accept={accept} className=\"piq-visually-hidden\" tabIndex={-1} aria-hidden=\"true\" onChange={(e) => { const f = e.target.files?.[0]; if (f) onUpload?.(f); e.target.value = \"\"; }} />\n <Button variant=\"secondary\" onClick={() => input.current?.click()}><Icon name=\"upload\" />{uploadLabel}</Button>\n <span className=\"piq-attachments__hint\">or drop a file here</span>\n </div>\n <div className=\"piq-table-wrap\">\n <table className=\"piq-table piq-attachments__list\">\n <caption className=\"piq-visually-hidden\">{label}</caption>\n <thead><tr><th scope=\"col\">Name</th><th scope=\"col\">Type</th><th scope=\"col\" className=\"piq-num\">Size</th><th scope=\"col\">Version</th><th scope=\"col\"><span className=\"piq-visually-hidden\">Actions</span></th></tr></thead>\n <tbody>\n {files.map((f) => (\n <tr key={f.id}>\n <td><a href={f.href}>{f.name}</a></td><td>{f.type}</td><td className=\"piq-num\">{sizeText(f.size ?? 0)}</td><td>{f.version}</td>\n <td><Button variant=\"text\" size=\"sm\" aria-label={`Remove ${f.name}`} onClick={() => setRemoving(f)}><Icon name=\"delete\" /></Button></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <ConfirmDialog open={!!removing} objectName={removing?.name} title={removing ? `Remove ${removing.name}?` : \"\"} confirmLabel=\"Remove\"\n consequence=\"The file is removed from this record for everyone.\" onCancel={() => setRemoving(null)} onConfirm={() => { onRemove?.(removing); setRemoving(null); }} />\n </section>\n );\n}\n","import { Fragment, useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Checkbox, RadioGroup } from \"../widgets/Choice.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { TextField } from \"../widgets/Field.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { ConfirmDialog } from \"./Forms.jsx\";\n\n/* The path of a drill-down kept in the page's URL (param), one history\n entry per level, so a link opens the same level and Back returns to the\n one before. Returns { path, drill(id), goTo(index) }; path is the list of\n level ids. */\nexport function useDrillPath({ param = \"drill\" } = {}) {\n const read = () => { const v = new URLSearchParams(window.location.search).get(param); return v ? v.split(\"/\") : []; };\n const [path, setPath] = useState(read);\n useEffect(() => { const on = () => setPath(read()); window.addEventListener(\"popstate\", on); return () => window.removeEventListener(\"popstate\", on); }, [param]);\n const write = (next) => {\n const p = new URLSearchParams(window.location.search);\n if (next.length) p.set(param, next.join(\"/\")); else p.delete(param);\n window.history.pushState({ [param]: next }, \"\", `${window.location.pathname}${p.toString() ? `?${p}` : \"\"}${window.location.hash}`);\n setPath(next);\n };\n return { path, drill: (id) => write([...path, id]), goTo: (i) => write(path.slice(0, i)) };\n}\n\n/* A drill-down's trail: the summary, then each applied level, the current\n one marked; choosing an earlier one goes back to it. trail: [{ label }]\n from the summary to the current level; onSelect(index). */\nexport function DrillDown({ trail = [], onSelect, label = \"Drill-down\", children, className }) {\n return (\n <section className={`piq-drill${className ? ` ${className}` : \"\"}`} aria-label={label}>\n <nav aria-label=\"Levels\" className=\"piq-breadcrumbs\">\n <ol className=\"piq-breadcrumbs__list piq-drill__trail\">\n {trail.map((t, i) => (\n <li key={i} className=\"piq-breadcrumbs__item\">\n {i === trail.length - 1 ? <span aria-current=\"location\">{t.label}</span> : <a href=\"#\" onClick={(e) => { e.preventDefault(); onSelect?.(i); }}>{t.label}</a>}\n </li>\n ))}\n </ol>\n </nav>\n {children}\n </section>\n );\n}\n\n/* A figure now against before (or a target): both values, the difference\n with its sign, and the direction in words (\"down 8% on last quarter\"), so\n it never depends on colour (WCAG 1.4.1). format(n) writes a value. */\nexport function PeriodComparison({ label, current, previous, comparison = \"on the previous period\", format = (n) => String(n), currentLabel = \"This period\", previousLabel = \"Previous\", className }) {\n const diff = current - previous;\n const pct = previous ? Math.round((Math.abs(diff) / Math.abs(previous)) * 100) : null;\n const words = diff === 0 ? `no change ${comparison}` : `${diff > 0 ? \"up\" : \"down\"}${pct != null ? ` ${pct}%` : \"\"} ${comparison}`;\n return (\n <section className={`piq-comparison${className ? ` ${className}` : \"\"}`} aria-label={label}>\n <p className=\"piq-comparison__label\">{label}</p>\n <dl className=\"piq-comparison__values\">\n <div><dt>{currentLabel}</dt><dd className=\"piq-comparison__current\">{format(current)}</dd></div>\n <div><dt>{previousLabel}</dt><dd>{format(previous)}</dd></div>\n <div><dt>Difference</dt><dd className=\"piq-comparison__diff\">{`${diff > 0 ? \"+\" : diff < 0 ? \"−\" : \"±\"}${format(Math.abs(diff))}`}</dd></div>\n </dl>\n <p className=\"piq-comparison__words\" data-direction={diff > 0 ? \"up\" : diff < 0 ? \"down\" : \"flat\"}><Icon name=\"arrow-right\" className=\"piq-comparison__arrow\" />{words}</p>\n </section>\n );\n}\n\n/* A report laid out for paper: a header with the title, the logo and the\n run date on the first page; each section from a new page; table headers\n repeat; navigation and actions are left out. While printing, the theme is\n switched to its light appearance and back afterwards. sections: [{ id,\n title, content }]. */\nexport function PrintLayout({ title, logo, runDate, locale, sections = [], children, className }) {\n const root = useRef(null);\n useEffect(() => {\n let host = null, before = null;\n const toLight = () => { host = root.current?.closest(\"[data-theme]\") ?? document.documentElement; before = host.getAttribute(\"data-appearance\"); host.setAttribute(\"data-appearance\", \"light\"); };\n const back = () => { if (!host) return; if (before == null) host.removeAttribute(\"data-appearance\"); else host.setAttribute(\"data-appearance\", before); host = null; };\n window.addEventListener(\"beforeprint\", toLight);\n window.addEventListener(\"afterprint\", back);\n return () => { window.removeEventListener(\"beforeprint\", toLight); window.removeEventListener(\"afterprint\", back); };\n }, []);\n const when = runDate ? new Intl.DateTimeFormat(locale, { dateStyle: \"long\", timeStyle: \"short\" }).format(new Date(runDate)) : null;\n return (\n <article ref={root} className={`piq-print${className ? ` ${className}` : \"\"}`}>\n <header className=\"piq-print__header\">\n {logo && <div className=\"piq-print__logo\">{logo}</div>}\n <h1 className=\"piq-print__title\">{title}</h1>\n {when && <p className=\"piq-print__date\">Run <time dateTime={new Date(runDate).toISOString()}>{when}</time></p>}\n </header>\n {sections.map((s) => <section key={s.id} className=\"piq-print__section\" aria-label={s.title}><h2 className=\"piq-print__section-title\">{s.title}</h2>{s.content}</section>)}\n {children}\n </article>\n );\n}\n\n/* Rows by columns with subtotals and a grand total, the row groups opening\n and closing: the WAI-ARIA Treegrid pattern. Right opens a group (or moves\n into it), Left closes it (or moves to its group), Up and Down move between\n visible rows. groups: [{ id, label, rows: [{ id, label }] }]; columns:\n [{ key, label }]; value(rowId, key) gives a cell's number. */\nexport function PivotTable({ label, groups = [], columns = [], value = () => 0, format = (n) => String(n), totalLabel = \"Total\", className }) {\n const [open, setOpen] = useState({});\n const [focus, setFocus] = useState(groups[0]?.id);\n const body = useRef(null);\n const sum = (ids, k) => ids.reduce((t, id) => t + (Number(value(id, k)) || 0), 0);\n const visible = groups.flatMap((g) => [{ id: g.id, group: g }, ...(open[g.id] ? g.rows.map((r) => ({ id: r.id, row: r, parent: g.id })) : [])]);\n const focusRow = (id) => { setFocus(id); requestAnimationFrame(() => body.current?.querySelector(`[data-row=\"${id}\"]`)?.focus()); };\n function onKey(e) {\n const i = visible.findIndex((v) => v.id === focus);\n const v = visible[i];\n if (!v) return;\n if (e.key === \"ArrowDown\" && i < visible.length - 1) { e.preventDefault(); focusRow(visible[i + 1].id); }\n else if (e.key === \"ArrowUp\" && i > 0) { e.preventDefault(); focusRow(visible[i - 1].id); }\n else if (e.key === \"ArrowRight\" && v.group) { e.preventDefault(); if (!open[v.id]) setOpen({ ...open, [v.id]: true }); else if (v.group.rows[0]) focusRow(v.group.rows[0].id); }\n else if (e.key === \"ArrowLeft\") { e.preventDefault(); if (v.group && open[v.id]) setOpen({ ...open, [v.id]: false }); else if (v.parent) focusRow(v.parent); }\n }\n const all = groups.flatMap((g) => g.rows.map((r) => r.id));\n return (\n <div className=\"piq-table-wrap\">\n <table role=\"treegrid\" aria-label={label} className={`piq-table piq-pivot${className ? ` ${className}` : \"\"}`}>\n <thead><tr><th scope=\"col\"><span className=\"piq-visually-hidden\">Row</span></th>{columns.map((c) => <th key={c.key} scope=\"col\" className=\"piq-num\">{c.label}</th>)}<th scope=\"col\" className=\"piq-num\">{totalLabel}</th></tr></thead>\n <tbody ref={body} onKeyDown={onKey}>\n {groups.map((g) => {\n const ids = g.rows.map((r) => r.id);\n return (\n <Fragment key={g.id}>\n <tr data-row={g.id} aria-level={1} aria-expanded={!!open[g.id]} tabIndex={focus === g.id ? 0 : -1} className=\"piq-pivot__group\" onFocus={() => setFocus(g.id)} onClick={() => setOpen({ ...open, [g.id]: !open[g.id] })}>\n <th scope=\"row\" role=\"rowheader\"><Icon name={open[g.id] ? \"chevron-down\" : \"chevron-right\"} className=\"piq-pivot__toggle\" />{g.label} <span className=\"piq-pivot__subtotal\">subtotal</span></th>\n {columns.map((c) => <td key={c.key} role=\"gridcell\" className=\"piq-num\">{format(sum(ids, c.key))}</td>)}\n <td role=\"gridcell\" className=\"piq-num\">{format(columns.reduce((t, c) => t + sum(ids, c.key), 0))}</td>\n </tr>\n {open[g.id] && g.rows.map((r) => (\n <tr key={r.id} data-row={r.id} aria-level={2} tabIndex={focus === r.id ? 0 : -1} className=\"piq-pivot__row\" onFocus={() => setFocus(r.id)}>\n <th scope=\"row\" role=\"rowheader\" className=\"piq-pivot__child\">{r.label}</th>\n {columns.map((c) => <td key={c.key} role=\"gridcell\" className=\"piq-num\">{format(Number(value(r.id, c.key)) || 0)}</td>)}\n <td role=\"gridcell\" className=\"piq-num\">{format(columns.reduce((t, c) => t + (Number(value(r.id, c.key)) || 0), 0))}</td>\n </tr>\n ))}\n </Fragment>\n );\n })}\n </tbody>\n <tfoot><tr className=\"piq-pivot__total\"><th scope=\"row\">{totalLabel}</th>{columns.map((c) => <td key={c.key} className=\"piq-num\">{format(sum(all, c.key))}</td>)}<td className=\"piq-num\">{format(columns.reduce((t, c) => t + sum(all, c.key), 0))}</td></tr></tfoot>\n </table>\n </div>\n );\n}\n\n/* Making a report: choose measures and groupings, see a preview table as\n you choose (groupings as rows, measures as columns), and save it with a\n name. measures and groupings: [{ value, label }]; preview(choice) returns\n the preview's rows; onSave({ name, measures, groupings }). */\nexport function ReportBuilder({ measures = [], groupings = [], preview = () => [], onSave, saveLabel = \"Save report\", className }) {\n const [m, setM] = useState([]);\n const [g, setG] = useState([]);\n const [name, setName] = useState(\"\");\n const [tried, setTried] = useState(false);\n const toggle = (set, v, on) => set((x) => (on ? [...x, v] : x.filter((y) => y !== v)));\n const cols = [...groupings.filter((x) => g.includes(x.value)), ...measures.filter((x) => m.includes(x.value))];\n const rows = cols.length ? preview({ measures: m, groupings: g }) : [];\n const save = (e) => { e.preventDefault(); setTried(true); if (!name.trim()) return; onSave?.({ name: name.trim(), measures: m, groupings: g }); };\n return (\n <form className={`piq-report-builder${className ? ` ${className}` : \"\"}`} noValidate onSubmit={save}>\n <div className=\"piq-report-builder__choices\">\n <fieldset className=\"piq-export__fields\"><legend className=\"piq-field__label\">Measures</legend>{measures.map((x) => <Checkbox key={x.value} label={x.label} checked={m.includes(x.value)} onChange={(e) => toggle(setM, x.value, e.target.checked)} />)}</fieldset>\n <fieldset className=\"piq-export__fields\"><legend className=\"piq-field__label\">Group by</legend>{groupings.map((x) => <Checkbox key={x.value} label={x.label} checked={g.includes(x.value)} onChange={(e) => toggle(setG, x.value, e.target.checked)} />)}</fieldset>\n </div>\n <div className=\"piq-table-wrap\" aria-live=\"polite\">\n <table className=\"piq-table piq-report-builder__preview\"><caption className=\"piq-visually-hidden\">Preview</caption>\n <thead><tr>{cols.map((c) => <th key={c.value} scope=\"col\">{c.label}</th>)}</tr></thead>\n <tbody>{rows.map((r, i) => <tr key={i}>{cols.map((c) => <td key={c.value}>{r[c.value]}</td>)}</tr>)}</tbody>\n </table>\n </div>\n <TextField label=\"Report name\" required aria-required=\"true\" value={name} onChange={(e) => setName(e.target.value)} error={tried && !name.trim() ? \"Enter a name for the report\" : undefined} />\n <div className=\"piq-wizard__actions\"><Button type=\"submit\">{saveLabel}</Button></div>\n </form>\n );\n}\n\n/* A report's scheduled deliveries and alerts: each with its frequency or\n threshold and its recipients; add one, pause one (\"Paused\" in text), or\n delete one after confirmation. items: [{ id, kind: delivery or alert,\n name, frequency?, threshold?, recipients: [], paused? }]; onAdd(item),\n onPause(item), onDelete(item). */\nexport function Subscriptions({ items = [], onAdd, onPause, onDelete, title = \"Subscriptions\", className }) {\n const [adding, setAdding] = useState(false);\n const [deleting, setDeleting] = useState(null);\n const [draft, setDraft] = useState({ kind: \"delivery\", name: \"\", frequency: \"Weekly\", threshold: \"\", recipients: \"\" });\n const base = useId();\n const add = (e) => {\n e.preventDefault();\n const { kind, name, frequency, threshold, recipients } = draft;\n onAdd?.({ kind, name, ...(kind === \"delivery\" ? { frequency } : { threshold }), recipients: recipients.split(\",\").map((r) => r.trim()).filter(Boolean) });\n setAdding(false);\n };\n return (\n <section className={`piq-subscriptions${className ? ` ${className}` : \"\"}`} aria-labelledby={`${base}-h`}>\n <div className=\"piq-subscriptions__head\"><h2 id={`${base}-h`} className=\"piq-import__title\">{title}</h2><Button variant=\"secondary\" onClick={() => setAdding(true)}><Icon name=\"add\" />Add</Button></div>\n <ul className=\"piq-subscriptions__list\">\n {items.map((s) => (\n <li key={s.id} className=\"piq-subscriptions__item\">\n <div className=\"piq-subscriptions__text\">\n <p className=\"piq-subscriptions__name\">{s.name}{s.paused && <strong className=\"piq-subscriptions__paused\"> Paused</strong>}</p>\n <p className=\"piq-subscriptions__detail\">{s.kind === \"alert\" ? `Alert when ${s.threshold}` : s.frequency} · {`To ${s.recipients.join(\", \")}`}</p>\n </div>\n <div className=\"piq-subscriptions__actions\">\n {!s.paused && <Button variant=\"text\" size=\"sm\" onClick={() => onPause?.(s)} aria-label={`Pause ${s.name}`}>Pause</Button>}\n <Button variant=\"text\" size=\"sm\" onClick={() => setDeleting(s)} aria-label={`Delete ${s.name}`}><Icon name=\"delete\" /></Button>\n </div>\n </li>\n ))}\n </ul>\n <Dialog open={adding} onClose={() => setAdding(false)} title=\"Add a subscription\">\n <form className=\"piq-quick-edit\" onSubmit={add}>\n <RadioGroup label=\"Kind\" name={`${base}-kind`} value={draft.kind} onChange={(v) => setDraft({ ...draft, kind: v })} options={[{ value: \"delivery\", label: \"Scheduled delivery\" }, { value: \"alert\", label: \"Alert\" }]} />\n <TextField label=\"Name\" value={draft.name} onChange={(e) => setDraft({ ...draft, name: e.target.value })} />\n {draft.kind === \"delivery\"\n ? <TextField label=\"Frequency\" value={draft.frequency} onChange={(e) => setDraft({ ...draft, frequency: e.target.value })} />\n : <TextField label=\"Threshold\" value={draft.threshold} onChange={(e) => setDraft({ ...draft, threshold: e.target.value })} />}\n <TextField label=\"Recipients\" hint=\"Email addresses, separated by commas\" value={draft.recipients} onChange={(e) => setDraft({ ...draft, recipients: e.target.value })} />\n <div className=\"piq-quick-edit__actions\"><Button type=\"submit\">Add</Button><Button variant=\"secondary\" onClick={() => setAdding(false)}>Cancel</Button></div>\n </form>\n </Dialog>\n <ConfirmDialog open={!!deleting} objectName={deleting?.name} consequence=\"Its recipients stop receiving it.\" onCancel={() => setDeleting(null)} onConfirm={() => { onDelete?.(deleting); setDeleting(null); }} />\n </section>\n );\n}\n","import { useId, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { DateRangePicker } from \"../widgets/DatePicker.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { Select, TextField } from \"../widgets/Field.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { FilterBar } from \"./Regions.jsx\";\n\nconst EMAIL = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/* The members of a workspace with their roles: invite one by email with a\n role (an address that is not an email is an error at its field), and\n change a member's role. The list shows what the app says, so a change\n shows once the app confirms it. members: [{ id, name, email, role }];\n roles: [{ value, label }]; onInvite({ email, role }); onRoleChange(member,\n role). */\nexport function UsersAndRoles({ title = \"Members\", members = [], roles = [], onInvite, onRoleChange, className }) {\n const [inviting, setInviting] = useState(false);\n const [email, setEmail] = useState(\"\");\n const [role, setRole] = useState(roles[0]?.value ?? \"\");\n const [tried, setTried] = useState(false);\n const base = useId();\n const bad = !EMAIL.test(email.trim());\n const roleLabel = (v) => roles.find((r) => r.value === v)?.label ?? v;\n const invite = (e) => { e.preventDefault(); setTried(true); if (bad) return; onInvite?.({ email: email.trim(), role }); setInviting(false); setEmail(\"\"); setTried(false); };\n return (\n <section className={`piq-members${className ? ` ${className}` : \"\"}`} aria-labelledby={`${base}-h`}>\n <div className=\"piq-subscriptions__head\"><h2 id={`${base}-h`} className=\"piq-import__title\">{title}</h2><Button onClick={() => setInviting(true)}><Icon name=\"add\" />Invite</Button></div>\n <div className=\"piq-table-wrap\">\n <table className=\"piq-table\">\n <caption className=\"piq-visually-hidden\">{title}</caption>\n <thead><tr><th scope=\"col\">Name</th><th scope=\"col\">Email</th><th scope=\"col\">Role</th></tr></thead>\n <tbody>\n {members.map((m) => (\n <tr key={m.id}>\n <th scope=\"row\">{m.name}</th><td>{m.email}</td>\n <td className=\"piq-members__role\">\n <span className=\"piq-members__current\">{roleLabel(m.role)}</span>\n <Select label={<span className=\"piq-visually-hidden\">{`Change role for ${m.name}`}</span>} className=\"piq-members__select\" value={m.role} options={roles} onChange={(e) => onRoleChange?.(m, e.target.value)} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <Dialog open={inviting} onClose={() => setInviting(false)} title=\"Invite a member\">\n <form className=\"piq-quick-edit\" noValidate onSubmit={invite}>\n <TextField label=\"Email address\" type=\"email\" autoComplete=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} error={tried && bad ? \"Enter an email address, like name@example.com\" : undefined} />\n <Select label=\"Role\" value={role} options={roles} onChange={(e) => setRole(e.target.value)} />\n <div className=\"piq-quick-edit__actions\"><Button type=\"submit\">Send invite</Button><Button variant=\"secondary\" onClick={() => setInviting(false)}>Cancel</Button></div>\n </form>\n </Dialog>\n </section>\n );\n}\n\n/* Which role may do what: a table with a column per role and a row per\n permission, each cell saying Yes or No in text. has(role, permission). */\nexport function PermissionsMatrix({ title = \"Permissions\", roles = [], permissions = [], has = () => false, yes = \"Yes\", no = \"No\", className }) {\n return (\n <div className=\"piq-table-wrap\">\n <table className={`piq-table piq-matrix${className ? ` ${className}` : \"\"}`}>\n <caption className=\"piq-matrix__caption\">{title}</caption>\n <thead><tr><th scope=\"col\">Permission</th>{roles.map((r) => <th key={r.value} scope=\"col\">{r.label}</th>)}</tr></thead>\n <tbody>\n {permissions.map((p) => (\n <tr key={p.value}>\n <th scope=\"row\">{p.label}</th>\n {roles.map((r) => { const on = has(r.value, p.value); return <td key={r.value} data-on={on || undefined}><Icon name={on ? \"check\" : \"close\"} />{on ? yes : no}</td>; })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\n/* Who changed what and when, read only: each entry with the person, the\n change, the time and the value before and after, filtered by person,\n action and date (applied filters as removable chips). The app filters:\n onFilter({ person, action, from, to }); filters: the applied ones as\n [{ id, label }]; onRemoveFilter(filter). */\nexport function AuditLog({ title = \"Audit log\", entries = [], people = [], actions = [], filters = [], onFilter, onRemoveFilter, onClearFilters, locale, className }) {\n const [person, setPerson] = useState(\"\");\n const [action, setAction] = useState(\"\");\n const [range, setRange] = useState({ from: \"\", to: \"\" });\n const base = useId();\n const fmt = new Intl.DateTimeFormat(locale, { dateStyle: \"medium\", timeStyle: \"short\" });\n const apply = (e) => { e.preventDefault(); onFilter?.({ person: person || null, action: action || null, from: range.from || null, to: range.to || null }); };\n return (\n <section className={`piq-audit-log${className ? ` ${className}` : \"\"}`} aria-labelledby={`${base}-h`}>\n <h2 id={`${base}-h`} className=\"piq-import__title\">{title}</h2>\n <form className=\"piq-audit-log__filters\" onSubmit={apply}>\n <Select label=\"Person\" placeholder=\"Anyone\" value={person} options={people} onChange={(e) => setPerson(e.target.value)} />\n <Select label=\"Action\" placeholder=\"Any action\" value={action} options={actions} onChange={(e) => setAction(e.target.value)} />\n <DateRangePicker label=\"Date\" from={range.from} to={range.to} onChange={setRange} />\n <Button type=\"submit\" variant=\"secondary\">Filter</Button>\n </form>\n <FilterBar filters={filters} onRemoveFilter={onRemoveFilter} onClearAll={onClearFilters} />\n <div className=\"piq-table-wrap\">\n <table className=\"piq-table piq-audit-log__table\">\n <caption className=\"piq-visually-hidden\">{title}</caption>\n <thead><tr><th scope=\"col\">When</th><th scope=\"col\">Who</th><th scope=\"col\">What</th><th scope=\"col\">Before</th><th scope=\"col\">After</th></tr></thead>\n <tbody>\n {entries.map((e) => (\n <tr key={e.id}>\n <td><time dateTime={new Date(e.time).toISOString()}>{fmt.format(new Date(e.time))}</time></td>\n <td>{e.actor}</td><td>{e.action}</td><td>{e.before ?? \"—\"}</td><td>{e.after ?? \"—\"}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n );\n}\n","import { useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Switch } from \"../widgets/Choice.jsx\";\nimport { Sheet } from \"../widgets/Sheet.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { ConfirmDialog } from \"./Forms.jsx\";\n\n/* Notifications: a button whose name says how many are unread\n (\"Notifications, 3 unread\"), opening a panel where each says Read or\n Unread in text and links to its record; mark one or all as read; channel\n preferences per kind of notification. notifications: [{ id, title, href,\n read }]; onMarkRead(notification); onMarkAllRead(); preferences: { kinds,\n channels: [{ value, label }], value: { kind: { channel: on } } };\n onPreferenceChange(kind, channel, on). */\nexport function NotificationCentre({ notifications = [], onMarkRead, onMarkAllRead, preferences, onPreferenceChange, label = \"Notifications\", className }) {\n const [open, setOpen] = useState(false);\n const unread = notifications.filter((n) => !n.read).length;\n return (\n <div className={`piq-notifications${className ? ` ${className}` : \"\"}`}>\n <Button variant=\"text\" aria-label={unread ? `${label}, ${unread} unread` : label} aria-haspopup=\"dialog\" aria-expanded={open} badge={unread || undefined} onClick={() => setOpen(true)}>\n <Icon name=\"info\" />\n </Button>\n <Sheet open={open} onClose={() => setOpen(false)} title={label} side=\"end\">\n {unread > 0 && <Button variant=\"secondary\" size=\"sm\" onClick={() => onMarkAllRead?.()}>Mark all as read</Button>}\n <ul className=\"piq-notifications__list\">\n {notifications.map((n) => (\n <li key={n.id} className=\"piq-notifications__item\" data-read={n.read || undefined}>\n <span className=\"piq-notifications__state\">{n.read ? \"Read\" : \"Unread\"}</span>\n <a href={n.href} className=\"piq-notifications__link\">{n.title}</a>\n {!n.read && <Button variant=\"text\" size=\"sm\" onClick={() => onMarkRead?.(n)}>Mark as read<span className=\"piq-visually-hidden\">{`: ${n.title}`}</span></Button>}\n </li>\n ))}\n </ul>\n {preferences && (\n <div className=\"piq-table-wrap\">\n <table className=\"piq-table piq-notifications__prefs\">\n <caption className=\"piq-matrix__caption\">Notify me by</caption>\n <thead><tr><th scope=\"col\">Notification</th>{preferences.channels.map((c) => <th key={c.value} scope=\"col\">{c.label}</th>)}</tr></thead>\n <tbody>\n {preferences.kinds.map((k) => (\n <tr key={k.value}><th scope=\"row\">{k.label}</th>\n {preferences.channels.map((c) => (\n <td key={c.value}><Switch label={<span className=\"piq-visually-hidden\">{`${c.label} for ${k.label}`}</span>} checked={!!preferences.value?.[k.value]?.[c.value]} onChange={(e) => onPreferenceChange?.(k.value, c.value, e.target.checked)} /></td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </Sheet>\n </div>\n );\n}\n\n/* Connections to other services: each with its status in text, Connect when\n it is not connected and Disconnect when it is. items: [{ id, name,\n description, connected }]; onConnect(item); onDisconnect(item). */\nexport function Integrations({ title = \"Integrations\", items = [], onConnect, onDisconnect, className }) {\n return (\n <section className={`piq-integrations${className ? ` ${className}` : \"\"}`} aria-label={title}>\n <ul className=\"piq-integrations__list\">\n {items.map((it) => (\n <li key={it.id} className=\"piq-integrations__item\">\n <div><p className=\"piq-subscriptions__name\">{it.name}</p>{it.description && <p className=\"piq-subscriptions__detail\">{it.description}</p>}</div>\n <strong className=\"piq-integrations__status\" data-connected={it.connected || undefined}>{it.connected ? \"Connected\" : \"Not connected\"}</strong>\n {it.connected\n ? <Button variant=\"secondary\" size=\"sm\" aria-label={`Disconnect ${it.name}`} onClick={() => onDisconnect?.(it)}>Disconnect</Button>\n : <Button size=\"sm\" aria-label={`Connect ${it.name}`} onClick={() => onConnect?.(it)}>Connect</Button>}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\n/* API keys: a new key is shown in full once, with a copy button; after that\n only masked, and the full key is not in the page; revoking is confirmed.\n keys: [{ id, name, last4, created }]; created: { name, secret } while the\n new key is being shown, then the app clears it on onCreatedClose();\n onCreate(); onRevoke(key). */\nexport function ApiKeys({ title = \"API keys\", keys = [], created, onCreate, onCreatedClose, onRevoke, className }) {\n const [copied, setCopied] = useState(false);\n const [revoking, setRevoking] = useState(null);\n const copy = async () => { await navigator.clipboard?.writeText(created.secret); setCopied(true); };\n return (\n <section className={`piq-api-keys${className ? ` ${className}` : \"\"}`} aria-label={title}>\n <div className=\"piq-subscriptions__head\"><h2 className=\"piq-import__title\">{title}</h2><Button onClick={() => onCreate?.()}><Icon name=\"add\" />Create a key</Button></div>\n {created && (\n <div className=\"piq-api-keys__created\" role=\"status\">\n <p><strong>{created.name}</strong>: copy this key now. You will not be able to see it again.</p>\n <code className=\"piq-api-keys__secret\">{created.secret}</code>\n <div className=\"piq-quick-edit__actions\">\n <Button variant=\"secondary\" onClick={copy}><Icon name=\"copy\" />{copied ? \"Copied\" : \"Copy key\"}</Button>\n <Button variant=\"text\" onClick={() => { setCopied(false); onCreatedClose?.(); }}>Done</Button>\n </div>\n </div>\n )}\n <ul className=\"piq-integrations__list\">\n {keys.map((k) => (\n <li key={k.id} className=\"piq-integrations__item\">\n <div><p className=\"piq-subscriptions__name\">{k.name}</p><code className=\"piq-api-keys__masked\" aria-label={`Key ending ${k.last4}`}>{`•••• •••• •••• ${k.last4}`}</code></div>\n <Button variant=\"text\" size=\"sm\" aria-label={`Revoke ${k.name}`} onClick={() => setRevoking(k)}>Revoke</Button>\n </li>\n ))}\n </ul>\n <ConfirmDialog open={!!revoking} objectName={revoking?.name} title={revoking ? `Revoke ${revoking.name}?` : \"\"} confirmLabel=\"Revoke\"\n consequence=\"Anything using this key stops working at once.\" onCancel={() => setRevoking(null)} onConfirm={() => { onRevoke?.(revoking); setRevoking(null); }} />\n </section>\n );\n}\n","import { cloneElement, useEffect, useId, useRef, useState } from \"react\";\nimport { Button } from \"../widgets/Button.jsx\";\nimport { Dialog } from \"../widgets/Dialog.jsx\";\nimport { Icon } from \"../icons/Icon.jsx\";\nimport { PageHeader } from \"./Regions.jsx\";\n\nfunction ItemList({ list }) {\n const id = useId();\n return (\n <section className=\"piq-home__list\" aria-labelledby={id}>\n <h2 id={id} className=\"piq-home__heading\">{list.title}</h2>\n {list.items?.length\n ? <ul className=\"piq-home__items\">{list.items.map((it) => <li key={it.id}><a href={it.href}>{it.label}</a>{it.meta && <span className=\"piq-home__meta\">{it.meta}</span>}</li>)}</ul>\n : <p className=\"piq-home__empty\">{list.emptyText ?? \"Nothing here yet.\"}</p>}\n </section>\n );\n}\n\n/* The first screen after signing in: a summary for this person, from\n slots: number tiles (StatTile elements), their assigned work and their\n recent items, each list with its own empty state. assigned and recent:\n { title, items: [{ id, label, href, meta? }], emptyText }. */\nexport function HomeScreen({ title = \"Home\", tiles = [], assigned, recent, children, className }) {\n return (\n <div className={`piq-home${className ? ` ${className}` : \"\"}`}>\n <PageHeader title={title} />\n {tiles.length > 0 && <div className=\"piq-dashboard__tiles piq-home__tiles\">{tiles}</div>}\n <div className=\"piq-home__lists\">\n {assigned && <ItemList list={assigned} />}\n {recent && <ItemList list={recent} />}\n </div>\n {children}\n </div>\n );\n}\n\n/* Search everything and go: Ctrl+K or Cmd+K (or its button) opens a modal\n dialog with focus in a combobox. Before typing it lists recent items;\n typing asks the app (onSearch(query)) and lists the results it returns\n (results: [{ label, items: [{ id, label }] }]) in labelled groups. Up and\n Down move, Enter goes to the active result (onSelect(item)), Escape closes\n and returns focus. */\nexport function CommandPalette({ recent = [], results = [], onSearch, onSelect, buttonLabel = \"Search\", placeholder = \"Search records and actions\", recentLabel = \"Recent\", emptyLabel = \"No results\", className }) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [active, setActive] = useState(0);\n const input = useRef(null);\n const base = useId();\n const groups = query.trim() ? results : recent.length ? [{ label: recentLabel, items: recent }] : [];\n const flat = groups.flatMap((g) => g.items);\n\n useEffect(() => {\n const onKey = (e) => { if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === \"k\") { e.preventDefault(); setOpen(true); } };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, []);\n useEffect(() => { if (!open) { setQuery(\"\"); setActive(0); } }, [open]);\n\n function onKey(e) {\n if (e.key === \"ArrowDown\") { e.preventDefault(); setActive((a) => Math.min(a + 1, flat.length - 1)); }\n else if (e.key === \"ArrowUp\") { e.preventDefault(); setActive((a) => Math.max(a - 1, 0)); }\n else if (e.key === \"Enter\") { e.preventDefault(); const it = flat[active]; if (it) { setOpen(false); onSelect?.(it); } }\n }\n let n = -1;\n return (\n <div className={`piq-palette${className ? ` ${className}` : \"\"}`}>\n <Button variant=\"secondary\" aria-haspopup=\"dialog\" aria-keyshortcuts=\"Control+K Meta+K\" onClick={() => setOpen(true)}><Icon name=\"search\" />{buttonLabel}<kbd className=\"piq-palette__kbd\" aria-hidden=\"true\">⌘K</kbd></Button>\n <Dialog open={open} onClose={() => setOpen(false)} title={buttonLabel} initialFocus={input} className=\"piq-palette__dialog\">\n <input ref={input} type=\"text\" role=\"combobox\" aria-label={placeholder} placeholder={placeholder} className=\"piq-field__input\" autoComplete=\"off\"\n aria-expanded={flat.length > 0} aria-controls={`${base}-list`} aria-autocomplete=\"list\" aria-activedescendant={flat[active] ? `${base}-${flat[active].id}` : undefined}\n value={query} onChange={(e) => { setQuery(e.target.value); setActive(0); onSearch?.(e.target.value); }} onKeyDown={onKey} />\n <div id={`${base}-list`} role=\"listbox\" aria-label=\"Results\" className=\"piq-palette__results\">\n {groups.map((g) => (\n <div key={g.label} role=\"group\" aria-labelledby={`${base}-${g.label}-g`} className=\"piq-palette__group\">\n <p id={`${base}-${g.label}-g`} className=\"piq-palette__group-label\" role=\"presentation\">{g.label}</p>\n {g.items.map((it) => { n++; const i = n; return (\n <div key={it.id} id={`${base}-${it.id}`} role=\"option\" aria-selected={i === active} className={`piq-menu__item${i === active ? \" is-hover\" : \"\"}`}\n onMouseDown={(e) => e.preventDefault()} onClick={() => { setOpen(false); onSelect?.(it); }}>{it.label}</div>\n ); })}\n </div>\n ))}\n </div>\n {query.trim() && !flat.length && <p role=\"status\" className=\"piq-workspace__empty\">{emptyLabel}</p>}\n </Dialog>\n </div>\n );\n}\n\n/* Right-click shortcuts for an element: a menu at the pointer on right-click,\n or beside the element on Shift+F10 or the ContextMenu key; the WAI-ARIA\n Menu pattern (arrows, Enter, Escape returns focus). Its items must also be\n in a visible menu (a MenuButton) so nothing depends on right-clicking:\n pass the same items to both. children is the one element. */\nexport function ContextMenu({ items = [], label = \"Actions\", children }) {\n const [at, setAt] = useState(null); // { x, y } in the viewport\n const [active, setActive] = useState(0);\n const menu = useRef(null), owner = useRef(null);\n useEffect(() => { if (at) menu.current?.querySelectorAll('[role=\"menuitem\"]')[active]?.focus(); }, [at, active]);\n useEffect(() => {\n if (!at) return undefined;\n const outside = (e) => { if (!menu.current?.contains(e.target)) setAt(null); };\n document.addEventListener(\"mousedown\", outside);\n return () => document.removeEventListener(\"mousedown\", outside);\n }, [at]);\n const openAt = (x, y) => { setActive(0); setAt({ x, y }); };\n const close = () => { setAt(null); owner.current?.focus(); };\n const child = cloneElement(children, {\n ref: owner,\n \"aria-haspopup\": \"menu\",\n onContextMenu: (e) => { e.preventDefault(); owner.current = e.currentTarget; openAt(e.clientX, e.clientY); },\n onKeyDown: (e) => {\n children.props.onKeyDown?.(e);\n if ((e.shiftKey && e.key === \"F10\") || e.key === \"ContextMenu\") {\n e.preventDefault(); owner.current = e.currentTarget;\n const r = e.currentTarget.getBoundingClientRect();\n openAt(r.left, r.bottom);\n }\n },\n });\n function onKey(e) {\n if (e.key === \"ArrowDown\") { e.preventDefault(); setActive((a) => (a + 1) % items.length); }\n else if (e.key === \"ArrowUp\") { e.preventDefault(); setActive((a) => (a - 1 + items.length) % items.length); }\n else if (e.key === \"Home\") { e.preventDefault(); setActive(0); }\n else if (e.key === \"End\") { e.preventDefault(); setActive(items.length - 1); }\n else if (e.key === \"Escape\" || e.key === \"Tab\") { e.preventDefault(); close(); }\n }\n return (\n <>\n {child}\n {at && (\n <ul ref={menu} role=\"menu\" aria-label={label} className=\"piq-menu piq-context-menu\" style={{ insetInlineStart: `${at.x}px`, insetBlockStart: `${at.y}px` }} onKeyDown={onKey}>\n {items.map((it, i) => (\n <li key={i} role=\"none\">\n <button type=\"button\" role=\"menuitem\" tabIndex={-1} className={`piq-menu__item${i === active ? \" is-hover\" : \"\"}`} onClick={() => { close(); it.onSelect?.(); }}>{it.label}</button>\n </li>\n ))}\n </ul>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|