@akira-io/ui 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks.d.ts +6 -6
- package/dist/blocks.js +11 -13
- package/dist/blocks.js.map +1 -1
- package/dist/{chunk-RPCL7VFQ.js → chunk-2HLBBU3O.js} +6 -3
- package/dist/chunk-2HLBBU3O.js.map +1 -0
- package/dist/{chunk-QHZWW55M.js → chunk-3HKIYFWI.js} +23 -15
- package/dist/chunk-3HKIYFWI.js.map +1 -0
- package/dist/{chunk-CFDDAFPJ.js → chunk-DW42Z75X.js} +27 -13
- package/dist/chunk-DW42Z75X.js.map +1 -0
- package/dist/{chunk-ODYCBCKS.js → chunk-I5UZAJB4.js} +7 -6
- package/dist/chunk-I5UZAJB4.js.map +1 -0
- package/dist/{chunk-2WIIRDHT.js → chunk-MCMBS2SB.js} +4 -4
- package/dist/{chunk-2WIIRDHT.js.map → chunk-MCMBS2SB.js.map} +1 -1
- package/dist/{chunk-YOVY3KT6.js → chunk-NGMG2UWX.js} +3 -3
- package/dist/{chunk-YOVY3KT6.js.map → chunk-NGMG2UWX.js.map} +1 -1
- package/dist/{chunk-T2INZOCM.js → chunk-O5DZTX7D.js} +3 -3
- package/dist/{chunk-T2INZOCM.js.map → chunk-O5DZTX7D.js.map} +1 -1
- package/dist/{chunk-5AJFQ6C4.js → chunk-QNF4LJVT.js} +2 -2
- package/dist/chunk-QNF4LJVT.js.map +1 -0
- package/dist/{chunk-FWQFB37J.js → chunk-SBLZ6T3D.js} +3 -3
- package/dist/{chunk-FWQFB37J.js.map → chunk-SBLZ6T3D.js.map} +1 -1
- package/dist/{chunk-4SOQAVUP.js → chunk-SH5QZCOW.js} +46 -28
- package/dist/chunk-SH5QZCOW.js.map +1 -0
- package/dist/chunk-UTSTTTH5.js +48 -0
- package/dist/chunk-UTSTTTH5.js.map +1 -0
- package/dist/code.js +3 -3
- package/dist/{context-YWbxMH0C.d.ts → context-OwSoVEri.d.ts} +32 -3
- package/dist/editor.js +4 -5
- package/dist/editor.js.map +1 -1
- package/dist/{password-input-DcXX7SG9.d.ts → field-DWm5NXeV.d.ts} +1 -13
- package/dist/index.d.ts +14 -22
- package/dist/index.js +36 -28
- package/dist/index.js.map +1 -1
- package/dist/inertia.js +6 -7
- package/dist/inertia.js.map +1 -1
- package/dist/{button-Bj6My68b.d.ts → input-Dxnsxi-f.d.ts} +4 -1
- package/dist/{language-Dgjr9bm3.d.ts → language-Cv_N_53L.d.ts} +5 -2
- package/dist/locales/pt.d.ts +5 -5
- package/dist/locales/pt.js +7 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/shells.d.ts +2 -3
- package/dist/shells.js +6 -7
- package/dist/shells.js.map +1 -1
- package/dist/{sidebar-DqkFRUxQ.d.ts → sidebar-Bp6Q46j-.d.ts} +1 -2
- package/package.json +1 -1
- package/dist/chunk-4SOQAVUP.js.map +0 -1
- package/dist/chunk-5AJFQ6C4.js.map +0 -1
- package/dist/chunk-CFDDAFPJ.js.map +0 -1
- package/dist/chunk-ODYCBCKS.js.map +0 -1
- package/dist/chunk-QHZWW55M.js.map +0 -1
- package/dist/chunk-RPCL7VFQ.js.map +0 -1
- package/dist/chunk-TGF54WAO.js +0 -29
- package/dist/chunk-TGF54WAO.js.map +0 -1
- package/dist/chunk-XZCC6MTE.js +0 -26
- package/dist/chunk-XZCC6MTE.js.map +0 -1
- package/dist/input-Dpi7pXeR.d.ts +0 -6
package/dist/blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/blocks/command-palette.tsx","../src/blocks/danger-zone.tsx","../src/blocks/date-filter/context.tsx","../src/blocks/date-filter/fixed-panel.tsx","../src/blocks/date-filter/range.ts","../src/blocks/date-filter/relative-panel.tsx","../src/blocks/date-filter/summarise.ts","../src/blocks/date-filter/types.ts","../src/blocks/date-filter/date-filter.tsx","../src/blocks/date-filter/decode.ts","../src/blocks/date-filter/encode.ts","../src/blocks/form-overlay.tsx","../src/blocks/detail-edit-sheet.tsx","../src/blocks/form-dialog.tsx","../src/blocks/info-field.tsx","../src/blocks/localized-fields.tsx","../src/blocks/section-header.tsx","../src/blocks/settings-card.tsx","../src/blocks/settings-fields.tsx","../src/blocks/settings-page.tsx","../src/blocks/stat-card.tsx","../src/blocks/two-factor/types.ts","../src/blocks/two-factor/verify-form.tsx","../src/blocks/two-factor/challenge.tsx","../src/blocks/two-factor/disable-button.tsx","../src/blocks/two-factor/recovery-codes.tsx","../src/blocks/two-factor/scan-step.tsx","../src/blocks/two-factor/setup-dialog.tsx"],"names":["useState","jsxs","jsx","format","pt","ChevronLeft","CalendarDays","RANGE_SEPARATOR","RELATIVE_PREFIX","createContext","useContext","useId","EyeOff","Eye","useEffect","Fragment"],"mappings":"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","file":"blocks.js","sourcesContent":["import {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { useUiLabels } from '@/locales/context';\nimport { type LucideIcon } from 'lucide-react';\nimport { useCallback, useEffect, useState, type ReactNode } from 'react';\n\nexport interface CommandPaletteItem {\n id: string;\n label: string;\n icon?: LucideIcon;\n value?: string;\n hint?: string;\n}\n\nexport interface CommandPaletteGroup {\n heading: string;\n items: CommandPaletteItem[];\n}\n\nexport interface CommandPaletteLabels {\n placeholder: string;\n noResultsLabel: string;\n}\n\nexport const commandPaletteDefaultLabels: CommandPaletteLabels = {\n placeholder: 'Search...',\n noResultsLabel: 'No results found',\n};\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups: CommandPaletteGroup[];\n onSelect: (item: CommandPaletteItem) => void;\n query?: string;\n onQueryChange?: (query: string) => void;\n placeholder?: CommandPaletteLabels['placeholder'];\n noResultsLabel?: CommandPaletteLabels['noResultsLabel'];\n emptyState?: ReactNode;\n className?: string;\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n onSelect,\n query,\n onQueryChange,\n placeholder,\n noResultsLabel,\n emptyState,\n className,\n}: CommandPaletteProps) {\n const labels = useUiLabels('commandPalette', commandPaletteDefaultLabels, {\n placeholder,\n noResultsLabel,\n });\n const resolvedEmptyState = emptyState ?? labels.noResultsLabel;\n\n return (\n <CommandDialog\n open={open}\n onOpenChange={onOpenChange}\n className={className}\n >\n <CommandInput\n placeholder={labels.placeholder}\n value={query}\n onValueChange={onQueryChange}\n />\n <CommandList className=\"max-h-[360px]\">\n <CommandEmpty>{resolvedEmptyState}</CommandEmpty>\n\n {groups.map((group) => (\n <CommandGroup key={group.heading} heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n value={item.value ?? item.label}\n onSelect={() => onSelect(item)}\n >\n {item.icon && (\n <item.icon className=\"mr-2 size-4\" />\n )}\n <span className=\"font-medium\">\n {item.label}\n </span>\n {item.hint && (\n <span className=\"text-xs ml-auto text-muted-foreground\">\n {item.hint}\n </span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandDialog>\n );\n}\n\nexport function useCommandPalette(initialOpen = false) {\n const [open, setOpen] = useState(initialOpen);\n\n const toggle = useCallback(() => setOpen((previous) => !previous), []);\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggle();\n }\n };\n\n document.addEventListener('keydown', handler);\n\n return () => document.removeEventListener('keydown', handler);\n }, [toggle]);\n\n return { open, setOpen, toggle };\n}\n","import { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { TriangleAlert } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nexport interface DangerZoneLabels {\n title: string;\n description: string;\n actionLabel: string;\n confirmTitle: string;\n confirmDescription: string;\n confirmText: string;\n cancelText: string;\n requiredValueLabel: string;\n}\n\nexport const dangerZoneLabels: DangerZoneLabels = {\n title: 'Danger zone',\n description: 'These actions are permanent and cannot be undone.',\n actionLabel: 'Delete',\n confirmTitle: 'Confirm Action',\n confirmDescription:\n 'Are you sure you want to continue? This action cannot be undone.',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n requiredValueLabel: 'Type {{value}} to confirm',\n};\n\nexport interface DangerZoneAction {\n id: string;\n title: string;\n description?: string;\n actionLabel?: string;\n confirmTitle?: string;\n confirmDescription?: string;\n confirmText?: string;\n cancelText?: string;\n requiredValue?: string;\n requiredValueLabel?: string;\n disabled?: boolean;\n onConfirm: () => void;\n}\n\nexport interface DangerZoneProps {\n title?: string;\n description?: string;\n actions: DangerZoneAction[];\n processing?: boolean;\n labels?: Partial<DangerZoneLabels>;\n footer?: ReactNode;\n className?: string;\n}\n\nexport function DangerZone({\n title,\n description,\n actions,\n processing = false,\n labels,\n footer,\n className,\n slotName = 'danger-zone',\n}: DangerZoneProps & SlotNameProps) {\n const copy = { ...dangerZoneLabels, ...labels };\n const [activeId, setActiveId] = useState<string | null>(null);\n const active = actions.find((action) => action.id === activeId) ?? null;\n\n return (\n <section\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'gap-6 p-6 flex flex-col bg-destructive/5 ring-destructive/30',\n className,\n )}\n data-slot={slotName}\n >\n <div data-slot=\"danger-zone-header\" className=\"gap-3 flex\">\n <span className=\"size-11 rounded-2xl flex shrink-0 items-center justify-center bg-destructive/10 text-destructive\">\n <TriangleAlert className=\"size-5\" />\n </span>\n <div>\n <h2 className=\"text-lg font-bold text-destructive\">\n {title ?? copy.title}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description ?? copy.description}\n </p>\n </div>\n </div>\n\n <ul data-slot=\"danger-zone-actions\" className=\"gap-4 flex flex-col\">\n {actions.map((action) => (\n <li\n key={action.id}\n data-slot=\"danger-zone-action\"\n data-action-id={action.id}\n className=\"gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">\n {action.title}\n </p>\n {action.description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {action.description}\n </p>\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"destructive\"\n disabled={processing || action.disabled}\n onClick={() => setActiveId(action.id)}\n className=\"sm:w-auto w-full\"\n >\n {action.actionLabel ?? copy.actionLabel}\n </Button>\n </li>\n ))}\n </ul>\n\n {footer}\n\n <ConfirmDialog\n open={active !== null}\n onOpenChange={(open) => {\n if (!open) {\n setActiveId(null);\n }\n }}\n variant=\"destructive\"\n processing={processing}\n title={active?.confirmTitle ?? copy.confirmTitle}\n description={\n active?.confirmDescription ?? copy.confirmDescription\n }\n confirmText={active?.confirmText ?? copy.confirmText}\n cancelText={active?.cancelText ?? copy.cancelText}\n requiredValue={active?.requiredValue}\n requiredValueLabel={\n active?.requiredValueLabel ?? copy.requiredValueLabel\n }\n onConfirm={() => active?.onConfirm()}\n />\n </section>\n );\n}\n","import { createContext, useContext } from 'react';\n\nimport type {\n DateFilterLabels,\n DateFilterOption,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nexport type DateFilterPanel = 'root' | 'fixed' | 'relative';\n\nexport interface DateFilterContextValue {\n value: DateFilterValue;\n draft: DateFilterValue;\n labels: DateFilterLabels;\n presets: DateFilterOption[];\n operators: DateFilterOption[];\n units: DateFilterOption[];\n panel: DateFilterPanel;\n setDraft: (value: DateFilterValue) => void;\n openPanel: (panel: DateFilterPanel, seed: DateFilterValue) => void;\n backToRoot: () => void;\n commit: (value: DateFilterValue) => void;\n}\n\nconst DateFilterContext = createContext<DateFilterContextValue | null>(null);\n\nexport const DateFilterProvider = DateFilterContext.Provider;\n\nexport function useDateFilter(): DateFilterContextValue {\n const context = useContext(DateFilterContext);\n\n if (context === null) {\n throw new Error('DateFilter parts must be used inside <DateFilter>.');\n }\n\n return context;\n}\n","import { format } from 'date-fns';\nimport { pt } from 'date-fns/locale';\nimport { ChevronLeft } from 'lucide-react';\n\nimport { useDateFilter } from '@/blocks/date-filter/context';\nimport type { DateFilterOperator } from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport { cn } from '@/lib/utils';\n\nconst CALENDAR_START = new Date(2020, 0, 1);\n\nconst CALENDAR_END = new Date(new Date().getFullYear() + 1, 11, 31);\n\nconst toDate = (value?: string) =>\n value ? new Date(`${value}T00:00:00`) : undefined;\n\nconst toIso = (value?: Date) =>\n value ? format(value, 'yyyy-MM-dd') : undefined;\n\nexport function DateFilterFixedPanel() {\n const { draft, operators, labels, setDraft, backToRoot, commit } =\n useDateFilter();\n\n const operator = draft.operator ?? 'between';\n const isRange = operator === 'between';\n const canApply = Boolean(draft.start) && (!isRange || Boolean(draft.end));\n\n return (\n <div className=\"w-auto\">\n <div className=\"gap-1 px-2 py-2 flex items-center border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={backToRoot}\n aria-label={labels.back}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n {operators.map((item) => (\n <button\n key={item.value}\n type=\"button\"\n onClick={() =>\n setDraft({\n ...draft,\n operator: item.value as DateFilterOperator,\n })\n }\n className={cn(\n 'px-3 py-1.5 text-sm font-medium rounded-xl cursor-pointer transition-colors',\n operator === item.value\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n\n <div className=\"p-3\">\n {isRange ? (\n <Calendar\n mode=\"range\"\n numberOfMonths={2}\n locale={pt}\n captionLayout=\"dropdown\"\n startMonth={CALENDAR_START}\n endMonth={CALENDAR_END}\n defaultMonth={toDate(draft.start)}\n selected={{\n from: toDate(draft.start),\n to: toDate(draft.end),\n }}\n onSelect={(range) =>\n setDraft({\n ...draft,\n start: toIso(range?.from),\n end: toIso(range?.to),\n })\n }\n />\n ) : (\n <Calendar\n mode=\"single\"\n locale={pt}\n captionLayout=\"dropdown\"\n startMonth={CALENDAR_START}\n endMonth={CALENDAR_END}\n defaultMonth={toDate(draft.start)}\n selected={toDate(draft.start)}\n onSelect={(date) =>\n setDraft({ ...draft, start: toIso(date) })\n }\n />\n )}\n </div>\n\n <div className=\"px-3 py-2 flex justify-end border-t\">\n <Button disabled={!canApply} onClick={() => commit(draft)}>\n {labels.apply}\n </Button>\n </div>\n </div>\n );\n}\n","import {\n endOfDay,\n endOfMonth,\n endOfQuarter,\n endOfWeek,\n endOfYear,\n format,\n isSameYear,\n startOfDay,\n startOfMonth,\n startOfQuarter,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subQuarters,\n subWeeks,\n subYears,\n} from 'date-fns';\nimport { pt } from 'date-fns/locale';\n\nimport type { DateFilterUnit } from '@/blocks/date-filter/types';\n\nconst WEEK_OPTIONS = { weekStartsOn: 1 } as const;\n\nconst subtract: Record<DateFilterUnit, (date: Date, amount: number) => Date> = {\n day: subDays,\n week: subWeeks,\n month: subMonths,\n quarter: subQuarters,\n year: subYears,\n};\n\nconst startOf: Record<DateFilterUnit, (date: Date) => Date> = {\n day: startOfDay,\n week: (date) => startOfWeek(date, WEEK_OPTIONS),\n month: startOfMonth,\n quarter: startOfQuarter,\n year: startOfYear,\n};\n\nconst endOf: Record<DateFilterUnit, (date: Date) => Date> = {\n day: endOfDay,\n week: (date) => endOfWeek(date, WEEK_OPTIONS),\n month: endOfMonth,\n quarter: endOfQuarter,\n year: endOfYear,\n};\n\nexport function resolveRelativeRange(\n unit: DateFilterUnit,\n amount: number,\n includeCurrent: boolean,\n now: Date = new Date(),\n offsetAmount = 0,\n offsetUnit?: DateFilterUnit,\n): { start: Date; end: Date } | null {\n if (amount < 1 || offsetAmount < 0) {\n return null;\n }\n\n let anchor = includeCurrent ? now : subtract[unit](now, 1);\n\n if (offsetAmount > 0) {\n anchor = subtract[offsetUnit ?? unit](anchor, offsetAmount);\n }\n\n return {\n start: startOf[unit](subtract[unit](anchor, amount - 1)),\n end: endOf[unit](anchor),\n };\n}\n\nexport function formatRangePreview(range: { start: Date; end: Date }): string {\n const sameYear = isSameYear(range.start, range.end);\n const startPattern = sameYear ? 'd MMM' : 'd MMM yyyy';\n\n return `${format(range.start, startPattern, { locale: pt })} - ${format(range.end, 'd MMM yyyy', { locale: pt })}`;\n}\n","import { ArrowLeftToLine, CalendarDays, ChevronLeft, X } from 'lucide-react';\n\nimport { useDateFilter } from '@/blocks/date-filter/context';\nimport {\n formatRangePreview,\n resolveRelativeRange,\n} from '@/blocks/date-filter/range';\nimport type {\n DateFilterUnit,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Switch } from '@/components/ui/switch';\n\nexport function DateFilterRelativePanel() {\n const { draft, units, labels, setDraft, backToRoot, commit } =\n useDateFilter();\n\n const hasOffset = (draft.offset_amount ?? 0) > 0;\n\n return (\n <div className=\"w-96\">\n <div className=\"gap-2 px-2 py-2 flex items-center border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={backToRoot}\n aria-label={labels.back}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <span className=\"text-sm font-medium\">\n {labels.relativeTitle}\n </span>\n </div>\n\n <div className=\"gap-3 p-3 flex flex-col\">\n <div className=\"gap-2 flex items-center\">\n <span className=\"text-sm\">{labels.latest}</span>\n <Input\n type=\"number\"\n min={1}\n max={120}\n value={draft.amount ?? 1}\n onChange={(event) =>\n setDraft({\n ...draft,\n amount: Number(event.target.value),\n })\n }\n className=\"w-20\"\n />\n <Select\n value={draft.unit ?? 'month'}\n onValueChange={(unit) =>\n setDraft({ ...draft, unit: unit as DateFilterUnit })\n }\n >\n <SelectTrigger className=\"flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {units.map((unit) => (\n <SelectItem key={unit.value} value={unit.value}>\n {unit.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {!hasOffset && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.startingAgo}\n title={labels.startingAgo}\n onClick={() =>\n setDraft({\n ...draft,\n offset_amount: 1,\n offset_unit: draft.unit ?? 'month',\n })\n }\n >\n <ArrowLeftToLine className=\"size-4\" />\n </Button>\n )}\n </div>\n\n {hasOffset && (\n <div className=\"gap-2 flex items-center\">\n <span className=\"text-sm\">{labels.startingAgo}</span>\n <Input\n type=\"number\"\n min={1}\n max={120}\n value={draft.offset_amount ?? 1}\n onChange={(event) =>\n setDraft({\n ...draft,\n offset_amount: Number(event.target.value),\n })\n }\n className=\"w-20\"\n />\n <Select\n value={draft.offset_unit ?? draft.unit ?? 'month'}\n onValueChange={(unit) =>\n setDraft({\n ...draft,\n offset_unit: unit as DateFilterUnit,\n })\n }\n >\n <SelectTrigger className=\"flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {units.map((unit) => (\n <SelectItem\n key={unit.value}\n value={unit.value}\n >\n {unit.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.removeOffset}\n onClick={() =>\n setDraft({\n ...draft,\n offset_amount: undefined,\n offset_unit: undefined,\n })\n }\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n )}\n\n <label className=\"text-sm flex items-center justify-between\">\n {labels.includeCurrent}\n <Switch\n checked={draft.include_current ?? false}\n onCheckedChange={(checked) =>\n setDraft({ ...draft, include_current: checked })\n }\n />\n </label>\n </div>\n\n <div className=\"gap-3 px-3 py-2 flex items-center justify-between border-t\">\n <RangePreview draft={draft} />\n <Button\n disabled={!draft.unit || !draft.amount || draft.amount < 1}\n onClick={() => commit(draft)}\n >\n {labels.apply}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction RangePreview({ draft }: { draft: DateFilterValue }) {\n const range = resolveRelativeRange(\n draft.unit ?? 'month',\n draft.amount ?? 0,\n draft.include_current ?? false,\n new Date(),\n draft.offset_amount ?? 0,\n draft.offset_unit,\n );\n\n if (!range) {\n return <span />;\n }\n\n return (\n <span className=\"gap-2 text-sm flex items-center text-muted-foreground\">\n <CalendarDays className=\"size-4\" />\n {formatRangePreview(range)}\n </span>\n );\n}\n","import { format } from 'date-fns';\nimport { pt } from 'date-fns/locale';\n\nimport type {\n DateFilterLabels,\n DateFilterOption,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nconst readable = (value?: string) =>\n value\n ? format(new Date(`${value}T00:00:00`), \"d 'de' MMMM 'de' yyyy\", {\n locale: pt,\n })\n : '';\n\nexport function summariseDateFilter(\n value: DateFilterValue,\n presets: DateFilterOption[],\n operators: DateFilterOption[],\n units: DateFilterOption[],\n labels: DateFilterLabels,\n): string {\n if (value.mode === 'preset') {\n return (\n presets.find((preset) => preset.value === value.preset)?.label ??\n labels.fallback\n );\n }\n\n if (value.mode === 'fixed') {\n const operator =\n operators.find((item) => item.value === value.operator)?.label ??\n '';\n\n return value.operator === 'between'\n ? `${readable(value.start)} - ${readable(value.end)}`\n : `${operator} ${readable(value.start)}`;\n }\n\n if (value.mode === 'relative') {\n const unitLabel = (unit?: string) =>\n units.find((item) => item.value === unit)?.label ?? '';\n\n const base = `${labels.latest} ${value.amount ?? 1} ${unitLabel(value.unit)}`;\n\n return (value.offset_amount ?? 0) > 0\n ? `${base}, ${labels.ago} ${value.offset_amount} ${unitLabel(value.offset_unit ?? value.unit)}`\n : base;\n }\n\n return labels.all;\n}\n","export type DateFilterMode = 'all' | 'preset' | 'fixed' | 'relative';\n\nexport type DateFilterOperator = 'between' | 'before' | 'on' | 'after';\n\nexport type DateFilterUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateFilterValue {\n mode: DateFilterMode;\n preset?: string;\n operator?: DateFilterOperator;\n start?: string;\n end?: string;\n unit?: DateFilterUnit;\n amount?: number;\n include_current?: boolean;\n offset_amount?: number;\n offset_unit?: DateFilterUnit;\n}\n\nexport interface DateFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DateFilterLabels {\n all: string;\n fixed: string;\n relative: string;\n relativeTitle: string;\n apply: string;\n back: string;\n latest: string;\n ago: string;\n includeCurrent: string;\n startingAgo: string;\n removeOffset: string;\n fallback: string;\n}\n\nexport const DEFAULT_PRESETS: DateFilterOption[] = [\n { value: 'today', label: 'Today' },\n { value: 'yesterday', label: 'Yesterday' },\n { value: 'previous_week', label: 'Previous week' },\n { value: 'previous_7_days', label: 'Last 7 days' },\n { value: 'previous_30_days', label: 'Last 30 days' },\n { value: 'previous_month', label: 'Previous month' },\n { value: 'previous_3_months', label: 'Last 3 months' },\n { value: 'previous_12_months', label: 'Last 12 months' },\n];\n\nexport const DEFAULT_OPERATORS: DateFilterOption[] = [\n { value: 'between', label: 'Between' },\n { value: 'before', label: 'Before' },\n { value: 'on', label: 'On' },\n { value: 'after', label: 'After' },\n];\n\nexport const DEFAULT_UNITS: DateFilterOption[] = [\n { value: 'day', label: 'days' },\n { value: 'week', label: 'weeks' },\n { value: 'month', label: 'months' },\n { value: 'quarter', label: 'quarters' },\n { value: 'year', label: 'years' },\n];\n\nexport const DEFAULT_LABELS: DateFilterLabels = {\n all: 'All time',\n fixed: 'Fixed range...',\n relative: 'Relative range...',\n relativeTitle: 'Relative range',\n apply: 'Apply filter',\n back: 'Back',\n latest: 'Last',\n ago: 'offset',\n includeCurrent: 'Include current period',\n startingAgo: 'Starting',\n removeOffset: 'Remove offset',\n fallback: 'Date',\n};\n","import { CalendarDays } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport {\n DateFilterProvider,\n useDateFilter,\n type DateFilterPanel,\n} from '@/blocks/date-filter/context';\nimport { DateFilterFixedPanel } from '@/blocks/date-filter/fixed-panel';\nimport { DateFilterRelativePanel } from '@/blocks/date-filter/relative-panel';\nimport { summariseDateFilter } from '@/blocks/date-filter/summarise';\nimport {\n DEFAULT_LABELS,\n DEFAULT_OPERATORS,\n DEFAULT_PRESETS,\n DEFAULT_UNITS,\n type DateFilterLabels,\n type DateFilterOption,\n type DateFilterValue,\n} from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels, useUiLocale } from '@/locales/context';\n\nexport interface DateFilterProps {\n value: DateFilterValue;\n onChange: (value: DateFilterValue) => void;\n presets?: DateFilterOption[];\n operators?: DateFilterOption[];\n units?: DateFilterOption[];\n labels?: Partial<DateFilterLabels>;\n children?: ReactNode;\n}\n\nexport function DateFilter({\n value,\n onChange,\n presets,\n operators,\n units,\n labels,\n children,\n}: DateFilterProps) {\n const locale = useUiLocale();\n const resolvedLabels = useUiLabels('dateFilter', DEFAULT_LABELS, labels);\n const [open, setOpen] = useState(false);\n const [panel, setPanel] = useState<DateFilterPanel>('root');\n const [draft, setDraft] = useState<DateFilterValue>(value);\n\n const context = {\n value,\n draft,\n labels: resolvedLabels,\n presets: presets ?? locale.dateFilterPresets ?? DEFAULT_PRESETS,\n operators: operators ?? locale.dateFilterOperators ?? DEFAULT_OPERATORS,\n units: units ?? locale.dateFilterUnits ?? DEFAULT_UNITS,\n panel,\n setDraft,\n openPanel: (next: DateFilterPanel, seed: DateFilterValue) => {\n setDraft(seed);\n setPanel(next);\n },\n backToRoot: () => setPanel('root'),\n commit: (next: DateFilterValue) => {\n onChange(next);\n setOpen(false);\n setPanel('root');\n },\n };\n\n return (\n <DateFilterProvider value={context}>\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n\n if (!next) {\n setPanel('root');\n }\n }}\n >\n {children ?? (\n <>\n <DateFilterTrigger />\n <DateFilterContent>\n <DateFilterAll />\n <DateFilterSeparator />\n <DateFilterPresets />\n <DateFilterSeparator />\n <DateFilterFixed />\n <DateFilterRelative />\n </DateFilterContent>\n </>\n )}\n </Popover>\n </DateFilterProvider>\n );\n}\n\nexport function DateFilterTrigger({\n className,\n children,\n}: {\n className?: string;\n children?: ReactNode;\n}) {\n const { value, presets, operators, units, labels } = useDateFilter();\n\n return (\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn('gap-2 justify-start', className)}\n >\n <CalendarDays className=\"size-4\" />\n {children ??\n summariseDateFilter(\n value,\n presets,\n operators,\n units,\n labels,\n )}\n </Button>\n </PopoverTrigger>\n );\n}\n\nexport function DateFilterContent({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) {\n const { panel } = useDateFilter();\n\n return (\n <PopoverContent align=\"start\" className={cn('p-0 w-auto', className)}>\n {panel === 'root' && (\n <div className=\"w-64 py-2 flex flex-col\">{children}</div>\n )}\n {panel === 'fixed' && <DateFilterFixedPanel />}\n {panel === 'relative' && <DateFilterRelativePanel />}\n </PopoverContent>\n );\n}\n\nexport function DateFilterItem({\n active,\n onSelect,\n children,\n}: {\n active: boolean;\n onSelect: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'px-4 py-2 text-sm font-medium cursor-pointer text-left transition-colors',\n active\n ? 'bg-accent text-accent-foreground'\n : 'text-foreground hover:bg-accent/50',\n )}\n >\n {children}\n </button>\n );\n}\n\nexport function DateFilterSeparator() {\n return <div className=\"my-2 border-t\" />;\n}\n\nexport function DateFilterAll({ children }: { children?: ReactNode }) {\n const { value, labels, commit } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'all'}\n onSelect={() => commit({ mode: 'all' })}\n >\n {children ?? labels.all}\n </DateFilterItem>\n );\n}\n\nexport function DateFilterPresets({ only }: { only?: string[] }) {\n const { value, presets, commit } = useDateFilter();\n\n const visible = only\n ? presets.filter((preset) => only.includes(preset.value))\n : presets;\n\n return (\n <>\n {visible.map((preset) => (\n <DateFilterItem\n key={preset.value}\n active={\n value.mode === 'preset' && value.preset === preset.value\n }\n onSelect={() =>\n commit({ mode: 'preset', preset: preset.value })\n }\n >\n {preset.label}\n </DateFilterItem>\n ))}\n </>\n );\n}\n\nexport function DateFilterFixed({ children }: { children?: ReactNode }) {\n const { value, labels, openPanel } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'fixed'}\n onSelect={() =>\n openPanel('fixed', {\n mode: 'fixed',\n operator: value.operator ?? 'between',\n start: value.start,\n end: value.end,\n })\n }\n >\n {children ?? labels.fixed}\n </DateFilterItem>\n );\n}\n\nexport function DateFilterRelative({ children }: { children?: ReactNode }) {\n const { value, labels, openPanel } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'relative'}\n onSelect={() =>\n openPanel('relative', {\n mode: 'relative',\n unit: value.unit ?? 'month',\n amount: value.amount ?? 3,\n include_current: value.include_current ?? false,\n })\n }\n >\n {children ?? labels.relative}\n </DateFilterItem>\n );\n}\n","import type {\n DateFilterUnit,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nconst RANGE_SEPARATOR = '~';\n\nconst RELATIVE_PREFIX = 'previous';\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst UNITS: DateFilterUnit[] = ['day', 'week', 'month', 'quarter', 'year'];\n\nconst ALL: DateFilterValue = { mode: 'all' };\n\nexport function decodeDateFilter(\n encoded: string | null | undefined,\n): DateFilterValue {\n if (!encoded) {\n return ALL;\n }\n\n if (encoded.startsWith(`${RELATIVE_PREFIX}:`)) {\n return decodeRelative(encoded);\n }\n\n if (encoded.includes(RANGE_SEPARATOR)) {\n return decodeFixedRange(encoded);\n }\n\n if (ISO_DATE.test(encoded)) {\n return isDate(encoded)\n ? { mode: 'fixed', operator: 'on', start: encoded }\n : ALL;\n }\n\n return { mode: 'preset', preset: encoded };\n}\n\nfunction decodeFixedRange(encoded: string): DateFilterValue {\n const parts = encoded.split(RANGE_SEPARATOR);\n\n if (parts.length !== 2) {\n return ALL;\n }\n\n const [start, end] = parts;\n\n if (start && end) {\n return isDate(start) && isDate(end)\n ? { mode: 'fixed', operator: 'between', start, end }\n : ALL;\n }\n\n if (start) {\n return isDate(start)\n ? { mode: 'fixed', operator: 'after', start }\n : ALL;\n }\n\n if (end) {\n return isDate(end)\n ? { mode: 'fixed', operator: 'before', start: end }\n : ALL;\n }\n\n return ALL;\n}\n\nfunction decodeRelative(encoded: string): DateFilterValue {\n const [, rawAmount, rawUnit, ...rest] = encoded.split(':');\n const amount = Number(rawAmount);\n const unit = toUnit(rawUnit);\n\n if (!unit || !Number.isInteger(amount) || amount < 1) {\n return ALL;\n }\n\n const value: DateFilterValue = { mode: 'relative', amount, unit };\n const tail = [...rest];\n\n if (tail[0] === 'current') {\n value.include_current = true;\n tail.shift();\n }\n\n if (tail.length === 0) {\n return value;\n }\n\n if (tail.length !== 3 || tail[0] !== 'offset') {\n return ALL;\n }\n\n const offsetAmount = Number(tail[1]);\n const offsetUnit = toUnit(tail[2]);\n\n if (!offsetUnit || !Number.isInteger(offsetAmount) || offsetAmount < 1) {\n return ALL;\n }\n\n value.offset_amount = offsetAmount;\n value.offset_unit = offsetUnit;\n\n return value;\n}\n\nfunction toUnit(value: string | undefined): DateFilterUnit | null {\n return UNITS.find((unit) => unit === value) ?? null;\n}\n\nfunction isDate(value: string): boolean {\n if (!ISO_DATE.test(value)) {\n return false;\n }\n\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day));\n\n return (\n date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day\n );\n}\n","import type { DateFilterValue } from '@/blocks/date-filter/types';\n\nconst RANGE_SEPARATOR = '~';\n\nconst RELATIVE_PREFIX = 'previous';\n\nexport function encodeDateFilter(filter: DateFilterValue): string | null {\n if (filter.mode === 'preset') {\n return filter.preset ?? null;\n }\n\n if (filter.mode === 'fixed') {\n return encodeFixed(filter);\n }\n\n if (filter.mode === 'relative') {\n return encodeRelative(filter);\n }\n\n return null;\n}\n\nfunction encodeFixed(filter: DateFilterValue): string | null {\n if (!filter.start) {\n return null;\n }\n\n if (filter.operator === 'before') {\n return `${RANGE_SEPARATOR}${filter.start}`;\n }\n\n if (filter.operator === 'after') {\n return `${filter.start}${RANGE_SEPARATOR}`;\n }\n\n if (filter.operator === 'on') {\n return filter.start;\n }\n\n return filter.end ? `${filter.start}${RANGE_SEPARATOR}${filter.end}` : null;\n}\n\nfunction encodeRelative(filter: DateFilterValue): string | null {\n if (!filter.unit || !filter.amount || filter.amount < 1) {\n return null;\n }\n\n let value = `${RELATIVE_PREFIX}:${filter.amount}:${filter.unit}`;\n\n if (filter.include_current) {\n value += ':current';\n }\n\n if (filter.offset_amount && filter.offset_amount > 0) {\n value += `:offset:${filter.offset_amount}:${filter.offset_unit ?? filter.unit}`;\n }\n\n return value;\n}\n","import { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nexport interface FormOverlayLabels {\n cancelLabel: string;\n saveLabel: string;\n savingLabel: string;\n}\n\nexport const formOverlayDefaultLabels: FormOverlayLabels = {\n cancelLabel: 'Cancel',\n saveLabel: 'Save',\n savingLabel: 'Saving...',\n};\n\nexport type FormOverlayIntent = 'default' | 'destructive';\n\nexport interface FormOverlayActionsProps {\n labels?: FormOverlayLabels;\n processing?: boolean;\n intent?: FormOverlayIntent;\n submit?: boolean;\n className?: string;\n onCancel: () => void;\n onSave?: () => void;\n}\n\nexport function FormOverlayActions({\n labels = formOverlayDefaultLabels,\n processing = false,\n intent = 'default',\n submit = false,\n className,\n onCancel,\n onSave,\n slotName = 'form-overlay-actions',\n}: FormOverlayActionsProps & SlotNameProps) {\n return (\n <div\n className={cn('gap-2 flex items-center justify-end', className)}\n data-slot={slotName}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={processing}\n onClick={onCancel}\n >\n {labels.cancelLabel}\n </Button>\n\n <Button\n type={submit ? 'submit' : 'button'}\n aria-label={processing ? labels.savingLabel : undefined}\n variant={intent}\n loading={processing}\n loadingLabel={labels.savingLabel}\n onClick={onSave}\n >\n {processing ? labels.savingLabel : labels.saveLabel}\n </Button>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport {\n FormOverlayActions,\n type FormOverlayIntent,\n type FormOverlayLabels,\n} from '@/blocks/form-overlay';\nimport {\n FloatingSheet,\n FloatingSheetBody,\n FloatingSheetFooter,\n} from '@/components/ui/floating-sheet';\nimport type { SlotNameProps } from '@/types';\n\nexport interface DetailEditSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: React.ReactNode;\n description?: React.ReactNode;\n processing?: boolean;\n intent?: FormOverlayIntent;\n labels?: FormOverlayLabels;\n className?: string;\n children: React.ReactNode;\n onSave: () => void;\n onCancel?: () => void;\n}\n\nexport function DetailEditSheet({\n open,\n onOpenChange,\n title,\n description,\n processing = false,\n intent,\n labels,\n className,\n children,\n onSave,\n onCancel,\n slotName = 'detail-edit-sheet',\n}: DetailEditSheetProps & SlotNameProps) {\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (processing) {\n return;\n }\n\n onSave();\n };\n\n const handleCancel = () => {\n if (processing) {\n return;\n }\n\n onCancel?.();\n onOpenChange(false);\n };\n\n return (\n <FloatingSheet\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n description={description}\n persistent\n className={className}\n >\n <form\n onSubmit={handleSubmit}\n className=\"min-h-0 flex flex-1 flex-col\"\n data-slot={slotName}\n >\n <FloatingSheetBody>{children}</FloatingSheetBody>\n\n <FloatingSheetFooter>\n <FormOverlayActions\n submit\n labels={labels}\n processing={processing}\n intent={intent}\n onCancel={handleCancel}\n />\n </FloatingSheetFooter>\n </form>\n </FloatingSheet>\n );\n}\n","import * as React from 'react';\n\nimport {\n FormOverlayActions,\n type FormOverlayIntent,\n type FormOverlayLabels,\n} from '@/blocks/form-overlay';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nexport interface FormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: React.ReactNode;\n description?: React.ReactNode;\n processing?: boolean;\n intent?: FormOverlayIntent;\n labels?: FormOverlayLabels;\n className?: string;\n children: React.ReactNode;\n onSave: () => void;\n onCancel?: () => void;\n}\n\nexport function FormDialog({\n open,\n onOpenChange,\n title,\n description,\n processing = false,\n intent,\n labels,\n className,\n children,\n onSave,\n onCancel,\n slotName = 'form-dialog',\n}: FormDialogProps & SlotNameProps) {\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (processing) {\n return;\n }\n\n onSave();\n };\n\n const handleCancel = () => {\n if (processing) {\n return;\n }\n\n onCancel?.();\n onOpenChange(false);\n };\n\n const blockWhileProcessing = (event: Event | KeyboardEvent) => {\n if (processing) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (processing && !next) {\n return;\n }\n\n onOpenChange(next);\n }}\n >\n <DialogContent\n {...(description ? {} : { 'aria-describedby': undefined })}\n className={cn('gap-0 p-0', className)}\n onEscapeKeyDown={blockWhileProcessing}\n onInteractOutside={blockWhileProcessing}\n slotName={slotName}\n >\n <form\n data-slot=\"form-dialog-form\"\n onSubmit={handleSubmit}\n className=\"grid max-h-[calc(100dvh-8rem)] grid-rows-[auto_minmax(0,1fr)_auto]\"\n >\n <DialogHeader className=\"text-left\">\n <DialogTitle>{title}</DialogTitle>\n {description ? (\n <DialogDescription>{description}</DialogDescription>\n ) : null}\n </DialogHeader>\n\n <div\n data-slot=\"form-dialog-body\"\n className=\"gap-4 px-6 pb-6 md:px-8 flex flex-col overflow-y-auto\"\n >\n {children}\n </div>\n\n <DialogFooter>\n <FormOverlayActions\n submit\n labels={labels}\n processing={processing}\n intent={intent}\n onCancel={handleCancel}\n className=\"w-full\"\n />\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { CopyButton, type CopyButtonLabels } from '@/components/ui/copy-button';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { type LucideIcon } from 'lucide-react';\nimport { type ReactNode } from 'react';\n\nexport interface InfoFieldProps {\n icon: LucideIcon;\n label: string;\n value: ReactNode;\n copyable?: boolean;\n copyValue?: string;\n copyLabel?: CopyButtonLabels['copyLabel'];\n copiedLabel?: CopyButtonLabels['copiedLabel'];\n iconClassName?: string;\n className?: string;\n}\n\nfunction copyableText(value: ReactNode, copyValue?: string): string {\n if (copyValue !== undefined) {\n return copyValue.trim();\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value).trim();\n }\n\n return '';\n}\n\nexport function InfoField({\n icon: Icon,\n label,\n value,\n copyable = false,\n copyValue,\n copyLabel,\n copiedLabel,\n iconClassName,\n className,\n slotName = 'info-field',\n}: InfoFieldProps & SlotNameProps) {\n const text = copyableText(value, copyValue);\n\n return (\n <div\n className={cn('gap-3 flex items-center', className)}\n data-slot={slotName}\n >\n <div className={cn('p-2 rounded-xl bg-muted', iconClassName)}>\n <Icon className=\"size-5 text-muted-foreground\" />\n </div>\n <div>\n <p\n data-slot=\"info-field-label\"\n className=\"text-xs font-medium tracking-wider text-muted-foreground uppercase\"\n >\n {label}\n </p>\n <p\n data-slot=\"info-field-value\"\n className=\"gap-1 font-semibold flex items-center\"\n >\n {value}\n {copyable && text !== '' && (\n <CopyButton\n value={text}\n copyLabel={copyLabel}\n copiedLabel={copiedLabel}\n />\n )}\n </p>\n </div>\n </div>\n );\n}\n\nexport interface InfoFieldGroupProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function InfoFieldGroup({ children, className }: InfoFieldGroupProps) {\n return <div className={cn('space-y-4', className)}>{children}</div>;\n}\n","import { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Textarea } from '@/components/ui/textarea';\nimport { cn } from '@/lib/utils';\n\nexport interface LocalizedField {\n name: string;\n label: string;\n type?: 'text' | 'textarea';\n rows?: number;\n}\n\nexport interface LocalizedFieldsProps {\n locales: string[];\n localeLabels?: Record<string, string>;\n fields: LocalizedField[];\n values: Record<string, Record<string, string>>;\n onChange: (field: string, locale: string, value: string) => void;\n errors?: Record<string, string>;\n defaultLocale?: string;\n className?: string;\n}\n\nexport function LocalizedFields({\n locales,\n localeLabels,\n fields,\n values,\n onChange,\n errors,\n defaultLocale,\n className,\n}: LocalizedFieldsProps) {\n return (\n <Tabs\n defaultValue={defaultLocale ?? locales[0]}\n className={cn('w-full', className)}\n >\n <TabsList className=\"mb-4 rounded-2xl p-1.5 flex h-auto w-full justify-start overflow-x-auto bg-muted\">\n {locales.map((locale) => (\n <TabsTrigger\n key={locale}\n value={locale}\n className=\"px-4 font-medium h-8 rounded-xl\"\n >\n {localeLabels?.[locale] ?? locale.toUpperCase()}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {locales.map((locale) => (\n <TabsContent key={locale} value={locale} className=\"mt-0\">\n <div className=\"gap-4 lg:grid-cols-2 grid\">\n {fields.map((field) => {\n const fieldId = `${field.name}-${locale}`;\n const error = errors?.[`${field.name}.${locale}`];\n const value = values[field.name]?.[locale] ?? '';\n\n return (\n <div key={field.name} className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n {field.label}\n </Label>\n {field.type === 'textarea' ? (\n <Textarea\n id={fieldId}\n rows={field.rows ?? 4}\n value={value}\n onChange={(event) =>\n onChange(\n field.name,\n locale,\n event.target.value,\n )\n }\n />\n ) : (\n <Input\n id={fieldId}\n value={value}\n onChange={(event) =>\n onChange(\n field.name,\n locale,\n event.target.value,\n )\n }\n />\n )}\n {error && (\n <p className=\"text-xs font-medium text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n </div>\n </TabsContent>\n ))}\n </Tabs>\n );\n}\n","import { cn } from '@/lib/utils';\nimport { type ReactNode } from 'react';\n\nexport interface SectionHeaderProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n control?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({\n icon,\n title,\n description,\n control,\n className,\n}: SectionHeaderProps) {\n return (\n <div\n className={cn(\n 'gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col',\n className,\n )}\n >\n <div className=\"gap-3 flex items-center\">\n {icon}\n <div>\n <h2 className=\"text-lg font-bold text-foreground\">\n {title}\n </h2>\n {description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </div>\n {control}\n </div>\n );\n}\n","import { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport {\n elevatedSurface,\n recessedSurface,\n type SurfaceProps,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { type LucideIcon } from 'lucide-react';\nimport { type ReactNode } from 'react';\n\nexport interface SettingsCardProps extends SurfaceProps {\n icon: LucideIcon;\n iconClassName?: string;\n title: string;\n description: string;\n control?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsCard({\n icon: Icon,\n iconClassName,\n title,\n description,\n control,\n children,\n inset = false,\n className,\n slotName = 'settings-card',\n}: SettingsCardProps & SlotNameProps) {\n return (\n <section\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'space-y-5 p-6 bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n <div className=\"gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col\">\n <div className=\"gap-3 flex items-center\">\n <div\n className={cn(\n 'size-11 rounded-2xl flex items-center justify-center',\n iconClassName ?? 'bg-muted text-muted-foreground',\n )}\n >\n <Icon className=\"size-5\" />\n </div>\n <div>\n <h2 className=\"text-lg font-bold text-foreground\">\n {title}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n </div>\n </div>\n {control}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface SettingsPanelProps extends SurfaceProps {\n title?: string;\n description?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsPanel({\n title,\n description,\n children,\n inset = true,\n className,\n slotName = 'settings-panel',\n}: SettingsPanelProps & SlotNameProps) {\n return (\n <div\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'space-y-4 p-5 bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n {(title || description) && (\n <div>\n {title && (\n <h3 className=\"text-sm font-semibold text-foreground\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"mt-1 text-xs font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport interface ToggleRowProps {\n id: string;\n label: string;\n description?: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n}\n\nexport function ToggleRow({\n id,\n label,\n description,\n checked,\n onChange,\n disabled,\n}: ToggleRowProps) {\n return (\n <div className=\"gap-4 py-1 flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <Label\n htmlFor={id}\n className=\"text-sm font-medium text-foreground\"\n >\n {label}\n </Label>\n {description && (\n <p className=\"text-xs font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <Switch\n id={id}\n checked={checked}\n onCheckedChange={onChange}\n disabled={disabled}\n />\n </div>\n );\n}\n","import { FieldError } from '@/components/ui/field-error';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { useId, type ReactNode } from 'react';\n\nexport interface SettingsFieldProps {\n id?: string;\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n className?: string;\n children: (fieldId: string) => ReactNode;\n}\n\nexport function SettingsField({\n id,\n label,\n description,\n error,\n required,\n className,\n children,\n slotName = 'settings-field',\n}: SettingsFieldProps & SlotNameProps) {\n const generated = useId();\n const fieldId = id ?? generated;\n\n return (\n <div\n data-invalid={error ? true : undefined}\n className={cn('space-y-2 py-1', className)}\n data-slot={slotName}\n >\n <Label htmlFor={fieldId}>\n {label}\n {required && (\n <span\n data-slot=\"settings-field-required\"\n aria-hidden=\"true\"\n className=\"text-destructive\"\n >\n *\n </span>\n )}\n </Label>\n\n {children(fieldId)}\n\n {description && (\n <p\n data-slot=\"settings-field-description\"\n className=\"text-xs font-medium text-muted-foreground\"\n >\n {description}\n </p>\n )}\n\n <FieldError message={error} />\n </div>\n );\n}\n\ninterface ControlProps<T> {\n id?: string;\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n disabled?: boolean;\n placeholder?: string;\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\nexport type TextFieldProps = ControlProps<string> & {\n type?: 'text' | 'email' | 'url' | 'tel' | 'password';\n};\n\nexport function TextField({\n type = 'text',\n value,\n onChange,\n disabled,\n placeholder,\n slotName = 'text-field',\n ...field\n}: TextFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type={type}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) => onChange(event.target.value)}\n />\n )}\n </SettingsField>\n );\n}\n\nexport type NumberFieldProps = ControlProps<number | ''> & {\n min?: number;\n max?: number;\n step?: number;\n};\n\nexport function NumberField({\n value,\n onChange,\n disabled,\n placeholder,\n min,\n max,\n step,\n slotName = 'number-field',\n ...field\n}: NumberFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type=\"number\"\n inputMode=\"decimal\"\n value={value === '' ? '' : String(value)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n placeholder={placeholder}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) =>\n onChange(\n event.target.value === ''\n ? ''\n : event.target.valueAsNumber,\n )\n }\n />\n )}\n </SettingsField>\n );\n}\n\nexport type DateFieldProps = ControlProps<string> & {\n min?: string;\n max?: string;\n};\n\nexport function DateField({\n value,\n onChange,\n disabled,\n min,\n max,\n slotName = 'date-field',\n ...field\n}: DateFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type=\"date\"\n value={value}\n min={min}\n max={max}\n disabled={disabled}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) => onChange(event.target.value)}\n />\n )}\n </SettingsField>\n );\n}\n\nexport interface SelectFieldOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport type SelectFieldProps = ControlProps<string> & {\n options: SelectFieldOption[];\n};\n\nexport function SelectField({\n value,\n onChange,\n options,\n disabled,\n placeholder,\n slotName = 'select-field',\n ...field\n}: SelectFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Select\n value={value}\n onValueChange={onChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={fieldId}\n slotName={slotName}\n aria-invalid={field.error ? true : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </SettingsField>\n );\n}\n","import { SectionHeader } from '@/blocks/section-header';\nimport { Card } from '@/components/ui/card';\nimport { resolveLink } from '@/lib/href';\nimport { compactRadius } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels } from '@/locales/context';\nimport type { LinkComponent, SlotNameProps, UrlLike } from '@/types';\nimport { ArrowLeft, ChevronRight, type LucideIcon } from 'lucide-react';\nimport { createContext, useContext, type ReactNode } from 'react';\n\nconst SettingsLinkContext = createContext<LinkComponent | undefined>(undefined);\n\nexport interface SettingsPageProps {\n title?: string;\n description?: string;\n control?: ReactNode;\n linkComponent?: LinkComponent;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsPage({\n title,\n description,\n control,\n linkComponent,\n children,\n className,\n slotName = 'settings-page',\n}: SettingsPageProps & SlotNameProps) {\n return (\n <SettingsLinkContext.Provider value={linkComponent}>\n <div\n className={cn(\n 'gap-8 max-w-4xl mx-auto flex w-full flex-col',\n className,\n )}\n data-slot={slotName}\n >\n {title && (\n <SectionHeader\n title={title}\n description={description}\n control={control}\n />\n )}\n {children}\n </div>\n </SettingsLinkContext.Provider>\n );\n}\n\nexport interface SettingsLabels {\n back: string;\n}\n\nexport const settingsLabels: SettingsLabels = {\n back: 'Back',\n};\n\nexport interface SettingsSectionProps {\n title?: string;\n description?: string;\n control?: ReactNode;\n backHref?: UrlLike | null;\n backLabel?: string;\n wide?: boolean;\n linkComponent?: LinkComponent;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsSection({\n title,\n description,\n control,\n backHref = '/settings',\n backLabel,\n wide = false,\n linkComponent,\n children,\n className,\n slotName = 'settings-section',\n}: SettingsSectionProps & SlotNameProps) {\n const labels = useUiLabels('settings', settingsLabels, {\n back: backLabel,\n });\n const contextLink = useContext(SettingsLinkContext);\n const Link = resolveLink(linkComponent ?? contextLink);\n\n return (\n <section\n className={cn(\n 'gap-6 mx-auto flex w-full flex-col',\n wide ? 'max-w-4xl' : 'max-w-2xl',\n className,\n )}\n data-slot={slotName}\n >\n {backHref && (\n <Link\n data-slot=\"settings-section-back\"\n href={backHref}\n className=\"gap-2 text-sm font-medium inline-flex w-fit items-center text-muted-foreground transition-colors hover:text-foreground\"\n >\n <ArrowLeft className=\"size-4\" />\n {labels.back}\n </Link>\n )}\n\n {title && (\n <SectionHeader\n title={title}\n description={description}\n control={control}\n />\n )}\n\n {children}\n </section>\n );\n}\n\nexport interface SettingsGroupProps {\n label?: string;\n columns?: 1 | 2;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsGroup({\n label,\n columns = 2,\n children,\n className,\n slotName = 'settings-group',\n}: SettingsGroupProps & SlotNameProps) {\n return (\n <div\n className={cn('gap-3 flex flex-col', className)}\n data-slot={slotName}\n >\n {label && (\n <p className=\"font-bold tracking-widest text-[11px] text-muted-foreground uppercase\">\n {label}\n </p>\n )}\n <div\n data-slot=\"settings-group-grid\"\n className={cn(\n 'gap-4 grid grid-cols-1',\n columns === 2 && 'md:grid-cols-2',\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport interface SettingsEntryProps {\n icon: LucideIcon;\n iconClassName?: string;\n title: string;\n description?: string;\n href: UrlLike;\n badge?: ReactNode;\n disabled?: boolean;\n linkComponent?: LinkComponent;\n className?: string;\n}\n\nexport function SettingsEntry({\n icon: Icon,\n iconClassName,\n title,\n description,\n href,\n badge,\n disabled = false,\n linkComponent,\n className,\n slotName = 'settings-entry',\n}: SettingsEntryProps & SlotNameProps) {\n const contextLink = useContext(SettingsLinkContext);\n const Link = resolveLink(linkComponent ?? contextLink);\n\n const card = (\n <Card\n interactive={!disabled}\n padding=\"none\"\n data-disabled={disabled || undefined}\n className={cn(\n 'gap-4 p-5 flex h-full flex-row items-center',\n disabled && 'opacity-60',\n className,\n )}\n >\n <span\n className={cn(\n 'size-11 flex shrink-0 items-center justify-center rounded-full',\n iconClassName ?? 'bg-primary/10 text-primary',\n )}\n >\n <Icon className=\"size-5\" />\n </span>\n\n <span className=\"min-w-0 flex flex-1 flex-col\">\n <span className=\"gap-2 flex items-center\">\n <span className=\"font-bold text-foreground\">{title}</span>\n {badge}\n </span>\n {description && (\n <span className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </span>\n )}\n </span>\n\n <ChevronRight className=\"size-4 shrink-0 text-muted-foreground\" />\n </Card>\n );\n\n if (disabled) {\n return (\n <div data-disabled=\"true\" aria-disabled=\"true\" data-slot={slotName}>\n {card}\n </div>\n );\n }\n\n return (\n <Link\n href={href}\n className={cn(\n compactRadius,\n 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n )}\n data-slot={slotName}\n >\n {card}\n </Link>\n );\n}\n","import {\n elevatedSurface,\n recessedSurface,\n type SurfaceProps,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport {\n ArrowDownRight,\n ArrowRight,\n ArrowUpRight,\n type LucideIcon,\n} from 'lucide-react';\nimport { type ReactNode } from 'react';\n\ntype TrendTone = 'positive' | 'negative' | 'neutral';\n\ninterface TrendDisplay {\n label: string;\n tone: TrendTone;\n icon: LucideIcon;\n}\n\nfunction resolveTrend(trend?: number): TrendDisplay | null {\n if (trend === null || trend === undefined || Number.isNaN(trend)) {\n return null;\n }\n\n const normalized = Math.abs(trend) < 0.05 ? 0 : trend;\n\n if (normalized === 0) {\n return { label: '0%', tone: 'neutral', icon: ArrowRight };\n }\n\n if (normalized > 0) {\n return {\n label: `+${normalized.toFixed(1)}%`,\n tone: 'positive',\n icon: ArrowUpRight,\n };\n }\n\n return {\n label: `${normalized.toFixed(1)}%`,\n tone: 'negative',\n icon: ArrowDownRight,\n };\n}\n\nconst trendToneClass: Record<TrendTone, string> = {\n positive: 'text-success',\n negative: 'text-destructive',\n neutral: 'text-muted-foreground',\n};\n\nexport interface StatCardProps extends SurfaceProps {\n title: string;\n value: ReactNode;\n icon: LucideIcon;\n iconClassName?: string;\n trend?: number;\n comparisonLabel?: string;\n className?: string;\n}\n\nexport function StatCard({\n title,\n value,\n icon: Icon,\n iconClassName = 'bg-muted text-muted-foreground',\n trend,\n comparisonLabel,\n inset = false,\n className,\n slotName = 'stat-card',\n}: StatCardProps & SlotNameProps) {\n const resolvedTrend = resolveTrend(trend);\n\n return (\n <div\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'p-6 min-w-0 flex h-full flex-col justify-between bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n <div className=\"mb-4 gap-4 flex items-start justify-between\">\n <div className={cn('rounded-2xl p-3 shrink-0', iconClassName)}>\n <Icon className=\"size-6\" />\n </div>\n {resolvedTrend && (\n <div className=\"min-w-0 text-right\">\n <span\n className={cn(\n 'text-sm font-semibold inline-flex items-center',\n trendToneClass[resolvedTrend.tone],\n )}\n >\n {resolvedTrend.label}\n <resolvedTrend.icon className=\"ml-1 size-4\" />\n </span>\n {comparisonLabel && (\n <p className=\"mt-1 font-medium tracking-wider text-[10px] whitespace-nowrap text-muted-foreground uppercase\">\n {comparisonLabel}\n </p>\n )}\n </div>\n )}\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium tracking-wider break-words text-muted-foreground uppercase\">\n {title}\n </p>\n <p className=\"text-3xl font-bold truncate text-foreground tabular-nums\">\n {value}\n </p>\n </div>\n </div>\n );\n}\n\nexport interface StatsGridProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function StatsGrid({ children, className }: StatsGridProps) {\n return (\n <div\n className={cn(\n 'gap-6 [&>*]:min-w-0 grid [grid-template-columns:repeat(auto-fit,minmax(18rem,1fr))]',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport type TwoFactorSetupStep = 'pending' | 'scan' | 'confirm' | 'recovery';\n\nexport type TwoFactorCodeMode = 'code' | 'recovery';\n\nexport interface TwoFactorLabels {\n setupTitle: string;\n setupDescription: string;\n pendingLabel: string;\n scanTitle: string;\n scanDescription: string;\n qrFallbackLabel: string;\n manualKeyLabel: string;\n manualKeyDescription: string;\n manualKeyRevealLabel: string;\n manualKeyHideLabel: string;\n continueLabel: string;\n confirmTitle: string;\n confirmDescription: string;\n codeLabel: string;\n recoveryCodeLabel: string;\n recoveryCodePlaceholder: string;\n useRecoveryCodeLabel: string;\n useCodeLabel: string;\n verifyLabel: string;\n verifyingLabel: string;\n errorFallbackLabel: string;\n cancelLabel: string;\n challengeTitle: string;\n challengeDescription: string;\n recoveryTitle: string;\n recoveryDescription: string;\n recoveryWarning: string;\n revealLabel: string;\n hideLabel: string;\n copyLabel: string;\n copiedLabel: string;\n copyFailedLabel: string;\n regenerateLabel: string;\n doneLabel: string;\n disableLabel: string;\n disableTitle: string;\n disableDescription: string;\n disableConfirmLabel: string;\n disableCancelLabel: string;\n}\n\nexport const twoFactorLabels: TwoFactorLabels = {\n setupTitle: 'Two-factor authentication',\n setupDescription:\n 'Add a second step to your sign in with an authenticator app.',\n pendingLabel: 'Preparing your setup key',\n scanTitle: 'Scan the code',\n scanDescription:\n 'Open your authenticator app and scan the code below to add this account.',\n qrFallbackLabel: 'The QR code is not available yet.',\n manualKeyLabel: 'Setup key',\n manualKeyDescription:\n 'Enter this key by hand if your app cannot scan the code.',\n manualKeyRevealLabel: 'Show setup key',\n manualKeyHideLabel: 'Hide setup key',\n continueLabel: 'Continue',\n confirmTitle: 'Confirm the code',\n confirmDescription:\n 'Enter the six digit code your authenticator app is showing.',\n codeLabel: 'Authentication code',\n recoveryCodeLabel: 'Recovery code',\n recoveryCodePlaceholder: 'Enter a recovery code',\n useRecoveryCodeLabel: 'Use a recovery code',\n useCodeLabel: 'Use an authentication code',\n verifyLabel: 'Verify',\n verifyingLabel: 'Verifying',\n errorFallbackLabel: 'That did not work. Try again.',\n cancelLabel: 'Cancel',\n challengeTitle: 'Two-factor confirmation',\n challengeDescription:\n 'Confirm access to your account with the code from your authenticator app.',\n recoveryTitle: 'Recovery codes',\n recoveryDescription:\n 'Store these codes somewhere safe. Each one signs you in once if you lose your device.',\n recoveryWarning: 'They are shown once and cannot be read again afterwards.',\n revealLabel: 'Show codes',\n hideLabel: 'Hide codes',\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n copyFailedLabel: 'Copying is unavailable here. Select the codes manually.',\n regenerateLabel: 'Regenerate codes',\n doneLabel: 'Done',\n disableLabel: 'Disable two-factor authentication',\n disableTitle: 'Disable two-factor authentication',\n disableDescription:\n 'Your account will be protected by your password alone. Recovery codes stop working.',\n disableConfirmLabel: 'Disable',\n disableCancelLabel: 'Keep it on',\n};\n\nexport interface TwoFactorLabelProps {\n labels?: Partial<TwoFactorLabels>;\n}\n\nexport function resolveLabels(\n labels?: Partial<TwoFactorLabels>,\n): TwoFactorLabels {\n return labels ? { ...twoFactorLabels, ...labels } : twoFactorLabels;\n}\n\nexport function messageList(errors?: string | string[] | null): string[] {\n if (!errors) {\n return [];\n }\n\n return (Array.isArray(errors) ? errors : [errors]).filter(\n (message) => message.length > 0,\n );\n}\n\nexport interface TwoFactorQrProps {\n qrCode?: ReactNode;\n qrCodeSvg?: string;\n}\n","import {\n messageList,\n resolveLabels,\n type TwoFactorCodeMode,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Alert, AlertDescription } from '@/components/ui/alert';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n} from '@/components/ui/input-otp';\nimport { Label } from '@/components/ui/label';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { AlertCircle } from 'lucide-react';\nimport { useId, useState, type FormEvent, type ReactNode } from 'react';\n\nexport interface TwoFactorVerifyFormProps extends TwoFactorLabelProps {\n onSubmit: (code: string, mode: TwoFactorCodeMode) => void | Promise<void>;\n errors?: string | string[] | null;\n allowRecoveryCode?: boolean;\n length?: number;\n autoFocus?: boolean;\n submitLabel?: string;\n footer?: ReactNode;\n className?: string;\n}\n\nfunction errorMessage(reason: unknown, fallback: string): string {\n return reason instanceof Error && reason.message\n ? reason.message\n : fallback;\n}\n\nexport function TwoFactorVerifyForm({\n onSubmit,\n errors,\n allowRecoveryCode = false,\n length = 6,\n autoFocus = false,\n submitLabel,\n footer,\n labels,\n className,\n slotName = 'two-factor-verify-form',\n}: TwoFactorVerifyFormProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const fieldId = useId();\n const [mode, setMode] = useState<TwoFactorCodeMode>('code');\n const [value, setValue] = useState('');\n const [pending, setPending] = useState(false);\n const [failure, setFailure] = useState<string | null>(null);\n\n const messages = [...messageList(errors), ...messageList(failure)];\n const complete =\n mode === 'code' ? value.length === length : value.length > 0;\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (pending || !complete) {\n return;\n }\n\n setFailure(null);\n setPending(true);\n\n try {\n await onSubmit(value, mode);\n } catch (reason) {\n setFailure(errorMessage(reason, text.errorFallbackLabel));\n } finally {\n setPending(false);\n }\n };\n\n const switchMode = () => {\n setMode(mode === 'code' ? 'recovery' : 'code');\n setValue('');\n setFailure(null);\n };\n\n return (\n <form\n data-mode={mode}\n data-pending={pending || undefined}\n onSubmit={handleSubmit}\n className={cn('gap-5 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div className=\"gap-2 flex flex-col\">\n <Label htmlFor={fieldId}>\n {mode === 'code' ? text.codeLabel : text.recoveryCodeLabel}\n </Label>\n\n {mode === 'code' ? (\n <InputOTP\n id={fieldId}\n data-slot=\"two-factor-code-input\"\n maxLength={length}\n value={value}\n autoFocus={autoFocus}\n disabled={pending}\n onChange={setValue}\n aria-label={text.codeLabel}\n >\n <InputOTPGroup>\n {Array.from({ length }, (_, index) => (\n <InputOTPSlot key={index} index={index} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n ) : (\n <Input\n id={fieldId}\n slotName=\"two-factor-recovery-input\"\n value={value}\n autoComplete=\"one-time-code\"\n spellCheck={false}\n disabled={pending}\n placeholder={text.recoveryCodePlaceholder}\n aria-label={text.recoveryCodeLabel}\n onChange={(event) => setValue(event.target.value)}\n />\n )}\n </div>\n\n {messages.length > 0 && (\n <Alert variant=\"destructive\" slotName=\"two-factor-error\">\n <AlertCircle />\n <AlertDescription>\n {messages.map((message) => (\n <p key={message}>{message}</p>\n ))}\n </AlertDescription>\n </Alert>\n )}\n\n <div className=\"gap-3 flex flex-col\">\n <Button\n type=\"submit\"\n loading={pending}\n loadingLabel={text.verifyingLabel}\n disabled={!complete}\n >\n {submitLabel ?? text.verifyLabel}\n </Button>\n\n {allowRecoveryCode && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={pending}\n onClick={switchMode}\n >\n {mode === 'code'\n ? text.useRecoveryCodeLabel\n : text.useCodeLabel}\n </Button>\n )}\n\n {footer}\n </div>\n </form>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorCodeMode,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { TwoFactorVerifyForm } from '@/blocks/two-factor/verify-form';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport type { ReactNode } from 'react';\n\nexport interface TwoFactorChallengeProps extends TwoFactorLabelProps {\n onSubmit: (code: string, mode: TwoFactorCodeMode) => void | Promise<void>;\n errors?: string | string[] | null;\n allowRecoveryCode?: boolean;\n title?: string;\n description?: string;\n footer?: ReactNode;\n className?: string;\n}\n\nexport function TwoFactorChallenge({\n onSubmit,\n errors,\n allowRecoveryCode = true,\n title,\n description,\n footer,\n labels,\n className,\n slotName = 'two-factor-challenge',\n}: TwoFactorChallengeProps & SlotNameProps) {\n const text = resolveLabels(labels);\n\n return (\n <section\n className={cn('gap-6 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div className=\"gap-2 flex flex-col\">\n <h2 className=\"text-2xl font-bold tracking-tight text-foreground\">\n {title ?? text.challengeTitle}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description ?? text.challengeDescription}\n </p>\n </div>\n\n <TwoFactorVerifyForm\n autoFocus\n allowRecoveryCode={allowRecoveryCode}\n errors={errors}\n labels={labels}\n footer={footer}\n onSubmit={onSubmit}\n />\n </section>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { ShieldOff } from 'lucide-react';\nimport { useState, type ComponentProps } from 'react';\n\nexport interface TwoFactorDisableButtonProps extends TwoFactorLabelProps {\n onDisable: () => void | Promise<void>;\n disabled?: boolean;\n variant?: ComponentProps<typeof Button>['variant'];\n size?: ComponentProps<typeof Button>['size'];\n className?: string;\n}\n\nexport function TwoFactorDisableButton({\n onDisable,\n disabled = false,\n variant = 'destructive',\n size = 'default',\n labels,\n className,\n slotName = 'two-factor-disable',\n}: TwoFactorDisableButtonProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [open, setOpen] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n const handleConfirm = async () => {\n setProcessing(true);\n\n try {\n await onDisable();\n } finally {\n setProcessing(false);\n }\n };\n\n return (\n <span\n data-open={open || undefined}\n className={cn('inline-flex', className)}\n data-slot={slotName}\n >\n <Button\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled || processing}\n onClick={() => setOpen(true)}\n >\n <ShieldOff />\n {text.disableLabel}\n </Button>\n\n <ConfirmDialog\n open={open}\n onOpenChange={setOpen}\n title={text.disableTitle}\n description={text.disableDescription}\n confirmText={text.disableConfirmLabel}\n cancelText={text.disableCancelLabel}\n processing={processing}\n onConfirm={handleConfirm}\n />\n </span>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { compactRadius, recessedSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { Eye, EyeOff, RefreshCw } from 'lucide-react';\nimport { useState } from 'react';\n\nexport interface TwoFactorRecoveryCodesProps extends TwoFactorLabelProps {\n codes: string[];\n defaultRevealed?: boolean;\n onRegenerate?: () => void | Promise<void>;\n showHeading?: boolean;\n className?: string;\n}\n\nexport function TwoFactorRecoveryCodes({\n codes,\n defaultRevealed = false,\n onRegenerate,\n showHeading = true,\n labels,\n className,\n slotName = 'two-factor-recovery-codes',\n}: TwoFactorRecoveryCodesProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [revealed, setRevealed] = useState(defaultRevealed);\n const [copyFailed, setCopyFailed] = useState(false);\n const [regenerating, setRegenerating] = useState(false);\n\n const handleRegenerate = async () => {\n if (!onRegenerate || regenerating) {\n return;\n }\n\n setRegenerating(true);\n\n try {\n await onRegenerate();\n } finally {\n setRegenerating(false);\n }\n };\n\n return (\n <div\n data-revealed={revealed || undefined}\n className={cn('gap-4 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n {showHeading && (\n <div className=\"gap-1 flex flex-col\">\n <p className=\"text-sm font-semibold text-foreground\">\n {text.recoveryTitle}\n </p>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {text.recoveryDescription} {text.recoveryWarning}\n </p>\n </div>\n )}\n\n {revealed && (\n <ul\n data-slot=\"two-factor-recovery-list\"\n className={cn(\n recessedSurface,\n 'gap-2 p-4 sm:grid-cols-2 grid',\n )}\n >\n {codes.map((code) => (\n <li\n key={code}\n data-slot=\"two-factor-recovery-code\"\n className={cn(\n compactRadius,\n 'px-2 py-1 text-sm font-medium font-mono break-all text-foreground',\n )}\n >\n {code}\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"gap-2 flex flex-wrap items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-pressed={revealed}\n onClick={() => setRevealed(!revealed)}\n >\n {revealed ? <EyeOff /> : <Eye />}\n {revealed ? text.hideLabel : text.revealLabel}\n </Button>\n\n <CopyButton\n value={codes.join('\\n')}\n copyLabel={text.copyLabel}\n copiedLabel={text.copiedLabel}\n onCopied={() => setCopyFailed(false)}\n onCopyFailed={() => setCopyFailed(true)}\n />\n\n {onRegenerate && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n loading={regenerating}\n loadingLabel={text.regenerateLabel}\n onClick={handleRegenerate}\n >\n <RefreshCw />\n {text.regenerateLabel}\n </Button>\n )}\n </div>\n\n {copyFailed && (\n <p\n data-slot=\"two-factor-copy-failed\"\n className=\"text-xs font-medium text-muted-foreground\"\n >\n {text.copyFailedLabel}\n </p>\n )}\n </div>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n type TwoFactorQrProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { compactRadius, controlRadius, recessedSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { useState } from 'react';\n\nexport interface TwoFactorScanStepProps\n extends TwoFactorLabelProps, TwoFactorQrProps {\n manualSetupKey?: string | null;\n className?: string;\n}\n\nexport function TwoFactorScanStep({\n qrCode,\n qrCodeSvg,\n manualSetupKey,\n labels,\n className,\n slotName = 'two-factor-scan-step',\n}: TwoFactorScanStepProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [revealed, setRevealed] = useState(false);\n\n return (\n <div\n className={cn('gap-5 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div\n data-slot=\"two-factor-qr\"\n className={cn(\n recessedSurface,\n 'p-4 flex items-center justify-center [&_svg]:size-full [&_svg]:h-auto',\n )}\n >\n {qrCode ??\n (qrCodeSvg ? (\n <div\n data-slot=\"two-factor-qr-markup\"\n className={cn(controlRadius, 'p-3 bg-card')}\n dangerouslySetInnerHTML={{ __html: qrCodeSvg }}\n />\n ) : (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {text.qrFallbackLabel}\n </p>\n ))}\n </div>\n\n {manualSetupKey && (\n <div\n data-slot=\"two-factor-setup-key\"\n className=\"gap-2 flex flex-col\"\n >\n <p className=\"text-sm font-semibold text-foreground\">\n {text.manualKeyLabel}\n </p>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {text.manualKeyDescription}\n </p>\n\n <div className=\"gap-2 flex flex-wrap items-center\">\n <code\n data-slot=\"two-factor-setup-key-value\"\n className={cn(\n compactRadius,\n 'px-3 py-2 text-sm font-medium font-mono bg-muted break-all text-foreground',\n )}\n >\n {revealed\n ? manualSetupKey\n : '•'.repeat(manualSetupKey.length)}\n </code>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-pressed={revealed}\n onClick={() => setRevealed(!revealed)}\n >\n {revealed ? <EyeOff /> : <Eye />}\n {revealed\n ? text.manualKeyHideLabel\n : text.manualKeyRevealLabel}\n </Button>\n\n <CopyButton\n value={manualSetupKey}\n copyLabel={text.copyLabel}\n copiedLabel={text.copiedLabel}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { TwoFactorRecoveryCodes } from '@/blocks/two-factor/recovery-codes';\nimport { TwoFactorScanStep } from '@/blocks/two-factor/scan-step';\nimport {\n resolveLabels,\n type TwoFactorLabelProps,\n type TwoFactorQrProps,\n type TwoFactorSetupStep,\n} from '@/blocks/two-factor/types';\nimport { TwoFactorVerifyForm } from '@/blocks/two-factor/verify-form';\nimport { Button } from '@/components/ui/button';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Spinner } from '@/components/ui/spinner';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { useEffect, useRef, useState } from 'react';\n\nexport interface TwoFactorSetupDialogProps\n extends TwoFactorLabelProps, TwoFactorQrProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n enabled?: boolean;\n manualSetupKey?: string | null;\n recoveryCodes?: string[];\n errors?: string | string[] | null;\n onConfirm: (code: string) => void | Promise<void>;\n onRequestSetupData?: () => void | Promise<void>;\n onRegenerateRecoveryCodes?: () => void | Promise<void>;\n onCompleted?: () => void;\n className?: string;\n}\n\nexport function TwoFactorSetupDialog({\n open,\n onOpenChange,\n enabled = false,\n qrCode,\n qrCodeSvg,\n manualSetupKey,\n recoveryCodes,\n errors,\n onConfirm,\n onRequestSetupData,\n onRegenerateRecoveryCodes,\n onCompleted,\n labels,\n className,\n slotName = 'two-factor-setup-dialog',\n}: TwoFactorSetupDialogProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [step, setStep] = useState<TwoFactorSetupStep>(\n enabled ? 'recovery' : 'scan',\n );\n\n const requestSetupData = useRef(onRequestSetupData);\n const openedBefore = useRef(false);\n\n useEffect(() => {\n requestSetupData.current = onRequestSetupData;\n }, [onRequestSetupData]);\n\n useEffect(() => {\n if (!open) {\n openedBefore.current = false;\n\n return;\n }\n\n if (openedBefore.current) {\n return;\n }\n\n openedBefore.current = true;\n setStep(enabled ? 'recovery' : 'scan');\n\n if (!enabled) {\n void requestSetupData.current?.();\n }\n }, [open, enabled]);\n\n const ready = Boolean(qrCode || qrCodeSvg || manualSetupKey);\n const codes = recoveryCodes ?? [];\n\n const handleConfirm = async (code: string) => {\n await onConfirm(code);\n setStep('recovery');\n };\n\n const finish = () => {\n onOpenChange(false);\n onCompleted?.();\n };\n\n const heading = {\n pending: text.setupTitle,\n scan: text.scanTitle,\n confirm: text.confirmTitle,\n recovery: text.recoveryTitle,\n }[step];\n\n const description = {\n pending: text.setupDescription,\n scan: text.scanDescription,\n confirm: text.confirmDescription,\n recovery: `${text.recoveryDescription} ${text.recoveryWarning}`,\n }[step];\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n data-step={step}\n className={cn('max-w-md p-0', className)}\n slotName={slotName}\n >\n <DialogHeader className=\"p-6 md:p-8\">\n <DialogTitle>{heading}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n\n <div className=\"gap-5 p-6 md:p-8 pt-0 md:pt-0 flex flex-col\">\n {step === 'scan' &&\n (ready ? (\n <>\n <TwoFactorScanStep\n qrCode={qrCode}\n qrCodeSvg={qrCodeSvg}\n manualSetupKey={manualSetupKey}\n labels={labels}\n />\n <Button\n type=\"button\"\n onClick={() => setStep('confirm')}\n >\n {text.continueLabel}\n </Button>\n </>\n ) : (\n <div\n data-slot=\"two-factor-pending\"\n className=\"gap-3 py-6 text-sm font-medium flex items-center justify-center text-muted-foreground\"\n >\n <Spinner label={text.pendingLabel} />\n {text.pendingLabel}\n </div>\n ))}\n\n {step === 'confirm' && (\n <TwoFactorVerifyForm\n autoFocus\n errors={errors}\n labels={labels}\n onSubmit={handleConfirm}\n footer={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setStep('scan')}\n >\n {text.cancelLabel}\n </Button>\n }\n />\n )}\n\n {step === 'recovery' && (\n <>\n <TwoFactorRecoveryCodes\n codes={codes}\n defaultRevealed\n showHeading={false}\n labels={labels}\n onRegenerate={onRegenerateRecoveryCodes}\n />\n <Button type=\"button\" onClick={finish}>\n {text.doneLabel}\n </Button>\n </>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/blocks/command-palette.tsx","../src/blocks/danger-zone.tsx","../src/blocks/date-filter/context.tsx","../src/blocks/date-filter/fixed-panel.tsx","../src/blocks/date-filter/range.ts","../src/blocks/date-filter/relative-panel.tsx","../src/blocks/date-filter/summarise.ts","../src/blocks/date-filter/types.ts","../src/blocks/date-filter/date-filter.tsx","../src/blocks/date-filter/decode.ts","../src/blocks/date-filter/encode.ts","../src/blocks/form-overlay.tsx","../src/blocks/detail-edit-sheet.tsx","../src/blocks/form-dialog.tsx","../src/blocks/info-field.tsx","../src/blocks/localized-fields.tsx","../src/blocks/section-header.tsx","../src/blocks/settings-card.tsx","../src/blocks/settings-fields.tsx","../src/blocks/settings-page.tsx","../src/blocks/stat-card.tsx","../src/blocks/two-factor/types.ts","../src/blocks/two-factor/verify-form.tsx","../src/blocks/two-factor/challenge.tsx","../src/blocks/two-factor/disable-button.tsx","../src/blocks/two-factor/recovery-codes.tsx","../src/blocks/two-factor/scan-step.tsx","../src/blocks/two-factor/setup-dialog.tsx"],"names":["useState","jsxs","jsx","format","pt","ChevronLeft","CalendarDays","RANGE_SEPARATOR","RELATIVE_PREFIX","createContext","useContext","useId","EyeOff","Eye","useEffect","Fragment"],"mappings":"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","file":"blocks.js","sourcesContent":["import {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { useUiLabels } from '@/locales/context';\nimport { type LucideIcon } from 'lucide-react';\nimport { useCallback, useEffect, useState, type ReactNode } from 'react';\n\nexport interface CommandPaletteItem {\n id: string;\n label: string;\n icon?: LucideIcon;\n value?: string;\n hint?: string;\n}\n\nexport interface CommandPaletteGroup {\n heading: string;\n items: CommandPaletteItem[];\n}\n\nexport interface CommandPaletteLabels {\n placeholder: string;\n noResultsLabel: string;\n}\n\nexport const commandPaletteDefaultLabels: CommandPaletteLabels = {\n placeholder: 'Search...',\n noResultsLabel: 'No results found',\n};\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups: CommandPaletteGroup[];\n onSelect: (item: CommandPaletteItem) => void;\n query?: string;\n onQueryChange?: (query: string) => void;\n placeholder?: CommandPaletteLabels['placeholder'];\n noResultsLabel?: CommandPaletteLabels['noResultsLabel'];\n emptyState?: ReactNode;\n className?: string;\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n onSelect,\n query,\n onQueryChange,\n placeholder,\n noResultsLabel,\n emptyState,\n className,\n}: CommandPaletteProps) {\n const labels = useUiLabels('commandPalette', commandPaletteDefaultLabels, {\n placeholder,\n noResultsLabel,\n });\n const resolvedEmptyState = emptyState ?? labels.noResultsLabel;\n\n return (\n <CommandDialog\n open={open}\n onOpenChange={onOpenChange}\n className={className}\n >\n <CommandInput\n placeholder={labels.placeholder}\n value={query}\n onValueChange={onQueryChange}\n />\n <CommandList className=\"max-h-[360px]\">\n <CommandEmpty>{resolvedEmptyState}</CommandEmpty>\n\n {groups.map((group) => (\n <CommandGroup key={group.heading} heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n value={item.value ?? item.label}\n onSelect={() => onSelect(item)}\n >\n {item.icon && (\n <item.icon className=\"mr-2 size-4\" />\n )}\n <span className=\"font-medium\">\n {item.label}\n </span>\n {item.hint && (\n <span className=\"text-xs ml-auto text-muted-foreground\">\n {item.hint}\n </span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandDialog>\n );\n}\n\nexport function useCommandPalette(initialOpen = false) {\n const [open, setOpen] = useState(initialOpen);\n\n const toggle = useCallback(() => setOpen((previous) => !previous), []);\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggle();\n }\n };\n\n document.addEventListener('keydown', handler);\n\n return () => document.removeEventListener('keydown', handler);\n }, [toggle]);\n\n return { open, setOpen, toggle };\n}\n","import { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { TriangleAlert } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nexport interface DangerZoneLabels {\n title: string;\n description: string;\n actionLabel: string;\n confirmTitle: string;\n confirmDescription: string;\n confirmText: string;\n cancelText: string;\n requiredValueLabel: string;\n}\n\nexport const dangerZoneLabels: DangerZoneLabels = {\n title: 'Danger zone',\n description: 'These actions are permanent and cannot be undone.',\n actionLabel: 'Delete',\n confirmTitle: 'Confirm Action',\n confirmDescription:\n 'Are you sure you want to continue? This action cannot be undone.',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n requiredValueLabel: 'Type {{value}} to confirm',\n};\n\nexport interface DangerZoneAction {\n id: string;\n title: string;\n description?: string;\n actionLabel?: string;\n confirmTitle?: string;\n confirmDescription?: string;\n confirmText?: string;\n cancelText?: string;\n requiredValue?: string;\n requiredValueLabel?: string;\n disabled?: boolean;\n onConfirm: () => void;\n}\n\nexport interface DangerZoneProps {\n title?: string;\n description?: string;\n actions: DangerZoneAction[];\n processing?: boolean;\n labels?: Partial<DangerZoneLabels>;\n footer?: ReactNode;\n className?: string;\n}\n\nexport function DangerZone({\n title,\n description,\n actions,\n processing = false,\n labels,\n footer,\n className,\n slotName = 'danger-zone',\n}: DangerZoneProps & SlotNameProps) {\n const copy = { ...dangerZoneLabels, ...labels };\n const [activeId, setActiveId] = useState<string | null>(null);\n const active = actions.find((action) => action.id === activeId) ?? null;\n\n return (\n <section\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'gap-6 p-6 flex flex-col bg-destructive/5 ring-destructive/30',\n className,\n )}\n data-slot={slotName}\n >\n <div data-slot=\"danger-zone-header\" className=\"gap-3 flex\">\n <span className=\"size-11 rounded-2xl flex shrink-0 items-center justify-center bg-destructive/10 text-destructive\">\n <TriangleAlert className=\"size-5\" />\n </span>\n <div>\n <h2 className=\"text-lg font-bold text-destructive\">\n {title ?? copy.title}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description ?? copy.description}\n </p>\n </div>\n </div>\n\n <ul data-slot=\"danger-zone-actions\" className=\"gap-4 flex flex-col\">\n {actions.map((action) => (\n <li\n key={action.id}\n data-slot=\"danger-zone-action\"\n data-action-id={action.id}\n className=\"gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">\n {action.title}\n </p>\n {action.description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {action.description}\n </p>\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"destructive\"\n disabled={processing || action.disabled}\n onClick={() => setActiveId(action.id)}\n className=\"sm:w-auto w-full\"\n >\n {action.actionLabel ?? copy.actionLabel}\n </Button>\n </li>\n ))}\n </ul>\n\n {footer}\n\n <ConfirmDialog\n open={active !== null}\n onOpenChange={(open) => {\n if (!open) {\n setActiveId(null);\n }\n }}\n variant=\"destructive\"\n processing={processing}\n title={active?.confirmTitle ?? copy.confirmTitle}\n description={\n active?.confirmDescription ?? copy.confirmDescription\n }\n confirmText={active?.confirmText ?? copy.confirmText}\n cancelText={active?.cancelText ?? copy.cancelText}\n requiredValue={active?.requiredValue}\n requiredValueLabel={\n active?.requiredValueLabel ?? copy.requiredValueLabel\n }\n onConfirm={() => active?.onConfirm()}\n />\n </section>\n );\n}\n","import { createContext, useContext } from 'react';\n\nimport type {\n DateFilterLabels,\n DateFilterOption,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nexport type DateFilterPanel = 'root' | 'fixed' | 'relative';\n\nexport interface DateFilterContextValue {\n value: DateFilterValue;\n draft: DateFilterValue;\n labels: DateFilterLabels;\n presets: DateFilterOption[];\n operators: DateFilterOption[];\n units: DateFilterOption[];\n panel: DateFilterPanel;\n setDraft: (value: DateFilterValue) => void;\n openPanel: (panel: DateFilterPanel, seed: DateFilterValue) => void;\n backToRoot: () => void;\n commit: (value: DateFilterValue) => void;\n}\n\nconst DateFilterContext = createContext<DateFilterContextValue | null>(null);\n\nexport const DateFilterProvider = DateFilterContext.Provider;\n\nexport function useDateFilter(): DateFilterContextValue {\n const context = useContext(DateFilterContext);\n\n if (context === null) {\n throw new Error('DateFilter parts must be used inside <DateFilter>.');\n }\n\n return context;\n}\n","import { format } from 'date-fns';\nimport { pt } from 'date-fns/locale';\nimport { ChevronLeft } from 'lucide-react';\n\nimport { useDateFilter } from '@/blocks/date-filter/context';\nimport type { DateFilterOperator } from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport { cn } from '@/lib/utils';\n\nconst CALENDAR_START = new Date(2020, 0, 1);\n\nconst CALENDAR_END = new Date(new Date().getFullYear() + 1, 11, 31);\n\nconst toDate = (value?: string) =>\n value ? new Date(`${value}T00:00:00`) : undefined;\n\nconst toIso = (value?: Date) =>\n value ? format(value, 'yyyy-MM-dd') : undefined;\n\nexport function DateFilterFixedPanel() {\n const { draft, operators, labels, setDraft, backToRoot, commit } =\n useDateFilter();\n\n const operator = draft.operator ?? 'between';\n const isRange = operator === 'between';\n const canApply = Boolean(draft.start) && (!isRange || Boolean(draft.end));\n\n return (\n <div className=\"w-auto\">\n <div className=\"gap-1 px-2 py-2 flex items-center border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={backToRoot}\n aria-label={labels.back}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n {operators.map((item) => (\n <button\n key={item.value}\n type=\"button\"\n onClick={() =>\n setDraft({\n ...draft,\n operator: item.value as DateFilterOperator,\n })\n }\n className={cn(\n 'px-3 py-1.5 text-sm font-medium rounded-xl cursor-pointer transition-colors',\n operator === item.value\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n\n <div className=\"p-3\">\n {isRange ? (\n <Calendar\n mode=\"range\"\n numberOfMonths={2}\n locale={pt}\n captionLayout=\"dropdown\"\n startMonth={CALENDAR_START}\n endMonth={CALENDAR_END}\n defaultMonth={toDate(draft.start)}\n selected={{\n from: toDate(draft.start),\n to: toDate(draft.end),\n }}\n onSelect={(range) =>\n setDraft({\n ...draft,\n start: toIso(range?.from),\n end: toIso(range?.to),\n })\n }\n />\n ) : (\n <Calendar\n mode=\"single\"\n locale={pt}\n captionLayout=\"dropdown\"\n startMonth={CALENDAR_START}\n endMonth={CALENDAR_END}\n defaultMonth={toDate(draft.start)}\n selected={toDate(draft.start)}\n onSelect={(date) =>\n setDraft({ ...draft, start: toIso(date) })\n }\n />\n )}\n </div>\n\n <div className=\"px-3 py-2 flex justify-end border-t\">\n <Button disabled={!canApply} onClick={() => commit(draft)}>\n {labels.apply}\n </Button>\n </div>\n </div>\n );\n}\n","import {\n endOfDay,\n endOfMonth,\n endOfQuarter,\n endOfWeek,\n endOfYear,\n format,\n isSameYear,\n startOfDay,\n startOfMonth,\n startOfQuarter,\n startOfWeek,\n startOfYear,\n subDays,\n subMonths,\n subQuarters,\n subWeeks,\n subYears,\n} from 'date-fns';\nimport { pt } from 'date-fns/locale';\n\nimport type { DateFilterUnit } from '@/blocks/date-filter/types';\n\nconst WEEK_OPTIONS = { weekStartsOn: 1 } as const;\n\nconst subtract: Record<DateFilterUnit, (date: Date, amount: number) => Date> = {\n day: subDays,\n week: subWeeks,\n month: subMonths,\n quarter: subQuarters,\n year: subYears,\n};\n\nconst startOf: Record<DateFilterUnit, (date: Date) => Date> = {\n day: startOfDay,\n week: (date) => startOfWeek(date, WEEK_OPTIONS),\n month: startOfMonth,\n quarter: startOfQuarter,\n year: startOfYear,\n};\n\nconst endOf: Record<DateFilterUnit, (date: Date) => Date> = {\n day: endOfDay,\n week: (date) => endOfWeek(date, WEEK_OPTIONS),\n month: endOfMonth,\n quarter: endOfQuarter,\n year: endOfYear,\n};\n\nexport function resolveRelativeRange(\n unit: DateFilterUnit,\n amount: number,\n includeCurrent: boolean,\n now: Date = new Date(),\n offsetAmount = 0,\n offsetUnit?: DateFilterUnit,\n): { start: Date; end: Date } | null {\n if (amount < 1 || offsetAmount < 0) {\n return null;\n }\n\n let anchor = includeCurrent ? now : subtract[unit](now, 1);\n\n if (offsetAmount > 0) {\n anchor = subtract[offsetUnit ?? unit](anchor, offsetAmount);\n }\n\n return {\n start: startOf[unit](subtract[unit](anchor, amount - 1)),\n end: endOf[unit](anchor),\n };\n}\n\nexport function formatRangePreview(range: { start: Date; end: Date }): string {\n const sameYear = isSameYear(range.start, range.end);\n const startPattern = sameYear ? 'd MMM' : 'd MMM yyyy';\n\n return `${format(range.start, startPattern, { locale: pt })} - ${format(range.end, 'd MMM yyyy', { locale: pt })}`;\n}\n","import { ArrowLeftToLine, CalendarDays, ChevronLeft, X } from 'lucide-react';\n\nimport { useDateFilter } from '@/blocks/date-filter/context';\nimport {\n formatRangePreview,\n resolveRelativeRange,\n} from '@/blocks/date-filter/range';\nimport type {\n DateFilterUnit,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Switch } from '@/components/ui/switch';\n\nexport function DateFilterRelativePanel() {\n const { draft, units, labels, setDraft, backToRoot, commit } =\n useDateFilter();\n\n const hasOffset = (draft.offset_amount ?? 0) > 0;\n\n return (\n <div className=\"w-96\">\n <div className=\"gap-2 px-2 py-2 flex items-center border-b\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={backToRoot}\n aria-label={labels.back}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <span className=\"text-sm font-medium\">\n {labels.relativeTitle}\n </span>\n </div>\n\n <div className=\"gap-3 p-3 flex flex-col\">\n <div className=\"gap-2 flex items-center\">\n <span className=\"text-sm\">{labels.latest}</span>\n <Input\n type=\"number\"\n min={1}\n max={120}\n value={draft.amount ?? 1}\n onChange={(event) =>\n setDraft({\n ...draft,\n amount: Number(event.target.value),\n })\n }\n className=\"w-20\"\n />\n <Select\n value={draft.unit ?? 'month'}\n onValueChange={(unit) =>\n setDraft({ ...draft, unit: unit as DateFilterUnit })\n }\n >\n <SelectTrigger className=\"flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {units.map((unit) => (\n <SelectItem key={unit.value} value={unit.value}>\n {unit.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {!hasOffset && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.startingAgo}\n title={labels.startingAgo}\n onClick={() =>\n setDraft({\n ...draft,\n offset_amount: 1,\n offset_unit: draft.unit ?? 'month',\n })\n }\n >\n <ArrowLeftToLine className=\"size-4\" />\n </Button>\n )}\n </div>\n\n {hasOffset && (\n <div className=\"gap-2 flex items-center\">\n <span className=\"text-sm\">{labels.startingAgo}</span>\n <Input\n type=\"number\"\n min={1}\n max={120}\n value={draft.offset_amount ?? 1}\n onChange={(event) =>\n setDraft({\n ...draft,\n offset_amount: Number(event.target.value),\n })\n }\n className=\"w-20\"\n />\n <Select\n value={draft.offset_unit ?? draft.unit ?? 'month'}\n onValueChange={(unit) =>\n setDraft({\n ...draft,\n offset_unit: unit as DateFilterUnit,\n })\n }\n >\n <SelectTrigger className=\"flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {units.map((unit) => (\n <SelectItem\n key={unit.value}\n value={unit.value}\n >\n {unit.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.removeOffset}\n onClick={() =>\n setDraft({\n ...draft,\n offset_amount: undefined,\n offset_unit: undefined,\n })\n }\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n )}\n\n <label className=\"text-sm flex items-center justify-between\">\n {labels.includeCurrent}\n <Switch\n checked={draft.include_current ?? false}\n onCheckedChange={(checked) =>\n setDraft({ ...draft, include_current: checked })\n }\n />\n </label>\n </div>\n\n <div className=\"gap-3 px-3 py-2 flex items-center justify-between border-t\">\n <RangePreview draft={draft} />\n <Button\n disabled={!draft.unit || !draft.amount || draft.amount < 1}\n onClick={() => commit(draft)}\n >\n {labels.apply}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction RangePreview({ draft }: { draft: DateFilterValue }) {\n const range = resolveRelativeRange(\n draft.unit ?? 'month',\n draft.amount ?? 0,\n draft.include_current ?? false,\n new Date(),\n draft.offset_amount ?? 0,\n draft.offset_unit,\n );\n\n if (!range) {\n return <span />;\n }\n\n return (\n <span className=\"gap-2 text-sm flex items-center text-muted-foreground\">\n <CalendarDays className=\"size-4\" />\n {formatRangePreview(range)}\n </span>\n );\n}\n","import { format } from 'date-fns';\nimport { pt } from 'date-fns/locale';\n\nimport type {\n DateFilterLabels,\n DateFilterOption,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nconst readable = (value?: string) =>\n value\n ? format(new Date(`${value}T00:00:00`), \"d 'de' MMMM 'de' yyyy\", {\n locale: pt,\n })\n : '';\n\nexport function summariseDateFilter(\n value: DateFilterValue,\n presets: DateFilterOption[],\n operators: DateFilterOption[],\n units: DateFilterOption[],\n labels: DateFilterLabels,\n): string {\n if (value.mode === 'preset') {\n return (\n presets.find((preset) => preset.value === value.preset)?.label ??\n labels.fallback\n );\n }\n\n if (value.mode === 'fixed') {\n const operator =\n operators.find((item) => item.value === value.operator)?.label ??\n '';\n\n return value.operator === 'between'\n ? `${readable(value.start)} - ${readable(value.end)}`\n : `${operator} ${readable(value.start)}`;\n }\n\n if (value.mode === 'relative') {\n const unitLabel = (unit?: string) =>\n units.find((item) => item.value === unit)?.label ?? '';\n\n const base = `${labels.latest} ${value.amount ?? 1} ${unitLabel(value.unit)}`;\n\n return (value.offset_amount ?? 0) > 0\n ? `${base}, ${labels.ago} ${value.offset_amount} ${unitLabel(value.offset_unit ?? value.unit)}`\n : base;\n }\n\n return labels.all;\n}\n","export type DateFilterMode = 'all' | 'preset' | 'fixed' | 'relative';\n\nexport type DateFilterOperator = 'between' | 'before' | 'on' | 'after';\n\nexport type DateFilterUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateFilterValue {\n mode: DateFilterMode;\n preset?: string;\n operator?: DateFilterOperator;\n start?: string;\n end?: string;\n unit?: DateFilterUnit;\n amount?: number;\n include_current?: boolean;\n offset_amount?: number;\n offset_unit?: DateFilterUnit;\n}\n\nexport interface DateFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DateFilterLabels {\n all: string;\n fixed: string;\n relative: string;\n relativeTitle: string;\n apply: string;\n back: string;\n latest: string;\n ago: string;\n includeCurrent: string;\n startingAgo: string;\n removeOffset: string;\n fallback: string;\n}\n\nexport const DEFAULT_PRESETS: DateFilterOption[] = [\n { value: 'today', label: 'Today' },\n { value: 'yesterday', label: 'Yesterday' },\n { value: 'previous_week', label: 'Previous week' },\n { value: 'previous_7_days', label: 'Last 7 days' },\n { value: 'previous_30_days', label: 'Last 30 days' },\n { value: 'previous_month', label: 'Previous month' },\n { value: 'previous_3_months', label: 'Last 3 months' },\n { value: 'previous_12_months', label: 'Last 12 months' },\n];\n\nexport const DEFAULT_OPERATORS: DateFilterOption[] = [\n { value: 'between', label: 'Between' },\n { value: 'before', label: 'Before' },\n { value: 'on', label: 'On' },\n { value: 'after', label: 'After' },\n];\n\nexport const DEFAULT_UNITS: DateFilterOption[] = [\n { value: 'day', label: 'days' },\n { value: 'week', label: 'weeks' },\n { value: 'month', label: 'months' },\n { value: 'quarter', label: 'quarters' },\n { value: 'year', label: 'years' },\n];\n\nexport const DEFAULT_LABELS: DateFilterLabels = {\n all: 'All time',\n fixed: 'Fixed range...',\n relative: 'Relative range...',\n relativeTitle: 'Relative range',\n apply: 'Apply filter',\n back: 'Back',\n latest: 'Last',\n ago: 'offset',\n includeCurrent: 'Include current period',\n startingAgo: 'Starting',\n removeOffset: 'Remove offset',\n fallback: 'Date',\n};\n","import { CalendarDays } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport {\n DateFilterProvider,\n useDateFilter,\n type DateFilterPanel,\n} from '@/blocks/date-filter/context';\nimport { DateFilterFixedPanel } from '@/blocks/date-filter/fixed-panel';\nimport { DateFilterRelativePanel } from '@/blocks/date-filter/relative-panel';\nimport { summariseDateFilter } from '@/blocks/date-filter/summarise';\nimport {\n DEFAULT_LABELS,\n DEFAULT_OPERATORS,\n DEFAULT_PRESETS,\n DEFAULT_UNITS,\n type DateFilterLabels,\n type DateFilterOption,\n type DateFilterValue,\n} from '@/blocks/date-filter/types';\nimport { Button } from '@/components/ui/button';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels, useUiLocale } from '@/locales/context';\n\nexport interface DateFilterProps {\n value: DateFilterValue;\n onChange: (value: DateFilterValue) => void;\n presets?: DateFilterOption[];\n operators?: DateFilterOption[];\n units?: DateFilterOption[];\n labels?: Partial<DateFilterLabels>;\n children?: ReactNode;\n}\n\nexport function DateFilter({\n value,\n onChange,\n presets,\n operators,\n units,\n labels,\n children,\n}: DateFilterProps) {\n const locale = useUiLocale();\n const resolvedLabels = useUiLabels('dateFilter', DEFAULT_LABELS, labels);\n const [open, setOpen] = useState(false);\n const [panel, setPanel] = useState<DateFilterPanel>('root');\n const [draft, setDraft] = useState<DateFilterValue>(value);\n\n const context = {\n value,\n draft,\n labels: resolvedLabels,\n presets: presets ?? locale.dateFilterPresets ?? DEFAULT_PRESETS,\n operators: operators ?? locale.dateFilterOperators ?? DEFAULT_OPERATORS,\n units: units ?? locale.dateFilterUnits ?? DEFAULT_UNITS,\n panel,\n setDraft,\n openPanel: (next: DateFilterPanel, seed: DateFilterValue) => {\n setDraft(seed);\n setPanel(next);\n },\n backToRoot: () => setPanel('root'),\n commit: (next: DateFilterValue) => {\n onChange(next);\n setOpen(false);\n setPanel('root');\n },\n };\n\n return (\n <DateFilterProvider value={context}>\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n\n if (!next) {\n setPanel('root');\n }\n }}\n >\n {children ?? (\n <>\n <DateFilterTrigger />\n <DateFilterContent>\n <DateFilterAll />\n <DateFilterSeparator />\n <DateFilterPresets />\n <DateFilterSeparator />\n <DateFilterFixed />\n <DateFilterRelative />\n </DateFilterContent>\n </>\n )}\n </Popover>\n </DateFilterProvider>\n );\n}\n\nexport function DateFilterTrigger({\n className,\n children,\n}: {\n className?: string;\n children?: ReactNode;\n}) {\n const { value, presets, operators, units, labels } = useDateFilter();\n\n return (\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn('gap-2 justify-start', className)}\n >\n <CalendarDays className=\"size-4\" />\n {children ??\n summariseDateFilter(\n value,\n presets,\n operators,\n units,\n labels,\n )}\n </Button>\n </PopoverTrigger>\n );\n}\n\nexport function DateFilterContent({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) {\n const { panel } = useDateFilter();\n\n return (\n <PopoverContent align=\"start\" className={cn('p-0 w-auto', className)}>\n {panel === 'root' && (\n <div className=\"w-64 py-2 flex flex-col\">{children}</div>\n )}\n {panel === 'fixed' && <DateFilterFixedPanel />}\n {panel === 'relative' && <DateFilterRelativePanel />}\n </PopoverContent>\n );\n}\n\nexport function DateFilterItem({\n active,\n onSelect,\n children,\n}: {\n active: boolean;\n onSelect: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'px-4 py-2 text-sm font-medium cursor-pointer text-left transition-colors',\n active\n ? 'bg-accent text-accent-foreground'\n : 'text-foreground hover:bg-accent/50',\n )}\n >\n {children}\n </button>\n );\n}\n\nexport function DateFilterSeparator() {\n return <div className=\"my-2 border-t\" />;\n}\n\nexport function DateFilterAll({ children }: { children?: ReactNode }) {\n const { value, labels, commit } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'all'}\n onSelect={() => commit({ mode: 'all' })}\n >\n {children ?? labels.all}\n </DateFilterItem>\n );\n}\n\nexport function DateFilterPresets({ only }: { only?: string[] }) {\n const { value, presets, commit } = useDateFilter();\n\n const visible = only\n ? presets.filter((preset) => only.includes(preset.value))\n : presets;\n\n return (\n <>\n {visible.map((preset) => (\n <DateFilterItem\n key={preset.value}\n active={\n value.mode === 'preset' && value.preset === preset.value\n }\n onSelect={() =>\n commit({ mode: 'preset', preset: preset.value })\n }\n >\n {preset.label}\n </DateFilterItem>\n ))}\n </>\n );\n}\n\nexport function DateFilterFixed({ children }: { children?: ReactNode }) {\n const { value, labels, openPanel } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'fixed'}\n onSelect={() =>\n openPanel('fixed', {\n mode: 'fixed',\n operator: value.operator ?? 'between',\n start: value.start,\n end: value.end,\n })\n }\n >\n {children ?? labels.fixed}\n </DateFilterItem>\n );\n}\n\nexport function DateFilterRelative({ children }: { children?: ReactNode }) {\n const { value, labels, openPanel } = useDateFilter();\n\n return (\n <DateFilterItem\n active={value.mode === 'relative'}\n onSelect={() =>\n openPanel('relative', {\n mode: 'relative',\n unit: value.unit ?? 'month',\n amount: value.amount ?? 3,\n include_current: value.include_current ?? false,\n })\n }\n >\n {children ?? labels.relative}\n </DateFilterItem>\n );\n}\n","import type {\n DateFilterUnit,\n DateFilterValue,\n} from '@/blocks/date-filter/types';\n\nconst RANGE_SEPARATOR = '~';\n\nconst RELATIVE_PREFIX = 'previous';\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst UNITS: DateFilterUnit[] = ['day', 'week', 'month', 'quarter', 'year'];\n\nconst ALL: DateFilterValue = { mode: 'all' };\n\nexport function decodeDateFilter(\n encoded: string | null | undefined,\n): DateFilterValue {\n if (!encoded) {\n return ALL;\n }\n\n if (encoded.startsWith(`${RELATIVE_PREFIX}:`)) {\n return decodeRelative(encoded);\n }\n\n if (encoded.includes(RANGE_SEPARATOR)) {\n return decodeFixedRange(encoded);\n }\n\n if (ISO_DATE.test(encoded)) {\n return isDate(encoded)\n ? { mode: 'fixed', operator: 'on', start: encoded }\n : ALL;\n }\n\n return { mode: 'preset', preset: encoded };\n}\n\nfunction decodeFixedRange(encoded: string): DateFilterValue {\n const parts = encoded.split(RANGE_SEPARATOR);\n\n if (parts.length !== 2) {\n return ALL;\n }\n\n const [start, end] = parts;\n\n if (start && end) {\n return isDate(start) && isDate(end)\n ? { mode: 'fixed', operator: 'between', start, end }\n : ALL;\n }\n\n if (start) {\n return isDate(start)\n ? { mode: 'fixed', operator: 'after', start }\n : ALL;\n }\n\n if (end) {\n return isDate(end)\n ? { mode: 'fixed', operator: 'before', start: end }\n : ALL;\n }\n\n return ALL;\n}\n\nfunction decodeRelative(encoded: string): DateFilterValue {\n const [, rawAmount, rawUnit, ...rest] = encoded.split(':');\n const amount = Number(rawAmount);\n const unit = toUnit(rawUnit);\n\n if (!unit || !Number.isInteger(amount) || amount < 1) {\n return ALL;\n }\n\n const value: DateFilterValue = { mode: 'relative', amount, unit };\n const tail = [...rest];\n\n if (tail[0] === 'current') {\n value.include_current = true;\n tail.shift();\n }\n\n if (tail.length === 0) {\n return value;\n }\n\n if (tail.length !== 3 || tail[0] !== 'offset') {\n return ALL;\n }\n\n const offsetAmount = Number(tail[1]);\n const offsetUnit = toUnit(tail[2]);\n\n if (!offsetUnit || !Number.isInteger(offsetAmount) || offsetAmount < 1) {\n return ALL;\n }\n\n value.offset_amount = offsetAmount;\n value.offset_unit = offsetUnit;\n\n return value;\n}\n\nfunction toUnit(value: string | undefined): DateFilterUnit | null {\n return UNITS.find((unit) => unit === value) ?? null;\n}\n\nfunction isDate(value: string): boolean {\n if (!ISO_DATE.test(value)) {\n return false;\n }\n\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day));\n\n return (\n date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day\n );\n}\n","import type { DateFilterValue } from '@/blocks/date-filter/types';\n\nconst RANGE_SEPARATOR = '~';\n\nconst RELATIVE_PREFIX = 'previous';\n\nexport function encodeDateFilter(filter: DateFilterValue): string | null {\n if (filter.mode === 'preset') {\n return filter.preset ?? null;\n }\n\n if (filter.mode === 'fixed') {\n return encodeFixed(filter);\n }\n\n if (filter.mode === 'relative') {\n return encodeRelative(filter);\n }\n\n return null;\n}\n\nfunction encodeFixed(filter: DateFilterValue): string | null {\n if (!filter.start) {\n return null;\n }\n\n if (filter.operator === 'before') {\n return `${RANGE_SEPARATOR}${filter.start}`;\n }\n\n if (filter.operator === 'after') {\n return `${filter.start}${RANGE_SEPARATOR}`;\n }\n\n if (filter.operator === 'on') {\n return filter.start;\n }\n\n return filter.end ? `${filter.start}${RANGE_SEPARATOR}${filter.end}` : null;\n}\n\nfunction encodeRelative(filter: DateFilterValue): string | null {\n if (!filter.unit || !filter.amount || filter.amount < 1) {\n return null;\n }\n\n let value = `${RELATIVE_PREFIX}:${filter.amount}:${filter.unit}`;\n\n if (filter.include_current) {\n value += ':current';\n }\n\n if (filter.offset_amount && filter.offset_amount > 0) {\n value += `:offset:${filter.offset_amount}:${filter.offset_unit ?? filter.unit}`;\n }\n\n return value;\n}\n","import { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nexport interface FormOverlayLabels {\n cancelLabel: string;\n saveLabel: string;\n savingLabel: string;\n}\n\nexport const formOverlayDefaultLabels: FormOverlayLabels = {\n cancelLabel: 'Cancel',\n saveLabel: 'Save',\n savingLabel: 'Saving...',\n};\n\nexport type FormOverlayIntent = 'default' | 'destructive';\n\nexport interface FormOverlayActionsProps {\n labels?: FormOverlayLabels;\n processing?: boolean;\n intent?: FormOverlayIntent;\n submit?: boolean;\n className?: string;\n onCancel: () => void;\n onSave?: () => void;\n}\n\nexport function FormOverlayActions({\n labels = formOverlayDefaultLabels,\n processing = false,\n intent = 'default',\n submit = false,\n className,\n onCancel,\n onSave,\n slotName = 'form-overlay-actions',\n}: FormOverlayActionsProps & SlotNameProps) {\n return (\n <div\n className={cn('gap-2 flex items-center justify-end', className)}\n data-slot={slotName}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={processing}\n onClick={onCancel}\n >\n {labels.cancelLabel}\n </Button>\n\n <Button\n type={submit ? 'submit' : 'button'}\n aria-label={processing ? labels.savingLabel : undefined}\n variant={intent}\n loading={processing}\n loadingLabel={labels.savingLabel}\n onClick={onSave}\n >\n {processing ? labels.savingLabel : labels.saveLabel}\n </Button>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport {\n FormOverlayActions,\n type FormOverlayIntent,\n type FormOverlayLabels,\n} from '@/blocks/form-overlay';\nimport {\n FloatingSheet,\n FloatingSheetBody,\n FloatingSheetFooter,\n} from '@/components/ui/floating-sheet';\nimport { Separator } from '@/components/ui/separator';\nimport type { SlotNameProps } from '@/types';\n\nexport interface DetailEditSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: React.ReactNode;\n description?: React.ReactNode;\n processing?: boolean;\n intent?: FormOverlayIntent;\n labels?: FormOverlayLabels;\n className?: string;\n children: React.ReactNode;\n onSave: () => void;\n onCancel?: () => void;\n}\n\nexport function DetailEditSheet({\n open,\n onOpenChange,\n title,\n description,\n processing = false,\n intent,\n labels,\n className,\n children,\n onSave,\n onCancel,\n slotName = 'detail-edit-sheet',\n}: DetailEditSheetProps & SlotNameProps) {\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (processing) {\n return;\n }\n\n onSave();\n };\n\n const handleCancel = () => {\n if (processing) {\n return;\n }\n\n onCancel?.();\n onOpenChange(false);\n };\n\n return (\n <FloatingSheet\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n description={description}\n persistent\n className={className}\n >\n <form\n onSubmit={handleSubmit}\n className=\"min-h-0 flex flex-1 flex-col\"\n data-slot={slotName}\n >\n <FloatingSheetBody>{children}</FloatingSheetBody>\n\n <Separator />\n\n <FloatingSheetFooter>\n <FormOverlayActions\n submit\n labels={labels}\n processing={processing}\n intent={intent}\n onCancel={handleCancel}\n />\n </FloatingSheetFooter>\n </form>\n </FloatingSheet>\n );\n}\n","import * as React from 'react';\n\nimport {\n FormOverlayActions,\n type FormOverlayIntent,\n type FormOverlayLabels,\n} from '@/blocks/form-overlay';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nexport interface FormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: React.ReactNode;\n description?: React.ReactNode;\n processing?: boolean;\n intent?: FormOverlayIntent;\n labels?: FormOverlayLabels;\n className?: string;\n children: React.ReactNode;\n onSave: () => void;\n onCancel?: () => void;\n}\n\nexport function FormDialog({\n open,\n onOpenChange,\n title,\n description,\n processing = false,\n intent,\n labels,\n className,\n children,\n onSave,\n onCancel,\n slotName = 'form-dialog',\n}: FormDialogProps & SlotNameProps) {\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (processing) {\n return;\n }\n\n onSave();\n };\n\n const handleCancel = () => {\n if (processing) {\n return;\n }\n\n onCancel?.();\n onOpenChange(false);\n };\n\n const blockWhileProcessing = (event: Event | KeyboardEvent) => {\n if (processing) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (processing && !next) {\n return;\n }\n\n onOpenChange(next);\n }}\n >\n <DialogContent\n {...(description ? {} : { 'aria-describedby': undefined })}\n className={cn('gap-0 p-0', className)}\n onEscapeKeyDown={blockWhileProcessing}\n onInteractOutside={blockWhileProcessing}\n slotName={slotName}\n >\n <form\n data-slot=\"form-dialog-form\"\n onSubmit={handleSubmit}\n className=\"grid max-h-[calc(100dvh-8rem)] grid-rows-[auto_minmax(0,1fr)_auto]\"\n >\n <DialogHeader className=\"text-left\">\n <DialogTitle>{title}</DialogTitle>\n {description ? (\n <DialogDescription>{description}</DialogDescription>\n ) : null}\n </DialogHeader>\n\n <div\n data-slot=\"form-dialog-body\"\n className=\"gap-4 px-6 pb-6 md:px-8 flex flex-col overflow-y-auto\"\n >\n {children}\n </div>\n\n <DialogFooter>\n <FormOverlayActions\n submit\n labels={labels}\n processing={processing}\n intent={intent}\n onCancel={handleCancel}\n className=\"w-full\"\n />\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import { CopyButton, type CopyButtonLabels } from '@/components/ui/copy-button';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { type LucideIcon } from 'lucide-react';\nimport { type ReactNode } from 'react';\n\nexport interface InfoFieldProps {\n icon: LucideIcon;\n label: string;\n value: ReactNode;\n copyable?: boolean;\n copyValue?: string;\n copyLabel?: CopyButtonLabels['copyLabel'];\n copiedLabel?: CopyButtonLabels['copiedLabel'];\n iconClassName?: string;\n className?: string;\n}\n\nfunction copyableText(value: ReactNode, copyValue?: string): string {\n if (copyValue !== undefined) {\n return copyValue.trim();\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value).trim();\n }\n\n return '';\n}\n\nexport function InfoField({\n icon: Icon,\n label,\n value,\n copyable = false,\n copyValue,\n copyLabel,\n copiedLabel,\n iconClassName,\n className,\n slotName = 'info-field',\n}: InfoFieldProps & SlotNameProps) {\n const text = copyableText(value, copyValue);\n\n return (\n <div\n className={cn('gap-3 flex items-center', className)}\n data-slot={slotName}\n >\n <div className={cn('p-2 rounded-xl bg-muted', iconClassName)}>\n <Icon className=\"size-5 text-muted-foreground\" />\n </div>\n <div>\n <p\n data-slot=\"info-field-label\"\n className=\"text-xs font-medium tracking-wider text-muted-foreground uppercase\"\n >\n {label}\n </p>\n <p\n data-slot=\"info-field-value\"\n className=\"gap-1 font-semibold flex items-center\"\n >\n {value}\n {copyable && text !== '' && (\n <CopyButton\n value={text}\n copyLabel={copyLabel}\n copiedLabel={copiedLabel}\n />\n )}\n </p>\n </div>\n </div>\n );\n}\n\nexport interface InfoFieldGroupProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function InfoFieldGroup({ children, className }: InfoFieldGroupProps) {\n return <div className={cn('space-y-4', className)}>{children}</div>;\n}\n","import { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Textarea } from '@/components/ui/textarea';\nimport { cn } from '@/lib/utils';\n\nexport interface LocalizedField {\n name: string;\n label: string;\n type?: 'text' | 'textarea';\n rows?: number;\n}\n\nexport interface LocalizedFieldsProps {\n locales: string[];\n localeLabels?: Record<string, string>;\n fields: LocalizedField[];\n values: Record<string, Record<string, string>>;\n onChange: (field: string, locale: string, value: string) => void;\n errors?: Record<string, string>;\n defaultLocale?: string;\n className?: string;\n}\n\nexport function LocalizedFields({\n locales,\n localeLabels,\n fields,\n values,\n onChange,\n errors,\n defaultLocale,\n className,\n}: LocalizedFieldsProps) {\n return (\n <Tabs\n defaultValue={defaultLocale ?? locales[0]}\n className={cn('w-full', className)}\n >\n <TabsList className=\"mb-4 rounded-2xl p-1.5 flex h-auto w-full justify-start overflow-x-auto bg-muted\">\n {locales.map((locale) => (\n <TabsTrigger\n key={locale}\n value={locale}\n className=\"px-4 font-medium h-8 rounded-xl\"\n >\n {localeLabels?.[locale] ?? locale.toUpperCase()}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {locales.map((locale) => (\n <TabsContent key={locale} value={locale} className=\"mt-0\">\n <div className=\"gap-4 lg:grid-cols-2 grid\">\n {fields.map((field) => {\n const fieldId = `${field.name}-${locale}`;\n const error = errors?.[`${field.name}.${locale}`];\n const value = values[field.name]?.[locale] ?? '';\n\n return (\n <div key={field.name} className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n {field.label}\n </Label>\n {field.type === 'textarea' ? (\n <Textarea\n id={fieldId}\n rows={field.rows ?? 4}\n value={value}\n onChange={(event) =>\n onChange(\n field.name,\n locale,\n event.target.value,\n )\n }\n />\n ) : (\n <Input\n id={fieldId}\n value={value}\n onChange={(event) =>\n onChange(\n field.name,\n locale,\n event.target.value,\n )\n }\n />\n )}\n {error && (\n <p className=\"text-xs font-medium text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n </div>\n </TabsContent>\n ))}\n </Tabs>\n );\n}\n","import { cn } from '@/lib/utils';\nimport { type ReactNode } from 'react';\n\nexport interface SectionHeaderProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n control?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({\n icon,\n title,\n description,\n control,\n className,\n}: SectionHeaderProps) {\n return (\n <div\n className={cn(\n 'gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col',\n className,\n )}\n >\n <div className=\"gap-3 flex items-center\">\n {icon}\n <div>\n <h2 className=\"text-lg font-bold text-foreground\">\n {title}\n </h2>\n {description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </div>\n {control}\n </div>\n );\n}\n","import { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport {\n elevatedSurface,\n recessedSurface,\n type SurfaceProps,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { type LucideIcon } from 'lucide-react';\nimport { type ReactNode } from 'react';\n\nexport interface SettingsCardProps extends SurfaceProps {\n icon: LucideIcon;\n iconClassName?: string;\n title: string;\n description: string;\n control?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsCard({\n icon: Icon,\n iconClassName,\n title,\n description,\n control,\n children,\n inset = false,\n className,\n slotName = 'settings-card',\n}: SettingsCardProps & SlotNameProps) {\n return (\n <section\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'space-y-5 p-6 bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n <div className=\"gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col\">\n <div className=\"gap-3 flex items-center\">\n <div\n className={cn(\n 'size-11 rounded-2xl flex items-center justify-center',\n iconClassName ?? 'bg-muted text-muted-foreground',\n )}\n >\n <Icon className=\"size-5\" />\n </div>\n <div>\n <h2 className=\"text-lg font-bold text-foreground\">\n {title}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n </div>\n </div>\n {control}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface SettingsPanelProps extends SurfaceProps {\n title?: string;\n description?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsPanel({\n title,\n description,\n children,\n inset = true,\n className,\n slotName = 'settings-panel',\n}: SettingsPanelProps & SlotNameProps) {\n return (\n <div\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'space-y-4 p-5 bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n {(title || description) && (\n <div>\n {title && (\n <h3 className=\"text-sm font-semibold text-foreground\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"mt-1 text-xs font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport interface ToggleRowProps {\n id: string;\n label: string;\n description?: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n}\n\nexport function ToggleRow({\n id,\n label,\n description,\n checked,\n onChange,\n disabled,\n}: ToggleRowProps) {\n return (\n <div className=\"gap-4 py-1 flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <Label\n htmlFor={id}\n className=\"text-sm font-medium text-foreground\"\n >\n {label}\n </Label>\n {description && (\n <p className=\"text-xs font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <Switch\n id={id}\n checked={checked}\n onCheckedChange={onChange}\n disabled={disabled}\n />\n </div>\n );\n}\n","import { FieldError } from '@/components/ui/field-error';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { useId, type ReactNode } from 'react';\n\nexport interface SettingsFieldProps {\n id?: string;\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n className?: string;\n children: (fieldId: string) => ReactNode;\n}\n\nexport function SettingsField({\n id,\n label,\n description,\n error,\n required,\n className,\n children,\n slotName = 'settings-field',\n}: SettingsFieldProps & SlotNameProps) {\n const generated = useId();\n const fieldId = id ?? generated;\n\n return (\n <div\n data-invalid={error ? true : undefined}\n className={cn('space-y-2 py-1', className)}\n data-slot={slotName}\n >\n <Label htmlFor={fieldId}>\n {label}\n {required && (\n <span\n data-slot=\"settings-field-required\"\n aria-hidden=\"true\"\n className=\"text-destructive\"\n >\n *\n </span>\n )}\n </Label>\n\n {children(fieldId)}\n\n {description && (\n <p\n data-slot=\"settings-field-description\"\n className=\"text-xs font-medium text-muted-foreground\"\n >\n {description}\n </p>\n )}\n\n <FieldError message={error} />\n </div>\n );\n}\n\ninterface ControlProps<T> {\n id?: string;\n label: string;\n description?: string;\n error?: string;\n required?: boolean;\n disabled?: boolean;\n placeholder?: string;\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\nexport type TextFieldProps = ControlProps<string> & {\n type?: 'text' | 'email' | 'url' | 'tel' | 'password';\n};\n\nexport function TextField({\n type = 'text',\n value,\n onChange,\n disabled,\n placeholder,\n slotName = 'text-field',\n ...field\n}: TextFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type={type}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) => onChange(event.target.value)}\n />\n )}\n </SettingsField>\n );\n}\n\nexport type NumberFieldProps = ControlProps<number | ''> & {\n min?: number;\n max?: number;\n step?: number;\n};\n\nexport function NumberField({\n value,\n onChange,\n disabled,\n placeholder,\n min,\n max,\n step,\n slotName = 'number-field',\n ...field\n}: NumberFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type=\"number\"\n inputMode=\"decimal\"\n value={value === '' ? '' : String(value)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n placeholder={placeholder}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) =>\n onChange(\n event.target.value === ''\n ? ''\n : event.target.valueAsNumber,\n )\n }\n />\n )}\n </SettingsField>\n );\n}\n\nexport type DateFieldProps = ControlProps<string> & {\n min?: string;\n max?: string;\n};\n\nexport function DateField({\n value,\n onChange,\n disabled,\n min,\n max,\n slotName = 'date-field',\n ...field\n}: DateFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Input\n id={fieldId}\n type=\"date\"\n value={value}\n min={min}\n max={max}\n disabled={disabled}\n aria-invalid={field.error ? true : undefined}\n slotName={slotName}\n onChange={(event) => onChange(event.target.value)}\n />\n )}\n </SettingsField>\n );\n}\n\nexport interface SelectFieldOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport type SelectFieldProps = ControlProps<string> & {\n options: SelectFieldOption[];\n};\n\nexport function SelectField({\n value,\n onChange,\n options,\n disabled,\n placeholder,\n slotName = 'select-field',\n ...field\n}: SelectFieldProps & SlotNameProps) {\n return (\n <SettingsField {...field}>\n {(fieldId) => (\n <Select\n value={value}\n onValueChange={onChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={fieldId}\n slotName={slotName}\n aria-invalid={field.error ? true : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </SettingsField>\n );\n}\n","import { SectionHeader } from '@/blocks/section-header';\nimport { Card } from '@/components/ui/card';\nimport { resolveLink } from '@/lib/href';\nimport { compactRadius, focusRing } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels } from '@/locales/context';\nimport type { LinkComponent, SlotNameProps, UrlLike } from '@/types';\nimport { ArrowLeft, ChevronRight, type LucideIcon } from 'lucide-react';\nimport { createContext, useContext, type ReactNode } from 'react';\n\nconst SettingsLinkContext = createContext<LinkComponent | undefined>(undefined);\n\nexport interface SettingsPageProps {\n title?: string;\n description?: string;\n control?: ReactNode;\n linkComponent?: LinkComponent;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsPage({\n title,\n description,\n control,\n linkComponent,\n children,\n className,\n slotName = 'settings-page',\n}: SettingsPageProps & SlotNameProps) {\n return (\n <SettingsLinkContext.Provider value={linkComponent}>\n <div\n className={cn(\n 'gap-8 max-w-4xl mx-auto flex w-full flex-col',\n className,\n )}\n data-slot={slotName}\n >\n {title && (\n <SectionHeader\n title={title}\n description={description}\n control={control}\n />\n )}\n {children}\n </div>\n </SettingsLinkContext.Provider>\n );\n}\n\nexport interface SettingsLabels {\n back: string;\n}\n\nexport const settingsLabels: SettingsLabels = {\n back: 'Back',\n};\n\nexport interface SettingsSectionProps {\n title?: string;\n description?: string;\n control?: ReactNode;\n backHref?: UrlLike | null;\n backLabel?: string;\n wide?: boolean;\n linkComponent?: LinkComponent;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsSection({\n title,\n description,\n control,\n backHref = '/settings',\n backLabel,\n wide = false,\n linkComponent,\n children,\n className,\n slotName = 'settings-section',\n}: SettingsSectionProps & SlotNameProps) {\n const labels = useUiLabels('settings', settingsLabels, {\n back: backLabel,\n });\n const contextLink = useContext(SettingsLinkContext);\n const Link = resolveLink(linkComponent ?? contextLink);\n\n return (\n <section\n className={cn(\n 'gap-6 mx-auto flex w-full flex-col',\n wide ? 'max-w-4xl' : 'max-w-2xl',\n className,\n )}\n data-slot={slotName}\n >\n {backHref && (\n <Link\n data-slot=\"settings-section-back\"\n href={backHref}\n className=\"gap-2 text-sm font-medium inline-flex w-fit items-center text-muted-foreground transition-colors hover:text-foreground\"\n >\n <ArrowLeft className=\"size-4\" />\n {labels.back}\n </Link>\n )}\n\n {title && (\n <SectionHeader\n title={title}\n description={description}\n control={control}\n />\n )}\n\n {children}\n </section>\n );\n}\n\nexport interface SettingsGroupProps {\n label?: string;\n columns?: 1 | 2;\n children: ReactNode;\n className?: string;\n}\n\nexport function SettingsGroup({\n label,\n columns = 2,\n children,\n className,\n slotName = 'settings-group',\n}: SettingsGroupProps & SlotNameProps) {\n return (\n <div\n className={cn('gap-3 flex flex-col', className)}\n data-slot={slotName}\n >\n {label && (\n <p className=\"font-bold tracking-widest text-[11px] text-muted-foreground uppercase\">\n {label}\n </p>\n )}\n <div\n data-slot=\"settings-group-grid\"\n className={cn(\n 'gap-4 grid grid-cols-1',\n columns === 2 && 'md:grid-cols-2',\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport interface SettingsEntryProps {\n icon: LucideIcon;\n iconClassName?: string;\n title: string;\n description?: string;\n href: UrlLike;\n badge?: ReactNode;\n disabled?: boolean;\n linkComponent?: LinkComponent;\n className?: string;\n}\n\nexport function SettingsEntry({\n icon: Icon,\n iconClassName,\n title,\n description,\n href,\n badge,\n disabled = false,\n linkComponent,\n className,\n slotName = 'settings-entry',\n}: SettingsEntryProps & SlotNameProps) {\n const contextLink = useContext(SettingsLinkContext);\n const Link = resolveLink(linkComponent ?? contextLink);\n\n const card = (\n <Card\n interactive={!disabled}\n padding=\"none\"\n data-disabled={disabled || undefined}\n className={cn(\n 'gap-4 p-5 flex h-full flex-row items-center',\n disabled && 'opacity-60',\n className,\n )}\n >\n <span\n className={cn(\n 'size-11 flex shrink-0 items-center justify-center rounded-full',\n iconClassName ?? 'bg-primary/10 text-primary',\n )}\n >\n <Icon className=\"size-5\" />\n </span>\n\n <span className=\"min-w-0 flex flex-1 flex-col\">\n <span className=\"gap-2 flex items-center\">\n <span className=\"font-bold text-foreground\">{title}</span>\n {badge}\n </span>\n {description && (\n <span className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </span>\n )}\n </span>\n\n <ChevronRight className=\"size-4 shrink-0 text-muted-foreground\" />\n </Card>\n );\n\n if (disabled) {\n return (\n <div data-disabled=\"true\" aria-disabled=\"true\" data-slot={slotName}>\n {card}\n </div>\n );\n }\n\n return (\n <Link\n href={href}\n className={cn(compactRadius, focusRing)}\n data-slot={slotName}\n >\n {card}\n </Link>\n );\n}\n","import {\n elevatedSurface,\n recessedSurface,\n type SurfaceProps,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport {\n ArrowDownRight,\n ArrowRight,\n ArrowUpRight,\n type LucideIcon,\n} from 'lucide-react';\nimport { type ReactNode } from 'react';\n\ntype TrendTone = 'positive' | 'negative' | 'neutral';\n\ninterface TrendDisplay {\n label: string;\n tone: TrendTone;\n icon: LucideIcon;\n}\n\nfunction resolveTrend(trend?: number): TrendDisplay | null {\n if (trend === null || trend === undefined || Number.isNaN(trend)) {\n return null;\n }\n\n const normalized = Math.abs(trend) < 0.05 ? 0 : trend;\n\n if (normalized === 0) {\n return { label: '0%', tone: 'neutral', icon: ArrowRight };\n }\n\n if (normalized > 0) {\n return {\n label: `+${normalized.toFixed(1)}%`,\n tone: 'positive',\n icon: ArrowUpRight,\n };\n }\n\n return {\n label: `${normalized.toFixed(1)}%`,\n tone: 'negative',\n icon: ArrowDownRight,\n };\n}\n\nconst trendToneClass: Record<TrendTone, string> = {\n positive: 'text-success',\n negative: 'text-destructive',\n neutral: 'text-muted-foreground',\n};\n\nexport interface StatCardProps extends SurfaceProps {\n title: string;\n value: ReactNode;\n icon: LucideIcon;\n iconClassName?: string;\n trend?: number;\n comparisonLabel?: string;\n className?: string;\n}\n\nexport function StatCard({\n title,\n value,\n icon: Icon,\n iconClassName = 'bg-muted text-muted-foreground',\n trend,\n comparisonLabel,\n inset = false,\n className,\n slotName = 'stat-card',\n}: StatCardProps & SlotNameProps) {\n const resolvedTrend = resolveTrend(trend);\n\n return (\n <div\n data-inset={inset || undefined}\n className={cn(\n elevatedSurface,\n 'p-6 min-w-0 flex h-full flex-col justify-between bg-card/60 text-card-foreground',\n inset && recessedSurface,\n className,\n )}\n data-slot={slotName}\n >\n <div className=\"mb-4 gap-4 flex items-start justify-between\">\n <div className={cn('rounded-2xl p-3 shrink-0', iconClassName)}>\n <Icon className=\"size-6\" />\n </div>\n {resolvedTrend && (\n <div className=\"min-w-0 text-right\">\n <span\n className={cn(\n 'text-sm font-semibold inline-flex items-center',\n trendToneClass[resolvedTrend.tone],\n )}\n >\n {resolvedTrend.label}\n <resolvedTrend.icon className=\"ml-1 size-4\" />\n </span>\n {comparisonLabel && (\n <p className=\"mt-1 font-medium tracking-wider text-[10px] whitespace-nowrap text-muted-foreground uppercase\">\n {comparisonLabel}\n </p>\n )}\n </div>\n )}\n </div>\n <div>\n <p className=\"mb-1 text-xs font-medium tracking-wider break-words text-muted-foreground uppercase\">\n {title}\n </p>\n <p className=\"text-3xl font-bold truncate text-foreground tabular-nums\">\n {value}\n </p>\n </div>\n </div>\n );\n}\n\nexport interface StatsGridProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function StatsGrid({ children, className }: StatsGridProps) {\n return (\n <div\n className={cn(\n 'gap-6 [&>*]:min-w-0 grid [grid-template-columns:repeat(auto-fit,minmax(18rem,1fr))]',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport type TwoFactorSetupStep = 'pending' | 'scan' | 'confirm' | 'recovery';\n\nexport type TwoFactorCodeMode = 'code' | 'recovery';\n\nexport interface TwoFactorLabels {\n setupTitle: string;\n setupDescription: string;\n pendingLabel: string;\n scanTitle: string;\n scanDescription: string;\n qrFallbackLabel: string;\n manualKeyLabel: string;\n manualKeyDescription: string;\n manualKeyRevealLabel: string;\n manualKeyHideLabel: string;\n continueLabel: string;\n confirmTitle: string;\n confirmDescription: string;\n codeLabel: string;\n recoveryCodeLabel: string;\n recoveryCodePlaceholder: string;\n useRecoveryCodeLabel: string;\n useCodeLabel: string;\n verifyLabel: string;\n verifyingLabel: string;\n errorFallbackLabel: string;\n cancelLabel: string;\n challengeTitle: string;\n challengeDescription: string;\n recoveryTitle: string;\n recoveryDescription: string;\n recoveryWarning: string;\n revealLabel: string;\n hideLabel: string;\n copyLabel: string;\n copiedLabel: string;\n copyFailedLabel: string;\n regenerateLabel: string;\n doneLabel: string;\n disableLabel: string;\n disableTitle: string;\n disableDescription: string;\n disableConfirmLabel: string;\n disableCancelLabel: string;\n}\n\nexport const twoFactorLabels: TwoFactorLabels = {\n setupTitle: 'Two-factor authentication',\n setupDescription:\n 'Add a second step to your sign in with an authenticator app.',\n pendingLabel: 'Preparing your setup key',\n scanTitle: 'Scan the code',\n scanDescription:\n 'Open your authenticator app and scan the code below to add this account.',\n qrFallbackLabel: 'The QR code is not available yet.',\n manualKeyLabel: 'Setup key',\n manualKeyDescription:\n 'Enter this key by hand if your app cannot scan the code.',\n manualKeyRevealLabel: 'Show setup key',\n manualKeyHideLabel: 'Hide setup key',\n continueLabel: 'Continue',\n confirmTitle: 'Confirm the code',\n confirmDescription:\n 'Enter the six digit code your authenticator app is showing.',\n codeLabel: 'Authentication code',\n recoveryCodeLabel: 'Recovery code',\n recoveryCodePlaceholder: 'Enter a recovery code',\n useRecoveryCodeLabel: 'Use a recovery code',\n useCodeLabel: 'Use an authentication code',\n verifyLabel: 'Verify',\n verifyingLabel: 'Verifying',\n errorFallbackLabel: 'That did not work. Try again.',\n cancelLabel: 'Cancel',\n challengeTitle: 'Two-factor confirmation',\n challengeDescription:\n 'Confirm access to your account with the code from your authenticator app.',\n recoveryTitle: 'Recovery codes',\n recoveryDescription:\n 'Store these codes somewhere safe. Each one signs you in once if you lose your device.',\n recoveryWarning: 'They are shown once and cannot be read again afterwards.',\n revealLabel: 'Show codes',\n hideLabel: 'Hide codes',\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n copyFailedLabel: 'Copying is unavailable here. Select the codes manually.',\n regenerateLabel: 'Regenerate codes',\n doneLabel: 'Done',\n disableLabel: 'Disable two-factor authentication',\n disableTitle: 'Disable two-factor authentication',\n disableDescription:\n 'Your account will be protected by your password alone. Recovery codes stop working.',\n disableConfirmLabel: 'Disable',\n disableCancelLabel: 'Keep it on',\n};\n\nexport interface TwoFactorLabelProps {\n labels?: Partial<TwoFactorLabels>;\n}\n\nexport function resolveLabels(\n labels?: Partial<TwoFactorLabels>,\n): TwoFactorLabels {\n return labels ? { ...twoFactorLabels, ...labels } : twoFactorLabels;\n}\n\nexport function messageList(errors?: string | string[] | null): string[] {\n if (!errors) {\n return [];\n }\n\n return (Array.isArray(errors) ? errors : [errors]).filter(\n (message) => message.length > 0,\n );\n}\n\nexport interface TwoFactorQrProps {\n qrCode?: ReactNode;\n qrCodeSvg?: string;\n}\n","import {\n messageList,\n resolveLabels,\n type TwoFactorCodeMode,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Alert, AlertDescription } from '@/components/ui/alert';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n} from '@/components/ui/input-otp';\nimport { Label } from '@/components/ui/label';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { AlertCircle } from 'lucide-react';\nimport { useId, useState, type FormEvent, type ReactNode } from 'react';\n\nexport interface TwoFactorVerifyFormProps extends TwoFactorLabelProps {\n onSubmit: (code: string, mode: TwoFactorCodeMode) => void | Promise<void>;\n errors?: string | string[] | null;\n allowRecoveryCode?: boolean;\n length?: number;\n autoFocus?: boolean;\n submitLabel?: string;\n footer?: ReactNode;\n className?: string;\n}\n\nfunction errorMessage(reason: unknown, fallback: string): string {\n return reason instanceof Error && reason.message\n ? reason.message\n : fallback;\n}\n\nexport function TwoFactorVerifyForm({\n onSubmit,\n errors,\n allowRecoveryCode = false,\n length = 6,\n autoFocus = false,\n submitLabel,\n footer,\n labels,\n className,\n slotName = 'two-factor-verify-form',\n}: TwoFactorVerifyFormProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const fieldId = useId();\n const [mode, setMode] = useState<TwoFactorCodeMode>('code');\n const [value, setValue] = useState('');\n const [pending, setPending] = useState(false);\n const [failure, setFailure] = useState<string | null>(null);\n\n const messages = [...messageList(errors), ...messageList(failure)];\n const complete =\n mode === 'code' ? value.length === length : value.length > 0;\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (pending || !complete) {\n return;\n }\n\n setFailure(null);\n setPending(true);\n\n try {\n await onSubmit(value, mode);\n } catch (reason) {\n setFailure(errorMessage(reason, text.errorFallbackLabel));\n } finally {\n setPending(false);\n }\n };\n\n const switchMode = () => {\n setMode(mode === 'code' ? 'recovery' : 'code');\n setValue('');\n setFailure(null);\n };\n\n return (\n <form\n data-mode={mode}\n data-pending={pending || undefined}\n onSubmit={handleSubmit}\n className={cn('gap-5 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div className=\"gap-2 flex flex-col\">\n <Label htmlFor={fieldId}>\n {mode === 'code' ? text.codeLabel : text.recoveryCodeLabel}\n </Label>\n\n {mode === 'code' ? (\n <InputOTP\n id={fieldId}\n data-slot=\"two-factor-code-input\"\n maxLength={length}\n value={value}\n autoFocus={autoFocus}\n disabled={pending}\n onChange={setValue}\n aria-label={text.codeLabel}\n >\n <InputOTPGroup>\n {Array.from({ length }, (_, index) => (\n <InputOTPSlot key={index} index={index} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n ) : (\n <Input\n id={fieldId}\n slotName=\"two-factor-recovery-input\"\n value={value}\n autoComplete=\"one-time-code\"\n spellCheck={false}\n disabled={pending}\n placeholder={text.recoveryCodePlaceholder}\n aria-label={text.recoveryCodeLabel}\n onChange={(event) => setValue(event.target.value)}\n />\n )}\n </div>\n\n {messages.length > 0 && (\n <Alert variant=\"destructive\" slotName=\"two-factor-error\">\n <AlertCircle />\n <AlertDescription>\n {messages.map((message) => (\n <p key={message}>{message}</p>\n ))}\n </AlertDescription>\n </Alert>\n )}\n\n <div className=\"gap-3 flex flex-col\">\n <Button\n type=\"submit\"\n loading={pending}\n loadingLabel={text.verifyingLabel}\n disabled={!complete}\n >\n {submitLabel ?? text.verifyLabel}\n </Button>\n\n {allowRecoveryCode && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={pending}\n onClick={switchMode}\n >\n {mode === 'code'\n ? text.useRecoveryCodeLabel\n : text.useCodeLabel}\n </Button>\n )}\n\n {footer}\n </div>\n </form>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorCodeMode,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { TwoFactorVerifyForm } from '@/blocks/two-factor/verify-form';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport type { ReactNode } from 'react';\n\nexport interface TwoFactorChallengeProps extends TwoFactorLabelProps {\n onSubmit: (code: string, mode: TwoFactorCodeMode) => void | Promise<void>;\n errors?: string | string[] | null;\n allowRecoveryCode?: boolean;\n title?: string;\n description?: string;\n footer?: ReactNode;\n className?: string;\n}\n\nexport function TwoFactorChallenge({\n onSubmit,\n errors,\n allowRecoveryCode = true,\n title,\n description,\n footer,\n labels,\n className,\n slotName = 'two-factor-challenge',\n}: TwoFactorChallengeProps & SlotNameProps) {\n const text = resolveLabels(labels);\n\n return (\n <section\n className={cn('gap-6 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div className=\"gap-2 flex flex-col\">\n <h2 className=\"text-2xl font-bold tracking-tight text-foreground\">\n {title ?? text.challengeTitle}\n </h2>\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description ?? text.challengeDescription}\n </p>\n </div>\n\n <TwoFactorVerifyForm\n autoFocus\n allowRecoveryCode={allowRecoveryCode}\n errors={errors}\n labels={labels}\n footer={footer}\n onSubmit={onSubmit}\n />\n </section>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { ShieldOff } from 'lucide-react';\nimport { useState, type ComponentProps } from 'react';\n\nexport interface TwoFactorDisableButtonProps extends TwoFactorLabelProps {\n onDisable: () => void | Promise<void>;\n disabled?: boolean;\n variant?: ComponentProps<typeof Button>['variant'];\n size?: ComponentProps<typeof Button>['size'];\n className?: string;\n}\n\nexport function TwoFactorDisableButton({\n onDisable,\n disabled = false,\n variant = 'destructive',\n size = 'default',\n labels,\n className,\n slotName = 'two-factor-disable',\n}: TwoFactorDisableButtonProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [open, setOpen] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n const handleConfirm = async () => {\n setProcessing(true);\n\n try {\n await onDisable();\n } finally {\n setProcessing(false);\n }\n };\n\n return (\n <span\n data-open={open || undefined}\n className={cn('inline-flex', className)}\n data-slot={slotName}\n >\n <Button\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled || processing}\n onClick={() => setOpen(true)}\n >\n <ShieldOff />\n {text.disableLabel}\n </Button>\n\n <ConfirmDialog\n open={open}\n onOpenChange={setOpen}\n title={text.disableTitle}\n description={text.disableDescription}\n confirmText={text.disableConfirmLabel}\n cancelText={text.disableCancelLabel}\n processing={processing}\n onConfirm={handleConfirm}\n />\n </span>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { compactRadius, recessedSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { Eye, EyeOff, RefreshCw } from 'lucide-react';\nimport { useState } from 'react';\n\nexport interface TwoFactorRecoveryCodesProps extends TwoFactorLabelProps {\n codes: string[];\n defaultRevealed?: boolean;\n onRegenerate?: () => void | Promise<void>;\n showHeading?: boolean;\n className?: string;\n}\n\nexport function TwoFactorRecoveryCodes({\n codes,\n defaultRevealed = false,\n onRegenerate,\n showHeading = true,\n labels,\n className,\n slotName = 'two-factor-recovery-codes',\n}: TwoFactorRecoveryCodesProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [revealed, setRevealed] = useState(defaultRevealed);\n const [copyFailed, setCopyFailed] = useState(false);\n const [regenerating, setRegenerating] = useState(false);\n\n const handleRegenerate = async () => {\n if (!onRegenerate || regenerating) {\n return;\n }\n\n setRegenerating(true);\n\n try {\n await onRegenerate();\n } finally {\n setRegenerating(false);\n }\n };\n\n return (\n <div\n data-revealed={revealed || undefined}\n className={cn('gap-4 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n {showHeading && (\n <div className=\"gap-1 flex flex-col\">\n <p className=\"text-sm font-semibold text-foreground\">\n {text.recoveryTitle}\n </p>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {text.recoveryDescription} {text.recoveryWarning}\n </p>\n </div>\n )}\n\n {revealed && (\n <ul\n data-slot=\"two-factor-recovery-list\"\n className={cn(\n recessedSurface,\n 'gap-2 p-4 sm:grid-cols-2 grid',\n )}\n >\n {codes.map((code) => (\n <li\n key={code}\n data-slot=\"two-factor-recovery-code\"\n className={cn(\n compactRadius,\n 'px-2 py-1 text-sm font-medium font-mono break-all text-foreground',\n )}\n >\n {code}\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"gap-2 flex flex-wrap items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-pressed={revealed}\n onClick={() => setRevealed(!revealed)}\n >\n {revealed ? <EyeOff /> : <Eye />}\n {revealed ? text.hideLabel : text.revealLabel}\n </Button>\n\n <CopyButton\n value={codes.join('\\n')}\n copyLabel={text.copyLabel}\n copiedLabel={text.copiedLabel}\n onCopied={() => setCopyFailed(false)}\n onCopyFailed={() => setCopyFailed(true)}\n />\n\n {onRegenerate && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n loading={regenerating}\n loadingLabel={text.regenerateLabel}\n onClick={handleRegenerate}\n >\n <RefreshCw />\n {text.regenerateLabel}\n </Button>\n )}\n </div>\n\n {copyFailed && (\n <p\n data-slot=\"two-factor-copy-failed\"\n className=\"text-xs font-medium text-muted-foreground\"\n >\n {text.copyFailedLabel}\n </p>\n )}\n </div>\n );\n}\n","import {\n resolveLabels,\n type TwoFactorLabelProps,\n type TwoFactorQrProps,\n} from '@/blocks/two-factor/types';\nimport { Button } from '@/components/ui/button';\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { compactRadius, controlRadius, recessedSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { useState } from 'react';\n\nexport interface TwoFactorScanStepProps\n extends TwoFactorLabelProps, TwoFactorQrProps {\n manualSetupKey?: string | null;\n className?: string;\n}\n\nexport function TwoFactorScanStep({\n qrCode,\n qrCodeSvg,\n manualSetupKey,\n labels,\n className,\n slotName = 'two-factor-scan-step',\n}: TwoFactorScanStepProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [revealed, setRevealed] = useState(false);\n\n return (\n <div\n className={cn('gap-5 flex w-full flex-col', className)}\n data-slot={slotName}\n >\n <div\n data-slot=\"two-factor-qr\"\n className={cn(\n recessedSurface,\n 'p-4 flex items-center justify-center [&_svg]:size-full [&_svg]:h-auto',\n )}\n >\n {qrCode ??\n (qrCodeSvg ? (\n <div\n data-slot=\"two-factor-qr-markup\"\n className={cn(controlRadius, 'p-3 bg-card')}\n dangerouslySetInnerHTML={{ __html: qrCodeSvg }}\n />\n ) : (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {text.qrFallbackLabel}\n </p>\n ))}\n </div>\n\n {manualSetupKey && (\n <div\n data-slot=\"two-factor-setup-key\"\n className=\"gap-2 flex flex-col\"\n >\n <p className=\"text-sm font-semibold text-foreground\">\n {text.manualKeyLabel}\n </p>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {text.manualKeyDescription}\n </p>\n\n <div className=\"gap-2 flex flex-wrap items-center\">\n <code\n data-slot=\"two-factor-setup-key-value\"\n className={cn(\n compactRadius,\n 'px-3 py-2 text-sm font-medium font-mono bg-muted break-all text-foreground',\n )}\n >\n {revealed\n ? manualSetupKey\n : '•'.repeat(manualSetupKey.length)}\n </code>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-pressed={revealed}\n onClick={() => setRevealed(!revealed)}\n >\n {revealed ? <EyeOff /> : <Eye />}\n {revealed\n ? text.manualKeyHideLabel\n : text.manualKeyRevealLabel}\n </Button>\n\n <CopyButton\n value={manualSetupKey}\n copyLabel={text.copyLabel}\n copiedLabel={text.copiedLabel}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { TwoFactorRecoveryCodes } from '@/blocks/two-factor/recovery-codes';\nimport { TwoFactorScanStep } from '@/blocks/two-factor/scan-step';\nimport {\n resolveLabels,\n type TwoFactorLabelProps,\n type TwoFactorQrProps,\n type TwoFactorSetupStep,\n} from '@/blocks/two-factor/types';\nimport { TwoFactorVerifyForm } from '@/blocks/two-factor/verify-form';\nimport { Button } from '@/components/ui/button';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Spinner } from '@/components/ui/spinner';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { useEffect, useRef, useState } from 'react';\n\nexport interface TwoFactorSetupDialogProps\n extends TwoFactorLabelProps, TwoFactorQrProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n enabled?: boolean;\n manualSetupKey?: string | null;\n recoveryCodes?: string[];\n errors?: string | string[] | null;\n onConfirm: (code: string) => void | Promise<void>;\n onRequestSetupData?: () => void | Promise<void>;\n onRegenerateRecoveryCodes?: () => void | Promise<void>;\n onCompleted?: () => void;\n className?: string;\n}\n\nexport function TwoFactorSetupDialog({\n open,\n onOpenChange,\n enabled = false,\n qrCode,\n qrCodeSvg,\n manualSetupKey,\n recoveryCodes,\n errors,\n onConfirm,\n onRequestSetupData,\n onRegenerateRecoveryCodes,\n onCompleted,\n labels,\n className,\n slotName = 'two-factor-setup-dialog',\n}: TwoFactorSetupDialogProps & SlotNameProps) {\n const text = resolveLabels(labels);\n const [step, setStep] = useState<TwoFactorSetupStep>(\n enabled ? 'recovery' : 'scan',\n );\n\n const requestSetupData = useRef(onRequestSetupData);\n const openedBefore = useRef(false);\n\n useEffect(() => {\n requestSetupData.current = onRequestSetupData;\n }, [onRequestSetupData]);\n\n useEffect(() => {\n if (!open) {\n openedBefore.current = false;\n\n return;\n }\n\n if (openedBefore.current) {\n return;\n }\n\n openedBefore.current = true;\n setStep(enabled ? 'recovery' : 'scan');\n\n if (!enabled) {\n void requestSetupData.current?.();\n }\n }, [open, enabled]);\n\n const ready = Boolean(qrCode || qrCodeSvg || manualSetupKey);\n const codes = recoveryCodes ?? [];\n\n const handleConfirm = async (code: string) => {\n await onConfirm(code);\n setStep('recovery');\n };\n\n const finish = () => {\n onOpenChange(false);\n onCompleted?.();\n };\n\n const heading = {\n pending: text.setupTitle,\n scan: text.scanTitle,\n confirm: text.confirmTitle,\n recovery: text.recoveryTitle,\n }[step];\n\n const description = {\n pending: text.setupDescription,\n scan: text.scanDescription,\n confirm: text.confirmDescription,\n recovery: `${text.recoveryDescription} ${text.recoveryWarning}`,\n }[step];\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n data-step={step}\n className={cn('max-w-md p-0', className)}\n slotName={slotName}\n >\n <DialogHeader className=\"p-6 md:p-8\">\n <DialogTitle>{heading}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n\n <div className=\"gap-5 p-6 md:p-8 pt-0 md:pt-0 flex flex-col\">\n {step === 'scan' &&\n (ready ? (\n <>\n <TwoFactorScanStep\n qrCode={qrCode}\n qrCodeSvg={qrCodeSvg}\n manualSetupKey={manualSetupKey}\n labels={labels}\n />\n <Button\n type=\"button\"\n onClick={() => setStep('confirm')}\n >\n {text.continueLabel}\n </Button>\n </>\n ) : (\n <div\n data-slot=\"two-factor-pending\"\n className=\"gap-3 py-6 text-sm font-medium flex items-center justify-center text-muted-foreground\"\n >\n <Spinner label={text.pendingLabel} />\n {text.pendingLabel}\n </div>\n ))}\n\n {step === 'confirm' && (\n <TwoFactorVerifyForm\n autoFocus\n errors={errors}\n labels={labels}\n onSubmit={handleConfirm}\n footer={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setStep('scan')}\n >\n {text.cancelLabel}\n </Button>\n }\n />\n )}\n\n {step === 'recovery' && (\n <>\n <TwoFactorRecoveryCodes\n codes={codes}\n defaultRevealed\n showHeading={false}\n labels={labels}\n onRegenerate={onRegenerateRecoveryCodes}\n />\n <Button type=\"button\" onClick={finish}>\n {text.doneLabel}\n </Button>\n </>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|