@etus/ui 0.4.0-beta.11 → 0.4.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-7B577M5O.js → chunk-2YSZPUQZ.js} +3 -3
- package/dist/{chunk-7B577M5O.js.map → chunk-2YSZPUQZ.js.map} +1 -1
- package/dist/{chunk-IHW6IJE5.js → chunk-3NLWCX2F.js} +3 -3
- package/dist/{chunk-IHW6IJE5.js.map → chunk-3NLWCX2F.js.map} +1 -1
- package/dist/{chunk-WOOBWQHY.js → chunk-3NSIUZGP.js} +3 -3
- package/dist/{chunk-WOOBWQHY.js.map → chunk-3NSIUZGP.js.map} +1 -1
- package/dist/{chunk-Y6ZXHHUS.js → chunk-3W7FXRO5.js} +3 -3
- package/dist/{chunk-Y6ZXHHUS.js.map → chunk-3W7FXRO5.js.map} +1 -1
- package/dist/{chunk-2TAFX4RZ.js → chunk-7GCTZEMK.js} +3 -3
- package/dist/{chunk-2TAFX4RZ.js.map → chunk-7GCTZEMK.js.map} +1 -1
- package/dist/{chunk-6TBA37U7.js → chunk-7TF5PVEU.js} +6 -6
- package/dist/chunk-7TF5PVEU.js.map +1 -0
- package/dist/{chunk-HANDVWJA.js → chunk-BS5XDYOE.js} +3 -3
- package/dist/{chunk-HANDVWJA.js.map → chunk-BS5XDYOE.js.map} +1 -1
- package/dist/{chunk-DQ43X75Q.js → chunk-EYSTEGV5.js} +4 -4
- package/dist/{chunk-DQ43X75Q.js.map → chunk-EYSTEGV5.js.map} +1 -1
- package/dist/{chunk-4KOJTZVU.js → chunk-FCIF6H6E.js} +3 -3
- package/dist/{chunk-4KOJTZVU.js.map → chunk-FCIF6H6E.js.map} +1 -1
- package/dist/{chunk-7SPMPMXE.js → chunk-GGUWEAYD.js} +3 -3
- package/dist/{chunk-7SPMPMXE.js.map → chunk-GGUWEAYD.js.map} +1 -1
- package/dist/{chunk-RRORYKXT.js → chunk-LLI3JFJL.js} +4 -4
- package/dist/{chunk-RRORYKXT.js.map → chunk-LLI3JFJL.js.map} +1 -1
- package/dist/chunk-N2WITPE2.js +249 -0
- package/dist/chunk-N2WITPE2.js.map +1 -0
- package/dist/{chunk-RN4WIA4D.js → chunk-OBRJXVWO.js} +3 -3
- package/dist/{chunk-RN4WIA4D.js.map → chunk-OBRJXVWO.js.map} +1 -1
- package/dist/{chunk-36LMNJKG.js → chunk-P27ERD6W.js} +4 -4
- package/dist/{chunk-36LMNJKG.js.map → chunk-P27ERD6W.js.map} +1 -1
- package/dist/{chunk-FBFP6LWC.js → chunk-P7D6S6GX.js} +3 -3
- package/dist/{chunk-FBFP6LWC.js.map → chunk-P7D6S6GX.js.map} +1 -1
- package/dist/{chunk-K3QIPEIV.js → chunk-R3HUGCGR.js} +3 -3
- package/dist/{chunk-K3QIPEIV.js.map → chunk-R3HUGCGR.js.map} +1 -1
- package/dist/{chunk-42RY5GAT.js → chunk-SUU3HNOX.js} +3 -3
- package/dist/{chunk-42RY5GAT.js.map → chunk-SUU3HNOX.js.map} +1 -1
- package/dist/{chunk-WDPGJHLV.js → chunk-SXPBKGLT.js} +3 -3
- package/dist/{chunk-WDPGJHLV.js.map → chunk-SXPBKGLT.js.map} +1 -1
- package/dist/{chunk-VNAC3RM2.js → chunk-T6XRYT6Q.js} +3 -3
- package/dist/{chunk-VNAC3RM2.js.map → chunk-T6XRYT6Q.js.map} +1 -1
- package/dist/chunk-TP4PDKFE.js +3 -0
- package/dist/{chunk-IXJHHR3Y.js.map → chunk-TP4PDKFE.js.map} +1 -1
- package/dist/{chunk-R52QIEJZ.js → chunk-UYC7M3FM.js} +3 -3
- package/dist/{chunk-R52QIEJZ.js.map → chunk-UYC7M3FM.js.map} +1 -1
- package/dist/{chunk-KO3R4JFH.js → chunk-VLDAHAG6.js} +3 -3
- package/dist/{chunk-KO3R4JFH.js.map → chunk-VLDAHAG6.js.map} +1 -1
- package/dist/{chunk-OWLYSN7L.js → chunk-W7S7GPU5.js} +3 -3
- package/dist/{chunk-OWLYSN7L.js.map → chunk-W7S7GPU5.js.map} +1 -1
- package/dist/{chunk-Z2RO42XL.js → chunk-WXBC3D2N.js} +4 -4
- package/dist/{chunk-Z2RO42XL.js.map → chunk-WXBC3D2N.js.map} +1 -1
- package/dist/{chunk-DCUFQJYP.js → chunk-Y4RKKQMB.js} +14 -5
- package/dist/chunk-Y4RKKQMB.js.map +1 -0
- package/dist/{chunk-ZUNG2RTQ.js → chunk-YUHPTV2A.js} +3 -3
- package/dist/{chunk-ZUNG2RTQ.js.map → chunk-YUHPTV2A.js.map} +1 -1
- package/dist/{chunk-Z46KLLW2.js → chunk-ZP4HYVDG.js} +3 -3
- package/dist/{chunk-Z46KLLW2.js.map → chunk-ZP4HYVDG.js.map} +1 -1
- package/dist/components/advanced/Calendar/index.js +2 -2
- package/dist/components/advanced/EventCalendar/index.js +2 -2
- package/dist/components/advanced/FilterBuilder/index.js +2 -2
- package/dist/components/advanced/ReportBuilder/index.js +2 -2
- package/dist/components/advanced/index.js +11 -11
- package/dist/components/data-display/Carousel/index.js +2 -2
- package/dist/components/data-display/DashboardFilterbar/index.js +4 -4
- package/dist/components/data-display/DataTable/FilterBuilder/index.js +2 -2
- package/dist/components/data-display/DataTable/index.js +3 -3
- package/dist/components/data-display/ImageGallery/index.js +3 -3
- package/dist/components/data-display/index.js +19 -19
- package/dist/components/feedback/AlertDialog/index.js +2 -2
- package/dist/components/feedback/ConfirmModal/index.js +3 -3
- package/dist/components/feedback/index.js +5 -5
- package/dist/components/forms/DatePicker/index.js +3 -3
- package/dist/components/forms/DateRangePicker/index.js +3 -3
- package/dist/components/forms/InputGroup/index.js +2 -2
- package/dist/components/forms/index.js +15 -15
- package/dist/components/index.js +86 -85
- package/dist/components/layout/index.js +1 -1
- package/dist/components/navigation/MobileSidebar/index.js +1 -1
- package/dist/components/navigation/Pagination/index.js +2 -2
- package/dist/components/navigation/Sidebar/index.js +2 -2
- package/dist/components/navigation/index.js +6 -6
- package/dist/components/primitives/Button/index.js +1 -1
- package/dist/components/primitives/ConfirmButton/index.js +3 -3
- package/dist/components/primitives/PaymentMethodIcon/index.js +5 -0
- package/dist/components/primitives/PaymentMethodIcon/index.js.map +1 -0
- package/dist/components/primitives/Tag/index.js +1 -1
- package/dist/components/primitives/index.js +15 -14
- package/dist/components/workflow/ApprovalFlow/index.js +2 -2
- package/dist/components/workflow/CommentSystem/index.js +2 -2
- package/dist/components/workflow/Dashboard/index.js +2 -2
- package/dist/components/workflow/DashboardBuilder/index.js +2 -2
- package/dist/components/workflow/KanbanBoard/index.js +2 -2
- package/dist/components/workflow/ReportGenerator/index.js +2 -2
- package/dist/components/workflow/Wizard/index.js +2 -2
- package/dist/components/workflow/index.js +9 -9
- package/dist/index.d.ts +43 -2
- package/dist/index.js +86 -85
- package/dist/styles.css +71 -28
- package/package.json +2 -2
- package/dist/chunk-6TBA37U7.js.map +0 -1
- package/dist/chunk-DCUFQJYP.js.map +0 -1
- package/dist/chunk-IXJHHR3Y.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/advanced/ReportBuilder/ReportBuilder.tsx"],"names":[],"mappings":"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","file":"chunk-4KOJTZVU.js","sourcesContent":["\"use client\"\n\n// ReportBuilder — a faithful copy of Google Ad Manager's report builder bar:\n// a dimensions+metrics chip strip with an inline typeahead field, a sentence-\n// chip filter row (\"Source (src) is any of a, b\") with an inline \"Add filter\"\n// field, and the \"All dimensions and metrics\" View-all dialog (draft + Apply).\n//\n// Interaction contract (observed on the live GAM builder, 2026-06-09):\n// • Chips are inert — only their delete × reacts. The ONLY dropdown opener is\n// the inline text field; typing filters; checkboxes toggle without closing.\n// • \"Add filter\" is an inline field too: focusing lists the filter fields,\n// typing filters them, picking one opens that field's editor popup\n// (title + ✕, operator, value chips + type-to-search, blue Apply).\n// • \"View all\" opens a near-fullscreen dialog where selections are a DRAFT —\n// only Apply commits, Cancel discards.\n//\n// Visuals measured from the live GAM DOM: chips 24px + 1px #dadce0 border at\n// 12px radius, labels 13px/500 #5f6368, field glyphs 16px (#4285f4 dimension,\n// #34a853 \"123\" metric), popups 8px radius with Material's two-layer shadow,\n// internal dividers #e0e0e0, placeholders #757575, blue accents #1a73e8 /\n// #1967d2 / #e8f0fe.\n\nimport type {\n ReportBuilderField,\n ReportBuilderFieldKind,\n ReportBuilderFilter,\n ReportBuilderFilterField,\n ReportBuilderProps,\n} from \"./ReportBuilder.types\"\n\nimport { Filter, Search, Shapes, Table, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Dialog, DialogContent, DialogTitle } from \"../../feedback/Dialog\"\nimport { Popover, PopoverAnchor, PopoverContent } from \"../../feedback/Popover\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { NumberInput } from \"../../forms/NumberInput\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\n\nconst NUMBER_OPS = [\n { v: \">=\", l: \"≥\" },\n { v: \"<=\", l: \"≤\" },\n { v: \">\", l: \">\" },\n { v: \"<\", l: \"<\" },\n { v: \"=\", l: \"=\" },\n { v: \"between\", l: \"between\" },\n] as const\n\n/** GAM's blue Material checkbox — 18px, 2px #757575 border, checked #1a73e8. */\nconst GAM_CHECKBOX =\n \"size-[18px] rounded-xs border-2 border-[color:var(--report-builder-fg-subtle)] data-[state=checked]:border-[color:var(--report-builder-accent)] data-[state=checked]:bg-[color:var(--report-builder-accent)] data-[state=checked]:text-[color:var(--report-builder-on-accent)]\"\n\n/** GAM popup container — 8px radius, no border, Material two-layer shadow. */\nconst GAM_POPUP =\n \"rounded-lg border-0 p-0 [--report-builder-popup-shadow:0_1px_2px_0_var(--report-builder-shadow),0_2px_6px_2px_var(--report-builder-shadow-subtle)] shadow-[var(--report-builder-popup-shadow)]\"\n\nconst numFmt = (n: null | number | undefined) =>\n n == null ? \"\" : n.toLocaleString(\"en-US\")\n\n/** \"a, b, c\" up to 3 values, then \"+N\". */\nfunction listFmt(vals: string[]): string {\n const head = vals.slice(0, 3).join(\", \")\n return vals.length > 3 ? `${head} +${String(vals.length - 3)}` : head\n}\n\n/** Editor prefill for a filter field, from an existing filter if any. */\nfunction editorStateFor(existing?: ReportBuilderFilter) {\n return {\n a: existing?.a != null ? String(existing.a) : \"\",\n b: existing?.b != null ? String(existing.b) : \"\",\n op:\n existing && existing.op !== \"anyOf\" && existing.op !== \"contains\"\n ? existing.op\n : \">=\",\n text: existing?.text ?? \"\",\n vals: existing?.values ?? [],\n }\n}\n\n/** GAM shows custom keys as \"Label (key)\"; natives (label == key) plain. */\nfunction fieldLabel(label: string, key: string): string {\n return label.toLowerCase() === key.toLowerCase() ? label : `${label} (${key})`\n}\n\n/** Material \"123\" metric glyph, rendered as bold text like GAM's icon. */\nfunction MetricGlyph() {\n return (\n <span className=\"flex h-4 w-[22px] items-center justify-center text-[12px] font-bold leading-none tracking-tighter text-[color:var(--report-builder-positive)]\">\n 123\n </span>\n )\n}\n\n/** Material \"category\" dimension glyph — 16px, #4285f4. Lucide Shapes ≈ category. */\nfunction DimGlyph() {\n return <Shapes className=\"shrink-0 text-[color:var(--report-builder-accent-bright)]\" size={16} />\n}\n\nfunction KindGlyph({ kind }: { kind: ReportBuilderFieldKind }) {\n return kind === \"metric\" ? <MetricGlyph /> : <DimGlyph />\n}\n\n/** material-chip, measured: 24px tall (+1px border), 12px radius, #dadce0\n * outline, white bg, 12px left pad, 13px/500 #5f6368 label, 32×24 delete\n * button. `active` = GAM's blue editing highlight. */\nfunction GamChip({\n icon,\n children,\n active,\n onClick,\n onRemove,\n}: {\n active?: boolean\n children: React.ReactNode\n icon?: React.ReactNode\n onClick?: () => void\n onRemove?: () => void\n}) {\n return (\n <span\n className={cn(\n \"inline-flex h-[26px] items-center rounded-xl border pl-3 text-[13px] font-medium\",\n active\n ? \"border-[color:var(--report-builder-accent-border)] bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] text-[color:var(--report-builder-fg-muted)]\",\n !onRemove && \"pr-3\",\n onClick && \"cursor-pointer\",\n onClick && !active && \"hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n onClick={onClick}\n >\n {icon && <span className=\"mr-2 flex items-center\">{icon}</span>}\n <span className=\"whitespace-nowrap\">{children}</span>\n {onRemove && (\n <button\n className={cn(\n \"flex h-6 w-8 items-center justify-center\",\n active ? \"text-[color:var(--report-builder-accent-hover)]\" : \"text-[color:var(--report-builder-fg-muted)] hover:text-[color:var(--report-builder-fg-secondary)]\"\n )}\n aria-label=\"Remove\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n >\n <X size={18} />\n </button>\n )}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// \"All dimensions and metrics\" dialog (GAM's View-all modal)\n// ---------------------------------------------------------------------------\n\nfunction AllFieldsDialog({\n onOpenChange,\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: {\n dimensions: string[]\n fields: ReportBuilderField[]\n metrics: string[]\n onOpenChange: (o: boolean) => void\n onSelectionChange: ReportBuilderProps[\"onSelectionChange\"]\n}) {\n // The dialog is mounted fresh on every open (see FieldsBar), so the draft\n // is simply seeded from props at mount time — no re-seeding effect needed.\n const [draftDims, setDraftDims] = React.useState<string[]>(dimensions)\n const [draftMets, setDraftMets] = React.useState<string[]>(metrics)\n const [display, setDisplay] = React.useState<\"all\" | \"dimensions\" | \"metrics\">(\"all\")\n const [category, setCategory] = React.useState<\"dimensions\" | \"metrics\" | \"popular\">(\n \"popular\"\n )\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n\n function toggleDraft(kind: ReportBuilderFieldKind, key: string) {\n const [cur, set] =\n kind === \"dimension\"\n ? ([draftDims, setDraftDims] as const)\n : ([draftMets, setDraftMets] as const)\n set(cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key])\n }\n\n function apply() {\n onSelectionChange(\"dimensions\", draftDims)\n onSelectionChange(\"metrics\", draftMets)\n onOpenChange(false)\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => {\n if (!match(f.label)) return false\n if (display === \"dimensions\" && f.kind !== \"dimension\") return false\n if (display === \"metrics\" && f.kind !== \"metric\") return false\n if (category === \"dimensions\" && f.kind !== \"dimension\") return false\n if (category === \"metrics\" && f.kind !== \"metric\") return false\n return true\n })\n const selected = [\n ...draftDims.map((k) => fields.find((f) => f.kind === \"dimension\" && f.key === k)),\n ...draftMets.map((k) => fields.find((f) => f.kind === \"metric\" && f.key === k)),\n ].filter((f): f is ReportBuilderField => !!f)\n\n const CATS = [\n { k: \"popular\", l: \"Popular\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n const DISPLAYS = [\n { k: \"all\", l: \"All\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n\n return (\n <Dialog open onOpenChange={onOpenChange}>\n <DialogContent\n className=\"left-0 top-0 flex h-screen max-h-screen w-[min(1500px,96vw)] max-w-none translate-x-0 translate-y-0 flex-col gap-0 rounded-none border-0 bg-[color:var(--report-builder-surface)] p-0 text-[color:var(--report-builder-fg)]\"\n showCloseButton={false}\n >\n {/* header: ✕ + title + Display toggles */}\n <div className=\"flex shrink-0 items-center gap-4 px-4 py-3\">\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1.5 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n <X size={20} />\n </button>\n <DialogTitle className=\"text-xl font-normal text-[color:var(--report-builder-fg)]\">\n All dimensions and metrics\n </DialogTitle>\n <div className=\"flex-1\" />\n <span className=\"text-sm text-[color:var(--report-builder-fg-muted)]\">Display</span>\n <div className=\"flex gap-2\">\n {DISPLAYS.map((d) => (\n <button\n key={d.k}\n className={cn(\n \"h-8 rounded px-3 text-sm font-medium\",\n display === d.k\n ? \"bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border border-[color:var(--report-builder-border)] text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setDisplay(d.k)\n }}\n >\n {display === d.k ? \"✓ \" : \"\"}\n {d.l}\n </button>\n ))}\n </div>\n </div>\n {/* search */}\n <div className=\"flex shrink-0 items-center gap-3 border-y border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <Search className=\"text-[color:var(--report-builder-fg-muted)]\" size={18} />\n <input\n autoFocus\n className=\"w-full bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Search\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n }}\n />\n </div>\n {/* body: categories | list | selected | description */}\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"w-56 shrink-0 overflow-auto border-r border-[color:var(--report-builder-border-strong)] py-1\">\n {CATS.map((c) => (\n <button\n key={c.k}\n className={cn(\n \"flex h-9 w-full items-center px-4 text-left text-sm\",\n category === c.k\n ? \"bg-[color:var(--report-builder-surface-hover)] text-[color:var(--report-builder-fg)]\"\n : \"text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setCategory(c.k)\n }}\n >\n {c.l}\n </button>\n ))}\n </div>\n <div className=\"min-w-0 flex-[1.4] overflow-auto py-1\">\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? draftDims.includes(f.key)\n : draftMets.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-9 cursor-pointer items-center gap-3 px-4 text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles from\n // the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onBlur={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggleDraft(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-3 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"w-96 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)]\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <span className=\"text-sm font-medium text-[color:var(--report-builder-fg)]\">\n {selected.length} Selected\n </span>\n <button\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setDraftDims([])\n setDraftMets([])\n }}\n >\n Clear all\n </button>\n </div>\n {selected.map((f) => (\n <div key={`${f.kind}:${f.key}`} className=\"px-4 py-1.5\">\n <div className=\"text-xs text-[color:var(--report-builder-fg-muted)]\">\n {f.kind === \"dimension\" ? \"Dimensions\" : \"Metrics\"}\n </div>\n <div className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n <span className=\"flex-1 text-sm text-[color:var(--report-builder-fg)]\">{f.label}</span>\n <button\n aria-label={`Remove ${f.label}`}\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n toggleDraft(f.kind, f.key)\n }}\n >\n <X size={16} />\n </button>\n </div>\n </div>\n ))}\n </div>\n <div className=\"w-80 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n {/* footer: Apply / Cancel */}\n <div className=\"flex shrink-0 items-center gap-4 border-t border-[color:var(--report-builder-border-strong)] px-4 py-3\">\n <button\n className=\"rounded bg-[color:var(--report-builder-accent)] px-6 py-2 text-sm font-medium text-[color:var(--report-builder-on-accent)] hover:bg-[color:var(--report-builder-accent-hover)] disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={draftDims.length === 0 || draftMets.length === 0}\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n <button\n className=\"rounded px-2 py-2 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n Cancel\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Dimensions + metrics chip strip\n// ---------------------------------------------------------------------------\n\nfunction FieldsBar({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: Pick<\n ReportBuilderProps,\n \"dimensions\" | \"fields\" | \"metrics\" | \"onSelectionChange\"\n>) {\n const [open, setOpen] = React.useState(false)\n const [viewAllOpen, setViewAllOpen] = React.useState(false)\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const byKey = (kind: ReportBuilderFieldKind, key: string) =>\n fields.find((f) => f.kind === kind && f.key === key)\n\n function toggle(kind: ReportBuilderFieldKind, key: string) {\n const plural = kind === \"dimension\" ? \"dimensions\" : \"metrics\"\n const cur = kind === \"dimension\" ? dimensions : metrics\n if (cur.includes(key)) {\n if (cur.length === 1) return // keep at least one of each\n onSelectionChange(plural, cur.filter((k) => k !== key))\n } else {\n onSelectionChange(plural, [...cur, key])\n }\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => match(f.label))\n\n return (\n <div className=\"flex items-start border-b border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] py-3\">\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) {\n setSearch(\"\")\n setHovered(null)\n }\n }}\n >\n {/* anchor spans icon + strip so the dropdown is as wide as the strip */}\n <PopoverAnchor asChild>\n <div className=\"flex min-w-0 flex-1 items-start\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Table className=\"text-[color:var(--report-builder-fg)]\" size={24} strokeWidth={1.5} />\n </div>\n <div className=\"min-w-0 flex-1\">\n {/* chips are NOT a click target (GAM: only their × reacts) */}\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n {dimensions.map((k) => (\n <GamChip\n key={`d:${k}`}\n icon={<DimGlyph />}\n onRemove={\n dimensions.length > 1 ? () => { toggle(\"dimension\", k); } : undefined\n }\n >\n {byKey(\"dimension\", k)?.label ?? k}\n </GamChip>\n ))}\n {metrics.map((k) => (\n <GamChip\n key={`m:${k}`}\n icon={<MetricGlyph />}\n onRemove={metrics.length > 1 ? () => { toggle(\"metric\", k); } : undefined}\n >\n {byKey(\"metric\", k)?.label ?? k}\n </GamChip>\n ))}\n </div>\n {/* the inline search field — the ONLY opener, like GAM's combobox */}\n <input\n ref={inputRef}\n className=\"mt-2 w-full max-w-md bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Select dimensions and metrics\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n setOpen(true)\n }}\n />\n </div>\n </div>\n </PopoverAnchor>\n {/* GAM dropdown: strip-wide, two panes (list | description), View all footer */}\n <PopoverContent\n align=\"start\"\n className={GAM_POPUP}\n sideOffset={4}\n style={{ width: \"var(--radix-popper-anchor-width)\" }}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n <div className=\"flex\">\n <div className=\"max-h-[340px] flex-[1.6] overflow-auto py-1\">\n {!search.trim() && (\n <div className=\"px-4 pb-1 pt-2 text-xs font-normal text-[color:var(--report-builder-fg-subtle)]\">\n Popular\n </div>\n )}\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? dimensions.includes(f.key)\n : metrics.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-8 cursor-pointer items-center gap-3 px-4 text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles\n // from the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onBlur={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggle(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-2 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"min-h-[200px] flex-1 border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n <div className=\"border-t border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <button\n aria-label=\"View all fields\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n </PopoverContent>\n </Popover>\n <div className=\"flex shrink-0 items-center self-stretch border-l border-[color:var(--report-builder-border)] px-4\">\n <button\n aria-label=\"View all dimensions and metrics\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n {viewAllOpen && (\n <AllFieldsDialog\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onOpenChange={setViewAllOpen}\n onSelectionChange={onSelectionChange}\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Filter chips row\n// ---------------------------------------------------------------------------\n\nfunction filterChipLabel(f: ReportBuilderFilter, ff?: ReportBuilderFilterField): string {\n const label = ff ? fieldLabel(ff.label, ff.key) : f.field\n if (f.op === \"anyOf\") return `${label} is any of ${listFmt(f.values ?? [])}`\n if (f.op === \"contains\") return `${label} contains \"${f.text ?? \"\"}\"`\n if (f.op === \"between\") return `${ff?.label ?? f.field} between ${numFmt(f.a)} and ${numFmt(f.b)}`\n const op = NUMBER_OPS.find((o) => o.v === f.op)?.l ?? f.op\n return `${ff?.label ?? f.field} ${op} ${numFmt(f.a)}`\n}\n\n/** Build the filter entry from editor state.\n * Returns the entry, `null` for an empty editor (→ remove the filter), or\n * `\"invalid\"` for unparsable numeric input (→ keep the editor open). */\nfunction buildFilterEntry(\n ff: ReportBuilderFilterField,\n s: { a: string; b: string; op: string; text: string; vals: string[] }\n): \"invalid\" | null | ReportBuilderFilter {\n if (ff.type === \"enum\") {\n return s.vals.length ? { field: ff.key, op: \"anyOf\", values: s.vals } : null\n }\n if (ff.type === \"text\") {\n const t = s.text.trim()\n return t ? { field: ff.key, op: \"contains\", text: t } : null\n }\n const na = Number.parseFloat(s.a)\n if (Number.isNaN(na)) return \"invalid\"\n const nb = s.op === \"between\" ? Number.parseFloat(s.b) : null\n if (nb != null && Number.isNaN(nb)) return \"invalid\"\n return { a: na, b: nb, field: ff.key, op: s.op as ReportBuilderFilter[\"op\"] }\n}\n\nfunction FiltersBar({\n filterFields,\n filters,\n onFiltersChange,\n}: {\n filterFields: ReportBuilderFilterField[]\n filters: ReportBuilderFilter[]\n onFiltersChange: (filters: ReportBuilderFilter[]) => void\n}) {\n const [open, setOpen] = React.useState(false)\n const [fieldKey, setFieldKey] = React.useState<null | string>(null) // null = field list\n const [editIdx, setEditIdx] = React.useState<null | number>(null)\n const [vals, setVals] = React.useState<string[]>([])\n const [text, setText] = React.useState(\"\")\n const [op, setOp] = React.useState<string>(\">=\")\n const [a, setA] = React.useState(\"\")\n const [b, setB] = React.useState(\"\")\n const [fsearch, setFsearch] = React.useState(\"\") // field-list typeahead\n const [vsearch, setVsearch] = React.useState(\"\") // value typeahead in editor\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const fieldOf = (key: string) => filterFields.find((f) => f.key === key)\n\n function reset() {\n setFieldKey(null)\n setEditIdx(null)\n setVals([])\n setText(\"\")\n setOp(\">=\")\n setA(\"\")\n setB(\"\")\n setFsearch(\"\")\n setVsearch(\"\")\n }\n\n function openEditor(key: string, idx?: number) {\n const ff = fieldOf(key)\n if (!ff) return\n // enum/text fields keep one filter per field — editing replaces it\n const existingIdx =\n idx ?? (ff.type === \"number\" ? -1 : filters.findIndex((x) => x.field === key))\n const seed = editorStateFor(existingIdx >= 0 ? filters[existingIdx] : undefined)\n setFieldKey(key)\n setEditIdx(existingIdx >= 0 ? existingIdx : null)\n setVsearch(\"\")\n setVals(seed.vals)\n setText(seed.text)\n setOp(seed.op)\n setA(seed.a)\n setB(seed.b)\n setOpen(true)\n }\n\n function apply() {\n const ff = fieldKey ? fieldOf(fieldKey) : null\n if (!ff) return\n const entry = buildFilterEntry(ff, { a, b, op, text, vals })\n if (entry === \"invalid\") return\n const next = [...filters]\n if (editIdx != null) {\n if (entry) next[editIdx] = entry\n else next.splice(editIdx, 1)\n } else if (entry) {\n next.push(entry)\n }\n onFiltersChange(next)\n setOpen(false)\n reset()\n }\n\n const editorField = fieldKey ? fieldOf(fieldKey) : null\n const valueOptions = editorField?.options ?? []\n const valueSuggestions = valueOptions.filter(\n (v) => !vals.includes(v) && v.toLowerCase().includes(vsearch.trim().toLowerCase())\n )\n const fieldMatches = (l: string) =>\n l.toLowerCase().includes(fsearch.trim().toLowerCase())\n\n return (\n <div className=\"flex min-h-12 items-center bg-[color:var(--report-builder-surface)] py-2\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Filter className=\"text-[color:var(--report-builder-accent)]\" fill=\"currentColor\" size={20} strokeWidth={0} />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1\">\n {filters.map((f, i) => (\n <GamChip\n // Content-based key, not the array index: number fields allow\n // duplicate filters on the same field, so an index key mis-keys\n // survivors on removal/reorder. The chip label is unique per filter.\n key={`${f.field}:${filterChipLabel(f, fieldOf(f.field))}`}\n active={open && editIdx === i}\n onClick={() => {\n openEditor(f.field, i)\n }}\n onRemove={() => {\n onFiltersChange(filters.filter((_, j) => j !== i))\n }}\n >\n {filterChipLabel(f, fieldOf(f.field))}\n </GamChip>\n ))}\n {/* \"Add filter\" inline field — the opener, like GAM's combobox */}\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) reset()\n }}\n >\n <PopoverAnchor asChild>\n <input\n ref={inputRef}\n className=\"w-28 bg-transparent px-2 py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Add filter\"\n value={fsearch}\n onChange={(e) => {\n setFsearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n if (fieldKey === null) setOpen(true)\n }}\n />\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n className={cn(fieldKey === null ? \"w-72\" : \"w-[26rem]\", GAM_POPUP)}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n {fieldKey === null ? (\n // step 1 — field list (filtered by the inline field's text)\n <div className=\"max-h-80 overflow-auto py-1\">\n {filterFields\n .filter((f) => fieldMatches(f.label))\n .map((f) => (\n <button\n key={f.key}\n className=\"flex h-8 w-full items-center gap-2 px-4 text-left text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n openEditor(f.key)\n }}\n >\n <KindGlyph kind={f.glyph ?? \"dimension\"} />\n {f.label}\n </button>\n ))}\n </div>\n ) : (\n // step 2 — GAM editor popup: title + ✕, operator, values, Apply\n <div>\n <div className=\"flex items-center justify-between px-3 pb-1 pt-3\">\n <span className=\"text-base text-[color:var(--report-builder-fg)]\">\n {editorField ? fieldLabel(editorField.label, editorField.key) : fieldKey}\n </span>\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n reset()\n }}\n >\n <X size={18} />\n </button>\n </div>\n {editorField?.type === \"text\" ? (\n <div className=\"px-3 py-2\">\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[13px] text-[color:var(--report-builder-fg-muted)]\">\n contains\n </div>\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={text}\n onChange={(e) => {\n setText(e.target.value)\n }}\n />\n </div>\n ) : editorField?.type === \"number\" ? (\n <div className=\"flex items-center gap-2 px-3 py-2\">\n <Select value={op} onValueChange={setOp}>\n <SelectTrigger className=\"w-24\" size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {NUMBER_OPS.map((o) => (\n <SelectItem key={o.v} value={o.v}>\n {o.l}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <NumberInput\n placeholder=\"value\"\n value={a}\n onChange={(e) => {\n setA(e.target.value)\n }}\n />\n {op === \"between\" && (\n <NumberInput\n placeholder=\"to\"\n value={b}\n onChange={(e) => {\n setB(e.target.value)\n }}\n />\n )}\n </div>\n ) : (\n <div className=\"px-3 py-2\">\n {/* operator box (enum fields are \"is any of\") */}\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[13px] text-[color:var(--report-builder-fg-muted)]\">\n is any of\n </div>\n {/* selected values as chips, like GAM */}\n {vals.length > 0 && (\n <div className=\"mb-1 flex flex-wrap gap-x-2 gap-y-1\">\n {vals.map((v) => (\n <GamChip\n key={v}\n onRemove={() => {\n setVals((p) => p.filter((x) => x !== v))\n }}\n >\n {v}\n </GamChip>\n ))}\n </div>\n )}\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={vsearch}\n onChange={(e) => {\n setVsearch(e.target.value)\n }}\n // Keyboard parity with GAM: Enter adds the first\n // suggestion, so the enum editor is operable without a\n // mouse (WCAG 2.1 AA).\n onKeyDown={(e) => {\n const first = valueSuggestions[0]\n if (e.key === \"Enter\" && first) {\n e.preventDefault()\n setVals((p) => [...p, first])\n setVsearch(\"\")\n }\n }}\n />\n <div className=\"mt-1 max-h-44 overflow-auto\">\n {valueSuggestions.map((v) => (\n <button\n key={v}\n className=\"flex h-8 w-full items-center px-2 text-left text-sm text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n setVals((p) => [...p, v])\n setVsearch(\"\")\n }}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n )}\n {/* GAM's blue \"Apply\" text button */}\n <div className=\"flex justify-end px-3 pb-2 pt-1\">\n <button\n className=\"rounded px-2 py-1 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n {filters.length > 0 && (\n <button\n aria-label=\"Clear all filters\"\n className=\"mx-2 flex shrink-0 items-center rounded-full p-2 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onFiltersChange([])\n }}\n >\n <X size={20} />\n </button>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ReportBuilder — the bordered card with both bars\n// ---------------------------------------------------------------------------\n\n/**\n * ReportBuilder - GAM-style report builder bar\n *\n * A faithful copy of Google Ad Manager's report builder: a dimensions+metrics\n * chip strip with inline typeahead, a sentence-chip filter row with an inline\n * \"Add filter\" field and per-field editors, and the \"All dimensions and\n * metrics\" View-all dialog with draft + Apply.\n *\n * @example\n * ```tsx\n * <ReportBuilder\n * fields={[\n * { key: \"date\", label: \"Date\", kind: \"dimension\" },\n * { key: \"rev\", label: \"Revenue\", kind: \"metric\" },\n * ]}\n * dimensions={[\"date\"]}\n * metrics={[\"rev\"]}\n * onSelectionChange={(kind, keys) => { ... }}\n * filterFields={[\n * { key: \"src\", label: \"Source\", type: \"enum\", options: [\"google\", \"facebook\"] },\n * { key: \"rev\", label: \"Revenue\", type: \"number\", glyph: \"metric\" },\n * ]}\n * filters={filters}\n * onFiltersChange={setFilters}\n * />\n * ```\n */\nexport function ReportBuilder({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n filterFields,\n filters = [],\n onFiltersChange,\n className,\n ...props\n}: ReportBuilderProps) {\n return (\n <div\n className={cn(\"flex flex-col border border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)]\", className)}\n data-slot=\"report-builder\"\n {...props}\n >\n <FieldsBar\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onSelectionChange={onSelectionChange}\n />\n {filterFields && filterFields.length > 0 && onFiltersChange && (\n <FiltersBar\n filterFields={filterFields}\n filters={filters}\n onFiltersChange={onFiltersChange}\n />\n )}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/advanced/ReportBuilder/ReportBuilder.tsx"],"names":[],"mappings":"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","file":"chunk-FCIF6H6E.js","sourcesContent":["\"use client\"\n\n// ReportBuilder — a faithful copy of Google Ad Manager's report builder bar:\n// a dimensions+metrics chip strip with an inline typeahead field, a sentence-\n// chip filter row (\"Source (src) is any of a, b\") with an inline \"Add filter\"\n// field, and the \"All dimensions and metrics\" View-all dialog (draft + Apply).\n//\n// Interaction contract (observed on the live GAM builder, 2026-06-09):\n// • Chips are inert — only their delete × reacts. The ONLY dropdown opener is\n// the inline text field; typing filters; checkboxes toggle without closing.\n// • \"Add filter\" is an inline field too: focusing lists the filter fields,\n// typing filters them, picking one opens that field's editor popup\n// (title + ✕, operator, value chips + type-to-search, blue Apply).\n// • \"View all\" opens a near-fullscreen dialog where selections are a DRAFT —\n// only Apply commits, Cancel discards.\n//\n// Visuals measured from the live GAM DOM: chips 24px + 1px #dadce0 border at\n// 12px radius, labels 13px/500 #5f6368, field glyphs 16px (#4285f4 dimension,\n// #34a853 \"123\" metric), popups 8px radius with Material's two-layer shadow,\n// internal dividers #e0e0e0, placeholders #757575, blue accents #1a73e8 /\n// #1967d2 / #e8f0fe.\n\nimport type {\n ReportBuilderField,\n ReportBuilderFieldKind,\n ReportBuilderFilter,\n ReportBuilderFilterField,\n ReportBuilderProps,\n} from \"./ReportBuilder.types\"\n\nimport { Filter, Search, Shapes, Table, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Dialog, DialogContent, DialogTitle } from \"../../feedback/Dialog\"\nimport { Popover, PopoverAnchor, PopoverContent } from \"../../feedback/Popover\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { NumberInput } from \"../../forms/NumberInput\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\n\nconst NUMBER_OPS = [\n { v: \">=\", l: \"≥\" },\n { v: \"<=\", l: \"≤\" },\n { v: \">\", l: \">\" },\n { v: \"<\", l: \"<\" },\n { v: \"=\", l: \"=\" },\n { v: \"between\", l: \"between\" },\n] as const\n\n/** GAM's blue Material checkbox — 18px, 2px #757575 border, checked #1a73e8. */\nconst GAM_CHECKBOX =\n \"size-[18px] rounded-xs border-2 border-[color:var(--report-builder-fg-subtle)] data-[state=checked]:border-[color:var(--report-builder-accent)] data-[state=checked]:bg-[color:var(--report-builder-accent)] data-[state=checked]:text-[color:var(--report-builder-on-accent)]\"\n\n/** GAM popup container — 8px radius, no border, Material two-layer shadow. */\nconst GAM_POPUP =\n \"rounded-lg border-0 p-0 [--report-builder-popup-shadow:0_1px_2px_0_var(--report-builder-shadow),0_2px_6px_2px_var(--report-builder-shadow-subtle)] shadow-[var(--report-builder-popup-shadow)]\"\n\nconst numFmt = (n: null | number | undefined) =>\n n == null ? \"\" : n.toLocaleString(\"en-US\")\n\n/** \"a, b, c\" up to 3 values, then \"+N\". */\nfunction listFmt(vals: string[]): string {\n const head = vals.slice(0, 3).join(\", \")\n return vals.length > 3 ? `${head} +${String(vals.length - 3)}` : head\n}\n\n/** Editor prefill for a filter field, from an existing filter if any. */\nfunction editorStateFor(existing?: ReportBuilderFilter) {\n return {\n a: existing?.a != null ? String(existing.a) : \"\",\n b: existing?.b != null ? String(existing.b) : \"\",\n op:\n existing && existing.op !== \"anyOf\" && existing.op !== \"contains\"\n ? existing.op\n : \">=\",\n text: existing?.text ?? \"\",\n vals: existing?.values ?? [],\n }\n}\n\n/** GAM shows custom keys as \"Label (key)\"; natives (label == key) plain. */\nfunction fieldLabel(label: string, key: string): string {\n return label.toLowerCase() === key.toLowerCase() ? label : `${label} (${key})`\n}\n\n/** Material \"123\" metric glyph, rendered as bold text like GAM's icon. */\nfunction MetricGlyph() {\n return (\n <span className=\"flex h-4 w-[22px] items-center justify-center text-[12px] font-bold leading-none tracking-tighter text-[color:var(--report-builder-positive)]\">\n 123\n </span>\n )\n}\n\n/** Material \"category\" dimension glyph — 16px, #4285f4. Lucide Shapes ≈ category. */\nfunction DimGlyph() {\n return <Shapes className=\"shrink-0 text-[color:var(--report-builder-accent-bright)]\" size={16} />\n}\n\nfunction KindGlyph({ kind }: { kind: ReportBuilderFieldKind }) {\n return kind === \"metric\" ? <MetricGlyph /> : <DimGlyph />\n}\n\n/** material-chip, measured: 24px tall (+1px border), 12px radius, #dadce0\n * outline, white bg, 12px left pad, 13px/500 #5f6368 label, 32×24 delete\n * button. `active` = GAM's blue editing highlight. */\nfunction GamChip({\n icon,\n children,\n active,\n onClick,\n onRemove,\n}: {\n active?: boolean\n children: React.ReactNode\n icon?: React.ReactNode\n onClick?: () => void\n onRemove?: () => void\n}) {\n return (\n <span\n className={cn(\n \"inline-flex h-[26px] items-center rounded-xl border pl-3 text-[13px] font-medium\",\n active\n ? \"border-[color:var(--report-builder-accent-border)] bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] text-[color:var(--report-builder-fg-muted)]\",\n !onRemove && \"pr-3\",\n onClick && \"cursor-pointer\",\n onClick && !active && \"hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n onClick={onClick}\n >\n {icon && <span className=\"mr-2 flex items-center\">{icon}</span>}\n <span className=\"whitespace-nowrap\">{children}</span>\n {onRemove && (\n <button\n className={cn(\n \"flex h-6 w-8 items-center justify-center\",\n active ? \"text-[color:var(--report-builder-accent-hover)]\" : \"text-[color:var(--report-builder-fg-muted)] hover:text-[color:var(--report-builder-fg-secondary)]\"\n )}\n aria-label=\"Remove\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n >\n <X size={18} />\n </button>\n )}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// \"All dimensions and metrics\" dialog (GAM's View-all modal)\n// ---------------------------------------------------------------------------\n\nfunction AllFieldsDialog({\n onOpenChange,\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: {\n dimensions: string[]\n fields: ReportBuilderField[]\n metrics: string[]\n onOpenChange: (o: boolean) => void\n onSelectionChange: ReportBuilderProps[\"onSelectionChange\"]\n}) {\n // The dialog is mounted fresh on every open (see FieldsBar), so the draft\n // is simply seeded from props at mount time — no re-seeding effect needed.\n const [draftDims, setDraftDims] = React.useState<string[]>(dimensions)\n const [draftMets, setDraftMets] = React.useState<string[]>(metrics)\n const [display, setDisplay] = React.useState<\"all\" | \"dimensions\" | \"metrics\">(\"all\")\n const [category, setCategory] = React.useState<\"dimensions\" | \"metrics\" | \"popular\">(\n \"popular\"\n )\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n\n function toggleDraft(kind: ReportBuilderFieldKind, key: string) {\n const [cur, set] =\n kind === \"dimension\"\n ? ([draftDims, setDraftDims] as const)\n : ([draftMets, setDraftMets] as const)\n set(cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key])\n }\n\n function apply() {\n onSelectionChange(\"dimensions\", draftDims)\n onSelectionChange(\"metrics\", draftMets)\n onOpenChange(false)\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => {\n if (!match(f.label)) return false\n if (display === \"dimensions\" && f.kind !== \"dimension\") return false\n if (display === \"metrics\" && f.kind !== \"metric\") return false\n if (category === \"dimensions\" && f.kind !== \"dimension\") return false\n if (category === \"metrics\" && f.kind !== \"metric\") return false\n return true\n })\n const selected = [\n ...draftDims.map((k) => fields.find((f) => f.kind === \"dimension\" && f.key === k)),\n ...draftMets.map((k) => fields.find((f) => f.kind === \"metric\" && f.key === k)),\n ].filter((f): f is ReportBuilderField => !!f)\n\n const CATS = [\n { k: \"popular\", l: \"Popular\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n const DISPLAYS = [\n { k: \"all\", l: \"All\" },\n { k: \"dimensions\", l: \"Dimensions\" },\n { k: \"metrics\", l: \"Metrics\" },\n ] as const\n\n return (\n <Dialog open onOpenChange={onOpenChange}>\n <DialogContent\n className=\"left-0 top-0 flex h-screen max-h-screen w-[min(1500px,96vw)] max-w-none translate-x-0 translate-y-0 flex-col gap-0 rounded-none border-0 bg-[color:var(--report-builder-surface)] p-0 text-[color:var(--report-builder-fg)]\"\n showCloseButton={false}\n >\n {/* header: ✕ + title + Display toggles */}\n <div className=\"flex shrink-0 items-center gap-4 px-4 py-3\">\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1.5 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n <X size={20} />\n </button>\n <DialogTitle className=\"text-xl font-normal text-[color:var(--report-builder-fg)]\">\n All dimensions and metrics\n </DialogTitle>\n <div className=\"flex-1\" />\n <span className=\"text-sm text-[color:var(--report-builder-fg-muted)]\">Display</span>\n <div className=\"flex gap-2\">\n {DISPLAYS.map((d) => (\n <button\n key={d.k}\n className={cn(\n \"h-8 rounded px-3 text-sm font-medium\",\n display === d.k\n ? \"bg-[color:var(--report-builder-accent-bg)] text-[color:var(--report-builder-accent-hover)]\"\n : \"border border-[color:var(--report-builder-border)] text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setDisplay(d.k)\n }}\n >\n {display === d.k ? \"✓ \" : \"\"}\n {d.l}\n </button>\n ))}\n </div>\n </div>\n {/* search */}\n <div className=\"flex shrink-0 items-center gap-3 border-y border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <Search className=\"text-[color:var(--report-builder-fg-muted)]\" size={18} />\n <input\n autoFocus\n className=\"w-full bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Search\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n }}\n />\n </div>\n {/* body: categories | list | selected | description */}\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"w-56 shrink-0 overflow-auto border-r border-[color:var(--report-builder-border-strong)] py-1\">\n {CATS.map((c) => (\n <button\n key={c.k}\n className={cn(\n \"flex h-9 w-full items-center px-4 text-left text-sm\",\n category === c.k\n ? \"bg-[color:var(--report-builder-surface-hover)] text-[color:var(--report-builder-fg)]\"\n : \"text-[color:var(--report-builder-fg-secondary)] hover:bg-[color:var(--report-builder-surface-subtle)]\"\n )}\n type=\"button\"\n onClick={() => {\n setCategory(c.k)\n }}\n >\n {c.l}\n </button>\n ))}\n </div>\n <div className=\"min-w-0 flex-[1.4] overflow-auto py-1\">\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? draftDims.includes(f.key)\n : draftMets.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-9 cursor-pointer items-center gap-3 px-4 text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles from\n // the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onBlur={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggleDraft(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-3 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"w-96 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)]\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <span className=\"text-sm font-medium text-[color:var(--report-builder-fg)]\">\n {selected.length} Selected\n </span>\n <button\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setDraftDims([])\n setDraftMets([])\n }}\n >\n Clear all\n </button>\n </div>\n {selected.map((f) => (\n <div key={`${f.kind}:${f.key}`} className=\"px-4 py-1.5\">\n <div className=\"text-xs text-[color:var(--report-builder-fg-muted)]\">\n {f.kind === \"dimension\" ? \"Dimensions\" : \"Metrics\"}\n </div>\n <div className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n <span className=\"flex-1 text-sm text-[color:var(--report-builder-fg)]\">{f.label}</span>\n <button\n aria-label={`Remove ${f.label}`}\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n toggleDraft(f.kind, f.key)\n }}\n >\n <X size={16} />\n </button>\n </div>\n </div>\n ))}\n </div>\n <div className=\"w-80 shrink-0 overflow-auto border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n {/* footer: Apply / Cancel */}\n <div className=\"flex shrink-0 items-center gap-4 border-t border-[color:var(--report-builder-border-strong)] px-4 py-3\">\n <button\n className=\"rounded bg-[color:var(--report-builder-accent)] px-6 py-2 text-sm font-medium text-[color:var(--report-builder-on-accent)] hover:bg-[color:var(--report-builder-accent-hover)] disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={draftDims.length === 0 || draftMets.length === 0}\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n <button\n className=\"rounded px-2 py-2 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={() => {\n onOpenChange(false)\n }}\n >\n Cancel\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Dimensions + metrics chip strip\n// ---------------------------------------------------------------------------\n\nfunction FieldsBar({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n}: Pick<\n ReportBuilderProps,\n \"dimensions\" | \"fields\" | \"metrics\" | \"onSelectionChange\"\n>) {\n const [open, setOpen] = React.useState(false)\n const [viewAllOpen, setViewAllOpen] = React.useState(false)\n const [search, setSearch] = React.useState(\"\")\n const [hovered, setHovered] = React.useState<null | string>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const byKey = (kind: ReportBuilderFieldKind, key: string) =>\n fields.find((f) => f.kind === kind && f.key === key)\n\n function toggle(kind: ReportBuilderFieldKind, key: string) {\n const plural = kind === \"dimension\" ? \"dimensions\" : \"metrics\"\n const cur = kind === \"dimension\" ? dimensions : metrics\n if (cur.includes(key)) {\n if (cur.length === 1) return // keep at least one of each\n onSelectionChange(plural, cur.filter((k) => k !== key))\n } else {\n onSelectionChange(plural, [...cur, key])\n }\n }\n\n const match = (l: string) => l.toLowerCase().includes(search.trim().toLowerCase())\n const items = fields.filter((f) => match(f.label))\n\n return (\n <div className=\"flex items-start border-b border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)] py-3\">\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) {\n setSearch(\"\")\n setHovered(null)\n }\n }}\n >\n {/* anchor spans icon + strip so the dropdown is as wide as the strip */}\n <PopoverAnchor asChild>\n <div className=\"flex min-w-0 flex-1 items-start\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Table className=\"text-[color:var(--report-builder-fg)]\" size={24} strokeWidth={1.5} />\n </div>\n <div className=\"min-w-0 flex-1\">\n {/* chips are NOT a click target (GAM: only their × reacts) */}\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n {dimensions.map((k) => (\n <GamChip\n key={`d:${k}`}\n icon={<DimGlyph />}\n onRemove={\n dimensions.length > 1 ? () => { toggle(\"dimension\", k); } : undefined\n }\n >\n {byKey(\"dimension\", k)?.label ?? k}\n </GamChip>\n ))}\n {metrics.map((k) => (\n <GamChip\n key={`m:${k}`}\n icon={<MetricGlyph />}\n onRemove={metrics.length > 1 ? () => { toggle(\"metric\", k); } : undefined}\n >\n {byKey(\"metric\", k)?.label ?? k}\n </GamChip>\n ))}\n </div>\n {/* the inline search field — the ONLY opener, like GAM's combobox */}\n <input\n ref={inputRef}\n className=\"mt-2 w-full max-w-md bg-transparent text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Select dimensions and metrics\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n setOpen(true)\n }}\n />\n </div>\n </div>\n </PopoverAnchor>\n {/* GAM dropdown: strip-wide, two panes (list | description), View all footer */}\n <PopoverContent\n align=\"start\"\n className={GAM_POPUP}\n sideOffset={4}\n style={{ width: \"var(--radix-popper-anchor-width)\" }}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n <div className=\"flex\">\n <div className=\"max-h-[340px] flex-[1.6] overflow-auto py-1\">\n {!search.trim() && (\n <div className=\"px-4 pb-1 pt-2 text-xs font-normal text-[color:var(--report-builder-fg-subtle)]\">\n Popular\n </div>\n )}\n {items.map((f) => {\n const sel =\n f.kind === \"dimension\"\n ? dimensions.includes(f.key)\n : metrics.includes(f.key)\n return (\n <label\n key={`${f.kind}:${f.key}`}\n className=\"flex h-8 cursor-pointer items-center gap-3 px-4 text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n onMouseEnter={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onMouseLeave={() => {\n setHovered(null)\n }}\n // Mirror hover on keyboard focus so the description pane is\n // reachable without a mouse (WCAG 2.1 AA). Focus bubbles\n // from the inner checkbox to this label.\n onFocus={() => {\n setHovered(`${f.kind}:${f.key}`)\n }}\n onBlur={() => {\n setHovered(null)\n }}\n >\n <Checkbox\n checked={sel}\n className={GAM_CHECKBOX}\n onCheckedChange={() => {\n toggle(f.kind, f.key)\n }}\n />\n <span className=\"flex items-center gap-2\">\n <KindGlyph kind={f.kind} />\n {f.label}\n </span>\n </label>\n )\n })}\n {items.length === 0 && (\n <div className=\"px-4 py-2 text-sm text-[color:var(--report-builder-fg-subtle)]\">No matches</div>\n )}\n </div>\n <div className=\"min-h-[200px] flex-1 border-l border-[color:var(--report-builder-border-strong)] p-4 text-sm text-[color:var(--report-builder-fg)]\">\n {hovered\n ? (fields.find((f) => `${f.kind}:${f.key}` === hovered)?.description ??\n fields.find((f) => `${f.kind}:${f.key}` === hovered)?.label)\n : \"Hover over a dimension or metric to see a description\"}\n </div>\n </div>\n <div className=\"border-t border-[color:var(--report-builder-border-strong)] px-4 py-2.5\">\n <button\n aria-label=\"View all fields\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n </PopoverContent>\n </Popover>\n <div className=\"flex shrink-0 items-center self-stretch border-l border-[color:var(--report-builder-border)] px-4\">\n <button\n aria-label=\"View all dimensions and metrics\"\n className=\"text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:underline\"\n type=\"button\"\n onClick={() => {\n setViewAllOpen(true)\n }}\n >\n View all\n </button>\n </div>\n {viewAllOpen && (\n <AllFieldsDialog\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onOpenChange={setViewAllOpen}\n onSelectionChange={onSelectionChange}\n />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Filter chips row\n// ---------------------------------------------------------------------------\n\nfunction filterChipLabel(f: ReportBuilderFilter, ff?: ReportBuilderFilterField): string {\n const label = ff ? fieldLabel(ff.label, ff.key) : f.field\n if (f.op === \"anyOf\") return `${label} is any of ${listFmt(f.values ?? [])}`\n if (f.op === \"contains\") return `${label} contains \"${f.text ?? \"\"}\"`\n if (f.op === \"between\") return `${ff?.label ?? f.field} between ${numFmt(f.a)} and ${numFmt(f.b)}`\n const op = NUMBER_OPS.find((o) => o.v === f.op)?.l ?? f.op\n return `${ff?.label ?? f.field} ${op} ${numFmt(f.a)}`\n}\n\n/** Build the filter entry from editor state.\n * Returns the entry, `null` for an empty editor (→ remove the filter), or\n * `\"invalid\"` for unparsable numeric input (→ keep the editor open). */\nfunction buildFilterEntry(\n ff: ReportBuilderFilterField,\n s: { a: string; b: string; op: string; text: string; vals: string[] }\n): \"invalid\" | null | ReportBuilderFilter {\n if (ff.type === \"enum\") {\n return s.vals.length ? { field: ff.key, op: \"anyOf\", values: s.vals } : null\n }\n if (ff.type === \"text\") {\n const t = s.text.trim()\n return t ? { field: ff.key, op: \"contains\", text: t } : null\n }\n const na = Number.parseFloat(s.a)\n if (Number.isNaN(na)) return \"invalid\"\n const nb = s.op === \"between\" ? Number.parseFloat(s.b) : null\n if (nb != null && Number.isNaN(nb)) return \"invalid\"\n return { a: na, b: nb, field: ff.key, op: s.op as ReportBuilderFilter[\"op\"] }\n}\n\nfunction FiltersBar({\n filterFields,\n filters,\n onFiltersChange,\n}: {\n filterFields: ReportBuilderFilterField[]\n filters: ReportBuilderFilter[]\n onFiltersChange: (filters: ReportBuilderFilter[]) => void\n}) {\n const [open, setOpen] = React.useState(false)\n const [fieldKey, setFieldKey] = React.useState<null | string>(null) // null = field list\n const [editIdx, setEditIdx] = React.useState<null | number>(null)\n const [vals, setVals] = React.useState<string[]>([])\n const [text, setText] = React.useState(\"\")\n const [op, setOp] = React.useState<string>(\">=\")\n const [a, setA] = React.useState(\"\")\n const [b, setB] = React.useState(\"\")\n const [fsearch, setFsearch] = React.useState(\"\") // field-list typeahead\n const [vsearch, setVsearch] = React.useState(\"\") // value typeahead in editor\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const fieldOf = (key: string) => filterFields.find((f) => f.key === key)\n\n function reset() {\n setFieldKey(null)\n setEditIdx(null)\n setVals([])\n setText(\"\")\n setOp(\">=\")\n setA(\"\")\n setB(\"\")\n setFsearch(\"\")\n setVsearch(\"\")\n }\n\n function openEditor(key: string, idx?: number) {\n const ff = fieldOf(key)\n if (!ff) return\n // enum/text fields keep one filter per field — editing replaces it\n const existingIdx =\n idx ?? (ff.type === \"number\" ? -1 : filters.findIndex((x) => x.field === key))\n const seed = editorStateFor(existingIdx >= 0 ? filters[existingIdx] : undefined)\n setFieldKey(key)\n setEditIdx(existingIdx >= 0 ? existingIdx : null)\n setVsearch(\"\")\n setVals(seed.vals)\n setText(seed.text)\n setOp(seed.op)\n setA(seed.a)\n setB(seed.b)\n setOpen(true)\n }\n\n function apply() {\n const ff = fieldKey ? fieldOf(fieldKey) : null\n if (!ff) return\n const entry = buildFilterEntry(ff, { a, b, op, text, vals })\n if (entry === \"invalid\") return\n const next = [...filters]\n if (editIdx != null) {\n if (entry) next[editIdx] = entry\n else next.splice(editIdx, 1)\n } else if (entry) {\n next.push(entry)\n }\n onFiltersChange(next)\n setOpen(false)\n reset()\n }\n\n const editorField = fieldKey ? fieldOf(fieldKey) : null\n const valueOptions = editorField?.options ?? []\n const valueSuggestions = valueOptions.filter(\n (v) => !vals.includes(v) && v.toLowerCase().includes(vsearch.trim().toLowerCase())\n )\n const fieldMatches = (l: string) =>\n l.toLowerCase().includes(fsearch.trim().toLowerCase())\n\n return (\n <div className=\"flex min-h-12 items-center bg-[color:var(--report-builder-surface)] py-2\">\n <div className=\"flex shrink-0 items-center px-3\">\n <Filter className=\"text-[color:var(--report-builder-accent)]\" fill=\"currentColor\" size={20} strokeWidth={0} />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1\">\n {filters.map((f, i) => (\n <GamChip\n // Content-based key, not the array index: number fields allow\n // duplicate filters on the same field, so an index key mis-keys\n // survivors on removal/reorder. The chip label is unique per filter.\n key={`${f.field}:${filterChipLabel(f, fieldOf(f.field))}`}\n active={open && editIdx === i}\n onClick={() => {\n openEditor(f.field, i)\n }}\n onRemove={() => {\n onFiltersChange(filters.filter((_, j) => j !== i))\n }}\n >\n {filterChipLabel(f, fieldOf(f.field))}\n </GamChip>\n ))}\n {/* \"Add filter\" inline field — the opener, like GAM's combobox */}\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o)\n if (!o) reset()\n }}\n >\n <PopoverAnchor asChild>\n <input\n ref={inputRef}\n className=\"w-28 bg-transparent px-2 py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)]\"\n placeholder=\"Add filter\"\n value={fsearch}\n onChange={(e) => {\n setFsearch(e.target.value)\n if (!open) setOpen(true)\n }}\n onFocus={() => {\n if (fieldKey === null) setOpen(true)\n }}\n />\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n className={cn(fieldKey === null ? \"w-72\" : \"w-[26rem]\", GAM_POPUP)}\n onInteractOutside={(e) => {\n if (e.target === inputRef.current) e.preventDefault()\n }}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n }}\n >\n {fieldKey === null ? (\n // step 1 — field list (filtered by the inline field's text)\n <div className=\"max-h-80 overflow-auto py-1\">\n {filterFields\n .filter((f) => fieldMatches(f.label))\n .map((f) => (\n <button\n key={f.key}\n className=\"flex h-8 w-full items-center gap-2 px-4 text-left text-[15px] text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n openEditor(f.key)\n }}\n >\n <KindGlyph kind={f.glyph ?? \"dimension\"} />\n {f.label}\n </button>\n ))}\n </div>\n ) : (\n // step 2 — GAM editor popup: title + ✕, operator, values, Apply\n <div>\n <div className=\"flex items-center justify-between px-3 pb-1 pt-3\">\n <span className=\"text-base text-[color:var(--report-builder-fg)]\">\n {editorField ? fieldLabel(editorField.label, editorField.key) : fieldKey}\n </span>\n <button\n aria-label=\"Close\"\n className=\"rounded-full p-1 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n setOpen(false)\n reset()\n }}\n >\n <X size={18} />\n </button>\n </div>\n {editorField?.type === \"text\" ? (\n <div className=\"px-3 py-2\">\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[13px] text-[color:var(--report-builder-fg-muted)]\">\n contains\n </div>\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={text}\n onChange={(e) => {\n setText(e.target.value)\n }}\n />\n </div>\n ) : editorField?.type === \"number\" ? (\n <div className=\"flex items-center gap-2 px-3 py-2\">\n <Select value={op} onValueChange={setOp}>\n <SelectTrigger className=\"w-24\" size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {NUMBER_OPS.map((o) => (\n <SelectItem key={o.v} value={o.v}>\n {o.l}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <NumberInput\n placeholder=\"value\"\n value={a}\n onChange={(e) => {\n setA(e.target.value)\n }}\n />\n {op === \"between\" && (\n <NumberInput\n placeholder=\"to\"\n value={b}\n onChange={(e) => {\n setB(e.target.value)\n }}\n />\n )}\n </div>\n ) : (\n <div className=\"px-3 py-2\">\n {/* operator box (enum fields are \"is any of\") */}\n <div className=\"mb-2 rounded border border-[color:var(--report-builder-border)] px-3 py-2 text-[13px] text-[color:var(--report-builder-fg-muted)]\">\n is any of\n </div>\n {/* selected values as chips, like GAM */}\n {vals.length > 0 && (\n <div className=\"mb-1 flex flex-wrap gap-x-2 gap-y-1\">\n {vals.map((v) => (\n <GamChip\n key={v}\n onRemove={() => {\n setVals((p) => p.filter((x) => x !== v))\n }}\n >\n {v}\n </GamChip>\n ))}\n </div>\n )}\n <input\n autoFocus\n className=\"w-full border-b border-[color:var(--report-builder-border)] bg-transparent py-1 text-sm text-[color:var(--report-builder-fg)] outline-none placeholder:text-[color:var(--report-builder-fg-subtle)] focus:border-[color:var(--report-builder-accent)]\"\n placeholder=\"Type to search\"\n value={vsearch}\n onChange={(e) => {\n setVsearch(e.target.value)\n }}\n // Keyboard parity with GAM: Enter adds the first\n // suggestion, so the enum editor is operable without a\n // mouse (WCAG 2.1 AA).\n onKeyDown={(e) => {\n const first = valueSuggestions[0]\n if (e.key === \"Enter\" && first) {\n e.preventDefault()\n setVals((p) => [...p, first])\n setVsearch(\"\")\n }\n }}\n />\n <div className=\"mt-1 max-h-44 overflow-auto\">\n {valueSuggestions.map((v) => (\n <button\n key={v}\n className=\"flex h-8 w-full items-center px-2 text-left text-sm text-[color:var(--report-builder-fg-strong)] hover:bg-[color:var(--report-builder-surface-muted)]\"\n type=\"button\"\n onClick={() => {\n setVals((p) => [...p, v])\n setVsearch(\"\")\n }}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n )}\n {/* GAM's blue \"Apply\" text button */}\n <div className=\"flex justify-end px-3 pb-2 pt-1\">\n <button\n className=\"rounded px-2 py-1 text-sm font-medium text-[color:var(--report-builder-accent-hover)] hover:bg-[color:var(--report-builder-accent-bg-subtle)]\"\n type=\"button\"\n onClick={apply}\n >\n Apply\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n {filters.length > 0 && (\n <button\n aria-label=\"Clear all filters\"\n className=\"mx-2 flex shrink-0 items-center rounded-full p-2 text-[color:var(--report-builder-fg-muted)] hover:bg-[color:var(--report-builder-surface-hover)]\"\n type=\"button\"\n onClick={() => {\n onFiltersChange([])\n }}\n >\n <X size={20} />\n </button>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ReportBuilder — the bordered card with both bars\n// ---------------------------------------------------------------------------\n\n/**\n * ReportBuilder - GAM-style report builder bar\n *\n * A faithful copy of Google Ad Manager's report builder: a dimensions+metrics\n * chip strip with inline typeahead, a sentence-chip filter row with an inline\n * \"Add filter\" field and per-field editors, and the \"All dimensions and\n * metrics\" View-all dialog with draft + Apply.\n *\n * @example\n * ```tsx\n * <ReportBuilder\n * fields={[\n * { key: \"date\", label: \"Date\", kind: \"dimension\" },\n * { key: \"rev\", label: \"Revenue\", kind: \"metric\" },\n * ]}\n * dimensions={[\"date\"]}\n * metrics={[\"rev\"]}\n * onSelectionChange={(kind, keys) => { ... }}\n * filterFields={[\n * { key: \"src\", label: \"Source\", type: \"enum\", options: [\"google\", \"facebook\"] },\n * { key: \"rev\", label: \"Revenue\", type: \"number\", glyph: \"metric\" },\n * ]}\n * filters={filters}\n * onFiltersChange={setFilters}\n * />\n * ```\n */\nexport function ReportBuilder({\n fields,\n dimensions,\n metrics,\n onSelectionChange,\n filterFields,\n filters = [],\n onFiltersChange,\n className,\n ...props\n}: ReportBuilderProps) {\n return (\n <div\n className={cn(\"flex flex-col border border-[color:var(--report-builder-border)] bg-[color:var(--report-builder-surface)]\", className)}\n data-slot=\"report-builder\"\n {...props}\n >\n <FieldsBar\n dimensions={dimensions}\n fields={fields}\n metrics={metrics}\n onSelectionChange={onSelectionChange}\n />\n {filterFields && filterFields.length > 0 && onFiltersChange && (\n <FiltersBar\n filterFields={filterFields}\n filters={filters}\n onFiltersChange={onFiltersChange}\n />\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buttonVariants } from './chunk-
|
|
1
|
+
import { buttonVariants } from './chunk-7TF5PVEU.js';
|
|
2
2
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
3
3
|
import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';
|
|
4
4
|
import { cva } from 'class-variance-authority';
|
|
@@ -128,5 +128,5 @@ function PaginationEllipsis({
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, paginationContentVariants, paginationEllipsisVariants, paginationNextVariants, paginationPreviousVariants, paginationVariants };
|
|
131
|
-
//# sourceMappingURL=chunk-
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
131
|
+
//# sourceMappingURL=chunk-GGUWEAYD.js.map
|
|
132
|
+
//# sourceMappingURL=chunk-GGUWEAYD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/Pagination/Pagination.variants.ts","../src/components/navigation/Pagination/Pagination.tsx"],"names":[],"mappings":";;;;;;AAKO,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC;AACF,CAAC;AAKM,IAAM,4BAA4B,GAAA,CAAI;AAAA,EAC3C;AACF,CAAC;AAKM,IAAM,6BAA6B,GAAA,CAAI;AAAA,EAC5C;AACF,CAAC;AAKM,IAAM,yBAAyB,GAAA,CAAI;AAAA,EACxC;AACF,CAAC;AAKM,IAAM,6BAA6B,GAAA,CAAI;AAAA,EAC5C;AACF,CAAC;ACcD,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,YAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,YAAA;AAAA,MACV,IAAA,EAAK,YAAA;AAAA,MACJ,GAAG;AAAA;AAAA,GACN;AAEJ;AAKA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA0B,EAAG,SAAS,CAAA;AAAA,MACpD,WAAA,EAAU,oBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAKA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAAwB;AACzD,EAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAG,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AACpD;AAOA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,cAAA,CAAe;AAAA,UACb,OAAA,EAAS,WAAW,SAAA,GAAY,OAAA;AAAA,UAChC;AAAA,SACD,CAAA;AAAA,QACD;AAAA,OACF;AAAA,MACA,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,MAClC,aAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAU,iBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAOA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,uBACE,IAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,qBAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,CAAA;AAAA,MACrD,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,SAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,wBACjB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,QAAA,EAAA,UAAA,EAAQ;AAAA;AAAA;AAAA,GAC5C;AAEJ;AAOA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,uBACE,IAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,iBAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAuB,EAAG,SAAS,CAAA;AAAA,MACjD,WAAA,EAAU,iBAAA;AAAA,MACV,IAAA,EAAK,SAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,4BACrC,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAAA,GACpB;AAEJ;AAKA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,CAAA;AAAA,MACrD,WAAA,EAAU,qBAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,WAAU,QAAA,EAAS,CAAA;AAAA,wBACvC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACtC;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/navigation/Pagination/Pagination.variants.ts","../src/components/navigation/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-GGUWEAYD.js","sourcesContent":["import { cva } from \"class-variance-authority\"\n\n/**\n * Pagination root variant styles\n */\nexport const paginationVariants = cva([\n \"mx-auto flex w-full justify-center\",\n])\n\n/**\n * PaginationContent variant styles\n */\nexport const paginationContentVariants = cva([\n \"flex flex-row items-center gap-[var(--pagination-content-gap)]\",\n])\n\n/**\n * PaginationPrevious variant styles\n */\nexport const paginationPreviousVariants = cva([\n \"gap-[var(--pagination-button-gap)] px-[var(--pagination-button-padding-x)] sm:pl-[var(--pagination-button-padding-x)]\",\n])\n\n/**\n * PaginationNext variant styles\n */\nexport const paginationNextVariants = cva([\n \"gap-[var(--pagination-button-gap)] px-[var(--pagination-button-padding-x)] sm:pr-[var(--pagination-button-padding-x)]\",\n])\n\n/**\n * PaginationEllipsis variant styles\n */\nexport const paginationEllipsisVariants = cva([\n \"flex size-[var(--pagination-ellipsis-size)] items-center justify-center\",\n])\n","import type {\n PaginationContentProps,\n PaginationEllipsisProps,\n PaginationItemProps,\n PaginationLinkProps,\n PaginationNextProps,\n PaginationPreviousProps,\n PaginationProps,\n} from \"./Pagination.types\"\n\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { buttonVariants } from \"../../primitives/Button\"\nimport {\n paginationContentVariants,\n paginationEllipsisVariants,\n paginationNextVariants,\n paginationPreviousVariants,\n paginationVariants,\n} from \"./Pagination.variants\"\n\n/**\n * Pagination - A navigation component for paginated content.\n *\n * Provides accessible navigation with previous/next buttons and page links.\n *\n * @example\n * <Pagination>\n * <PaginationContent>\n * <PaginationItem>\n * <PaginationPrevious href=\"#\" />\n * </PaginationItem>\n * <PaginationItem>\n * <PaginationLink href=\"#\">1</PaginationLink>\n * </PaginationItem>\n * <PaginationItem>\n * <PaginationLink href=\"#\" isActive>2</PaginationLink>\n * </PaginationItem>\n * <PaginationItem>\n * <PaginationNext href=\"#\" />\n * </PaginationItem>\n * </PaginationContent>\n * </Pagination>\n */\nfunction Pagination({ className, ...props }: PaginationProps) {\n return (\n <nav\n aria-label=\"pagination\"\n className={cn(paginationVariants(), className)}\n data-slot=\"pagination\"\n role=\"navigation\"\n {...props}\n />\n )\n}\n\n/**\n * PaginationContent - Container for pagination items.\n */\nfunction PaginationContent({\n className,\n ...props\n}: PaginationContentProps) {\n return (\n <ul\n className={cn(paginationContentVariants(), className)}\n data-slot=\"pagination-content\"\n {...props}\n />\n )\n}\n\n/**\n * PaginationItem - Wrapper for individual pagination elements.\n */\nfunction PaginationItem({ ...props }: PaginationItemProps) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\n/**\n * PaginationLink - A link to a specific page.\n *\n * Use isActive to indicate the current page.\n */\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n aria-current={isActive ? \"page\" : undefined}\n data-active={isActive}\n data-slot=\"pagination-link\"\n {...props}\n />\n )\n}\n\n/**\n * PaginationPrevious - Link to the previous page.\n *\n * Includes a chevron icon and \"Previous\" text on larger screens.\n */\nfunction PaginationPrevious({\n className,\n ...props\n}: PaginationPreviousProps) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(paginationPreviousVariants(), className)}\n data-slot=\"pagination-previous\"\n size=\"default\"\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\n/**\n * PaginationNext - Link to the next page.\n *\n * Includes a chevron icon and \"Next\" text on larger screens.\n */\nfunction PaginationNext({\n className,\n ...props\n}: PaginationNextProps) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(paginationNextVariants(), className)}\n data-slot=\"pagination-next\"\n size=\"default\"\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\n/**\n * PaginationEllipsis - Indicates more pages between visible page links.\n */\nfunction PaginationEllipsis({\n className,\n ...props\n}: PaginationEllipsisProps) {\n return (\n <span\n aria-hidden\n className={cn(paginationEllipsisVariants(), className)}\n data-slot=\"pagination-ellipsis\"\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from './chunk-
|
|
2
|
-
import { buttonVariants } from './chunk-
|
|
1
|
+
import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from './chunk-P7D6S6GX.js';
|
|
2
|
+
import { buttonVariants } from './chunk-7TF5PVEU.js';
|
|
3
3
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
4
4
|
import { LoaderCircle } from 'lucide-react';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -200,5 +200,5 @@ function ConfirmButton({
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
export { ConfirmButton };
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
204
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-LLI3JFJL.js.map
|
|
204
|
+
//# sourceMappingURL=chunk-LLI3JFJL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/primitives/ConfirmButton/ConfirmButton.tsx"],"names":[],"mappings":"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","file":"chunk-RRORYKXT.js","sourcesContent":["\"use client\"\n\nimport type { ConfirmButtonProps } from \"./ConfirmButton.types\"\n\nimport { LoaderCircle } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../feedback/AlertDialog\"\nimport { buttonVariants } from \"../Button\"\n\n/**\n * ConfirmButton - A button that requires confirmation before executing an action\n *\n * Combines a Button trigger with an AlertDialog for confirmation.\n * Supports typing validation for critical actions.\n *\n * @example\n * ```tsx\n * <ConfirmButton\n * variant=\"destructive\"\n * confirmTitle=\"Delete item?\"\n * confirmDescription=\"This action cannot be undone.\"\n * onConfirm={() => handleDelete()}\n * >\n * Delete\n * </ConfirmButton>\n * ```\n */\nfunction ConfirmButton({\n // Trigger button props\n className,\n variant,\n size,\n leftIcon,\n rightIcon,\n disabled,\n children,\n\n // Dialog configuration\n confirmTitle = \"Confirm action\",\n confirmDescription,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n confirmVariant = \"default\",\n\n // Typing validation\n requireTyping,\n typingPlaceholder,\n typingLabel,\n caseSensitive = true,\n\n // States\n loading = false,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n\n // Callbacks\n onConfirm,\n onCancel,\n\n ...props\n}: ConfirmButtonProps) {\n // Internal open state (uncontrolled mode)\n const [internalOpen, setInternalOpen] = React.useState(false)\n\n // Typing input value\n const [typingValue, setTypingValue] = React.useState(\"\")\n\n // Internal loading state for async onConfirm\n const [isConfirming, setIsConfirming] = React.useState(false)\n\n // Prevent double confirmation\n const confirmingRef = React.useRef(false)\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (isControlled) {\n controlledOnOpenChange?.(value)\n } else {\n setInternalOpen(value)\n }\n },\n [isControlled, controlledOnOpenChange]\n )\n\n // Track previous open state to reset typing during render (avoids useEffect anti-pattern)\n const prevOpenRef = React.useRef(open)\n if (prevOpenRef.current !== open) {\n prevOpenRef.current = open\n if (!open) {\n setTypingValue(\"\")\n confirmingRef.current = false\n }\n }\n\n // Check if typing matches requirement\n const typingMatches = React.useMemo(() => {\n if (!requireTyping) return true\n\n if (caseSensitive) {\n return typingValue === requireTyping\n }\n return typingValue.toLowerCase() === requireTyping.toLowerCase()\n }, [requireTyping, typingValue, caseSensitive])\n\n // Combined loading state\n const isLoading = loading || isConfirming\n\n // Confirm button should be disabled when loading or typing doesn't match\n const confirmDisabled = isLoading || !typingMatches\n\n // Track if cancel was triggered by button click\n const cancelTriggeredRef = React.useRef(false)\n\n // Handle dialog open change\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n // Don't allow closing while confirming\n if (isConfirming && !newOpen) return\n\n setOpen(newOpen)\n\n // Only call onCancel if dialog is closing and cancel wasn't already triggered\n if (!newOpen && !cancelTriggeredRef.current) {\n onCancel?.()\n }\n\n // Reset the flag after processing\n cancelTriggeredRef.current = false\n },\n [setOpen, onCancel, isConfirming]\n )\n\n // Handle cancel button click\n const handleCancel = React.useCallback(() => {\n cancelTriggeredRef.current = true\n onCancel?.()\n setOpen(false)\n }, [setOpen, onCancel])\n\n // Handle confirm button click\n const handleConfirm = React.useCallback(\n async (event: React.MouseEvent) => {\n // Prevent default AlertDialog behavior (auto-close)\n event.preventDefault()\n\n // Prevent double confirmation\n if (confirmingRef.current) return\n confirmingRef.current = true\n\n setIsConfirming(true)\n\n try {\n await onConfirm()\n // Close dialog on success\n setOpen(false)\n } catch {\n // Keep dialog open on error, allow retry\n confirmingRef.current = false\n // Error is not rethrown - caller should handle errors in onConfirm\n } finally {\n setIsConfirming(false)\n }\n },\n [onConfirm, setOpen]\n )\n\n // Render trigger button content\n const renderTriggerContent = () => (\n <>\n {leftIcon && (\n <span aria-hidden=\"true\" data-slot=\"left-icon\">\n {leftIcon}\n </span>\n )}\n {children}\n {rightIcon && (\n <span aria-hidden=\"true\" data-slot=\"right-icon\">\n {rightIcon}\n </span>\n )}\n </>\n )\n\n return (\n <AlertDialog open={open} onOpenChange={handleOpenChange}>\n <AlertDialogTrigger asChild>\n <button\n aria-disabled={disabled ?? undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n data-slot=\"confirm-button\"\n disabled={disabled}\n type=\"button\"\n {...props}\n >\n {renderTriggerContent()}\n </button>\n </AlertDialogTrigger>\n\n <AlertDialogContent data-slot=\"confirm-dialog\">\n <AlertDialogHeader data-slot=\"confirm-dialog-header\">\n <AlertDialogTitle data-slot=\"confirm-dialog-title\">\n {confirmTitle}\n </AlertDialogTitle>\n {confirmDescription ? (\n <AlertDialogDescription data-slot=\"confirm-dialog-description\">\n {confirmDescription}\n </AlertDialogDescription>\n ) : (\n <AlertDialogDescription className=\"sr-only\">\n Confirm or cancel this action.\n </AlertDialogDescription>\n )}\n </AlertDialogHeader>\n\n {requireTyping && (\n <div className=\"space-y-2\" data-slot=\"confirm-dialog-content\">\n {typingLabel && (\n <label\n className=\"text-sm font-medium text-foreground\"\n htmlFor=\"confirm-typing-input\"\n >\n {typingLabel}\n </label>\n )}\n <input\n aria-describedby={\n !typingMatches ? \"confirm-typing-error\" : undefined\n }\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\"\n data-slot=\"confirm-dialog-input\"\n id=\"confirm-typing-input\"\n placeholder={typingPlaceholder ?? requireTyping}\n type=\"text\"\n value={typingValue}\n onChange={(e) => { setTypingValue(e.target.value); }}\n />\n {typingValue && !typingMatches && (\n <p\n aria-live=\"polite\"\n className=\"text-sm text-destructive\"\n id=\"confirm-typing-error\"\n >\n The text you entered does not match.\n </p>\n )}\n </div>\n )}\n\n <AlertDialogFooter data-slot=\"confirm-dialog-footer\">\n <AlertDialogCancel\n data-slot=\"confirm-dialog-cancel\"\n disabled={isLoading}\n onClick={handleCancel}\n >\n {cancelLabel}\n </AlertDialogCancel>\n <AlertDialogAction\n className={cn(\n confirmVariant === \"destructive\" &&\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40\"\n )}\n aria-busy={isLoading || undefined}\n aria-disabled={confirmDisabled || undefined}\n data-slot=\"confirm-dialog-confirm\"\n disabled={confirmDisabled}\n onClick={(e) => { void handleConfirm(e); }}\n >\n {isLoading && (\n <LoaderCircle\n aria-hidden=\"true\"\n className=\"size-4 animate-spin\"\n />\n )}\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n\nexport { ConfirmButton }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/ConfirmButton/ConfirmButton.tsx"],"names":[],"mappings":"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","file":"chunk-LLI3JFJL.js","sourcesContent":["\"use client\"\n\nimport type { ConfirmButtonProps } from \"./ConfirmButton.types\"\n\nimport { LoaderCircle } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../feedback/AlertDialog\"\nimport { buttonVariants } from \"../Button\"\n\n/**\n * ConfirmButton - A button that requires confirmation before executing an action\n *\n * Combines a Button trigger with an AlertDialog for confirmation.\n * Supports typing validation for critical actions.\n *\n * @example\n * ```tsx\n * <ConfirmButton\n * variant=\"destructive\"\n * confirmTitle=\"Delete item?\"\n * confirmDescription=\"This action cannot be undone.\"\n * onConfirm={() => handleDelete()}\n * >\n * Delete\n * </ConfirmButton>\n * ```\n */\nfunction ConfirmButton({\n // Trigger button props\n className,\n variant,\n size,\n leftIcon,\n rightIcon,\n disabled,\n children,\n\n // Dialog configuration\n confirmTitle = \"Confirm action\",\n confirmDescription,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n confirmVariant = \"default\",\n\n // Typing validation\n requireTyping,\n typingPlaceholder,\n typingLabel,\n caseSensitive = true,\n\n // States\n loading = false,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n\n // Callbacks\n onConfirm,\n onCancel,\n\n ...props\n}: ConfirmButtonProps) {\n // Internal open state (uncontrolled mode)\n const [internalOpen, setInternalOpen] = React.useState(false)\n\n // Typing input value\n const [typingValue, setTypingValue] = React.useState(\"\")\n\n // Internal loading state for async onConfirm\n const [isConfirming, setIsConfirming] = React.useState(false)\n\n // Prevent double confirmation\n const confirmingRef = React.useRef(false)\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (isControlled) {\n controlledOnOpenChange?.(value)\n } else {\n setInternalOpen(value)\n }\n },\n [isControlled, controlledOnOpenChange]\n )\n\n // Track previous open state to reset typing during render (avoids useEffect anti-pattern)\n const prevOpenRef = React.useRef(open)\n if (prevOpenRef.current !== open) {\n prevOpenRef.current = open\n if (!open) {\n setTypingValue(\"\")\n confirmingRef.current = false\n }\n }\n\n // Check if typing matches requirement\n const typingMatches = React.useMemo(() => {\n if (!requireTyping) return true\n\n if (caseSensitive) {\n return typingValue === requireTyping\n }\n return typingValue.toLowerCase() === requireTyping.toLowerCase()\n }, [requireTyping, typingValue, caseSensitive])\n\n // Combined loading state\n const isLoading = loading || isConfirming\n\n // Confirm button should be disabled when loading or typing doesn't match\n const confirmDisabled = isLoading || !typingMatches\n\n // Track if cancel was triggered by button click\n const cancelTriggeredRef = React.useRef(false)\n\n // Handle dialog open change\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n // Don't allow closing while confirming\n if (isConfirming && !newOpen) return\n\n setOpen(newOpen)\n\n // Only call onCancel if dialog is closing and cancel wasn't already triggered\n if (!newOpen && !cancelTriggeredRef.current) {\n onCancel?.()\n }\n\n // Reset the flag after processing\n cancelTriggeredRef.current = false\n },\n [setOpen, onCancel, isConfirming]\n )\n\n // Handle cancel button click\n const handleCancel = React.useCallback(() => {\n cancelTriggeredRef.current = true\n onCancel?.()\n setOpen(false)\n }, [setOpen, onCancel])\n\n // Handle confirm button click\n const handleConfirm = React.useCallback(\n async (event: React.MouseEvent) => {\n // Prevent default AlertDialog behavior (auto-close)\n event.preventDefault()\n\n // Prevent double confirmation\n if (confirmingRef.current) return\n confirmingRef.current = true\n\n setIsConfirming(true)\n\n try {\n await onConfirm()\n // Close dialog on success\n setOpen(false)\n } catch {\n // Keep dialog open on error, allow retry\n confirmingRef.current = false\n // Error is not rethrown - caller should handle errors in onConfirm\n } finally {\n setIsConfirming(false)\n }\n },\n [onConfirm, setOpen]\n )\n\n // Render trigger button content\n const renderTriggerContent = () => (\n <>\n {leftIcon && (\n <span aria-hidden=\"true\" data-slot=\"left-icon\">\n {leftIcon}\n </span>\n )}\n {children}\n {rightIcon && (\n <span aria-hidden=\"true\" data-slot=\"right-icon\">\n {rightIcon}\n </span>\n )}\n </>\n )\n\n return (\n <AlertDialog open={open} onOpenChange={handleOpenChange}>\n <AlertDialogTrigger asChild>\n <button\n aria-disabled={disabled ?? undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n data-slot=\"confirm-button\"\n disabled={disabled}\n type=\"button\"\n {...props}\n >\n {renderTriggerContent()}\n </button>\n </AlertDialogTrigger>\n\n <AlertDialogContent data-slot=\"confirm-dialog\">\n <AlertDialogHeader data-slot=\"confirm-dialog-header\">\n <AlertDialogTitle data-slot=\"confirm-dialog-title\">\n {confirmTitle}\n </AlertDialogTitle>\n {confirmDescription ? (\n <AlertDialogDescription data-slot=\"confirm-dialog-description\">\n {confirmDescription}\n </AlertDialogDescription>\n ) : (\n <AlertDialogDescription className=\"sr-only\">\n Confirm or cancel this action.\n </AlertDialogDescription>\n )}\n </AlertDialogHeader>\n\n {requireTyping && (\n <div className=\"space-y-2\" data-slot=\"confirm-dialog-content\">\n {typingLabel && (\n <label\n className=\"text-sm font-medium text-foreground\"\n htmlFor=\"confirm-typing-input\"\n >\n {typingLabel}\n </label>\n )}\n <input\n aria-describedby={\n !typingMatches ? \"confirm-typing-error\" : undefined\n }\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\"\n data-slot=\"confirm-dialog-input\"\n id=\"confirm-typing-input\"\n placeholder={typingPlaceholder ?? requireTyping}\n type=\"text\"\n value={typingValue}\n onChange={(e) => { setTypingValue(e.target.value); }}\n />\n {typingValue && !typingMatches && (\n <p\n aria-live=\"polite\"\n className=\"text-sm text-destructive\"\n id=\"confirm-typing-error\"\n >\n The text you entered does not match.\n </p>\n )}\n </div>\n )}\n\n <AlertDialogFooter data-slot=\"confirm-dialog-footer\">\n <AlertDialogCancel\n data-slot=\"confirm-dialog-cancel\"\n disabled={isLoading}\n onClick={handleCancel}\n >\n {cancelLabel}\n </AlertDialogCancel>\n <AlertDialogAction\n className={cn(\n confirmVariant === \"destructive\" &&\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40\"\n )}\n aria-busy={isLoading || undefined}\n aria-disabled={confirmDisabled || undefined}\n data-slot=\"confirm-dialog-confirm\"\n disabled={confirmDisabled}\n onClick={(e) => { void handleConfirm(e); }}\n >\n {isLoading && (\n <LoaderCircle\n aria-hidden=\"true\"\n className=\"size-4 animate-spin\"\n />\n )}\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n\nexport { ConfirmButton }\n"]}
|