@showwhat/configurator 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +43 -11
- package/dist/index.js +39 -49
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/utils/id.ts","../src/components/condition-builder/StringConditionEditor.tsx","../src/components/condition-builder/ConditionRow.tsx","../src/components/ui/input.tsx","../src/components/condition-builder/KeyInput.tsx","../src/components/ui/select.tsx","../src/components/condition-builder/OperatorSelect.tsx","../src/components/condition-builder/TagInput.tsx","../src/components/ui/badge.tsx","../src/components/condition-builder/condition-builders.ts","../src/components/condition-builder/NumberConditionEditor.tsx","../src/components/condition-builder/NumberTagInput.tsx","../src/components/condition-builder/DatetimeConditionEditor.tsx","../src/components/common/DateTimeInput.tsx","../src/components/condition-builder/BoolConditionEditor.tsx","../src/components/condition-builder/EnvConditionEditor.tsx","../src/components/condition-builder/StartAtConditionEditor.tsx","../src/components/condition-builder/EndAtConditionEditor.tsx","../src/components/condition-builder/condition-registry.ts","../src/components/ui/button.tsx","../src/components/ui/separator.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/dialog.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/label.tsx","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/popover.tsx","../src/components/ui/tabs.tsx","../src/components/common/ValueInput.tsx","../src/components/common/ValidationMessage.tsx","../src/components/common/ThemeToggle.tsx","../src/components/common/ErrorBoundary.tsx","../src/components/ui/alert-dialog.tsx","../src/components/common/ConfirmDialog.tsx","../src/components/condition-builder/ConditionBuilder.tsx","../src/components/condition-builder/ConditionBlock.tsx","../src/components/condition-builder/CustomConditionEditor.tsx","../src/components/condition-builder/ConditionExtensionsContext.tsx","../src/components/condition-builder/ConditionValueEditor.tsx","../src/components/condition-builder/ConditionGroup.tsx","../src/components/condition-builder/AddConditionMenu.tsx","../src/components/condition-builder/utils.ts","../src/components/condition-builder/MoveButtons.tsx","../src/utils/validation-errors.ts","../src/components/condition-builder/useConditionArray.ts","../src/components/variation-editor/VariationCard.tsx","../src/utils/condition-summary.ts","../src/components/variation-editor/VariationList.tsx","../src/components/definition-editor/DefinitionEditor.tsx","../src/components/definition-list/DefinitionList.tsx","../src/components/definition-list/DefinitionListItem.tsx","../src/components/condition-builder/preset-ui.tsx","../src/configurator/Configurator.tsx","../src/configurator/context.ts","../src/configurator/useConfiguratorSelector.ts","../src/configurator/PreviewPanel.tsx","../src/configurator/selectors.ts","../src/configurator/fallback-context.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import type { Condition, Definitions } from \"showwhat\";\n\nexport const AUTO_ID_PREFIX = \"_tmp:\";\n\nexport function isAutoId(id: string | undefined): boolean {\n return id != null && id.startsWith(AUTO_ID_PREFIX);\n}\n\n/**\n * Ensures every item in the array has an `id` field.\n * Items arriving from external sources may lack IDs;\n * this function backfills them with `crypto.randomUUID()`.\n *\n * Works with union types (e.g. Condition) where not every\n * variant explicitly declares `id` — the check uses a\n * Record cast so it handles any shape safely.\n */\nexport function ensureIds<T>(items: T[]): T[] {\n let changed = false;\n const result = items.map((item) => {\n if ((item as Record<string, unknown>).id) return item;\n changed = true;\n return { ...item, id: `${AUTO_ID_PREFIX}${crypto.randomUUID()}` };\n });\n return changed ? result : items;\n}\n\nfunction removeId<T extends Record<string, unknown>>(item: T): T {\n const copy = { ...item };\n delete copy.id;\n return copy;\n}\n\nfunction stripId<T extends { id?: string }>(item: T): T {\n if (!isAutoId(item.id)) return item;\n return removeId(item as unknown as Record<string, unknown>) as T;\n}\n\nfunction stripConditionIds(conditions: Condition[]): Condition[] {\n return conditions.map((c) => {\n const rec = c as Record<string, unknown>;\n const stripped = isAutoId(rec.id as string | undefined) ? removeId(rec) : rec;\n if ((c.type === \"and\" || c.type === \"or\") && \"conditions\" in c) {\n return {\n ...stripped,\n conditions: stripConditionIds((c as { conditions: Condition[] }).conditions),\n } as Condition;\n }\n return stripped as Condition;\n });\n}\n\nexport function stripAutoIds(definitions: Definitions): Definitions {\n const result: Definitions = {};\n for (const [key, def] of Object.entries(definitions)) {\n const cleaned = stripId(def);\n result[key] = {\n ...cleaned,\n variations: cleaned.variations.map((v) => {\n const sv = stripId(v);\n if (sv.conditions) {\n return { ...sv, conditions: stripConditionIds(sv.conditions) };\n }\n return sv;\n }),\n };\n }\n return result;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"neq\", label: \"neq\" },\n { value: \"in\", label: \"in\" },\n { value: \"nin\", label: \"nin\" },\n { value: \"regex\", label: \"regex\" },\n];\n\nexport const meta = {\n type: \"string\",\n label: \"String\",\n description: \"Match a context key against string value(s)\",\n defaults: { type: \"string\", key: \"\", op: \"eq\", value: \"\" },\n};\n\nexport function StringConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"string\" }));\n },\n [rec, onChange],\n );\n const handleOpChange = useCallback(\n (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue\n ? [String(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as string[])[0] ?? \"\")\n : currentValue;\n onChange(buildCustomCondition({ ...rec, op: newOp, value: coercedValue, type: \"string\" }));\n },\n [rec, onChange],\n );\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n const isRegex = op === \"regex\";\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. userId\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={OP_OPTIONS}\n />\n {isArray ? (\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={(v) => update(\"value\", v)}\n placeholder=\"e.g. user-123\"\n />\n ) : isRegex ? (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. ^test.*$\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n ) : (\n <Input\n className=\"h-8 text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. user-123\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n )}\n </ConditionRow>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype ConditionRowProps = {\n children: ReactNode;\n};\n\nexport function ConditionRow({ children }: ConditionRowProps) {\n return (\n <div\n className=\"grid flex-1 items-start gap-2\"\n style={{ gridTemplateColumns: \"140px 72px 1fr\" }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded border border-border/70 bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { Input } from \"../ui/input.js\";\n\ntype KeyInputProps = {\n value: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n};\n\nexport function KeyInput({ value, onChange, placeholder, disabled }: KeyInputProps) {\n return (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={value}\n placeholder={placeholder ?? \"key\"}\n disabled={disabled}\n onChange={onChange ? (e) => onChange(e.target.value) : undefined}\n readOnly={!onChange}\n />\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\n\ntype OperatorSelectProps = {\n value: string;\n onChange?: (value: string) => void;\n options: { value: string; label: string }[];\n disabled?: boolean;\n};\n\nexport function OperatorSelect({ value, onChange, options, disabled }: OperatorSelectProps) {\n return (\n <Select value={value} onValueChange={onChange} disabled={disabled}>\n <SelectTrigger className=\"h-8 font-mono text-xs\" disabled={disabled}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { useCallback, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\n\ntype TagInputProps = {\n value: string | string[];\n onChange: (value: string | string[]) => void;\n placeholder?: string;\n};\n\nexport function TagInput({ value, onChange, placeholder }: TagInputProps) {\n const values = Array.isArray(value) ? value.filter(Boolean) : value ? [value] : [];\n const [text, setText] = useState(\"\");\n\n const emit = useCallback(\n (next: string[]) => {\n onChange(next.length === 1 ? next[0] : next);\n },\n [onChange],\n );\n\n const addValues = useCallback(\n (raw: string[]) => {\n const cleaned = raw.map((s) => s.trim()).filter(Boolean);\n const unique = cleaned.filter((s) => !values.includes(s));\n if (unique.length > 0) {\n emit([...values, ...unique]);\n }\n },\n [values, emit],\n );\n\n const removeValue = useCallback(\n (index: number) => {\n const next = values.filter((_, i) => i !== index);\n emit(next.length === 0 ? [] : next);\n },\n [values, emit],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || (e.key === \"Tab\" && text.trim())) {\n e.preventDefault();\n addValues([text]);\n setText(\"\");\n } else if (e.key === \"Backspace\" && text === \"\" && values.length > 0) {\n removeValue(values.length - 1);\n }\n },\n [text, values, addValues, removeValue],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData(\"text\");\n if (pasted.includes(\"\\n\")) {\n e.preventDefault();\n addValues(pasted.split(\"\\n\"));\n setText(\"\");\n }\n },\n [addValues],\n );\n\n return (\n <div className=\"border-input focus-within:border-ring focus-within:ring-ring/50 flex min-h-9 flex-1 flex-wrap items-center gap-1 rounded-md border px-2 py-1 focus-within:ring-[3px]\">\n {values.map((v, i) => (\n <Badge key={`${v}-${i}`} variant=\"outline\" className=\"bg-muted gap-1 font-mono text-xs\">\n {v}\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground ml-0.5 cursor-pointer leading-none\"\n onClick={() => removeValue(i)}\n aria-label={`Remove ${v}`}\n >\n {\"\\u00d7\"}\n </button>\n </Badge>\n ))}\n <input\n className=\"min-w-[80px] flex-1 bg-transparent py-0.5 font-mono text-sm outline-none placeholder:text-muted-foreground\"\n value={text}\n placeholder={values.length === 0 ? (placeholder ?? \"type and press Enter\") : \"\"}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\";\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { Condition, AndCondition, OrCondition } from \"showwhat\";\n\n/** Build an AND composite condition. */\nexport function buildAndCondition(conditions: Condition[], id?: string): AndCondition {\n return id ? { id, type: \"and\", conditions } : { type: \"and\", conditions };\n}\n\n/** Build an OR composite condition. */\nexport function buildOrCondition(conditions: Condition[], id?: string): OrCondition {\n return id ? { id, type: \"or\", conditions } : { type: \"or\", conditions };\n}\n\n/**\n * Build an open-union (custom) condition with an arbitrary type string.\n * Matches the `{ type: string; [key: string]: unknown }` arm of the Condition union.\n */\nexport function buildCustomCondition(fields: { type: string; [key: string]: unknown }): Condition {\n return fields;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { NumberTagInput } from \"./NumberTagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"neq\", label: \"neq\" },\n { value: \"gt\", label: \"gt\" },\n { value: \"gte\", label: \"gte\" },\n { value: \"lt\", label: \"lt\" },\n { value: \"lte\", label: \"lte\" },\n { value: \"in\", label: \"in\" },\n { value: \"nin\", label: \"nin\" },\n];\n\nexport const meta = {\n type: \"number\",\n label: \"Number\",\n description: \"Compare a context key against a number or list of numbers\",\n defaults: { type: \"number\", key: \"\", op: \"eq\", value: 0 },\n};\n\nexport function NumberConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"number\" }));\n },\n [rec, onChange],\n );\n const handleOpChange = useCallback(\n (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue !== undefined && currentValue !== \"\"\n ? [Number(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as number[])[0] ?? 0)\n : currentValue;\n onChange(buildCustomCondition({ ...rec, op: newOp, value: coercedValue, type: \"number\" }));\n },\n [rec, onChange],\n );\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. score\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={OP_OPTIONS}\n />\n {isArray ? (\n <NumberTagInput\n value={(rec.value as number | number[]) ?? []}\n onChange={(v) => update(\"value\", v)}\n placeholder=\"e.g. 200\"\n />\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 font-mono text-sm\"\n value={rec.value !== undefined ? String(rec.value) : \"\"}\n placeholder=\"e.g. 100\"\n onChange={(e) => update(\"value\", e.target.value === \"\" ? \"\" : Number(e.target.value))}\n />\n )}\n </ConditionRow>\n );\n}\n","import { useCallback, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\n\ntype NumberTagInputProps = {\n value: number | number[];\n onChange: (value: number | number[]) => void;\n placeholder?: string;\n};\n\nexport function NumberTagInput({ value, onChange, placeholder }: NumberTagInputProps) {\n const values = Array.isArray(value) ? value : [value];\n const [text, setText] = useState(\"\");\n\n const emit = useCallback(\n (next: number[]) => {\n onChange(next.length === 1 ? next[0] : next);\n },\n [onChange],\n );\n\n const addValues = useCallback(\n (raw: string[]) => {\n const parsed = raw\n .map((s) => s.trim())\n .filter(Boolean)\n .map(Number)\n .filter((n) => !Number.isNaN(n));\n const unique = parsed.filter((n) => !values.includes(n));\n if (unique.length > 0) {\n emit([...values, ...unique]);\n }\n },\n [values, emit],\n );\n\n const removeValue = useCallback(\n (index: number) => {\n const next = values.filter((_, i) => i !== index);\n emit(next.length === 0 ? [] : next);\n },\n [values, emit],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || (e.key === \"Tab\" && text.trim())) {\n e.preventDefault();\n addValues([text]);\n setText(\"\");\n } else if (e.key === \"Backspace\" && text === \"\" && values.length > 0) {\n removeValue(values.length - 1);\n }\n },\n [text, values, addValues, removeValue],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData(\"text\");\n if (pasted.includes(\"\\n\")) {\n e.preventDefault();\n addValues(pasted.split(\"\\n\"));\n setText(\"\");\n }\n },\n [addValues],\n );\n\n return (\n <div className=\"border-input focus-within:border-ring focus-within:ring-ring/50 flex min-h-9 flex-1 flex-wrap items-center gap-1 rounded-md border px-2 py-1 focus-within:ring-[3px]\">\n {values.map((v, i) => (\n <Badge key={`${v}-${i}`} variant=\"outline\" className=\"bg-muted gap-1 font-mono text-xs\">\n {v}\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground ml-0.5 cursor-pointer leading-none\"\n onClick={() => removeValue(i)}\n aria-label={`Remove ${v}`}\n >\n {\"\\u00d7\"}\n </button>\n </Badge>\n ))}\n <input\n className=\"min-w-[80px] flex-1 bg-transparent py-0.5 font-mono text-sm outline-none placeholder:text-muted-foreground\"\n type=\"number\"\n value={text}\n placeholder={values.length === 0 ? (placeholder ?? \"type and press Enter\") : \"\"}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n </div>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"gt\", label: \"gt\" },\n { value: \"gte\", label: \"gte\" },\n { value: \"lt\", label: \"lt\" },\n { value: \"lte\", label: \"lte\" },\n];\n\nexport const meta = {\n type: \"datetime\",\n label: \"Datetime\",\n description: \"Compare a context key against a date/time\",\n defaults: { type: \"datetime\", key: \"\", op: \"eq\", value: new Date().toISOString() },\n};\n\nexport function DatetimeConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"datetime\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. at\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={(v) => update(\"op\", v)}\n options={OP_OPTIONS}\n />\n <DateTimeInput value={String(rec.value ?? \"\")} onChange={(v) => update(\"value\", v)} />\n </ConditionRow>\n );\n}\n","import { useRef, useState } from \"react\";\nimport { Calendar, Code } from \"lucide-react\";\nimport { Input } from \"../ui/input.js\";\nimport type { DateTimeInputProps } from \"../../types.js\";\n\nfunction toLocalDatetime(iso: string): string {\n if (!iso) return \"\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const date = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n const time = `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n\n return `${date}T${time}`;\n}\n\nfunction fromLocalDatetime(local: string): string {\n if (!local) return \"\";\n const d = new Date(local);\n /* v8 ignore next */\n if (Number.isNaN(d.getTime())) return local;\n return d.toISOString();\n}\n\nexport function DateTimeInput({ value, onChange }: DateTimeInputProps) {\n const [rawValue, setRawValue] = useState(value);\n const [showRaw, setShowRaw] = useState(false);\n const prevValueRef = useRef(value);\n if (prevValueRef.current !== value) {\n prevValueRef.current = value;\n setRawValue(value);\n }\n\n if (showRaw) {\n return (\n <div className=\"flex gap-1\">\n <Input\n className=\"h-8 flex-1 font-mono text-xs\"\n value={rawValue}\n placeholder=\"ISO 8601 datetime\"\n onChange={(e) => {\n setRawValue(e.target.value);\n onChange(e.target.value);\n }}\n />\n <button\n type=\"button\"\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground hover:text-foreground\"\n aria-label=\"Switch to date picker\"\n onClick={() => setShowRaw(false)}\n >\n <Calendar className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-1\">\n <Input\n className=\"h-8 flex-1 text-xs\"\n type=\"datetime-local\"\n value={toLocalDatetime(value)}\n onChange={(e) => onChange(fromLocalDatetime(e.target.value))}\n />\n <button\n type=\"button\"\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground hover:text-foreground\"\n aria-label=\"Switch to raw input\"\n onClick={() => {\n setRawValue(value);\n setShowRaw(true);\n }}\n >\n <Code className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [{ value: \"eq\", label: \"eq\" }];\n\nexport const meta = {\n type: \"bool\",\n label: \"Boolean\",\n description: \"Match a context key against a boolean\",\n defaults: { type: \"bool\", key: \"\", value: true },\n};\n\nexport function BoolConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"bool\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. isAdmin\"\n />\n <OperatorSelect value=\"eq\" options={OP_OPTIONS} disabled />\n <Select\n value={String(rec.value ?? \"true\")}\n onValueChange={(v) => update(\"value\", v === \"true\")}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </ConditionRow>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"eq\", label: \"eq\" }];\n\nexport const meta = {\n type: \"env\",\n label: \"Environment\",\n description: \"Match the environment name\",\n defaults: { type: \"env\", value: \"\" },\n};\n\nexport function EnvConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const handleChange = useCallback(\n (value: string | string[]) => {\n onChange(buildCustomCondition({ ...rec, value, type: \"env\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput value=\"env\" disabled />\n <OperatorSelect value=\"eq\" options={OP_OPTIONS} disabled />\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={handleChange}\n placeholder=\"e.g. production\"\n />\n </ConditionRow>\n );\n}\n","import { useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"gte\", label: \"gte\" }];\n\nexport const meta = {\n type: \"startAt\",\n label: \"Start At\",\n description: \"Active after a specific date/time\",\n defaults: { type: \"startAt\", value: new Date().toISOString() },\n};\n\nexport function StartAtConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n\n return (\n <ConditionRow>\n <KeyInput value=\"at\" disabled />\n <OperatorSelect value=\"gte\" options={OP_OPTIONS} disabled />\n <DateTimeInput\n value={String(rec.value ?? \"\")}\n onChange={(v) => onChange(buildCustomCondition({ ...rec, value: v, type: \"startAt\" }))}\n />\n </ConditionRow>\n );\n}\n","import { useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"lt\", label: \"lt\" }];\n\nexport const meta = {\n type: \"endAt\",\n label: \"End At\",\n description: \"Active before a specific date/time\",\n defaults: { type: \"endAt\", value: new Date().toISOString() },\n};\n\nexport function EndAtConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n\n return (\n <ConditionRow>\n <KeyInput value=\"at\" disabled />\n <OperatorSelect value=\"lt\" options={OP_OPTIONS} disabled />\n <DateTimeInput\n value={String(rec.value ?? \"\")}\n onChange={(v) => onChange(buildCustomCondition({ ...rec, value: v, type: \"endAt\" }))}\n />\n </ConditionRow>\n );\n}\n","import { meta as stringMeta } from \"./StringConditionEditor.js\";\nimport { meta as numberMeta } from \"./NumberConditionEditor.js\";\nimport { meta as datetimeMeta } from \"./DatetimeConditionEditor.js\";\nimport { meta as boolMeta } from \"./BoolConditionEditor.js\";\nimport { meta as envMeta } from \"./EnvConditionEditor.js\";\nimport { meta as startAtMeta } from \"./StartAtConditionEditor.js\";\nimport { meta as endAtMeta } from \"./EndAtConditionEditor.js\";\n\nexport interface ConditionTypeMeta {\n type: string;\n label: string;\n description: string;\n defaults: Record<string, unknown>;\n}\n\nexport const BUILTIN_CONDITION_TYPES: ConditionTypeMeta[] = [\n stringMeta,\n numberMeta,\n datetimeMeta,\n boolMeta,\n envMeta,\n startAtMeta,\n endAtMeta,\n];\n\nexport const CONDITION_TYPE_MAP = new Map(BUILTIN_CONDITION_TYPES.map((m) => [m.type, m]));\n\nexport function getConditionMeta(type: string): ConditionTypeMeta | undefined {\n return CONDITION_TYPE_MAP.get(type);\n}\n","import type React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ref,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport type React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import type React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","import type React from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as DialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\nimport { Button } from \"@/components/ui/button\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","\"use client\";\n\nimport type React from \"react\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import type React from \"react\";\nimport { Label as LabelPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","\"use client\";\n\nimport type React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import type React from \"react\";\nimport { Popover as PopoverPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <div data-slot=\"popover-title\" className={cn(\"font-medium\", className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n};\n","import type React from \"react\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"inline-flex items-center justify-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[orientation=vertical]:justify-start data-[orientation=vertical]:gap-0 data-[orientation=vertical]:rounded-none data-[orientation=vertical]:bg-transparent data-[orientation=vertical]:p-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"inline-flex items-center justify-center gap-2 rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm data-[orientation=vertical]:justify-start data-[orientation=vertical]:rounded-none data-[orientation=vertical]:border-l-2 data-[orientation=vertical]:border-l-transparent data-[orientation=vertical]:px-3 data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:text-sm data-[orientation=vertical]:font-normal data-[orientation=vertical]:text-muted-foreground data-[orientation=vertical]:shadow-none data-[orientation=vertical]:hover:bg-muted data-[orientation=vertical]:data-[state=active]:border-l-primary data-[orientation=vertical]:data-[state=active]:bg-accent data-[orientation=vertical]:data-[state=active]:font-medium data-[orientation=vertical]:data-[state=active]:text-accent-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useRef, useState } from \"react\";\nimport { Input } from \"../ui/input.js\";\nimport { Textarea } from \"../ui/textarea.js\";\nimport { Button } from \"../ui/button.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport type { ValueInputProps } from \"../../types.js\";\n\ntype ValueType = \"string\" | \"number\" | \"boolean\" | \"json\";\n\nfunction detectType(value: unknown): ValueType {\n if (typeof value === \"boolean\") return \"boolean\";\n if (typeof value === \"number\") return \"number\";\n if (typeof value === \"object\" && value !== null) return \"json\";\n return \"string\";\n}\n\nexport function ValueInput({ value, onChange, placeholder }: ValueInputProps) {\n const [type, setType] = useState<ValueType>(() => detectType(value));\n const [jsonText, setJsonText] = useState(() =>\n type === \"json\" ? JSON.stringify(value, null, 2) : \"\",\n );\n const [jsonError, setJsonError] = useState<string | null>(null);\n\n // Sync type and jsonText only when the value prop changes type from outside\n // (e.g. parent switches which variation is selected)\n const prevValueRef = useRef(value);\n if (prevValueRef.current !== value) {\n prevValueRef.current = value;\n const newType = detectType(value);\n if (newType !== type) {\n setType(newType);\n }\n if (newType === \"json\") {\n try {\n setJsonText(JSON.stringify(value, null, 2));\n setJsonError(null);\n } catch {\n /* keep current jsonText */\n }\n }\n }\n\n function handleTypeChange(newType: string) {\n const t = newType as ValueType;\n setType(t);\n setJsonError(null);\n switch (t) {\n case \"string\":\n onChange(String(value ?? \"\"));\n break;\n case \"number\":\n onChange(Number(value) || 0);\n break;\n case \"boolean\":\n onChange(Boolean(value));\n break;\n case \"json\":\n try {\n const text = JSON.stringify(value, null, 2);\n setJsonText(text);\n onChange(value);\n /* v8 ignore start */\n } catch {\n setJsonText(\"{}\");\n onChange({});\n }\n /* v8 ignore stop */\n break;\n }\n }\n\n function handleJsonBlur() {\n try {\n const parsed = JSON.parse(jsonText);\n setJsonError(null);\n onChange(parsed);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }\n\n function handlePrettify() {\n try {\n const parsed = JSON.parse(jsonText);\n setJsonText(JSON.stringify(parsed, null, 2));\n setJsonError(null);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }\n\n return (\n <div className=\"flex items-start gap-2\">\n <Select value={type} onValueChange={handleTypeChange}>\n <SelectTrigger className=\"h-9 w-[110px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">String</SelectItem>\n <SelectItem value=\"number\">Number</SelectItem>\n <SelectItem value=\"boolean\">Boolean</SelectItem>\n <SelectItem value=\"json\">JSON</SelectItem>\n </SelectContent>\n </Select>\n <div className=\"flex-1\">\n {type === \"string\" && (\n <Input\n className=\"h-9 font-mono text-sm\"\n value={String(value ?? \"\")}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n />\n )}\n {type === \"number\" && (\n <Input\n className=\"h-9 font-mono text-sm\"\n type=\"number\"\n value={String(value ?? 0)}\n onChange={(e) => onChange(Number(e.target.value))}\n />\n )}\n {type === \"boolean\" && (\n <Select value={String(Boolean(value))} onValueChange={(v) => onChange(v === \"true\")}>\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n )}\n {type === \"json\" && (\n <>\n <Textarea\n className=\"font-mono text-sm\"\n rows={4}\n value={jsonText}\n onChange={(e) => setJsonText(e.target.value)}\n onBlur={handleJsonBlur}\n />\n <div className=\"mt-1 flex items-center gap-2\">\n {jsonError && <p className=\"text-xs text-destructive\">{jsonError}</p>}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-6 px-2 text-xs\"\n onClick={handlePrettify}\n >\n Prettify\n </Button>\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n","import type { ValidationMessageProps } from \"../../types.js\";\n\nexport function ValidationMessage({ errors }: ValidationMessageProps) {\n if (!errors || errors.length === 0) return null;\n return (\n <div className=\"space-y-1\">\n {errors.map((err, i) => (\n <p key={i} className=\"text-xs text-destructive\">\n {err.path.length > 0 && (\n <span className=\"font-mono text-destructive/70\">{err.path.join(\".\")} </span>\n )}\n {err.message}\n </p>\n ))}\n </div>\n );\n}\n","import { Moon, Sun, Monitor } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport type { ThemeToggleProps } from \"../../types.js\";\n\nconst icons = {\n light: Sun,\n dark: Moon,\n system: Monitor,\n} as const;\n\nconst next: Record<string, \"light\" | \"dark\" | \"system\"> = {\n light: \"dark\",\n dark: \"system\",\n system: \"light\",\n};\n\nexport function ThemeToggle({ theme, onToggle }: ThemeToggleProps) {\n const Icon = icons[theme];\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onToggle(next[theme])}\n aria-label={`Switch to ${next[theme]} theme`}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n );\n}\n","import { Component, type ErrorInfo, type ReactNode } from \"react\";\n\ntype ErrorBoundaryProps = {\n children: ReactNode;\n /** Optional fallback to render instead of the default error UI. */\n fallback?: ReactNode;\n /** Called when an error is caught. Defaults to console.error. */\n onError?: (error: Error, info: ErrorInfo) => void;\n};\n\ntype ErrorBoundaryState = {\n error: Error | null;\n};\n\nfunction defaultOnError(error: Error, info: ErrorInfo) {\n console.error(\"ErrorBoundary caught an error:\", error, info);\n}\n\n/**\n * A class component error boundary that catches render errors in its subtree\n * and displays a fallback UI with the error message and a \"Try again\" button.\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n const onError = this.props.onError ?? defaultOnError;\n onError(error, info);\n }\n\n handleRetry = () => {\n this.setState({ error: null });\n };\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n return (\n <div\n role=\"alert\"\n className=\"flex flex-col items-center justify-center gap-3 p-6 text-center\"\n >\n <p className=\"text-sm font-medium text-destructive\">Something went wrong</p>\n <p className=\"text-xs text-muted-foreground\">{this.state.error.message}</p>\n <button\n type=\"button\"\n className=\"rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium hover:bg-accent\"\n onClick={this.handleRetry}\n >\n Try again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import type React from \"react\";\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} {...props} />;\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import type React from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../ui/alert-dialog.js\";\n\ntype ConfirmDialogProps = {\n title: string;\n description: React.ReactNode;\n actionLabel: string;\n onConfirm: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n};\n\nexport function ConfirmDialog({\n title,\n description,\n actionLabel,\n onConfirm,\n open,\n onOpenChange,\n children,\n}: ConfirmDialogProps) {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogTrigger asChild>{children}</AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={onConfirm}\n >\n {actionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { Fragment } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { Badge } from \"../ui/badge.js\";\nimport { ConditionBlock } from \"./ConditionBlock.js\";\nimport { AddConditionMenu } from \"./AddConditionMenu.js\";\nimport type { ConditionBuilderProps } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { useConditionArray } from \"./useConditionArray.js\";\nimport { ErrorBoundary } from \"../common/ErrorBoundary.js\";\n\nexport function ConditionBuilder({\n conditions: rawConditions,\n onChange,\n validationErrors,\n}: ConditionBuilderProps) {\n const {\n conditions,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n } = useConditionArray(rawConditions, onChange);\n\n return (\n <ErrorBoundary>\n <div className=\"space-y-1.5\">\n {conditions.length > 0 && (\n <div className=\"border-l-3 pl-3 py-2 bg-muted/20 rounded-r-md border-primary/30\">\n <div className=\"mb-2 flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">\n {conditions.length} condition{conditions.length !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n <div className=\"space-y-1.5\">\n {conditions.map((c, i) => (\n <Fragment key={(c as Record<string, unknown>).id as string}>\n {i > 0 && (\n <div className=\"flex\">\n <Badge\n variant=\"outline\"\n className=\"select-none font-mono text-xs bg-primary/10 text-primary border-primary/20\"\n >\n AND\n </Badge>\n </div>\n )}\n <ConditionBlock\n condition={c}\n onChange={(updated: Condition) => handleConditionChange(i, updated)}\n onRemove={() => handleConditionRemove(i)}\n onMoveUp={i > 0 ? () => handleMoveUp(i) : undefined}\n onMoveDown={i < conditions.length - 1 ? () => handleMoveDown(i) : undefined}\n depth={1}\n errors={filterErrorsByPath(validationErrors, \"conditions\", i)}\n />\n </Fragment>\n ))}\n </div>\n </div>\n )}\n <AddConditionMenu onAdd={handleAddCondition} />\n </div>\n </ErrorBoundary>\n );\n}\n","import { memo } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { isAndCondition, isOrCondition } from \"showwhat\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { ConditionValueEditor } from \"./ConditionValueEditor.js\";\nimport { ConditionGroup } from \"./ConditionGroup.js\";\nimport { MoveButtons } from \"./MoveButtons.js\";\nimport { getConditionMeta } from \"./condition-registry.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport { buildAndCondition, buildOrCondition } from \"./utils.js\";\nimport type { ConditionBlockProps } from \"../../types.js\";\n\n/** Zod emits \"Invalid input\" for discriminated union failures — we rephrase for clarity. */\nconst GENERIC_ZOD_ERROR = \"Invalid input\";\n\nexport const ConditionBlock = memo(function ConditionBlock({\n condition,\n onChange,\n onRemove,\n onMoveUp,\n onMoveDown,\n depth = 0,\n errors,\n}: ConditionBlockProps) {\n function handleChange(updated: Condition) {\n onChange(updated);\n }\n // Render AND/OR groups recursively\n if (isAndCondition(condition) || isOrCondition(condition)) {\n return (\n <ConditionGroup\n type={condition.type as \"and\" | \"or\"}\n conditions={condition.conditions}\n onChange={(conditions) =>\n handleChange(\n condition.type === \"and\"\n ? buildAndCondition(conditions, condition.id)\n : buildOrCondition(conditions, condition.id),\n )\n }\n onRemove={onRemove}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n depth={depth}\n errors={errors}\n />\n );\n }\n\n const extensions = useConditionExtensions();\n const meta =\n getConditionMeta(condition.type) ??\n extensions?.extraConditionTypes.find((m) => m.type === condition.type);\n const label = meta?.label ?? (condition.type || \"Custom\");\n\n return (\n <div className=\"border border-border bg-card p-2 space-y-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex h-8 shrink-0 items-center text-sm font-medium text-muted-foreground\">\n {label}\n </span>\n <div className=\"flex-1\" />\n <div className=\"flex shrink-0 gap-0.5\">\n <MoveButtons onMoveUp={onMoveUp} onMoveDown={onMoveDown} />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n onClick={onRemove}\n aria-label=\"Remove condition\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n <ConditionValueEditor condition={condition} onChange={handleChange} />\n {(errors?.length ?? 0) > 0 && (\n <div className=\"space-y-0.5\">\n {errors!.map((err, i) => {\n const field = err.path.length > 0 ? err.path.join(\".\") : null;\n const msg =\n err.message === GENERIC_ZOD_ERROR\n ? \"Invalid condition — check required fields\"\n : err.message;\n return (\n <p key={i} className=\"text-xs text-destructive\">\n {field && <span className=\"font-mono text-destructive/70\">{field}: </span>}\n {msg}\n </p>\n );\n })}\n </div>\n )}\n </div>\n );\n});\n","import { useCallback, useRef, useState } from \"react\";\nimport { Input } from \"../ui/input.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Textarea } from \"../ui/textarea.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nfunction extractArgs(condition: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(condition).filter(([k]) => k !== \"type\" && k !== \"id\"));\n}\n\nfunction argsToText(args: Record<string, unknown>): string {\n if (Object.keys(args).length === 0) return \"\";\n return JSON.stringify(args, null, 2);\n}\n\nexport function CustomConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = condition as Record<string, unknown>;\n\n const [text, setText] = useState(() => argsToText(extractArgs(rec)));\n const [jsonError, setJsonError] = useState<string | null>(null);\n const focusedRef = useRef(false);\n\n const prevConditionRef = useRef(condition);\n if (prevConditionRef.current !== condition) {\n prevConditionRef.current = condition;\n if (!focusedRef.current) {\n const derived = argsToText(extractArgs(rec));\n if (derived !== text) {\n setText(derived);\n setJsonError(null);\n }\n }\n }\n\n const handleArgsBlur = useCallback(() => {\n focusedRef.current = false;\n const trimmed = text.trim();\n\n if (trimmed === \"\") {\n setJsonError(null);\n onChange({ type: rec.type, ...(rec.id ? { id: rec.id } : {}) } as typeof condition);\n return;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n setJsonError(\"Args must be a JSON object\");\n return;\n }\n setJsonError(null);\n onChange({\n type: rec.type,\n ...(rec.id ? { id: rec.id } : {}),\n ...parsed,\n } as typeof condition);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }, [text, rec.type, rec.id, onChange]);\n\n const handleTypeChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({ ...rec, type: e.target.value } as typeof condition);\n },\n [rec, onChange],\n );\n\n return (\n <div className=\"flex-1 space-y-2\">\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Type</Label>\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.type ?? \"\")}\n placeholder=\"e.g. geoLocation, percentage\"\n onChange={handleTypeChange}\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Args</Label>\n <Textarea\n className=\"font-mono text-sm\"\n rows={3}\n value={text}\n placeholder='e.g. {\"region\": \"us-east\", \"threshold\": 50} (optional)'\n onChange={(e) => {\n setText(e.target.value);\n setJsonError(null);\n }}\n onFocus={() => {\n focusedRef.current = true;\n }}\n onBlur={handleArgsBlur}\n />\n {jsonError && <p className=\"mt-1 text-xs text-destructive\">{jsonError}</p>}\n </div>\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { ComponentType } from \"react\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nexport interface ConditionExtensions {\n extraConditionTypes: ConditionTypeMeta[];\n editorOverrides: Map<string, ComponentType<ConditionValueEditorProps>>;\n}\n\nconst ConditionExtensionsContext = createContext<ConditionExtensions | null>(null);\n\nexport const ConditionExtensionsProvider = ConditionExtensionsContext.Provider;\n\nexport function useConditionExtensions(): ConditionExtensions | null {\n return useContext(ConditionExtensionsContext);\n}\n","import { StringConditionEditor } from \"./StringConditionEditor.js\";\nimport { NumberConditionEditor } from \"./NumberConditionEditor.js\";\nimport { DatetimeConditionEditor } from \"./DatetimeConditionEditor.js\";\nimport { BoolConditionEditor } from \"./BoolConditionEditor.js\";\nimport { EnvConditionEditor } from \"./EnvConditionEditor.js\";\nimport { StartAtConditionEditor } from \"./StartAtConditionEditor.js\";\nimport { EndAtConditionEditor } from \"./EndAtConditionEditor.js\";\nimport { CustomConditionEditor } from \"./CustomConditionEditor.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nexport function ConditionValueEditor({ condition, onChange }: ConditionValueEditorProps) {\n const extensions = useConditionExtensions();\n\n switch (condition.type) {\n case \"string\":\n return <StringConditionEditor condition={condition} onChange={onChange} />;\n case \"number\":\n return <NumberConditionEditor condition={condition} onChange={onChange} />;\n case \"datetime\":\n return <DatetimeConditionEditor condition={condition} onChange={onChange} />;\n case \"bool\":\n return <BoolConditionEditor condition={condition} onChange={onChange} />;\n case \"env\":\n return <EnvConditionEditor condition={condition} onChange={onChange} />;\n case \"startAt\":\n return <StartAtConditionEditor condition={condition} onChange={onChange} />;\n case \"endAt\":\n return <EndAtConditionEditor condition={condition} onChange={onChange} />;\n default: {\n const OverrideEditor = extensions?.editorOverrides.get(condition.type);\n if (OverrideEditor) {\n return <OverrideEditor condition={condition} onChange={onChange} />;\n }\n return <CustomConditionEditor condition={condition} onChange={onChange} />;\n }\n }\n}\n","import type { Condition } from \"showwhat\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Badge } from \"../ui/badge.js\";\nimport { ConditionBlock } from \"./ConditionBlock.js\";\nimport { AddConditionMenu } from \"./AddConditionMenu.js\";\nimport { MoveButtons } from \"./MoveButtons.js\";\nimport type { ConditionGroupProps } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useConditionArray } from \"./useConditionArray.js\";\n\nimport { Fragment, memo } from \"react\";\n\nexport const ConditionGroup = memo(function ConditionGroup({\n type,\n conditions: rawConditions,\n onChange,\n onRemove,\n onMoveUp,\n onMoveDown,\n depth = 0,\n errors,\n}: ConditionGroupProps) {\n const {\n conditions,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n } = useConditionArray(rawConditions, onChange);\n\n return (\n <div\n className={cn(\n \"border-l-3 pl-3 pr-2 py-2 rounded-r-md\",\n type === \"and\" ? \"border-primary/30\" : \"border-amber-500/30\",\n )}\n style={{\n backgroundColor: `oklch(from var(--color-muted) l c h / ${Math.min(0.2 + depth * 0.1, 0.5)})`,\n }}\n >\n <div className=\"mb-2 flex items-center gap-2\">\n <Badge\n variant=\"outline\"\n className=\"select-none font-mono text-xs bg-muted/50 text-muted-foreground border-border\"\n >\n L{depth} | {type.toUpperCase()}\n </Badge>\n <span className=\"text-sm text-muted-foreground\">\n {conditions.length} condition{conditions.length !== 1 ? \"s\" : \"\"}\n </span>\n <div className=\"flex-1\" />\n <div className=\"flex shrink-0 gap-0.5\">\n <MoveButtons onMoveUp={onMoveUp} onMoveDown={onMoveDown} size=\"h-6 w-6\" />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label=\"Remove condition group\"\n onClick={onRemove}\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n <div className=\"space-y-1.5\">\n {conditions.map((c, i) => (\n <Fragment key={(c as Record<string, unknown>).id as string}>\n {i > 0 && (\n <div className=\"flex\">\n <Badge\n variant=\"outline\"\n className={cn(\n \"select-none font-mono text-xs\",\n type === \"and\"\n ? \"bg-primary/10 text-primary border-primary/20\"\n : \"bg-amber-500/10 text-amber-600 border-amber-500/20 dark:text-amber-400\",\n )}\n >\n {type.toUpperCase()}\n </Badge>\n </div>\n )}\n <ConditionBlock\n condition={c}\n onChange={(updated: Condition) => handleConditionChange(i, updated)}\n onRemove={() => handleConditionRemove(i)}\n onMoveUp={i > 0 ? () => handleMoveUp(i) : undefined}\n onMoveDown={i < conditions.length - 1 ? () => handleMoveDown(i) : undefined}\n depth={depth + 1}\n errors={filterErrorsByPath(errors, \"conditions\", i)}\n />\n </Fragment>\n ))}\n </div>\n <div className=\"mt-2\">\n <AddConditionMenu onAdd={handleAddCondition} />\n </div>\n </div>\n );\n});\n","import { Plus } from \"lucide-react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu.js\";\nimport { BUILTIN_CONDITION_TYPES } from \"./condition-registry.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nexport { buildDefaultCondition as getDefaultCondition } from \"./utils.js\";\n\nexport function AddConditionMenu({ onAdd }: { onAdd: (type: string) => void }) {\n const extensions = useConditionExtensions();\n const extraTypes = extensions?.extraConditionTypes ?? [];\n\n const primitives = BUILTIN_CONDITION_TYPES.filter((m) =>\n [\"string\", \"number\", \"datetime\", \"bool\"].includes(m.type),\n );\n const sugar = BUILTIN_CONDITION_TYPES.filter((m) => [\"env\", \"startAt\", \"endAt\"].includes(m.type));\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"inline-flex shrink-0 items-center justify-center gap-1.5 rounded px-3 h-8 text-sm font-medium hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\">\n <Plus className=\"mr-1 h-3.5 w-3.5\" />\n Add condition\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {primitives.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n <DropdownMenuSeparator />\n {sugar.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n {extraTypes.length > 0 && (\n <>\n <DropdownMenuSeparator />\n {extraTypes.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n </>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onAdd(\"and\")}>AND Group</DropdownMenuItem>\n <DropdownMenuItem onSelect={() => onAdd(\"or\")}>OR Group</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onAdd(\"__custom\")}>Custom</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import type { Condition } from \"showwhat\";\nimport { buildAndCondition, buildOrCondition, buildCustomCondition } from \"./condition-builders.js\";\nimport { BUILTIN_CONDITION_TYPES } from \"./condition-registry.js\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\n\nexport { buildAndCondition, buildOrCondition, buildCustomCondition };\n\n/**\n * Build a default condition for a given type string.\n * Returns the correct narrowed type for composite conditions,\n * and uses schema-derived defaults for built-in leaf conditions.\n */\nexport function buildDefaultCondition(\n type: string,\n id?: string,\n extraTypes?: ConditionTypeMeta[],\n): Condition {\n if (type === \"and\") {\n return buildAndCondition([], id);\n }\n if (type === \"or\") {\n return buildOrCondition([], id);\n }\n if (type === \"__custom\") {\n return buildCustomCondition({ type: \"\", ...(id ? { id } : {}) });\n }\n const meta =\n BUILTIN_CONDITION_TYPES.find((m) => m.type === type) ??\n extraTypes?.find((m) => m.type === type);\n if (meta) {\n return buildCustomCondition({\n ...meta.defaults,\n type: meta.type,\n ...(id ? { id } : {}),\n });\n }\n return buildCustomCondition({ type: \"\", ...(id ? { id } : {}) });\n}\n","import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\n\ntype MoveButtonsProps = {\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n size?: string;\n};\n\nexport function MoveButtons({ onMoveUp, onMoveDown, size = \"h-8 w-8\" }: MoveButtonsProps) {\n if (!onMoveUp && !onMoveDown) return null;\n\n return (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`${size} text-muted-foreground hover:text-foreground`}\n disabled={!onMoveUp}\n onClick={onMoveUp}\n aria-label=\"Move up\"\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`${size} text-muted-foreground hover:text-foreground`}\n disabled={!onMoveDown}\n onClick={onMoveDown}\n aria-label=\"Move down\"\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n </>\n );\n}\n","import type { ValidationIssueDisplay } from \"../types.js\";\n\n/**\n * Filter validation errors for a specific child at `path[0] === pathKey && path[1] === index`,\n * then strip those two leading segments so the child sees only its own errors.\n */\nexport function filterErrorsByPath(\n errors: ValidationIssueDisplay[] | undefined,\n pathKey: string,\n index: number,\n): ValidationIssueDisplay[] | undefined {\n if (!errors) return undefined;\n const filtered = errors.filter((err) => err.path[0] === pathKey && err.path[1] === index);\n if (filtered.length === 0) return undefined;\n return filtered.map((err) => ({ ...err, path: err.path.slice(2) }));\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { AUTO_ID_PREFIX, ensureIds } from \"../../utils/id.js\";\nimport { getDefaultCondition } from \"./AddConditionMenu.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\n\nexport type ConditionArrayHandlers = {\n /** Conditions with IDs guaranteed to be present. */\n conditions: Condition[];\n handleConditionChange: (index: number, updated: Condition) => void;\n handleConditionRemove: (index: number) => void;\n handleMoveUp: (index: number) => void;\n handleMoveDown: (index: number) => void;\n handleAddCondition: (type: string) => void;\n};\n\n/**\n * Shared hook that manages an array of conditions.\n * Extracts the common handler logic duplicated across\n * ConditionBuilder and ConditionGroup.\n *\n * Backfills `id` on conditions that arrive without one and\n * assigns `id: crypto.randomUUID()` to newly added conditions.\n */\nexport function useConditionArray(\n conditions: Condition[],\n onChange: (conditions: Condition[]) => void,\n): ConditionArrayHandlers {\n const extensions = useConditionExtensions();\n const extraTypes = extensions?.extraConditionTypes;\n\n // Backfill IDs on incoming conditions\n const withIds = useMemo(() => ensureIds(conditions), [conditions]);\n\n const handleConditionChange = useCallback(\n (index: number, updated: Condition) => {\n const next = [...withIds];\n next[index] = updated;\n onChange(next);\n },\n [withIds, onChange],\n );\n\n const handleConditionRemove = useCallback(\n (index: number) => {\n onChange(withIds.filter((_, i) => i !== index));\n },\n [withIds, onChange],\n );\n\n const handleAddCondition = useCallback(\n (type: string) => {\n const newCondition = getDefaultCondition(\n type,\n `${AUTO_ID_PREFIX}${crypto.randomUUID()}`,\n extraTypes,\n );\n onChange([...withIds, newCondition]);\n },\n [withIds, onChange, extraTypes],\n );\n\n const handleMoveUp = useCallback(\n (index: number) => {\n if (index <= 0) return;\n const next = [...withIds];\n [next[index - 1], next[index]] = [next[index], next[index - 1]];\n onChange(next);\n },\n [withIds, onChange],\n );\n\n const handleMoveDown = useCallback(\n (index: number) => {\n if (index >= withIds.length - 1) return;\n const next = [...withIds];\n [next[index], next[index + 1]] = [next[index + 1], next[index]];\n onChange(next);\n },\n [withIds, onChange],\n );\n\n return {\n conditions: withIds,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n };\n}\n","import { memo, useState } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\nimport { ChevronRight, Eye, GripVertical, Trash2 } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Badge } from \"../ui/badge.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { ValueInput } from \"../common/ValueInput.js\";\nimport { ValidationMessage } from \"../common/ValidationMessage.js\";\nimport { ConditionBuilder } from \"../condition-builder/ConditionBuilder.js\";\nimport { formatConditionSummary } from \"../../utils/condition-summary.js\";\nimport type { VariationCardProps } from \"../../types.js\";\n\nexport const VariationCard = memo(function VariationCard({\n variation,\n index,\n validationErrors,\n onChange,\n onRemove,\n dragHandleProps,\n}: VariationCardProps) {\n const [open, setOpen] = useState(false);\n const conditionCount = variation.conditions?.length ?? 0;\n\n return (\n <CollapsiblePrimitive.Root open={open} onOpenChange={setOpen}>\n <div className=\"rounded-lg border border-border/50 bg-card transition-colors hover:border-primary/30\">\n <div className=\"flex items-center gap-2 px-3 py-2.5\">\n <button\n type=\"button\"\n className=\"cursor-grab touch-none text-muted-foreground/50 hover:text-muted-foreground\"\n aria-label=\"Drag to reorder\"\n {...dragHandleProps}\n >\n <GripVertical className=\"h-4 w-4\" />\n </button>\n <CollapsiblePrimitive.Trigger asChild>\n <button\n type=\"button\"\n className=\"flex flex-1 items-center gap-2 text-left hover:cursor-pointer\"\n >\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n {index}\n </Badge>\n <span className=\"flex-1 truncate text-sm text-muted-foreground\">\n {variation.description || String(variation.value ?? \"\")}\n </span>\n {conditionCount > 0 && (\n <span className=\"text-xs text-muted-foreground/60\">\n {conditionCount} {conditionCount === 1 ? \"condition\" : \"conditions\"}\n </span>\n )}\n <ChevronRight\n className={`h-4 w-4 text-muted-foreground/60 transition-transform ${open ? \"rotate-90\" : \"\"}`}\n />\n </button>\n </CollapsiblePrimitive.Trigger>\n </div>\n <CollapsiblePrimitive.Content>\n <div className=\"space-y-4 border-t border-border/40 px-4 py-4\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Value\n </Label>\n <ConfirmDialog\n title=\"Remove variation?\"\n description={`This will delete variation ${index} and all its conditions. This action cannot be undone.`}\n actionLabel=\"Remove\"\n onConfirm={onRemove}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"shrink-0 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label=\"Remove variation\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </ConfirmDialog>\n </div>\n <div>\n <ValueInput\n value={variation.value}\n onChange={(value) => onChange({ ...variation, value })}\n />\n </div>\n <input\n className=\"w-full border-none bg-transparent text-sm text-muted-foreground placeholder:text-muted-foreground/50 focus:text-foreground focus:outline-none\"\n value={variation.description ?? \"\"}\n placeholder=\"Add a description (optional)...\"\n onChange={(e) =>\n onChange({\n ...variation,\n description: e.target.value || undefined,\n })\n }\n />\n <div className=\"border-t border-border/40 pt-4\">\n <div className=\"rounded-lg border border-border/40 bg-muted/30 p-3\">\n <div className=\"mb-1.5 flex items-center gap-1.5\">\n <Label className=\"text-sm font-medium\">Conditions</Label>\n {conditionCount > 0 && (\n <Dialog>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex items-center justify-center rounded p-0.5 text-muted-foreground/60 hover:text-muted-foreground\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Condition Summary</DialogTitle>\n <DialogDescription>Evaluation logic for this variation</DialogDescription>\n </DialogHeader>\n <pre className=\"rounded-md bg-muted p-4 font-mono text-xs whitespace-pre overflow-auto max-h-80\">\n {/* v8 ignore next */}\n {formatConditionSummary(variation.conditions ?? [])}\n </pre>\n </DialogContent>\n </Dialog>\n )}\n </div>\n <ConditionBuilder\n conditions={variation.conditions ?? []}\n onChange={(conditions: Condition[]) =>\n onChange({\n ...variation,\n conditions: conditions.length > 0 ? conditions : undefined,\n })\n }\n validationErrors={validationErrors}\n />\n </div>\n </div>\n <ValidationMessage\n errors={validationErrors?.filter((err) => err.path[0] !== \"conditions\")}\n />\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n});\n","import type { Condition } from \"showwhat\";\nimport { isAndCondition, isOrCondition } from \"showwhat\";\nimport { getConditionMeta } from \"../components/condition-builder/condition-registry.js\";\n\nfunction formatLeafOperator(c: Condition): { op: string; val: string } {\n const opField = \"op\" in c ? String(c.op) : \"\";\n const raw = \"value\" in c ? c.value : \"\";\n\n // Operator symbol mapping\n const opSymbols: Record<string, string> = {\n eq: \"=\",\n neq: \"!=\",\n in: \"in\",\n nin: \"not in\",\n regex: \"~\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n };\n const opSymbol = opSymbols[opField] ?? \"=\";\n\n if (c.type === \"string\" || c.type === \"env\") {\n const vals = Array.isArray(raw) ? raw.map(String) : [String(raw)];\n if (opField === \"regex\") {\n return { op: \"~\", val: vals.map((v) => `/${v}/`).join(\", \") };\n }\n return { op: opSymbol, val: vals.map((v) => `\"${v}\"`).join(\", \") };\n }\n\n if (c.type === \"number\") {\n if (Array.isArray(raw)) {\n return { op: opSymbol, val: raw.map(String).join(\", \") };\n }\n return { op: opSymbol, val: String(raw) };\n }\n\n if (c.type === \"bool\") {\n return { op: \"=\", val: String(raw) };\n }\n\n if (c.type === \"datetime\") {\n return { op: opSymbol, val: `\"${String(raw)}\"` };\n }\n\n if (c.type === \"startAt\") return { op: \">=\", val: `\"${String(raw)}\"` };\n if (c.type === \"endAt\") return { op: \"<\", val: `\"${String(raw)}\"` };\n\n // Fallback for custom types\n const value = raw ? String(raw) : \"\";\n return { op: \"=\", val: value ? `\"${value}\"` : \"\" };\n}\n\nfunction formatOne(c: Condition, indent: number): string[] {\n const prefix = \" \".repeat(indent);\n if (isAndCondition(c)) {\n if (c.conditions.length === 0) return [`${prefix}(empty AND group)`];\n const lines: string[] = [];\n c.conditions.forEach((sub, i) => {\n const subLines = formatOne(sub, indent + 1);\n if (i > 0) lines.push(`${prefix} AND`);\n lines.push(...subLines);\n });\n return [`${prefix}(`, ...lines, `${prefix})`];\n }\n if (isOrCondition(c)) {\n if (c.conditions.length === 0) return [`${prefix}(empty OR group)`];\n const lines: string[] = [];\n c.conditions.forEach((sub, i) => {\n const subLines = formatOne(sub, indent + 1);\n if (i > 0) lines.push(`${prefix} OR`);\n lines.push(...subLines);\n });\n return [`${prefix}(`, ...lines, `${prefix})`];\n }\n const meta = getConditionMeta(c.type);\n const label = meta?.label ?? c.type;\n const { op, val } = formatLeafOperator(c);\n const key = \"key\" in c ? String(c.key) : \"\";\n if (key && val) return [`${prefix}${key} ${op} ${val}`];\n if (val) return [`${prefix}${label} ${op} ${val}`];\n return [`${prefix}${label}`];\n}\n\nexport function formatConditionSummary(conditions: Condition[]): string | null {\n if (conditions.length === 0) return null;\n const lines: string[] = [];\n conditions.forEach((c, i) => {\n if (i > 0) lines.push(\" AND\");\n lines.push(...formatOne(c, 1));\n });\n return `When ${lines.join(\"\\n\").trimStart()}`;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { Variation } from \"showwhat\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n arrayMove,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { VariationCard } from \"./VariationCard.js\";\nimport type { VariationListProps, ValidationIssueDisplay } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { ensureIds } from \"../../utils/id.js\";\n\nfunction SortableVariation({\n id,\n variation,\n index,\n validationErrors,\n onChange,\n onRemove,\n}: {\n id: string;\n variation: Variation;\n index: number;\n validationErrors?: ValidationIssueDisplay[];\n onChange: (v: Variation) => void;\n onRemove: () => void;\n}) {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{\n ...style,\n animationDelay: `${index * 50}ms`,\n }}\n className=\"animate-fade-up\"\n >\n <VariationCard\n variation={variation}\n index={index}\n validationErrors={validationErrors}\n onChange={onChange}\n onRemove={onRemove}\n dragHandleProps={{ ref: setActivatorNodeRef, ...listeners, ...attributes }}\n />\n </div>\n );\n}\n\nexport function VariationList({\n variations: rawVariations,\n validationErrors,\n onChange,\n}: VariationListProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n // Backfill IDs on variations that don't have them\n const variations = useMemo(() => ensureIds(rawVariations), [rawVariations]);\n\n // Use variation.id as the stable key for dnd-kit\n const sortableIds = useMemo(() => variations.map((v) => v.id!), [variations]);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = sortableIds.indexOf(String(active.id));\n const newIndex = sortableIds.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n\n onChange(arrayMove(variations, oldIndex, newIndex));\n },\n [sortableIds, variations, onChange],\n );\n\n const handleVariationChange = useCallback(\n (index: number, updated: Variation) => {\n const next = [...variations];\n next[index] = updated;\n onChange(next);\n },\n [variations, onChange],\n );\n\n const handleRemove = useCallback(\n (index: number) => {\n onChange(variations.filter((_, i) => i !== index));\n },\n [variations, onChange],\n );\n\n return (\n <div className=\"space-y-3\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={sortableIds} strategy={verticalListSortingStrategy}>\n {variations.map((v, i) => (\n <SortableVariation\n key={v.id!}\n id={v.id!}\n variation={v}\n index={i}\n validationErrors={filterErrorsByPath(validationErrors, \"variations\", i)}\n onChange={(updated) => handleVariationChange(i, updated)}\n onRemove={() => handleRemove(i)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n );\n}\n","import { useRef, useState } from \"react\";\nimport type { Variation } from \"showwhat\";\nimport { AlertTriangle, Plus, Save, Undo2 } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { Input } from \"../ui/input.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Switch } from \"../ui/switch.js\";\nimport { VariationList } from \"../variation-editor/VariationList.js\";\nimport type { DefinitionEditorProps } from \"../../types.js\";\n\nexport function DefinitionEditor({\n definitionKey,\n definition,\n validationErrors,\n isDirty,\n isPending,\n onUpdate,\n onRename,\n onSave,\n onDiscard,\n}: DefinitionEditorProps) {\n const [editingKey, setEditingKey] = useState(false);\n const [keyDraft, setKeyDraft] = useState(definitionKey);\n const prevKeyRef = useRef(definitionKey);\n if (prevKeyRef.current !== definitionKey) {\n prevKeyRef.current = definitionKey;\n setKeyDraft(definitionKey);\n }\n\n async function handleKeySubmit() {\n const trimmed = keyDraft.trim();\n if (trimmed && trimmed !== definitionKey) {\n try {\n await onRename(trimmed);\n setEditingKey(false);\n } catch {\n // Keep rename mode open so the user can retry\n }\n } else {\n setKeyDraft(definitionKey);\n setEditingKey(false);\n }\n }\n\n function handleAddVariation() {\n onUpdate({\n ...definition,\n variations: [...definition.variations, { id: crypto.randomUUID(), value: \"\" }],\n });\n }\n\n const errorCount = validationErrors?.length ?? 0;\n\n return (\n <div className=\"flex h-full flex-col overflow-hidden\">\n {/* Action bar */}\n <div className=\"flex shrink-0 items-center justify-end gap-2 border-b border-border bg-muted/30 px-4 py-2\">\n <Button\n variant={isDirty ? \"default\" : \"ghost\"}\n size=\"sm\"\n disabled={!isDirty || isPending}\n onClick={onSave}\n >\n <Save className=\"mr-1.5 h-4 w-4\" />\n Save\n </Button>\n {onDiscard ? (\n <ConfirmDialog\n title=\"Discard changes?\"\n description=\"This will revert all unsaved changes to this definition. This action cannot be undone.\"\n actionLabel=\"Discard\"\n onConfirm={onDiscard}\n >\n <Button variant=\"ghost\" size=\"sm\" disabled={!isDirty || isPending}>\n <Undo2 className=\"mr-1.5 h-4 w-4\" />\n Discard\n </Button>\n </ConfirmDialog>\n ) : (\n <Button variant=\"ghost\" size=\"sm\" disabled>\n <Undo2 className=\"mr-1.5 h-4 w-4\" />\n Discard\n </Button>\n )}\n </div>\n\n {/* Per-definition validation banner */}\n {errorCount > 0 && (\n <div className=\"shrink-0 border-b border-destructive/30 bg-destructive/10 px-4 py-2\">\n <p className=\"flex items-center gap-1.5 text-xs font-medium text-destructive\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n {errorCount} validation error{errorCount !== 1 ? \"s\" : \"\"} — fix the highlighted fields\n below\n </p>\n </div>\n )}\n\n <div className=\"shrink-0 border-b border-border/50 mx-auto w-full max-w-3xl px-8 pt-8 pb-4 space-y-3\">\n {/* Title area */}\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1\">\n {editingKey ? (\n <Input\n className=\"h-auto border-none bg-transparent px-0 font-mono text-2xl font-semibold shadow-none focus-visible:ring-0\"\n value={keyDraft}\n autoFocus\n onChange={(e) => setKeyDraft(e.target.value)}\n onBlur={handleKeySubmit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleKeySubmit();\n if (e.key === \"Escape\") {\n setKeyDraft(definitionKey);\n setEditingKey(false);\n }\n }}\n />\n ) : (\n <button\n type=\"button\"\n className=\"block w-full rounded px-0 py-0 text-left font-mono text-2xl font-semibold hover:text-foreground/70\"\n aria-label=\"Rename definition key\"\n onClick={() => {\n setKeyDraft(definitionKey);\n setEditingKey(true);\n }}\n >\n {definitionKey}\n </button>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2 pt-1.5\">\n <Label htmlFor=\"definition-active\" className=\"text-xs text-muted-foreground\">\n Active\n </Label>\n <Switch\n id=\"definition-active\"\n checked={definition.active !== false}\n onCheckedChange={(checked) =>\n onUpdate({\n ...definition,\n active: checked ? undefined : false,\n })\n }\n />\n </div>\n </div>\n <input\n className=\"w-full border-none bg-transparent text-sm text-muted-foreground placeholder:text-muted-foreground/50 focus:text-foreground focus:outline-none\"\n value={definition.description ?? \"\"}\n placeholder=\"Add a description (optional)...\"\n aria-label=\"Definition description\"\n onChange={(e) =>\n onUpdate({\n ...definition,\n description: e.target.value || undefined,\n })\n }\n />\n </div>\n </div>\n\n {/* Scrollable variations area */}\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <div className=\"mx-auto w-full max-w-3xl px-8 py-8 space-y-4\">\n {/* Variations */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Variations\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs text-muted-foreground\"\n onClick={handleAddVariation}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n\n <VariationList\n variations={definition.variations}\n validationErrors={validationErrors}\n onChange={(variations: Variation[]) => onUpdate({ ...definition, variations })}\n />\n\n {definition.variations.length > 2 && (\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-border/60 py-2.5 text-xs text-muted-foreground hover:border-border hover:text-foreground\"\n onClick={handleAddVariation}\n >\n <Plus className=\"h-3 w-3\" />\n Add variation\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Plus, Search, X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Input } from \"../ui/input.js\";\nimport { ScrollArea } from \"../ui/scroll-area.js\";\nimport { DefinitionListItem } from \"./DefinitionListItem.js\";\nimport type { DefinitionListProps } from \"../../types.js\";\n\nexport function DefinitionList({\n definitions,\n selectedKey,\n validationErrors,\n dirtyKeys,\n onSelect,\n onAdd,\n onRemove,\n}: DefinitionListProps) {\n const [search, setSearch] = useState(\"\");\n const [adding, setAdding] = useState(false);\n const [newKey, setNewKey] = useState(\"\");\n\n const keys = Object.keys(definitions).filter((k) =>\n k.toLowerCase().includes(search.toLowerCase()),\n );\n\n async function handleAdd() {\n const trimmed = newKey.trim();\n if (trimmed && !(trimmed in definitions)) {\n try {\n await onAdd(trimmed);\n setNewKey(\"\");\n setAdding(false);\n } catch {\n // Keep the form open so the user can retry\n }\n }\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n {/* Search */}\n <div className=\"p-3\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"h-9 pl-8 text-sm\"\n placeholder=\"Search definitions...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n </div>\n\n {/* List */}\n <ScrollArea className=\"flex-1\">\n <div className=\"px-2\">\n {keys.map((key) => (\n <DefinitionListItem\n key={key}\n definitionKey={key}\n variationCount={definitions[key].variations.length}\n isActive={definitions[key].active !== false}\n hasErrors={\n !!(validationErrors?.[key] && (validationErrors[key] as unknown[]).length > 0)\n }\n isDirty={dirtyKeys?.includes(key)}\n isSelected={key === selectedKey}\n onSelect={() => onSelect(key)}\n onRemove={() => onRemove(key)}\n />\n ))}\n {keys.length === 0 && (\n <p className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n {search ? \"No definitions match\" : \"No definitions\"}\n </p>\n )}\n </div>\n </ScrollArea>\n\n {/* Add definition */}\n <div className=\"border-t border-border p-3\">\n {adding ? (\n <div className=\"space-y-2\">\n <Input\n className=\"h-9 w-full font-mono text-sm\"\n placeholder=\"definition-key\"\n value={newKey}\n autoFocus\n onChange={(e) => setNewKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") setAdding(false);\n }}\n />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" className=\"h-8 flex-1\" onClick={handleAdd}>\n Save\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8\"\n aria-label=\"Cancel adding definition\"\n onClick={() => {\n setAdding(false);\n setNewKey(\"\");\n }}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-9 w-full\"\n aria-label=\"Add new definition\"\n onClick={() => setAdding(true)}\n >\n <Plus className=\"mr-1.5 h-4 w-4\" />\n New definition\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import { memo, useState } from \"react\";\nimport { Trash2 } from \"lucide-react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Button } from \"../ui/button.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport type { DefinitionListItemProps } from \"../../types.js\";\n\nexport const DefinitionListItem = memo(function DefinitionListItem({\n definitionKey,\n variationCount,\n isActive,\n hasErrors,\n isSelected,\n isDirty,\n onSelect,\n onRemove,\n}: DefinitionListItemProps) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n return (\n <div\n tabIndex={0}\n className={cn(\n \"group flex w-full items-center gap-2 rounded border-l-2 px-3 py-2.5 text-left text-sm transition-colors cursor-pointer\",\n isSelected\n ? \"border-l-primary bg-accent text-accent-foreground\"\n : \"border-l-transparent hover:bg-muted\",\n )}\n onClick={onSelect}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect();\n }\n }}\n >\n <span\n role=\"status\"\n aria-label={`${definitionKey} is ${hasErrors ? \"error\" : isActive ? \"active\" : \"inactive\"}${isDirty ? \", unsaved changes\" : \"\"}`}\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full border-[1.5px]\",\n hasErrors\n ? isDirty\n ? \"border-status-error bg-transparent\"\n : \"border-status-error bg-status-error\"\n : isActive\n ? isDirty\n ? \"border-status-active bg-transparent\"\n : \"border-status-active bg-status-active\"\n : isDirty\n ? \"border-status-inactive bg-transparent\"\n : \"border-status-inactive bg-status-inactive\",\n )}\n />\n <span className=\"flex-1 truncate font-mono text-sm\">{definitionKey}</span>\n <Badge variant=\"secondary\" className=\"text-xs tabular-nums\">\n {variationCount}\n </Badge>\n <ConfirmDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n title=\"Delete definition?\"\n description={\n <>\n This will permanently delete <strong className=\"font-mono\">{definitionKey}</strong> and\n all its variations. This action cannot be undone.\n </>\n }\n actionLabel=\"Delete\"\n onConfirm={onRemove}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"text-destructive/60 opacity-0 hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100\"\n aria-label={`Remove ${definitionKey}`}\n onClick={(e) => {\n e.stopPropagation();\n setConfirmOpen(true);\n }}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </ConfirmDialog>\n </div>\n );\n});\n","import { useCallback, useMemo } from \"react\";\nimport type { ComponentType } from \"react\";\nimport type { Presets } from \"showwhat\";\nimport { PRIMITIVE_TYPES } from \"showwhat\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport type { ConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { NumberTagInput } from \"./NumberTagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\nimport { OP_OPTIONS as STRING_OPS } from \"./StringConditionEditor.js\";\nimport { OP_OPTIONS as NUMBER_OPS } from \"./NumberConditionEditor.js\";\nimport { OP_OPTIONS as DATETIME_OPS } from \"./DatetimeConditionEditor.js\";\nimport { OP_OPTIONS as BOOL_OPS } from \"./BoolConditionEditor.js\";\n\n// ── Default values per built-in type ─────────────────────────────────────────\n\nconst TYPE_DEFAULTS: Record<string, Record<string, unknown>> = {\n string: { op: \"eq\", value: \"\" },\n number: { op: \"eq\", value: 0 },\n bool: { value: true },\n datetime: { op: \"eq\", value: new Date().toISOString() },\n};\n\n// ── Meta generation ──────────────────────────────────────────────────────────\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function createPresetConditionMeta(presets: Presets): ConditionTypeMeta[] {\n return Object.entries(presets).map(([name, preset]) => {\n const isBuiltin = PRIMITIVE_TYPES.has(preset.type);\n const description = isBuiltin\n ? `Match the ${preset.key} key (${preset.type})`\n : `Custom ${preset.type} condition`;\n\n const baseDefaults = isBuiltin ? { ...TYPE_DEFAULTS[preset.type], key: preset.key } : {};\n\n return {\n type: name,\n label: capitalize(name),\n description,\n defaults: { ...baseDefaults, ...preset.defaults, type: name },\n };\n });\n}\n\n// ── Preset editor component factory ──────────────────────────────────────────\n\nexport function createPresetEditor(\n presetName: string,\n builtinType: string,\n presetKey: string,\n): ComponentType<ConditionValueEditorProps> {\n function PresetConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(\n buildCustomCondition({ ...rec, [field]: value, key: presetKey, type: presetName }),\n );\n },\n [rec, onChange],\n );\n\n switch (builtinType) {\n case \"string\": {\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n const isRegex = op === \"regex\";\n const handleOpChange = (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue\n ? [String(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as string[])[0] ?? \"\")\n : currentValue;\n onChange(\n buildCustomCondition({\n ...rec,\n op: newOp,\n value: coercedValue,\n key: presetKey,\n type: presetName,\n }),\n );\n };\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={STRING_OPS}\n />\n {isArray ? (\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={(v) => update(\"value\", v)}\n placeholder={`e.g. ${presetKey} value`}\n />\n ) : isRegex ? (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. ^test.*$\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n ) : (\n <Input\n className=\"h-8 text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder={`e.g. ${presetKey} value`}\n onChange={(e) => update(\"value\", e.target.value)}\n />\n )}\n </ConditionRow>\n );\n }\n case \"number\": {\n const numOp = rec.op as string;\n const isNumArray = numOp === \"in\" || numOp === \"nin\";\n const handleNumOpChange = (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue !== undefined && currentValue !== \"\"\n ? [Number(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as number[])[0] ?? 0)\n : currentValue;\n onChange(\n buildCustomCondition({\n ...rec,\n op: newOp,\n value: coercedValue,\n key: presetKey,\n type: presetName,\n }),\n );\n };\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleNumOpChange}\n options={NUMBER_OPS}\n />\n {isNumArray ? (\n <NumberTagInput\n value={(rec.value as number | number[]) ?? []}\n onChange={(v) => update(\"value\", v)}\n placeholder={`e.g. ${presetKey} value`}\n />\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 font-mono text-sm\"\n value={rec.value !== undefined ? String(rec.value) : \"\"}\n placeholder=\"e.g. 100\"\n onChange={(e) =>\n update(\"value\", e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n />\n )}\n </ConditionRow>\n );\n }\n case \"bool\":\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect value=\"eq\" options={BOOL_OPS} disabled />\n <Select\n value={String(rec.value ?? \"true\")}\n onValueChange={(v) => update(\"value\", v === \"true\")}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </ConditionRow>\n );\n case \"datetime\":\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={(v) => update(\"op\", v)}\n options={DATETIME_OPS}\n />\n <DateTimeInput value={String(rec.value ?? \"\")} onChange={(v) => update(\"value\", v)} />\n </ConditionRow>\n );\n }\n return null;\n }\n\n PresetConditionEditor.displayName = `PresetConditionEditor(${presetName})`;\n return PresetConditionEditor;\n}\n\n// ── Convenience factory ──────────────────────────────────────────────────────\n\nexport function createPresetUI(presets: Presets): ConditionExtensions {\n const extraConditionTypes = createPresetConditionMeta(presets);\n const editorOverrides = new Map<string, ComponentType<ConditionValueEditorProps>>();\n\n for (const [name, preset] of Object.entries(presets)) {\n if (PRIMITIVE_TYPES.has(preset.type) && preset.key) {\n editorOverrides.set(name, createPresetEditor(name, preset.type, preset.key));\n }\n }\n\n return { extraConditionTypes, editorOverrides };\n}\n","import { useMemo } from \"react\";\nimport type { Definition } from \"showwhat\";\nimport { DefinitionList } from \"@/components/definition-list/DefinitionList.js\";\nimport { DefinitionEditor } from \"@/components/definition-editor/DefinitionEditor.js\";\nimport { ErrorBoundary } from \"@/components/common/ErrorBoundary.js\";\nimport {\n StoreSourceContext,\n ActionStateContext,\n useActionRunner,\n useActionState,\n useStoreRef,\n} from \"./context.js\";\nimport { useConfiguratorSelector } from \"./useConfiguratorSelector.js\";\nimport { PreviewPanel } from \"./PreviewPanel.js\";\nimport type { ConfiguratorStore, ConfiguratorStoreSource } from \"./types.js\";\nimport {\n selectDefinitions,\n selectSelectedKey,\n selectValidationErrors,\n selectDirtyKeys,\n selectRevision,\n} from \"./selectors.js\";\nimport type { ConditionExtensions } from \"@/components/condition-builder/ConditionExtensionsContext.js\";\nimport { ConditionExtensionsProvider } from \"@/components/condition-builder/ConditionExtensionsContext.js\";\nimport type { ConditionEvaluator } from \"showwhat\";\nimport { FallbackEvaluatorProvider } from \"./fallback-context.js\";\n\n/**\n * Normalize a plain ConfiguratorStore into a ConfiguratorStoreSource.\n * When the store is a plain object (no subscribe/getSnapshot), we wrap it\n * in a trivial source whose snapshot is the object itself. The subscribe\n * callback is a no-op because React context changes already trigger rerenders.\n *\n * **Plain-store limitation:** Because `subscribe` is a no-op, React's\n * `useSyncExternalStore` cannot detect granular changes. Every new plain-store\n * reference produces a new source, which updates `StoreSourceContext` and\n * re-renders **all** consumers — selector-level granularity is defeated.\n * For production use cases that need fine-grained updates, provide a real\n * `ConfiguratorStoreSource` (e.g. a Zustand store) directly instead of a\n * plain object.\n */\nfunction useNormalizedSource(\n store: ConfiguratorStore | ConfiguratorStoreSource,\n): ConfiguratorStoreSource {\n return useMemo(() => {\n // If the store already satisfies the source interface, use it directly.\n if (isStoreSource(store)) {\n return store;\n }\n\n // Wrap a plain store object in a trivial source.\n // The memo dep is `store` itself, so every new plain-store reference\n // produces a new source, which updates StoreSourceContext and triggers\n // consumer rerenders. This is correct: plain stores are prop-driven\n // and don't support selector-level granularity. Use a\n // ConfiguratorStoreSource with a real subscribe for that.\n const snapshot = store;\n return {\n getSnapshot: () => snapshot,\n subscribe: () => () => {},\n };\n }, [store]);\n}\n\nfunction isStoreSource(obj: unknown): obj is ConfiguratorStoreSource {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"getSnapshot\" in obj &&\n \"subscribe\" in obj &&\n typeof (obj as ConfiguratorStoreSource).getSnapshot === \"function\" &&\n typeof (obj as ConfiguratorStoreSource).subscribe === \"function\"\n );\n}\n\nfunction ErrorBanner() {\n const { actionState, clearError } = useActionState();\n if (!actionState.error) return null;\n return (\n <div\n role=\"alert\"\n className=\"flex items-center justify-between border-b border-destructive/30 bg-destructive/10 px-4 py-2\"\n >\n <p className=\"text-xs font-medium text-destructive\">\n Action failed: {actionState.error.message}\n </p>\n <button type=\"button\" className=\"text-xs text-destructive underline\" onClick={clearError}>\n Dismiss\n </button>\n </div>\n );\n}\n\nfunction EditorLayout({ emptyState }: { emptyState?: React.ReactNode }) {\n const definitions = useConfiguratorSelector(selectDefinitions);\n const selectedKey = useConfiguratorSelector(selectSelectedKey);\n const validationErrors = useConfiguratorSelector(selectValidationErrors);\n const dirtyKeys = useConfiguratorSelector(selectDirtyKeys);\n const revision = useConfiguratorSelector(selectRevision);\n const getStore = useStoreRef();\n const { actionState, runAction } = useActionState();\n\n const selectedDefinition = selectedKey ? definitions[selectedKey] : null;\n\n if (Object.keys(definitions).length === 0 && emptyState) {\n return <>{emptyState}</>;\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n <ErrorBanner />\n\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Sidebar */}\n <div className=\"w-72 shrink-0 border-r border-border bg-muted/30\">\n <DefinitionList\n definitions={definitions}\n selectedKey={selectedKey}\n validationErrors={validationErrors}\n dirtyKeys={dirtyKeys}\n onSelect={(key) => {\n runAction(() => getStore().selectDefinition(key)).catch(() => {});\n }}\n onAdd={(key) => runAction(() => getStore().addDefinition(key))}\n onRemove={(key) => {\n runAction(() => getStore().removeDefinition(key)).catch(() => {});\n }}\n />\n </div>\n\n {/* Editor */}\n <div className=\"flex-1 overflow-hidden bg-background\">\n <ErrorBoundary>\n {selectedDefinition && selectedKey ? (\n <div key={`anim-${selectedKey}-${revision}`} className=\"h-full animate-fade-up\">\n <DefinitionEditor\n key={`${selectedKey}-${revision}`}\n definitionKey={selectedKey}\n definition={selectedDefinition}\n validationErrors={validationErrors[selectedKey]}\n isDirty={dirtyKeys.includes(selectedKey)}\n isPending={actionState.pending}\n onUpdate={(def: Definition) => {\n getStore()\n .updateDefinition(selectedKey, def)\n .catch(() => {});\n }}\n onRename={(newKey: string) =>\n runAction(() => getStore().renameDefinition(selectedKey, newKey))\n }\n onSave={() => {\n runAction(() => getStore().saveDefinition(selectedKey)).catch(() => {});\n }}\n onDiscard={() => {\n runAction(() => getStore().discardDefinition(selectedKey)).catch(() => {});\n }}\n />\n </div>\n ) : (\n <div className=\"flex h-full items-center justify-center text-sm text-muted-foreground\">\n Select a definition to edit\n </div>\n )}\n </ErrorBoundary>\n </div>\n\n {/* Preview */}\n <ErrorBoundary>\n <PreviewPanel />\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport function Configurator({\n store,\n className,\n emptyState,\n conditionExtensions,\n fallbackEvaluator,\n}: {\n store: ConfiguratorStore | ConfiguratorStoreSource;\n className?: string;\n emptyState?: React.ReactNode;\n conditionExtensions?: ConditionExtensions;\n fallbackEvaluator?: ConditionEvaluator;\n}) {\n const runner = useActionRunner();\n const storeSource = useNormalizedSource(store);\n\n return (\n <StoreSourceContext.Provider value={storeSource}>\n <ActionStateContext.Provider value={runner}>\n <ConditionExtensionsProvider value={conditionExtensions ?? null}>\n <FallbackEvaluatorProvider value={fallbackEvaluator ?? null}>\n <div className={className}>\n <EditorLayout emptyState={emptyState} />\n </div>\n </FallbackEvaluatorProvider>\n </ConditionExtensionsProvider>\n </ActionStateContext.Provider>\n </StoreSourceContext.Provider>\n );\n}\n","import { createContext, useCallback, useContext, useSyncExternalStore, useState } from \"react\";\nimport type { ActionState, ConfiguratorStore, ConfiguratorStoreSource } from \"./types.js\";\n\nexport interface ActionStateContextValue {\n actionState: ActionState;\n runAction: (action: () => Promise<void>) => Promise<void>;\n clearError: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Contexts\n// ---------------------------------------------------------------------------\n\n/** Carries only the store source — changes rarely (only when the store identity changes). */\nexport const StoreSourceContext = createContext<ConfiguratorStoreSource | null>(null);\n\n/** Carries action state (pending / error) — changes on every async action lifecycle event. */\nexport const ActionStateContext = createContext<ActionStateContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\nfunction useStoreSource(): ConfiguratorStoreSource {\n const source = useContext(StoreSourceContext);\n if (source) return source;\n throw new Error(\"useConfiguratorStore must be used within a <Configurator> component\");\n}\n\nexport function useConfiguratorStore(): ConfiguratorStore {\n const source = useStoreSource();\n return useSyncExternalStore(source.subscribe, source.getSnapshot);\n}\n\nexport function useActionState(): ActionStateContextValue {\n const ctx = useContext(ActionStateContext);\n if (ctx) return ctx;\n throw new Error(\"useActionState must be used within a <Configurator> component\");\n}\n\n/**\n * Returns a stable getter for the current store snapshot.\n * Use this to call store methods in event handlers without\n * subscribing the component to store changes.\n */\nexport function useStoreRef(): () => ConfiguratorStore {\n const source = useStoreSource();\n return useCallback(() => source.getSnapshot(), [source]);\n}\n\n/** Hook that wraps async store actions with pending/error tracking. */\nexport function useActionRunner(): ActionStateContextValue {\n const [state, setState] = useState<ActionState>({ pending: false, error: null });\n\n const run = useCallback(async (action: () => Promise<void>) => {\n setState({ pending: true, error: null });\n try {\n await action();\n setState({ pending: false, error: null });\n } catch (err) {\n setState({ pending: false, error: err instanceof Error ? err : new Error(String(err)) });\n throw err; // Re-throw so callers that await can react to the failure\n }\n }, []);\n\n const clearError = useCallback(() => setState((s) => ({ ...s, error: null })), []);\n\n return {\n actionState: state,\n runAction: run,\n clearError,\n };\n}\n","import { useContext, useCallback, useSyncExternalStore } from \"react\";\nimport type { ConfiguratorStore } from \"./types.js\";\nimport { StoreSourceContext } from \"./context.js\";\n\n/**\n * Select a slice of the ConfiguratorStore with subscription-level\n * short-circuiting. The component only rerenders when the selected\n * value changes (via `Object.is` equality).\n *\n * Reads only from StoreSourceContext so action-state changes\n * (pending / error) do NOT trigger rerenders in selector consumers.\n */\nexport function useConfiguratorSelector<T>(selector: (store: ConfiguratorStore) => T): T {\n const source = useContext(StoreSourceContext);\n\n if (!source) {\n throw new Error(\"useConfiguratorSelector must be used within a <Configurator> component\");\n }\n\n const getSnapshot = useCallback(() => selector(source.getSnapshot()), [source, selector]);\n\n return useSyncExternalStore(source.subscribe, getSnapshot);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Badge } from \"@/components/ui/badge.js\";\nimport { Button } from \"@/components/ui/button.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog.js\";\nimport { Label } from \"@/components/ui/label.js\";\nimport { ScrollArea } from \"@/components/ui/scroll-area.js\";\nimport { Separator } from \"@/components/ui/separator.js\";\nimport { Textarea } from \"@/components/ui/textarea.js\";\nimport { ChevronRight, Eye, Loader2, Maximize2, Play } from \"lucide-react\";\nimport { resolve } from \"showwhat\";\nimport type { ConditionEvaluator } from \"showwhat\";\nimport { DefinitionInactiveError, DefinitionNotFoundError, VariationNotFoundError } from \"showwhat\";\nimport type { Context } from \"showwhat\";\nimport { useConfiguratorSelector } from \"./useConfiguratorSelector.js\";\nimport type { PreviewResult } from \"./preview-store.js\";\nimport { selectDefinitions, selectSelectedKey } from \"./selectors.js\";\nimport { useFallbackEvaluator } from \"./fallback-context.js\";\n\nfunction ResultBadge({ result, onViewMeta }: { result: PreviewResult; onViewMeta?: () => void }) {\n switch (result.status) {\n case \"success\":\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Badge className=\"bg-status-active/15 text-green-700 hover:bg-status-active/15 dark:text-green-400\">\n Matched\n </Badge>\n {onViewMeta ? (\n <button\n type=\"button\"\n className=\"flex items-center gap-1 text-xs text-muted-foreground/60 hover:text-muted-foreground hover:cursor-pointer\"\n onClick={onViewMeta}\n aria-label=\"View evaluation meta\"\n >\n <Eye className=\"size-3\" />\n <span>Details</span>\n <span>|</span>\n <span>Variation #{result.meta.variation.index}</span>\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\">\n Variation #{result.meta.variation.index}\n </span>\n )}\n </div>\n <div className=\"rounded-md border border-border bg-background p-2\">\n <pre className=\"whitespace-pre-wrap break-all font-mono text-xs\">\n {typeof result.value === \"string\"\n ? result.value\n : JSON.stringify(result.value, null, 2)}\n </pre>\n </div>\n </div>\n );\n case \"inactive\":\n return (\n <div className=\"space-y-2\">\n <Badge className=\"bg-amber-500/15 text-amber-600 hover:bg-amber-500/15\">Inactive</Badge>\n <p className=\"text-xs text-muted-foreground\">{result.message}</p>\n </div>\n );\n case \"no-match\":\n return (\n <div className=\"space-y-2\">\n <Badge className=\"bg-orange-500/15 text-orange-600 hover:bg-orange-500/15\">\n No Match\n </Badge>\n <p className=\"text-xs text-muted-foreground\">{result.message}</p>\n </div>\n );\n case \"error\":\n return (\n <div className=\"space-y-2\">\n <Badge variant=\"destructive\">Error</Badge>\n <p className=\"text-xs text-destructive\">{result.message}</p>\n </div>\n );\n }\n}\n\nfunction parseContextJson(text: string): Context {\n const trimmed = text.trim();\n if (!trimmed) return {};\n const parsed = JSON.parse(trimmed);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new SyntaxError(\"Context must be a JSON object\");\n }\n const context: Context = {};\n for (const [key, value] of Object.entries(parsed)) {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n context[key] = value;\n }\n }\n return context;\n}\n\nfunction parseEvaluatorOverrides(text: string): Record<string, boolean> {\n const overrides: Record<string, boolean> = {};\n for (const line of text.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx < 1) continue;\n const type = trimmed.slice(0, idx).trim();\n const value = trimmed\n .slice(idx + 1)\n .trim()\n .toLowerCase();\n if (type && (value === \"true\" || value === \"false\")) {\n overrides[type] = value === \"true\";\n }\n }\n return overrides;\n}\n\nfunction JsonEditorDialog({\n open,\n onOpenChange,\n value,\n onSave,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n value: string;\n onSave: (value: string) => void;\n}) {\n const [draft, setDraft] = useState(value);\n const [formatError, setFormatError] = useState<string | null>(null);\n\n // Sync draft when dialog opens\n useEffect(() => {\n if (open) {\n setDraft(value);\n setFormatError(null);\n }\n }, [open, value]);\n\n function handleFormat() {\n const trimmed = draft.trim();\n if (!trimmed) return;\n try {\n const parsed = JSON.parse(trimmed);\n setDraft(JSON.stringify(parsed, null, 2));\n setFormatError(null);\n } catch {\n setFormatError(\"Invalid JSON\");\n }\n }\n\n function handleSave() {\n onSave(draft);\n onOpenChange(false);\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Edit Context</DialogTitle>\n <DialogDescription>\n JSON object with context values for resolving the definition.\n </DialogDescription>\n </DialogHeader>\n <Textarea\n placeholder={'{\\n \"env\": \"production\",\\n \"region\": \"us-east-1\"\\n}'}\n value={draft}\n onChange={(e) => {\n setDraft(e.target.value);\n setFormatError(null);\n }}\n className={`min-h-64 font-mono text-sm ${formatError ? \"border-destructive\" : \"\"}`}\n rows={14}\n />\n {formatError && <p className=\"text-xs text-destructive\">{formatError}</p>}\n <DialogFooter>\n <Button variant=\"outline\" size=\"sm\" onClick={handleFormat}>\n Format\n </Button>\n <Button size=\"sm\" onClick={handleSave}>\n Apply\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function PreviewPanel() {\n const definitions = useConfiguratorSelector(selectDefinitions);\n const selectedKey = useConfiguratorSelector(selectSelectedKey);\n const externalFallback = useFallbackEvaluator();\n\n const [contextText, setContextText] = useState(\"\");\n const [evaluatorText, setEvaluatorText] = useState(\"\");\n const [contextError, setContextError] = useState<string | null>(null);\n const [simulatorOpen, setSimulatorOpen] = useState(false);\n const [jsonEditorOpen, setJsonEditorOpen] = useState(false);\n const [previewResult, setPreviewResult] = useState<PreviewResult | null>(null);\n const [isResolving, setIsResolving] = useState(false);\n const [metaDialogOpen, setMetaDialogOpen] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Clear result and abort in-flight requests when selection changes\n useEffect(() => {\n abortControllerRef.current?.abort();\n abortControllerRef.current = null;\n setPreviewResult(null);\n\n return () => {\n abortControllerRef.current?.abort();\n };\n }, [selectedKey]);\n\n const fallback: ConditionEvaluator | undefined = useMemo(() => {\n const overrides = parseEvaluatorOverrides(evaluatorText);\n const hasOverrides = Object.keys(overrides).length > 0;\n\n if (!hasOverrides && !externalFallback) return undefined;\n\n return async (args) => {\n const type = (args.condition as { type: string }).type;\n if (type in overrides) return overrides[type];\n if (externalFallback) return externalFallback(args);\n return false;\n };\n }, [evaluatorText, externalFallback]);\n\n const handleResolve = useCallback(async () => {\n if (!selectedKey || !definitions[selectedKey]) {\n setPreviewResult({ status: \"error\", message: \"No definition selected\" });\n return;\n }\n\n abortControllerRef.current?.abort();\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsResolving(true);\n setContextError(null);\n\n let context: Context;\n try {\n context = parseContextJson(contextText);\n } catch {\n setPreviewResult({ status: \"error\", message: \"Invalid JSON in context\" });\n setIsResolving(false);\n return;\n }\n\n try {\n const result = await resolve({\n definitions: { [selectedKey]: definitions[selectedKey] },\n context,\n options: fallback ? { fallback } : undefined,\n });\n\n if (controller.signal.aborted) return;\n\n const resolution = result[selectedKey];\n setPreviewResult({\n status: \"success\",\n value: resolution.value,\n meta: resolution.meta,\n });\n } catch (err) {\n if (controller.signal.aborted) return;\n\n if (err instanceof DefinitionInactiveError) {\n setPreviewResult({\n status: \"inactive\",\n message: `\"${selectedKey}\" is inactive`,\n });\n } else if (err instanceof VariationNotFoundError) {\n setPreviewResult({\n status: \"no-match\",\n message: \"No variation matched the given context\",\n });\n } else if (err instanceof DefinitionNotFoundError) {\n setPreviewResult({\n status: \"error\",\n message: `Definition \"${selectedKey}\" not found`,\n });\n } else {\n setPreviewResult({\n status: \"error\",\n message: err instanceof Error ? err.message : \"Unknown error\",\n });\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsResolving(false);\n }\n }\n }, [selectedKey, definitions, contextText, fallback]);\n\n return (\n <div className=\"flex w-80 shrink-0 flex-col border-l border-border bg-muted/30\">\n {/* Header */}\n <div className=\"flex h-12 items-center border-b border-border px-3\">\n <span className=\"text-sm font-semibold\">Preview</span>\n </div>\n\n <ScrollArea className=\"flex-1\">\n <div className=\"space-y-4 p-3\">\n {/* Selected definition */}\n <div>\n <Label className=\"text-xs text-muted-foreground\">Definition</Label>\n <p className=\"mt-0.5 truncate font-mono text-sm\">{selectedKey ?? \"None selected\"}</p>\n </div>\n\n <Separator />\n\n {/* Context (JSON) — read-only preview, click to edit */}\n <div>\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Context</Label>\n <button\n type=\"button\"\n className=\"flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground\"\n onClick={() => setJsonEditorOpen(true)}\n >\n <Maximize2 className=\"h-3 w-3\" />\n Edit\n </button>\n </div>\n <button\n type=\"button\"\n /* v8 ignore next */\n className={`mt-1.5 w-full cursor-pointer rounded-md border bg-transparent px-3 py-2 text-left transition-colors hover:border-ring ${contextError ? \"border-destructive\" : \"border-input\"}`}\n onClick={() => setJsonEditorOpen(true)}\n >\n {contextText.trim() ? (\n <pre className=\"max-h-28 overflow-hidden font-mono text-xs text-foreground\">\n {contextText}\n </pre>\n ) : (\n <span className=\"font-mono text-xs text-muted-foreground\">\n {'{ \"env\": \"production\" }'}\n </span>\n )}\n </button>\n {/* v8 ignore next */}\n {contextError && <p className=\"mt-1 text-[10px] text-destructive\">{contextError}</p>}\n <JsonEditorDialog\n open={jsonEditorOpen}\n onOpenChange={setJsonEditorOpen}\n value={contextText}\n onSave={(v) => {\n setContextText(v);\n setContextError(null);\n }}\n />\n </div>\n\n <Separator />\n\n {/* Condition simulator (collapsible) */}\n <div>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setSimulatorOpen((o) => !o)}\n >\n <ChevronRight\n className={`h-3.5 w-3.5 transition-transform ${simulatorOpen ? \"rotate-90\" : \"\"}`}\n />\n Condition Simulator\n </button>\n {simulatorOpen && (\n <div className=\"mt-2\">\n <Textarea\n placeholder={\"tier:true\\ngeo:false\"}\n value={evaluatorText}\n onChange={(e) => setEvaluatorText(e.target.value)}\n className=\"min-h-20 font-mono text-xs\"\n rows={6}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Simulate unregistered condition types. One type:true|false per line\n </p>\n </div>\n )}\n </div>\n\n {/* Resolve button */}\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={handleResolve}\n disabled={!selectedKey || isResolving}\n >\n {isResolving ? (\n <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" />\n ) : (\n <Play className=\"mr-1.5 h-4 w-4\" />\n )}\n Resolve\n </Button>\n\n {/* Result */}\n {previewResult && (\n <>\n <Separator />\n <div className=\"animate-slide-in-right\">\n <Label className=\"text-xs text-muted-foreground\">Result</Label>\n <div className=\"mt-1.5\">\n <ResultBadge\n result={previewResult}\n onViewMeta={\n previewResult.status === \"success\" ? () => setMetaDialogOpen(true) : undefined\n }\n />\n </div>\n {previewResult.status === \"success\" && (\n <Dialog open={metaDialogOpen} onOpenChange={setMetaDialogOpen}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>Evaluation Meta</DialogTitle>\n <DialogDescription>\n Full resolution metadata from the last evaluation.\n </DialogDescription>\n </DialogHeader>\n <ScrollArea className=\"max-h-96\">\n <pre className=\"whitespace-pre-wrap break-all font-mono text-xs\">\n {JSON.stringify(previewResult.meta, null, 2)}\n </pre>\n </ScrollArea>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","import type { ConfiguratorStore } from \"./types.js\";\n\n/* Stable selectors – defined once to avoid re-creation across components. */\nexport const selectDefinitions = (s: ConfiguratorStore) => s.definitions;\nexport const selectSelectedKey = (s: ConfiguratorStore) => s.selectedKey;\nexport const selectValidationErrors = (s: ConfiguratorStore) => s.validationErrors;\nexport const selectDirtyKeys = (s: ConfiguratorStore) => s.dirtyKeys;\nexport const selectRevision = (s: ConfiguratorStore) => s.revision;\n","import { createContext, useContext } from \"react\";\nimport type { ConditionEvaluator } from \"showwhat\";\n\nconst FallbackEvaluatorContext = createContext<ConditionEvaluator | null>(null);\n\nexport const FallbackEvaluatorProvider = FallbackEvaluatorContext.Provider;\n\nexport function useFallbackEvaluator(): ConditionEvaluator | null {\n return useContext(FallbackEvaluatorContext);\n}\n"],"mappings":"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","names":["useCallback","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsxs","next","jsx","jsxs","useCallback","useCallback","useMemo","useCallback","useState","jsx","jsxs","useState","useCallback","next","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","useState","jsx","jsxs","useState","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","meta","cva","Slot","jsx","cva","Slot","jsx","jsx","jsxs","jsx","jsxs","CheckIcon","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","useRef","useState","jsx","jsxs","useState","useRef","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","memo","X","useCallback","useRef","useState","jsx","jsxs","useState","useRef","useCallback","jsx","meta","Fragment","jsx","jsxs","meta","Fragment","jsx","jsxs","useCallback","useMemo","useMemo","useCallback","next","Fragment","jsx","jsxs","ConditionGroup","jsx","jsxs","memo","ConditionBlock","meta","X","jsx","jsxs","Fragment","memo","useState","isAndCondition","isOrCondition","isAndCondition","isOrCondition","meta","jsx","jsxs","memo","VariationCard","useState","useCallback","useMemo","jsx","useMemo","useCallback","next","useRef","useState","Plus","jsx","jsxs","useState","useRef","Plus","useState","Plus","X","memo","useState","Trash2","Fragment","jsx","jsxs","memo","DefinitionListItem","useState","Trash2","jsx","jsxs","useState","X","Plus","useCallback","useMemo","jsx","jsxs","useMemo","useCallback","OP_OPTIONS","useMemo","createContext","useCallback","useContext","useState","useContext","useCallback","useSyncExternalStore","useContext","useCallback","useSyncExternalStore","useCallback","useMemo","useRef","useState","ChevronRight","Eye","createContext","useContext","Fragment","jsx","jsxs","Eye","useState","useRef","useMemo","useCallback","ChevronRight","Fragment","jsx","jsxs","useMemo"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/utils/id.ts","../src/components/condition-builder/StringConditionEditor.tsx","../src/components/condition-builder/ConditionRow.tsx","../src/components/ui/input.tsx","../src/components/condition-builder/KeyInput.tsx","../src/components/ui/select.tsx","../src/components/condition-builder/OperatorSelect.tsx","../src/components/condition-builder/TagInput.tsx","../src/components/ui/badge.tsx","../src/components/condition-builder/condition-builders.ts","../src/components/condition-builder/NumberConditionEditor.tsx","../src/components/condition-builder/NumberTagInput.tsx","../src/components/condition-builder/DatetimeConditionEditor.tsx","../src/components/common/DateTimeInput.tsx","../src/components/condition-builder/BoolConditionEditor.tsx","../src/components/condition-builder/EnvConditionEditor.tsx","../src/components/condition-builder/StartAtConditionEditor.tsx","../src/components/condition-builder/EndAtConditionEditor.tsx","../src/components/condition-builder/condition-registry.ts","../src/components/ui/button.tsx","../src/components/ui/separator.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/dialog.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/label.tsx","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/popover.tsx","../src/components/ui/tabs.tsx","../src/components/common/ValueInput.tsx","../src/components/common/ValidationMessage.tsx","../src/components/common/ThemeToggle.tsx","../src/components/common/ErrorBoundary.tsx","../src/components/ui/alert-dialog.tsx","../src/components/common/ConfirmDialog.tsx","../src/components/condition-builder/ConditionBuilder.tsx","../src/components/condition-builder/ConditionBlock.tsx","../src/components/condition-builder/CustomConditionEditor.tsx","../src/components/condition-builder/ConditionExtensionsContext.tsx","../src/components/condition-builder/ConditionValueEditor.tsx","../src/components/condition-builder/ConditionGroup.tsx","../src/components/condition-builder/AddConditionMenu.tsx","../src/components/condition-builder/utils.ts","../src/components/condition-builder/MoveButtons.tsx","../src/utils/validation-errors.ts","../src/components/condition-builder/useConditionArray.ts","../src/components/variation-editor/VariationCard.tsx","../src/utils/condition-summary.ts","../src/components/variation-editor/VariationList.tsx","../src/components/definition-editor/DefinitionEditor.tsx","../src/components/definition-list/DefinitionList.tsx","../src/components/definition-list/DefinitionListItem.tsx","../src/components/condition-builder/preset-ui.tsx","../src/configurator/Configurator.tsx","../src/configurator/context.ts","../src/configurator/useConfiguratorSelector.ts","../src/configurator/PreviewPanel.tsx","../src/configurator/selectors.ts","../src/configurator/fallback-context.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import type { Condition, Definitions } from \"showwhat\";\n\nexport const AUTO_ID_PREFIX = \"_tmp:\";\n\nexport function isAutoId(id: string | undefined): boolean {\n return id != null && id.startsWith(AUTO_ID_PREFIX);\n}\n\n/**\n * Ensures every item in the array has an `id` field.\n * Items arriving from external sources may lack IDs;\n * this function backfills them with `crypto.randomUUID()`.\n *\n * Works with union types (e.g. Condition) where not every\n * variant explicitly declares `id` — the check uses a\n * Record cast so it handles any shape safely.\n */\nexport function ensureIds<T>(items: T[]): T[] {\n let changed = false;\n const result = items.map((item) => {\n if ((item as Record<string, unknown>).id) return item;\n changed = true;\n return { ...item, id: `${AUTO_ID_PREFIX}${crypto.randomUUID()}` };\n });\n return changed ? result : items;\n}\n\nfunction removeId<T extends Record<string, unknown>>(item: T): T {\n const copy = { ...item };\n delete copy.id;\n return copy;\n}\n\nfunction stripId<T extends { id?: string }>(item: T): T {\n if (!isAutoId(item.id)) return item;\n return removeId(item as unknown as Record<string, unknown>) as T;\n}\n\nfunction stripConditionIds(conditions: Condition[]): Condition[] {\n return conditions.map((c) => {\n const rec = c as Record<string, unknown>;\n const stripped = isAutoId(rec.id as string | undefined) ? removeId(rec) : rec;\n if ((c.type === \"and\" || c.type === \"or\") && \"conditions\" in c) {\n return {\n ...stripped,\n conditions: stripConditionIds((c as { conditions: Condition[] }).conditions),\n } as Condition;\n }\n return stripped as Condition;\n });\n}\n\nexport function stripAutoIds(definitions: Definitions): Definitions {\n const result: Definitions = {};\n for (const [key, def] of Object.entries(definitions)) {\n const cleaned = stripId(def);\n result[key] = {\n ...cleaned,\n variations: cleaned.variations.map((v) => {\n const sv = stripId(v);\n if (sv.conditions) {\n return { ...sv, conditions: stripConditionIds(sv.conditions) };\n }\n return sv;\n }),\n };\n }\n return result;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"neq\", label: \"neq\" },\n { value: \"in\", label: \"in\" },\n { value: \"nin\", label: \"nin\" },\n { value: \"regex\", label: \"regex\" },\n];\n\nexport const meta = {\n type: \"string\",\n label: \"String\",\n description: \"Match a context key against string value(s)\",\n defaults: { type: \"string\", key: \"\", op: \"eq\", value: \"\" },\n};\n\nexport function StringConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"string\" }));\n },\n [rec, onChange],\n );\n const handleOpChange = useCallback(\n (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue\n ? [String(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as string[])[0] ?? \"\")\n : currentValue;\n onChange(buildCustomCondition({ ...rec, op: newOp, value: coercedValue, type: \"string\" }));\n },\n [rec, onChange],\n );\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n const isRegex = op === \"regex\";\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. userId\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={OP_OPTIONS}\n />\n {isArray ? (\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={(v) => update(\"value\", v)}\n placeholder=\"e.g. user-123\"\n />\n ) : isRegex ? (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. ^test.*$\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n ) : (\n <Input\n className=\"h-8 text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. user-123\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n )}\n </ConditionRow>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype ConditionRowProps = {\n children: ReactNode;\n};\n\nexport function ConditionRow({ children }: ConditionRowProps) {\n return (\n <div\n className=\"grid flex-1 items-start gap-2\"\n style={{ gridTemplateColumns: \"140px 72px 1fr\" }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded border border-border/70 bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { Input } from \"../ui/input.js\";\n\ntype KeyInputProps = {\n value: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n};\n\nexport function KeyInput({ value, onChange, placeholder, disabled }: KeyInputProps) {\n return (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={value}\n placeholder={placeholder ?? \"key\"}\n disabled={disabled}\n onChange={onChange ? (e) => onChange(e.target.value) : undefined}\n readOnly={!onChange}\n />\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\n\ntype OperatorSelectProps = {\n value: string;\n onChange?: (value: string) => void;\n options: { value: string; label: string }[];\n disabled?: boolean;\n};\n\nexport function OperatorSelect({ value, onChange, options, disabled }: OperatorSelectProps) {\n return (\n <Select value={value} onValueChange={onChange} disabled={disabled}>\n <SelectTrigger className=\"h-8 font-mono text-xs\" disabled={disabled}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { useCallback, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\n\ntype TagInputProps = {\n value: string | string[];\n onChange: (value: string | string[]) => void;\n placeholder?: string;\n};\n\nexport function TagInput({ value, onChange, placeholder }: TagInputProps) {\n const values = Array.isArray(value) ? value.filter(Boolean) : value ? [value] : [];\n const [text, setText] = useState(\"\");\n\n const emit = useCallback(\n (next: string[]) => {\n onChange(next.length === 1 ? next[0] : next);\n },\n [onChange],\n );\n\n const addValues = useCallback(\n (raw: string[]) => {\n const cleaned = raw.map((s) => s.trim()).filter(Boolean);\n const unique = cleaned.filter((s) => !values.includes(s));\n if (unique.length > 0) {\n emit([...values, ...unique]);\n }\n },\n [values, emit],\n );\n\n const removeValue = useCallback(\n (index: number) => {\n const next = values.filter((_, i) => i !== index);\n emit(next.length === 0 ? [] : next);\n },\n [values, emit],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || (e.key === \"Tab\" && text.trim())) {\n e.preventDefault();\n addValues([text]);\n setText(\"\");\n } else if (e.key === \"Backspace\" && text === \"\" && values.length > 0) {\n removeValue(values.length - 1);\n }\n },\n [text, values, addValues, removeValue],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData(\"text\");\n if (pasted.includes(\"\\n\")) {\n e.preventDefault();\n addValues(pasted.split(\"\\n\"));\n setText(\"\");\n }\n },\n [addValues],\n );\n\n return (\n <div className=\"border-input focus-within:border-ring focus-within:ring-ring/50 flex min-h-9 flex-1 flex-wrap items-center gap-1 rounded-md border px-2 py-1 focus-within:ring-[3px]\">\n {values.map((v, i) => (\n <Badge key={`${v}-${i}`} variant=\"outline\" className=\"bg-muted gap-1 font-mono text-xs\">\n {v}\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground ml-0.5 cursor-pointer leading-none\"\n onClick={() => removeValue(i)}\n aria-label={`Remove ${v}`}\n >\n {\"\\u00d7\"}\n </button>\n </Badge>\n ))}\n <input\n className=\"min-w-[80px] flex-1 bg-transparent py-0.5 font-mono text-sm outline-none placeholder:text-muted-foreground\"\n value={text}\n placeholder={values.length === 0 ? (placeholder ?? \"type and press Enter\") : \"\"}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nconst badgeBase =\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\";\n\nconst badgeVariantStyles = {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline: \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n} as const;\n\ntype BadgeVariant = keyof typeof badgeVariantStyles;\n\nfunction badgeVariants(opts?: { variant?: BadgeVariant; className?: string }) {\n return cn(badgeBase, badgeVariantStyles[opts?.variant ?? \"default\"], opts?.className);\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & { variant?: BadgeVariant; asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\";\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { Condition, AndCondition, OrCondition } from \"showwhat\";\n\n/** Build an AND composite condition. */\nexport function buildAndCondition(conditions: Condition[], id?: string): AndCondition {\n return id ? { id, type: \"and\", conditions } : { type: \"and\", conditions };\n}\n\n/** Build an OR composite condition. */\nexport function buildOrCondition(conditions: Condition[], id?: string): OrCondition {\n return id ? { id, type: \"or\", conditions } : { type: \"or\", conditions };\n}\n\n/**\n * Build an open-union (custom) condition with an arbitrary type string.\n * Matches the `{ type: string; [key: string]: unknown }` arm of the Condition union.\n */\nexport function buildCustomCondition(fields: { type: string; [key: string]: unknown }): Condition {\n return fields;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { NumberTagInput } from \"./NumberTagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"neq\", label: \"neq\" },\n { value: \"gt\", label: \"gt\" },\n { value: \"gte\", label: \"gte\" },\n { value: \"lt\", label: \"lt\" },\n { value: \"lte\", label: \"lte\" },\n { value: \"in\", label: \"in\" },\n { value: \"nin\", label: \"nin\" },\n];\n\nexport const meta = {\n type: \"number\",\n label: \"Number\",\n description: \"Compare a context key against a number or list of numbers\",\n defaults: { type: \"number\", key: \"\", op: \"eq\", value: 0 },\n};\n\nexport function NumberConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"number\" }));\n },\n [rec, onChange],\n );\n const handleOpChange = useCallback(\n (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue !== undefined && currentValue !== \"\"\n ? [Number(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as number[])[0] ?? 0)\n : currentValue;\n onChange(buildCustomCondition({ ...rec, op: newOp, value: coercedValue, type: \"number\" }));\n },\n [rec, onChange],\n );\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. score\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={OP_OPTIONS}\n />\n {isArray ? (\n <NumberTagInput\n value={(rec.value as number | number[]) ?? []}\n onChange={(v) => update(\"value\", v)}\n placeholder=\"e.g. 200\"\n />\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 font-mono text-sm\"\n value={rec.value !== undefined ? String(rec.value) : \"\"}\n placeholder=\"e.g. 100\"\n onChange={(e) => update(\"value\", e.target.value === \"\" ? \"\" : Number(e.target.value))}\n />\n )}\n </ConditionRow>\n );\n}\n","import { useCallback, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\n\ntype NumberTagInputProps = {\n value: number | number[];\n onChange: (value: number | number[]) => void;\n placeholder?: string;\n};\n\nexport function NumberTagInput({ value, onChange, placeholder }: NumberTagInputProps) {\n const values = Array.isArray(value) ? value : [value];\n const [text, setText] = useState(\"\");\n\n const emit = useCallback(\n (next: number[]) => {\n onChange(next.length === 1 ? next[0] : next);\n },\n [onChange],\n );\n\n const addValues = useCallback(\n (raw: string[]) => {\n const parsed = raw\n .map((s) => s.trim())\n .filter(Boolean)\n .map(Number)\n .filter((n) => !Number.isNaN(n));\n const unique = parsed.filter((n) => !values.includes(n));\n if (unique.length > 0) {\n emit([...values, ...unique]);\n }\n },\n [values, emit],\n );\n\n const removeValue = useCallback(\n (index: number) => {\n const next = values.filter((_, i) => i !== index);\n emit(next.length === 0 ? [] : next);\n },\n [values, emit],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || (e.key === \"Tab\" && text.trim())) {\n e.preventDefault();\n addValues([text]);\n setText(\"\");\n } else if (e.key === \"Backspace\" && text === \"\" && values.length > 0) {\n removeValue(values.length - 1);\n }\n },\n [text, values, addValues, removeValue],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData(\"text\");\n if (pasted.includes(\"\\n\")) {\n e.preventDefault();\n addValues(pasted.split(\"\\n\"));\n setText(\"\");\n }\n },\n [addValues],\n );\n\n return (\n <div className=\"border-input focus-within:border-ring focus-within:ring-ring/50 flex min-h-9 flex-1 flex-wrap items-center gap-1 rounded-md border px-2 py-1 focus-within:ring-[3px]\">\n {values.map((v, i) => (\n <Badge key={`${v}-${i}`} variant=\"outline\" className=\"bg-muted gap-1 font-mono text-xs\">\n {v}\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground ml-0.5 cursor-pointer leading-none\"\n onClick={() => removeValue(i)}\n aria-label={`Remove ${v}`}\n >\n {\"\\u00d7\"}\n </button>\n </Badge>\n ))}\n <input\n className=\"min-w-[80px] flex-1 bg-transparent py-0.5 font-mono text-sm outline-none placeholder:text-muted-foreground\"\n type=\"number\"\n value={text}\n placeholder={values.length === 0 ? (placeholder ?? \"type and press Enter\") : \"\"}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n </div>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [\n { value: \"eq\", label: \"eq\" },\n { value: \"gt\", label: \"gt\" },\n { value: \"gte\", label: \"gte\" },\n { value: \"lt\", label: \"lt\" },\n { value: \"lte\", label: \"lte\" },\n];\n\nexport const meta = {\n type: \"datetime\",\n label: \"Datetime\",\n description: \"Compare a context key against a date/time\",\n defaults: { type: \"datetime\", key: \"\", op: \"eq\", value: new Date().toISOString() },\n};\n\nexport function DatetimeConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"datetime\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. at\"\n />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={(v) => update(\"op\", v)}\n options={OP_OPTIONS}\n />\n <DateTimeInput value={String(rec.value ?? \"\")} onChange={(v) => update(\"value\", v)} />\n </ConditionRow>\n );\n}\n","import { useRef, useState } from \"react\";\nimport { Calendar, Code } from \"lucide-react\";\nimport { Input } from \"../ui/input.js\";\nimport type { DateTimeInputProps } from \"../../types.js\";\n\nfunction toLocalDatetime(iso: string): string {\n if (!iso) return \"\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const date = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n const time = `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n\n return `${date}T${time}`;\n}\n\nfunction fromLocalDatetime(local: string): string {\n if (!local) return \"\";\n const d = new Date(local);\n /* v8 ignore next */\n if (Number.isNaN(d.getTime())) return local;\n return d.toISOString();\n}\n\nexport function DateTimeInput({ value, onChange }: DateTimeInputProps) {\n const [rawValue, setRawValue] = useState(value);\n const [showRaw, setShowRaw] = useState(false);\n const prevValueRef = useRef(value);\n if (prevValueRef.current !== value) {\n prevValueRef.current = value;\n setRawValue(value);\n }\n\n if (showRaw) {\n return (\n <div className=\"flex gap-1\">\n <Input\n className=\"h-8 flex-1 font-mono text-xs\"\n value={rawValue}\n placeholder=\"ISO 8601 datetime\"\n onChange={(e) => {\n setRawValue(e.target.value);\n onChange(e.target.value);\n }}\n />\n <button\n type=\"button\"\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground hover:text-foreground\"\n aria-label=\"Switch to date picker\"\n onClick={() => setShowRaw(false)}\n >\n <Calendar className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-1\">\n <Input\n className=\"h-8 flex-1 text-xs\"\n type=\"datetime-local\"\n value={toLocalDatetime(value)}\n onChange={(e) => onChange(fromLocalDatetime(e.target.value))}\n />\n <button\n type=\"button\"\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground hover:text-foreground\"\n aria-label=\"Switch to raw input\"\n onClick={() => {\n setRawValue(value);\n setShowRaw(true);\n }}\n >\n <Code className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nexport const OP_OPTIONS = [{ value: \"eq\", label: \"eq\" }];\n\nexport const meta = {\n type: \"bool\",\n label: \"Boolean\",\n description: \"Match a context key against a boolean\",\n defaults: { type: \"bool\", key: \"\", value: true },\n};\n\nexport function BoolConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(buildCustomCondition({ ...rec, [field]: value, type: \"bool\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput\n value={String(rec.key ?? \"\")}\n onChange={(v) => update(\"key\", v)}\n placeholder=\"e.g. isAdmin\"\n />\n <OperatorSelect value=\"eq\" options={OP_OPTIONS} disabled />\n <Select\n value={String(rec.value ?? \"true\")}\n onValueChange={(v) => update(\"value\", v === \"true\")}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </ConditionRow>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"eq\", label: \"eq\" }];\n\nexport const meta = {\n type: \"env\",\n label: \"Environment\",\n description: \"Match the environment name\",\n defaults: { type: \"env\", value: \"\" },\n};\n\nexport function EnvConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const handleChange = useCallback(\n (value: string | string[]) => {\n onChange(buildCustomCondition({ ...rec, value, type: \"env\" }));\n },\n [rec, onChange],\n );\n\n return (\n <ConditionRow>\n <KeyInput value=\"env\" disabled />\n <OperatorSelect value=\"eq\" options={OP_OPTIONS} disabled />\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={handleChange}\n placeholder=\"e.g. production\"\n />\n </ConditionRow>\n );\n}\n","import { useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"gte\", label: \"gte\" }];\n\nexport const meta = {\n type: \"startAt\",\n label: \"Start At\",\n description: \"Active after a specific date/time\",\n defaults: { type: \"startAt\", value: new Date().toISOString() },\n};\n\nexport function StartAtConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n\n return (\n <ConditionRow>\n <KeyInput value=\"at\" disabled />\n <OperatorSelect value=\"gte\" options={OP_OPTIONS} disabled />\n <DateTimeInput\n value={String(rec.value ?? \"\")}\n onChange={(v) => onChange(buildCustomCondition({ ...rec, value: v, type: \"startAt\" }))}\n />\n </ConditionRow>\n );\n}\n","import { useMemo } from \"react\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\n\nconst OP_OPTIONS = [{ value: \"lt\", label: \"lt\" }];\n\nexport const meta = {\n type: \"endAt\",\n label: \"End At\",\n description: \"Active before a specific date/time\",\n defaults: { type: \"endAt\", value: new Date().toISOString() },\n};\n\nexport function EndAtConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n\n return (\n <ConditionRow>\n <KeyInput value=\"at\" disabled />\n <OperatorSelect value=\"lt\" options={OP_OPTIONS} disabled />\n <DateTimeInput\n value={String(rec.value ?? \"\")}\n onChange={(v) => onChange(buildCustomCondition({ ...rec, value: v, type: \"endAt\" }))}\n />\n </ConditionRow>\n );\n}\n","import { meta as stringMeta } from \"./StringConditionEditor.js\";\nimport { meta as numberMeta } from \"./NumberConditionEditor.js\";\nimport { meta as datetimeMeta } from \"./DatetimeConditionEditor.js\";\nimport { meta as boolMeta } from \"./BoolConditionEditor.js\";\nimport { meta as envMeta } from \"./EnvConditionEditor.js\";\nimport { meta as startAtMeta } from \"./StartAtConditionEditor.js\";\nimport { meta as endAtMeta } from \"./EndAtConditionEditor.js\";\n\nexport interface ConditionTypeMeta {\n type: string;\n label: string;\n description: string;\n defaults: Record<string, unknown>;\n}\n\nexport const BUILTIN_CONDITION_TYPES: ConditionTypeMeta[] = [\n stringMeta,\n numberMeta,\n datetimeMeta,\n boolMeta,\n envMeta,\n startAtMeta,\n endAtMeta,\n];\n\nexport const CONDITION_TYPE_MAP = new Map(BUILTIN_CONDITION_TYPES.map((m) => [m.type, m]));\n\nexport function getConditionMeta(type: string): ConditionTypeMeta | undefined {\n return CONDITION_TYPE_MAP.get(type);\n}\n","import type React from \"react\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nconst buttonBase =\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:cursor-pointer\";\n\nconst buttonVariantStyles = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n} as const;\n\nconst buttonSizeStyles = {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n} as const;\n\ntype ButtonVariant = keyof typeof buttonVariantStyles;\ntype ButtonSize = keyof typeof buttonSizeStyles;\n\nfunction buttonVariants(opts?: { variant?: ButtonVariant; size?: ButtonSize; className?: string }) {\n return cn(\n buttonBase,\n buttonVariantStyles[opts?.variant ?? \"default\"],\n buttonSizeStyles[opts?.size ?? \"default\"],\n opts?.className,\n );\n}\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ref,\n ...props\n}: React.ComponentProps<\"button\"> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport type React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import type React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","import type React from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as DialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\nimport { Button } from \"@/components/ui/button\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","\"use client\";\n\nimport type React from \"react\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import type React from \"react\";\nimport { Label as LabelPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","\"use client\";\n\nimport type React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import type React from \"react\";\nimport { Popover as PopoverPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <div data-slot=\"popover-title\" className={cn(\"font-medium\", className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n};\n","import type React from \"react\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\n\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"inline-flex items-center justify-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[orientation=vertical]:justify-start data-[orientation=vertical]:gap-0 data-[orientation=vertical]:rounded-none data-[orientation=vertical]:bg-transparent data-[orientation=vertical]:p-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"inline-flex items-center justify-center gap-2 rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm data-[orientation=vertical]:justify-start data-[orientation=vertical]:rounded-none data-[orientation=vertical]:border-l-2 data-[orientation=vertical]:border-l-transparent data-[orientation=vertical]:px-3 data-[orientation=vertical]:py-2.5 data-[orientation=vertical]:text-sm data-[orientation=vertical]:font-normal data-[orientation=vertical]:text-muted-foreground data-[orientation=vertical]:shadow-none data-[orientation=vertical]:hover:bg-muted data-[orientation=vertical]:data-[state=active]:border-l-primary data-[orientation=vertical]:data-[state=active]:bg-accent data-[orientation=vertical]:data-[state=active]:font-medium data-[orientation=vertical]:data-[state=active]:text-accent-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useRef, useState } from \"react\";\nimport { Input } from \"../ui/input.js\";\nimport { Textarea } from \"../ui/textarea.js\";\nimport { Button } from \"../ui/button.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport type { ValueInputProps } from \"../../types.js\";\n\ntype ValueType = \"string\" | \"number\" | \"boolean\" | \"json\";\n\nfunction detectType(value: unknown): ValueType {\n if (typeof value === \"boolean\") return \"boolean\";\n if (typeof value === \"number\") return \"number\";\n if (typeof value === \"object\" && value !== null) return \"json\";\n return \"string\";\n}\n\nexport function ValueInput({ value, onChange, placeholder }: ValueInputProps) {\n const [type, setType] = useState<ValueType>(() => detectType(value));\n const [jsonText, setJsonText] = useState(() =>\n type === \"json\" ? JSON.stringify(value, null, 2) : \"\",\n );\n const [jsonError, setJsonError] = useState<string | null>(null);\n\n // Sync type and jsonText only when the value prop changes type from outside\n // (e.g. parent switches which variation is selected)\n const prevValueRef = useRef(value);\n if (prevValueRef.current !== value) {\n prevValueRef.current = value;\n const newType = detectType(value);\n if (newType !== type) {\n setType(newType);\n }\n if (newType === \"json\") {\n try {\n setJsonText(JSON.stringify(value, null, 2));\n setJsonError(null);\n } catch {\n /* keep current jsonText */\n }\n }\n }\n\n function handleTypeChange(newType: string) {\n const t = newType as ValueType;\n setType(t);\n setJsonError(null);\n switch (t) {\n case \"string\":\n onChange(String(value ?? \"\"));\n break;\n case \"number\":\n onChange(Number(value) || 0);\n break;\n case \"boolean\":\n onChange(Boolean(value));\n break;\n case \"json\":\n try {\n const text = JSON.stringify(value, null, 2);\n setJsonText(text);\n onChange(value);\n /* v8 ignore start */\n } catch {\n setJsonText(\"{}\");\n onChange({});\n }\n /* v8 ignore stop */\n break;\n }\n }\n\n function handleJsonBlur() {\n try {\n const parsed = JSON.parse(jsonText);\n setJsonError(null);\n onChange(parsed);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }\n\n function handlePrettify() {\n try {\n const parsed = JSON.parse(jsonText);\n setJsonText(JSON.stringify(parsed, null, 2));\n setJsonError(null);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }\n\n return (\n <div className=\"flex items-start gap-2\">\n <Select value={type} onValueChange={handleTypeChange}>\n <SelectTrigger className=\"h-9 w-[110px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">String</SelectItem>\n <SelectItem value=\"number\">Number</SelectItem>\n <SelectItem value=\"boolean\">Boolean</SelectItem>\n <SelectItem value=\"json\">JSON</SelectItem>\n </SelectContent>\n </Select>\n <div className=\"flex-1\">\n {type === \"string\" && (\n <Input\n className=\"h-9 font-mono text-sm\"\n value={String(value ?? \"\")}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n />\n )}\n {type === \"number\" && (\n <Input\n className=\"h-9 font-mono text-sm\"\n type=\"number\"\n value={String(value ?? 0)}\n onChange={(e) => onChange(Number(e.target.value))}\n />\n )}\n {type === \"boolean\" && (\n <Select value={String(Boolean(value))} onValueChange={(v) => onChange(v === \"true\")}>\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n )}\n {type === \"json\" && (\n <>\n <Textarea\n className=\"font-mono text-sm\"\n rows={4}\n value={jsonText}\n onChange={(e) => setJsonText(e.target.value)}\n onBlur={handleJsonBlur}\n />\n <div className=\"mt-1 flex items-center gap-2\">\n {jsonError && <p className=\"text-xs text-destructive\">{jsonError}</p>}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-6 px-2 text-xs\"\n onClick={handlePrettify}\n >\n Prettify\n </Button>\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n","import type { ValidationMessageProps } from \"../../types.js\";\n\nexport function ValidationMessage({ errors }: ValidationMessageProps) {\n if (!errors || errors.length === 0) return null;\n return (\n <div className=\"space-y-1\">\n {errors.map((err, i) => (\n <p key={i} className=\"text-xs text-destructive\">\n {err.path.length > 0 && (\n <span className=\"font-mono text-destructive/70\">{err.path.join(\".\")} </span>\n )}\n {err.message}\n </p>\n ))}\n </div>\n );\n}\n","import { Moon, Sun, Monitor } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport type { ThemeToggleProps } from \"../../types.js\";\n\nconst icons = {\n light: Sun,\n dark: Moon,\n system: Monitor,\n} as const;\n\nconst next: Record<string, \"light\" | \"dark\" | \"system\"> = {\n light: \"dark\",\n dark: \"system\",\n system: \"light\",\n};\n\nexport function ThemeToggle({ theme, onToggle }: ThemeToggleProps) {\n const Icon = icons[theme];\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onToggle(next[theme])}\n aria-label={`Switch to ${next[theme]} theme`}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n );\n}\n","import { Component, type ErrorInfo, type ReactNode } from \"react\";\n\ntype ErrorBoundaryProps = {\n children: ReactNode;\n /** Optional fallback to render instead of the default error UI. */\n fallback?: ReactNode;\n /** Called when an error is caught. Defaults to console.error. */\n onError?: (error: Error, info: ErrorInfo) => void;\n};\n\ntype ErrorBoundaryState = {\n error: Error | null;\n};\n\nfunction defaultOnError(error: Error, info: ErrorInfo) {\n console.error(\"ErrorBoundary caught an error:\", error, info);\n}\n\n/**\n * A class component error boundary that catches render errors in its subtree\n * and displays a fallback UI with the error message and a \"Try again\" button.\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n const onError = this.props.onError ?? defaultOnError;\n onError(error, info);\n }\n\n handleRetry = () => {\n this.setState({ error: null });\n };\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n return (\n <div\n role=\"alert\"\n className=\"flex flex-col items-center justify-center gap-3 p-6 text-center\"\n >\n <p className=\"text-sm font-medium text-destructive\">Something went wrong</p>\n <p className=\"text-xs text-muted-foreground\">{this.state.error.message}</p>\n <button\n type=\"button\"\n className=\"rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium hover:bg-accent\"\n onClick={this.handleRetry}\n >\n Try again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import type React from \"react\";\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/utils/cn\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} {...props} />;\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import type React from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../ui/alert-dialog.js\";\n\ntype ConfirmDialogProps = {\n title: string;\n description: React.ReactNode;\n actionLabel: string;\n onConfirm: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n};\n\nexport function ConfirmDialog({\n title,\n description,\n actionLabel,\n onConfirm,\n open,\n onOpenChange,\n children,\n}: ConfirmDialogProps) {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogTrigger asChild>{children}</AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={onConfirm}\n >\n {actionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { Fragment } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { Badge } from \"../ui/badge.js\";\nimport { ConditionBlock } from \"./ConditionBlock.js\";\nimport { AddConditionMenu } from \"./AddConditionMenu.js\";\nimport type { ConditionBuilderProps } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { useConditionArray } from \"./useConditionArray.js\";\nimport { ErrorBoundary } from \"../common/ErrorBoundary.js\";\n\nexport function ConditionBuilder({\n conditions: rawConditions,\n onChange,\n validationErrors,\n}: ConditionBuilderProps) {\n const {\n conditions,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n } = useConditionArray(rawConditions, onChange);\n\n return (\n <ErrorBoundary>\n <div className=\"space-y-1.5\">\n {conditions.length > 0 && (\n <div className=\"border-l-3 pl-3 py-2 bg-muted/20 rounded-r-md border-primary/30\">\n <div className=\"mb-2 flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">\n {conditions.length} condition{conditions.length !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n <div className=\"space-y-1.5\">\n {conditions.map((c, i) => (\n <Fragment key={(c as Record<string, unknown>).id as string}>\n {i > 0 && (\n <div className=\"flex\">\n <Badge\n variant=\"outline\"\n className=\"select-none font-mono text-xs bg-primary/10 text-primary border-primary/20\"\n >\n AND\n </Badge>\n </div>\n )}\n <ConditionBlock\n condition={c}\n onChange={(updated: Condition) => handleConditionChange(i, updated)}\n onRemove={() => handleConditionRemove(i)}\n onMoveUp={i > 0 ? () => handleMoveUp(i) : undefined}\n onMoveDown={i < conditions.length - 1 ? () => handleMoveDown(i) : undefined}\n depth={1}\n errors={filterErrorsByPath(validationErrors, \"conditions\", i)}\n />\n </Fragment>\n ))}\n </div>\n </div>\n )}\n <AddConditionMenu onAdd={handleAddCondition} />\n </div>\n </ErrorBoundary>\n );\n}\n","import { memo } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { isAndCondition, isOrCondition } from \"showwhat\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { ConditionValueEditor } from \"./ConditionValueEditor.js\";\nimport { ConditionGroup } from \"./ConditionGroup.js\";\nimport { MoveButtons } from \"./MoveButtons.js\";\nimport { getConditionMeta } from \"./condition-registry.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport { buildAndCondition, buildOrCondition } from \"./utils.js\";\nimport type { ConditionBlockProps } from \"../../types.js\";\n\n/** Zod emits \"Invalid input\" for discriminated union failures — we rephrase for clarity. */\nconst GENERIC_ZOD_ERROR = \"Invalid input\";\n\nexport const ConditionBlock = memo(function ConditionBlock({\n condition,\n onChange,\n onRemove,\n onMoveUp,\n onMoveDown,\n depth = 0,\n errors,\n}: ConditionBlockProps) {\n function handleChange(updated: Condition) {\n onChange(updated);\n }\n // Render AND/OR groups recursively\n if (isAndCondition(condition) || isOrCondition(condition)) {\n return (\n <ConditionGroup\n type={condition.type as \"and\" | \"or\"}\n conditions={condition.conditions}\n onChange={(conditions) =>\n handleChange(\n condition.type === \"and\"\n ? buildAndCondition(conditions, condition.id)\n : buildOrCondition(conditions, condition.id),\n )\n }\n onRemove={onRemove}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n depth={depth}\n errors={errors}\n />\n );\n }\n\n const extensions = useConditionExtensions();\n const meta =\n getConditionMeta(condition.type) ??\n extensions?.extraConditionTypes.find((m) => m.type === condition.type);\n const label = meta?.label ?? (condition.type || \"Custom\");\n\n return (\n <div className=\"border border-border bg-card p-2 space-y-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex h-8 shrink-0 items-center text-sm font-medium text-muted-foreground\">\n {label}\n </span>\n <div className=\"flex-1\" />\n <div className=\"flex shrink-0 gap-0.5\">\n <MoveButtons onMoveUp={onMoveUp} onMoveDown={onMoveDown} />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n onClick={onRemove}\n aria-label=\"Remove condition\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n <ConditionValueEditor condition={condition} onChange={handleChange} />\n {(errors?.length ?? 0) > 0 && (\n <div className=\"space-y-0.5\">\n {errors!.map((err, i) => {\n const field = err.path.length > 0 ? err.path.join(\".\") : null;\n const msg =\n err.message === GENERIC_ZOD_ERROR\n ? \"Invalid condition — check required fields\"\n : err.message;\n return (\n <p key={i} className=\"text-xs text-destructive\">\n {field && <span className=\"font-mono text-destructive/70\">{field}: </span>}\n {msg}\n </p>\n );\n })}\n </div>\n )}\n </div>\n );\n});\n","import { useCallback, useRef, useState } from \"react\";\nimport { Input } from \"../ui/input.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Textarea } from \"../ui/textarea.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nfunction extractArgs(condition: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(condition).filter(([k]) => k !== \"type\" && k !== \"id\"));\n}\n\nfunction argsToText(args: Record<string, unknown>): string {\n if (Object.keys(args).length === 0) return \"\";\n return JSON.stringify(args, null, 2);\n}\n\nexport function CustomConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = condition as Record<string, unknown>;\n\n const [text, setText] = useState(() => argsToText(extractArgs(rec)));\n const [jsonError, setJsonError] = useState<string | null>(null);\n const focusedRef = useRef(false);\n\n const prevConditionRef = useRef(condition);\n if (prevConditionRef.current !== condition) {\n prevConditionRef.current = condition;\n if (!focusedRef.current) {\n const derived = argsToText(extractArgs(rec));\n if (derived !== text) {\n setText(derived);\n setJsonError(null);\n }\n }\n }\n\n const handleArgsBlur = useCallback(() => {\n focusedRef.current = false;\n const trimmed = text.trim();\n\n if (trimmed === \"\") {\n setJsonError(null);\n onChange({ type: rec.type, ...(rec.id ? { id: rec.id } : {}) } as typeof condition);\n return;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n setJsonError(\"Args must be a JSON object\");\n return;\n }\n setJsonError(null);\n onChange({\n type: rec.type,\n ...(rec.id ? { id: rec.id } : {}),\n ...parsed,\n } as typeof condition);\n } catch {\n setJsonError(\"Invalid JSON\");\n }\n }, [text, rec.type, rec.id, onChange]);\n\n const handleTypeChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({ ...rec, type: e.target.value } as typeof condition);\n },\n [rec, onChange],\n );\n\n return (\n <div className=\"flex-1 space-y-2\">\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Type</Label>\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.type ?? \"\")}\n placeholder=\"e.g. geoLocation, percentage\"\n onChange={handleTypeChange}\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Args</Label>\n <Textarea\n className=\"font-mono text-sm\"\n rows={3}\n value={text}\n placeholder='e.g. {\"region\": \"us-east\", \"threshold\": 50} (optional)'\n onChange={(e) => {\n setText(e.target.value);\n setJsonError(null);\n }}\n onFocus={() => {\n focusedRef.current = true;\n }}\n onBlur={handleArgsBlur}\n />\n {jsonError && <p className=\"mt-1 text-xs text-destructive\">{jsonError}</p>}\n </div>\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { ComponentType } from \"react\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nexport interface ConditionExtensions {\n extraConditionTypes: ConditionTypeMeta[];\n editorOverrides: Map<string, ComponentType<ConditionValueEditorProps>>;\n}\n\nconst ConditionExtensionsContext = createContext<ConditionExtensions | null>(null);\n\nexport const ConditionExtensionsProvider = ConditionExtensionsContext.Provider;\n\nexport function useConditionExtensions(): ConditionExtensions | null {\n return useContext(ConditionExtensionsContext);\n}\n","import { StringConditionEditor } from \"./StringConditionEditor.js\";\nimport { NumberConditionEditor } from \"./NumberConditionEditor.js\";\nimport { DatetimeConditionEditor } from \"./DatetimeConditionEditor.js\";\nimport { BoolConditionEditor } from \"./BoolConditionEditor.js\";\nimport { EnvConditionEditor } from \"./EnvConditionEditor.js\";\nimport { StartAtConditionEditor } from \"./StartAtConditionEditor.js\";\nimport { EndAtConditionEditor } from \"./EndAtConditionEditor.js\";\nimport { CustomConditionEditor } from \"./CustomConditionEditor.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\n\nexport function ConditionValueEditor({ condition, onChange }: ConditionValueEditorProps) {\n const extensions = useConditionExtensions();\n\n switch (condition.type) {\n case \"string\":\n return <StringConditionEditor condition={condition} onChange={onChange} />;\n case \"number\":\n return <NumberConditionEditor condition={condition} onChange={onChange} />;\n case \"datetime\":\n return <DatetimeConditionEditor condition={condition} onChange={onChange} />;\n case \"bool\":\n return <BoolConditionEditor condition={condition} onChange={onChange} />;\n case \"env\":\n return <EnvConditionEditor condition={condition} onChange={onChange} />;\n case \"startAt\":\n return <StartAtConditionEditor condition={condition} onChange={onChange} />;\n case \"endAt\":\n return <EndAtConditionEditor condition={condition} onChange={onChange} />;\n default: {\n const OverrideEditor = extensions?.editorOverrides.get(condition.type);\n if (OverrideEditor) {\n return <OverrideEditor condition={condition} onChange={onChange} />;\n }\n return <CustomConditionEditor condition={condition} onChange={onChange} />;\n }\n }\n}\n","import type { Condition } from \"showwhat\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Badge } from \"../ui/badge.js\";\nimport { ConditionBlock } from \"./ConditionBlock.js\";\nimport { AddConditionMenu } from \"./AddConditionMenu.js\";\nimport { MoveButtons } from \"./MoveButtons.js\";\nimport type { ConditionGroupProps } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useConditionArray } from \"./useConditionArray.js\";\n\nimport { Fragment, memo } from \"react\";\n\nexport const ConditionGroup = memo(function ConditionGroup({\n type,\n conditions: rawConditions,\n onChange,\n onRemove,\n onMoveUp,\n onMoveDown,\n depth = 0,\n errors,\n}: ConditionGroupProps) {\n const {\n conditions,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n } = useConditionArray(rawConditions, onChange);\n\n return (\n <div\n className={cn(\n \"border-l-3 pl-3 pr-2 py-2 rounded-r-md\",\n type === \"and\" ? \"border-primary/30\" : \"border-amber-500/30\",\n )}\n style={{\n backgroundColor: `oklch(from var(--color-muted) l c h / ${Math.min(0.2 + depth * 0.1, 0.5)})`,\n }}\n >\n <div className=\"mb-2 flex items-center gap-2\">\n <Badge\n variant=\"outline\"\n className=\"select-none font-mono text-xs bg-muted/50 text-muted-foreground border-border\"\n >\n L{depth} | {type.toUpperCase()}\n </Badge>\n <span className=\"text-sm text-muted-foreground\">\n {conditions.length} condition{conditions.length !== 1 ? \"s\" : \"\"}\n </span>\n <div className=\"flex-1\" />\n <div className=\"flex shrink-0 gap-0.5\">\n <MoveButtons onMoveUp={onMoveUp} onMoveDown={onMoveDown} size=\"h-6 w-6\" />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label=\"Remove condition group\"\n onClick={onRemove}\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n <div className=\"space-y-1.5\">\n {conditions.map((c, i) => (\n <Fragment key={(c as Record<string, unknown>).id as string}>\n {i > 0 && (\n <div className=\"flex\">\n <Badge\n variant=\"outline\"\n className={cn(\n \"select-none font-mono text-xs\",\n type === \"and\"\n ? \"bg-primary/10 text-primary border-primary/20\"\n : \"bg-amber-500/10 text-amber-600 border-amber-500/20 dark:text-amber-400\",\n )}\n >\n {type.toUpperCase()}\n </Badge>\n </div>\n )}\n <ConditionBlock\n condition={c}\n onChange={(updated: Condition) => handleConditionChange(i, updated)}\n onRemove={() => handleConditionRemove(i)}\n onMoveUp={i > 0 ? () => handleMoveUp(i) : undefined}\n onMoveDown={i < conditions.length - 1 ? () => handleMoveDown(i) : undefined}\n depth={depth + 1}\n errors={filterErrorsByPath(errors, \"conditions\", i)}\n />\n </Fragment>\n ))}\n </div>\n <div className=\"mt-2\">\n <AddConditionMenu onAdd={handleAddCondition} />\n </div>\n </div>\n );\n});\n","import { Plus } from \"lucide-react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu.js\";\nimport { BUILTIN_CONDITION_TYPES } from \"./condition-registry.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\nexport { buildDefaultCondition as getDefaultCondition } from \"./utils.js\";\n\nexport function AddConditionMenu({ onAdd }: { onAdd: (type: string) => void }) {\n const extensions = useConditionExtensions();\n const extraTypes = extensions?.extraConditionTypes ?? [];\n\n const primitives = BUILTIN_CONDITION_TYPES.filter((m) =>\n [\"string\", \"number\", \"datetime\", \"bool\"].includes(m.type),\n );\n const sugar = BUILTIN_CONDITION_TYPES.filter((m) => [\"env\", \"startAt\", \"endAt\"].includes(m.type));\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"inline-flex shrink-0 items-center justify-center gap-1.5 rounded px-3 h-8 text-sm font-medium hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\">\n <Plus className=\"mr-1 h-3.5 w-3.5\" />\n Add condition\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {primitives.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n <DropdownMenuSeparator />\n {sugar.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n {extraTypes.length > 0 && (\n <>\n <DropdownMenuSeparator />\n {extraTypes.map((meta) => (\n <DropdownMenuItem key={meta.type} onSelect={() => onAdd(meta.type)}>\n {meta.label}\n </DropdownMenuItem>\n ))}\n </>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onAdd(\"and\")}>AND Group</DropdownMenuItem>\n <DropdownMenuItem onSelect={() => onAdd(\"or\")}>OR Group</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onAdd(\"__custom\")}>Custom</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import type { Condition } from \"showwhat\";\nimport { buildAndCondition, buildOrCondition, buildCustomCondition } from \"./condition-builders.js\";\nimport { BUILTIN_CONDITION_TYPES } from \"./condition-registry.js\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\n\nexport { buildAndCondition, buildOrCondition, buildCustomCondition };\n\n/**\n * Build a default condition for a given type string.\n * Returns the correct narrowed type for composite conditions,\n * and uses schema-derived defaults for built-in leaf conditions.\n */\nexport function buildDefaultCondition(\n type: string,\n id?: string,\n extraTypes?: ConditionTypeMeta[],\n): Condition {\n if (type === \"and\") {\n return buildAndCondition([], id);\n }\n if (type === \"or\") {\n return buildOrCondition([], id);\n }\n if (type === \"__custom\") {\n return buildCustomCondition({ type: \"\", ...(id ? { id } : {}) });\n }\n const meta =\n BUILTIN_CONDITION_TYPES.find((m) => m.type === type) ??\n extraTypes?.find((m) => m.type === type);\n if (meta) {\n return buildCustomCondition({\n ...meta.defaults,\n type: meta.type,\n ...(id ? { id } : {}),\n });\n }\n return buildCustomCondition({ type: \"\", ...(id ? { id } : {}) });\n}\n","import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\n\ntype MoveButtonsProps = {\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n size?: string;\n};\n\nexport function MoveButtons({ onMoveUp, onMoveDown, size = \"h-8 w-8\" }: MoveButtonsProps) {\n if (!onMoveUp && !onMoveDown) return null;\n\n return (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`${size} text-muted-foreground hover:text-foreground`}\n disabled={!onMoveUp}\n onClick={onMoveUp}\n aria-label=\"Move up\"\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`${size} text-muted-foreground hover:text-foreground`}\n disabled={!onMoveDown}\n onClick={onMoveDown}\n aria-label=\"Move down\"\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n </>\n );\n}\n","import type { ValidationIssueDisplay } from \"../types.js\";\n\n/**\n * Filter validation errors for a specific child at `path[0] === pathKey && path[1] === index`,\n * then strip those two leading segments so the child sees only its own errors.\n */\nexport function filterErrorsByPath(\n errors: ValidationIssueDisplay[] | undefined,\n pathKey: string,\n index: number,\n): ValidationIssueDisplay[] | undefined {\n if (!errors) return undefined;\n const filtered = errors.filter((err) => err.path[0] === pathKey && err.path[1] === index);\n if (filtered.length === 0) return undefined;\n return filtered.map((err) => ({ ...err, path: err.path.slice(2) }));\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { AUTO_ID_PREFIX, ensureIds } from \"../../utils/id.js\";\nimport { getDefaultCondition } from \"./AddConditionMenu.js\";\nimport { useConditionExtensions } from \"./ConditionExtensionsContext.js\";\n\nexport type ConditionArrayHandlers = {\n /** Conditions with IDs guaranteed to be present. */\n conditions: Condition[];\n handleConditionChange: (index: number, updated: Condition) => void;\n handleConditionRemove: (index: number) => void;\n handleMoveUp: (index: number) => void;\n handleMoveDown: (index: number) => void;\n handleAddCondition: (type: string) => void;\n};\n\n/**\n * Shared hook that manages an array of conditions.\n * Extracts the common handler logic duplicated across\n * ConditionBuilder and ConditionGroup.\n *\n * Backfills `id` on conditions that arrive without one and\n * assigns `id: crypto.randomUUID()` to newly added conditions.\n */\nexport function useConditionArray(\n conditions: Condition[],\n onChange: (conditions: Condition[]) => void,\n): ConditionArrayHandlers {\n const extensions = useConditionExtensions();\n const extraTypes = extensions?.extraConditionTypes;\n\n // Backfill IDs on incoming conditions\n const withIds = useMemo(() => ensureIds(conditions), [conditions]);\n\n const handleConditionChange = useCallback(\n (index: number, updated: Condition) => {\n const next = [...withIds];\n next[index] = updated;\n onChange(next);\n },\n [withIds, onChange],\n );\n\n const handleConditionRemove = useCallback(\n (index: number) => {\n onChange(withIds.filter((_, i) => i !== index));\n },\n [withIds, onChange],\n );\n\n const handleAddCondition = useCallback(\n (type: string) => {\n const newCondition = getDefaultCondition(\n type,\n `${AUTO_ID_PREFIX}${crypto.randomUUID()}`,\n extraTypes,\n );\n onChange([...withIds, newCondition]);\n },\n [withIds, onChange, extraTypes],\n );\n\n const handleMoveUp = useCallback(\n (index: number) => {\n if (index <= 0) return;\n const next = [...withIds];\n [next[index - 1], next[index]] = [next[index], next[index - 1]];\n onChange(next);\n },\n [withIds, onChange],\n );\n\n const handleMoveDown = useCallback(\n (index: number) => {\n if (index >= withIds.length - 1) return;\n const next = [...withIds];\n [next[index], next[index + 1]] = [next[index + 1], next[index]];\n onChange(next);\n },\n [withIds, onChange],\n );\n\n return {\n conditions: withIds,\n handleConditionChange,\n handleConditionRemove,\n handleMoveUp,\n handleMoveDown,\n handleAddCondition,\n };\n}\n","import { memo, useState } from \"react\";\nimport type { Condition } from \"showwhat\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\nimport { ChevronRight, Eye, GripVertical, Trash2 } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Badge } from \"../ui/badge.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { ValueInput } from \"../common/ValueInput.js\";\nimport { ValidationMessage } from \"../common/ValidationMessage.js\";\nimport { ConditionBuilder } from \"../condition-builder/ConditionBuilder.js\";\nimport { formatConditionSummary } from \"../../utils/condition-summary.js\";\nimport type { VariationCardProps } from \"../../types.js\";\n\nexport const VariationCard = memo(function VariationCard({\n variation,\n index,\n validationErrors,\n onChange,\n onRemove,\n dragHandleProps,\n}: VariationCardProps) {\n const [open, setOpen] = useState(false);\n const conditionCount = variation.conditions?.length ?? 0;\n\n return (\n <CollapsiblePrimitive.Root open={open} onOpenChange={setOpen}>\n <div className=\"rounded-lg border border-border/50 bg-card transition-colors hover:border-primary/30\">\n <div className=\"flex items-center gap-2 px-3 py-2.5\">\n <button\n type=\"button\"\n className=\"cursor-grab touch-none text-muted-foreground/50 hover:text-muted-foreground\"\n aria-label=\"Drag to reorder\"\n {...dragHandleProps}\n >\n <GripVertical className=\"h-4 w-4\" />\n </button>\n <CollapsiblePrimitive.Trigger asChild>\n <button\n type=\"button\"\n className=\"flex flex-1 items-center gap-2 text-left hover:cursor-pointer\"\n >\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n {index}\n </Badge>\n <span className=\"flex-1 truncate text-sm text-muted-foreground\">\n {variation.description || String(variation.value ?? \"\")}\n </span>\n {conditionCount > 0 && (\n <span className=\"text-xs text-muted-foreground/60\">\n {conditionCount} {conditionCount === 1 ? \"condition\" : \"conditions\"}\n </span>\n )}\n <ChevronRight\n className={`h-4 w-4 text-muted-foreground/60 transition-transform ${open ? \"rotate-90\" : \"\"}`}\n />\n </button>\n </CollapsiblePrimitive.Trigger>\n </div>\n <CollapsiblePrimitive.Content>\n <div className=\"space-y-4 border-t border-border/40 px-4 py-4\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Value\n </Label>\n <ConfirmDialog\n title=\"Remove variation?\"\n description={`This will delete variation ${index} and all its conditions. This action cannot be undone.`}\n actionLabel=\"Remove\"\n onConfirm={onRemove}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"shrink-0 text-destructive/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label=\"Remove variation\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </ConfirmDialog>\n </div>\n <div>\n <ValueInput\n value={variation.value}\n onChange={(value) => onChange({ ...variation, value })}\n />\n </div>\n <input\n className=\"w-full border-none bg-transparent text-sm text-muted-foreground placeholder:text-muted-foreground/50 focus:text-foreground focus:outline-none\"\n value={variation.description ?? \"\"}\n placeholder=\"Add a description (optional)...\"\n onChange={(e) =>\n onChange({\n ...variation,\n description: e.target.value || undefined,\n })\n }\n />\n <div className=\"border-t border-border/40 pt-4\">\n <div className=\"rounded-lg border border-border/40 bg-muted/30 p-3\">\n <div className=\"mb-1.5 flex items-center gap-1.5\">\n <Label className=\"text-sm font-medium\">Conditions</Label>\n {conditionCount > 0 && (\n <Dialog>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex items-center justify-center rounded p-0.5 text-muted-foreground/60 hover:text-muted-foreground\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Condition Summary</DialogTitle>\n <DialogDescription>Evaluation logic for this variation</DialogDescription>\n </DialogHeader>\n <pre className=\"rounded-md bg-muted p-4 font-mono text-xs whitespace-pre overflow-auto max-h-80\">\n {/* v8 ignore next */}\n {formatConditionSummary(variation.conditions ?? [])}\n </pre>\n </DialogContent>\n </Dialog>\n )}\n </div>\n <ConditionBuilder\n conditions={variation.conditions ?? []}\n onChange={(conditions: Condition[]) =>\n onChange({\n ...variation,\n conditions: conditions.length > 0 ? conditions : undefined,\n })\n }\n validationErrors={validationErrors}\n />\n </div>\n </div>\n <ValidationMessage\n errors={validationErrors?.filter((err) => err.path[0] !== \"conditions\")}\n />\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n});\n","import type { Condition } from \"showwhat\";\nimport { isAndCondition, isOrCondition } from \"showwhat\";\nimport { getConditionMeta } from \"../components/condition-builder/condition-registry.js\";\n\nfunction formatLeafOperator(c: Condition): { op: string; val: string } {\n const opField = \"op\" in c ? String(c.op) : \"\";\n const raw = \"value\" in c ? c.value : \"\";\n\n // Operator symbol mapping\n const opSymbols: Record<string, string> = {\n eq: \"=\",\n neq: \"!=\",\n in: \"in\",\n nin: \"not in\",\n regex: \"~\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n };\n const opSymbol = opSymbols[opField] ?? \"=\";\n\n if (c.type === \"string\" || c.type === \"env\") {\n const vals = Array.isArray(raw) ? raw.map(String) : [String(raw)];\n if (opField === \"regex\") {\n return { op: \"~\", val: vals.map((v) => `/${v}/`).join(\", \") };\n }\n return { op: opSymbol, val: vals.map((v) => `\"${v}\"`).join(\", \") };\n }\n\n if (c.type === \"number\") {\n if (Array.isArray(raw)) {\n return { op: opSymbol, val: raw.map(String).join(\", \") };\n }\n return { op: opSymbol, val: String(raw) };\n }\n\n if (c.type === \"bool\") {\n return { op: \"=\", val: String(raw) };\n }\n\n if (c.type === \"datetime\") {\n return { op: opSymbol, val: `\"${String(raw)}\"` };\n }\n\n if (c.type === \"startAt\") return { op: \">=\", val: `\"${String(raw)}\"` };\n if (c.type === \"endAt\") return { op: \"<\", val: `\"${String(raw)}\"` };\n\n // Fallback for custom types\n const value = raw ? String(raw) : \"\";\n return { op: \"=\", val: value ? `\"${value}\"` : \"\" };\n}\n\nfunction formatOne(c: Condition, indent: number): string[] {\n const prefix = \" \".repeat(indent);\n if (isAndCondition(c)) {\n if (c.conditions.length === 0) return [`${prefix}(empty AND group)`];\n const lines: string[] = [];\n c.conditions.forEach((sub, i) => {\n const subLines = formatOne(sub, indent + 1);\n if (i > 0) lines.push(`${prefix} AND`);\n lines.push(...subLines);\n });\n return [`${prefix}(`, ...lines, `${prefix})`];\n }\n if (isOrCondition(c)) {\n if (c.conditions.length === 0) return [`${prefix}(empty OR group)`];\n const lines: string[] = [];\n c.conditions.forEach((sub, i) => {\n const subLines = formatOne(sub, indent + 1);\n if (i > 0) lines.push(`${prefix} OR`);\n lines.push(...subLines);\n });\n return [`${prefix}(`, ...lines, `${prefix})`];\n }\n const meta = getConditionMeta(c.type);\n const label = meta?.label ?? c.type;\n const { op, val } = formatLeafOperator(c);\n const key = \"key\" in c ? String(c.key) : \"\";\n if (key && val) return [`${prefix}${key} ${op} ${val}`];\n if (val) return [`${prefix}${label} ${op} ${val}`];\n return [`${prefix}${label}`];\n}\n\nexport function formatConditionSummary(conditions: Condition[]): string | null {\n if (conditions.length === 0) return null;\n const lines: string[] = [];\n conditions.forEach((c, i) => {\n if (i > 0) lines.push(\" AND\");\n lines.push(...formatOne(c, 1));\n });\n return `When ${lines.join(\"\\n\").trimStart()}`;\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { Variation } from \"showwhat\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n arrayMove,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { VariationCard } from \"./VariationCard.js\";\nimport type { VariationListProps, ValidationIssueDisplay } from \"../../types.js\";\nimport { filterErrorsByPath } from \"../../utils/validation-errors.js\";\nimport { ensureIds } from \"../../utils/id.js\";\n\nfunction SortableVariation({\n id,\n variation,\n index,\n validationErrors,\n onChange,\n onRemove,\n}: {\n id: string;\n variation: Variation;\n index: number;\n validationErrors?: ValidationIssueDisplay[];\n onChange: (v: Variation) => void;\n onRemove: () => void;\n}) {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{\n ...style,\n animationDelay: `${index * 50}ms`,\n }}\n className=\"animate-fade-up\"\n >\n <VariationCard\n variation={variation}\n index={index}\n validationErrors={validationErrors}\n onChange={onChange}\n onRemove={onRemove}\n dragHandleProps={{ ref: setActivatorNodeRef, ...listeners, ...attributes }}\n />\n </div>\n );\n}\n\nexport function VariationList({\n variations: rawVariations,\n validationErrors,\n onChange,\n}: VariationListProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n // Backfill IDs on variations that don't have them\n const variations = useMemo(() => ensureIds(rawVariations), [rawVariations]);\n\n // Use variation.id as the stable key for dnd-kit\n const sortableIds = useMemo(() => variations.map((v) => v.id!), [variations]);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = sortableIds.indexOf(String(active.id));\n const newIndex = sortableIds.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n\n onChange(arrayMove(variations, oldIndex, newIndex));\n },\n [sortableIds, variations, onChange],\n );\n\n const handleVariationChange = useCallback(\n (index: number, updated: Variation) => {\n const next = [...variations];\n next[index] = updated;\n onChange(next);\n },\n [variations, onChange],\n );\n\n const handleRemove = useCallback(\n (index: number) => {\n onChange(variations.filter((_, i) => i !== index));\n },\n [variations, onChange],\n );\n\n return (\n <div className=\"space-y-3\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={sortableIds} strategy={verticalListSortingStrategy}>\n {variations.map((v, i) => (\n <SortableVariation\n key={v.id!}\n id={v.id!}\n variation={v}\n index={i}\n validationErrors={filterErrorsByPath(validationErrors, \"variations\", i)}\n onChange={(updated) => handleVariationChange(i, updated)}\n onRemove={() => handleRemove(i)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n );\n}\n","import { useRef, useState } from \"react\";\nimport type { Variation } from \"showwhat\";\nimport { AlertTriangle, Plus, Save, Undo2 } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { Input } from \"../ui/input.js\";\nimport { Label } from \"../ui/label.js\";\nimport { Switch } from \"../ui/switch.js\";\nimport { VariationList } from \"../variation-editor/VariationList.js\";\nimport type { DefinitionEditorProps } from \"../../types.js\";\n\nexport function DefinitionEditor({\n definitionKey,\n definition,\n validationErrors,\n isDirty,\n isPending,\n onUpdate,\n onRename,\n onSave,\n onDiscard,\n}: DefinitionEditorProps) {\n const [editingKey, setEditingKey] = useState(false);\n const [keyDraft, setKeyDraft] = useState(definitionKey);\n const prevKeyRef = useRef(definitionKey);\n if (prevKeyRef.current !== definitionKey) {\n prevKeyRef.current = definitionKey;\n setKeyDraft(definitionKey);\n }\n\n async function handleKeySubmit() {\n const trimmed = keyDraft.trim();\n if (trimmed && trimmed !== definitionKey) {\n try {\n await onRename(trimmed);\n setEditingKey(false);\n } catch {\n // Keep rename mode open so the user can retry\n }\n } else {\n setKeyDraft(definitionKey);\n setEditingKey(false);\n }\n }\n\n function handleAddVariation() {\n onUpdate({\n ...definition,\n variations: [...definition.variations, { id: crypto.randomUUID(), value: \"\" }],\n });\n }\n\n const errorCount = validationErrors?.length ?? 0;\n\n return (\n <div className=\"flex h-full flex-col overflow-hidden\">\n {/* Action bar */}\n <div className=\"flex shrink-0 items-center justify-end gap-2 border-b border-border bg-muted/30 px-4 py-2\">\n <Button\n variant={isDirty ? \"default\" : \"ghost\"}\n size=\"sm\"\n disabled={!isDirty || isPending}\n onClick={onSave}\n >\n <Save className=\"mr-1.5 h-4 w-4\" />\n Save\n </Button>\n {onDiscard ? (\n <ConfirmDialog\n title=\"Discard changes?\"\n description=\"This will revert all unsaved changes to this definition. This action cannot be undone.\"\n actionLabel=\"Discard\"\n onConfirm={onDiscard}\n >\n <Button variant=\"ghost\" size=\"sm\" disabled={!isDirty || isPending}>\n <Undo2 className=\"mr-1.5 h-4 w-4\" />\n Discard\n </Button>\n </ConfirmDialog>\n ) : (\n <Button variant=\"ghost\" size=\"sm\" disabled>\n <Undo2 className=\"mr-1.5 h-4 w-4\" />\n Discard\n </Button>\n )}\n </div>\n\n {/* Per-definition validation banner */}\n {errorCount > 0 && (\n <div className=\"shrink-0 border-b border-destructive/30 bg-destructive/10 px-4 py-2\">\n <p className=\"flex items-center gap-1.5 text-xs font-medium text-destructive\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n {errorCount} validation error{errorCount !== 1 ? \"s\" : \"\"} — fix the highlighted fields\n below\n </p>\n </div>\n )}\n\n <div className=\"shrink-0 border-b border-border/50 mx-auto w-full max-w-3xl px-8 pt-8 pb-4 space-y-3\">\n {/* Title area */}\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1\">\n {editingKey ? (\n <Input\n className=\"h-auto border-none bg-transparent px-0 font-mono text-2xl font-semibold shadow-none focus-visible:ring-0\"\n value={keyDraft}\n autoFocus\n onChange={(e) => setKeyDraft(e.target.value)}\n onBlur={handleKeySubmit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleKeySubmit();\n if (e.key === \"Escape\") {\n setKeyDraft(definitionKey);\n setEditingKey(false);\n }\n }}\n />\n ) : (\n <button\n type=\"button\"\n className=\"block w-full rounded px-0 py-0 text-left font-mono text-2xl font-semibold hover:text-foreground/70\"\n aria-label=\"Rename definition key\"\n onClick={() => {\n setKeyDraft(definitionKey);\n setEditingKey(true);\n }}\n >\n {definitionKey}\n </button>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2 pt-1.5\">\n <Label htmlFor=\"definition-active\" className=\"text-xs text-muted-foreground\">\n Active\n </Label>\n <Switch\n id=\"definition-active\"\n checked={definition.active !== false}\n onCheckedChange={(checked) =>\n onUpdate({\n ...definition,\n active: checked ? undefined : false,\n })\n }\n />\n </div>\n </div>\n <input\n className=\"w-full border-none bg-transparent text-sm text-muted-foreground placeholder:text-muted-foreground/50 focus:text-foreground focus:outline-none\"\n value={definition.description ?? \"\"}\n placeholder=\"Add a description (optional)...\"\n aria-label=\"Definition description\"\n onChange={(e) =>\n onUpdate({\n ...definition,\n description: e.target.value || undefined,\n })\n }\n />\n </div>\n </div>\n\n {/* Scrollable variations area */}\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <div className=\"mx-auto w-full max-w-3xl px-8 py-8 space-y-4\">\n {/* Variations */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Variations\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs text-muted-foreground\"\n onClick={handleAddVariation}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n\n <VariationList\n variations={definition.variations}\n validationErrors={validationErrors}\n onChange={(variations: Variation[]) => onUpdate({ ...definition, variations })}\n />\n\n {definition.variations.length > 2 && (\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-border/60 py-2.5 text-xs text-muted-foreground hover:border-border hover:text-foreground\"\n onClick={handleAddVariation}\n >\n <Plus className=\"h-3 w-3\" />\n Add variation\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Plus, Search, X } from \"lucide-react\";\nimport { Button } from \"../ui/button.js\";\nimport { Input } from \"../ui/input.js\";\nimport { ScrollArea } from \"../ui/scroll-area.js\";\nimport { DefinitionListItem } from \"./DefinitionListItem.js\";\nimport type { DefinitionListProps } from \"../../types.js\";\n\nexport function DefinitionList({\n definitions,\n selectedKey,\n validationErrors,\n dirtyKeys,\n onSelect,\n onAdd,\n onRemove,\n}: DefinitionListProps) {\n const [search, setSearch] = useState(\"\");\n const [adding, setAdding] = useState(false);\n const [newKey, setNewKey] = useState(\"\");\n\n const keys = Object.keys(definitions).filter((k) =>\n k.toLowerCase().includes(search.toLowerCase()),\n );\n\n async function handleAdd() {\n const trimmed = newKey.trim();\n if (trimmed && !(trimmed in definitions)) {\n try {\n await onAdd(trimmed);\n setNewKey(\"\");\n setAdding(false);\n } catch {\n // Keep the form open so the user can retry\n }\n }\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n {/* Search */}\n <div className=\"p-3\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"h-9 pl-8 text-sm\"\n placeholder=\"Search definitions...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n </div>\n\n {/* List */}\n <ScrollArea className=\"flex-1\">\n <div className=\"px-2\">\n {keys.map((key) => (\n <DefinitionListItem\n key={key}\n definitionKey={key}\n variationCount={definitions[key].variations.length}\n isActive={definitions[key].active !== false}\n hasErrors={\n !!(validationErrors?.[key] && (validationErrors[key] as unknown[]).length > 0)\n }\n isDirty={dirtyKeys?.includes(key)}\n isSelected={key === selectedKey}\n onSelect={() => onSelect(key)}\n onRemove={() => onRemove(key)}\n />\n ))}\n {keys.length === 0 && (\n <p className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n {search ? \"No definitions match\" : \"No definitions\"}\n </p>\n )}\n </div>\n </ScrollArea>\n\n {/* Add definition */}\n <div className=\"border-t border-border p-3\">\n {adding ? (\n <div className=\"space-y-2\">\n <Input\n className=\"h-9 w-full font-mono text-sm\"\n placeholder=\"definition-key\"\n value={newKey}\n autoFocus\n onChange={(e) => setNewKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") setAdding(false);\n }}\n />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" className=\"h-8 flex-1\" onClick={handleAdd}>\n Save\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8\"\n aria-label=\"Cancel adding definition\"\n onClick={() => {\n setAdding(false);\n setNewKey(\"\");\n }}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-9 w-full\"\n aria-label=\"Add new definition\"\n onClick={() => setAdding(true)}\n >\n <Plus className=\"mr-1.5 h-4 w-4\" />\n New definition\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import { memo, useState } from \"react\";\nimport { Trash2 } from \"lucide-react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Button } from \"../ui/button.js\";\nimport { ConfirmDialog } from \"../common/ConfirmDialog.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport type { DefinitionListItemProps } from \"../../types.js\";\n\nexport const DefinitionListItem = memo(function DefinitionListItem({\n definitionKey,\n variationCount,\n isActive,\n hasErrors,\n isSelected,\n isDirty,\n onSelect,\n onRemove,\n}: DefinitionListItemProps) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n return (\n <div\n tabIndex={0}\n className={cn(\n \"group flex w-full items-center gap-2 rounded border-l-2 px-3 py-2.5 text-left text-sm transition-colors cursor-pointer\",\n isSelected\n ? \"border-l-primary bg-accent text-accent-foreground\"\n : \"border-l-transparent hover:bg-muted\",\n )}\n onClick={onSelect}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect();\n }\n }}\n >\n <span\n role=\"status\"\n aria-label={`${definitionKey} is ${hasErrors ? \"error\" : isActive ? \"active\" : \"inactive\"}${isDirty ? \", unsaved changes\" : \"\"}`}\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full border-[1.5px]\",\n hasErrors\n ? isDirty\n ? \"border-status-error bg-transparent\"\n : \"border-status-error bg-status-error\"\n : isActive\n ? isDirty\n ? \"border-status-active bg-transparent\"\n : \"border-status-active bg-status-active\"\n : isDirty\n ? \"border-status-inactive bg-transparent\"\n : \"border-status-inactive bg-status-inactive\",\n )}\n />\n <span className=\"flex-1 truncate font-mono text-sm\">{definitionKey}</span>\n <Badge variant=\"secondary\" className=\"text-xs tabular-nums\">\n {variationCount}\n </Badge>\n <ConfirmDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n title=\"Delete definition?\"\n description={\n <>\n This will permanently delete <strong className=\"font-mono\">{definitionKey}</strong> and\n all its variations. This action cannot be undone.\n </>\n }\n actionLabel=\"Delete\"\n onConfirm={onRemove}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"text-destructive/60 opacity-0 hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100\"\n aria-label={`Remove ${definitionKey}`}\n onClick={(e) => {\n e.stopPropagation();\n setConfirmOpen(true);\n }}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </ConfirmDialog>\n </div>\n );\n});\n","import { useCallback, useMemo } from \"react\";\nimport type { ComponentType } from \"react\";\nimport type { Presets } from \"showwhat\";\nimport { PRIMITIVE_TYPES } from \"showwhat\";\nimport type { ConditionTypeMeta } from \"./condition-registry.js\";\nimport type { ConditionValueEditorProps } from \"../../types.js\";\nimport type { ConditionExtensions } from \"./ConditionExtensionsContext.js\";\nimport { ConditionRow } from \"./ConditionRow.js\";\nimport { KeyInput } from \"./KeyInput.js\";\nimport { OperatorSelect } from \"./OperatorSelect.js\";\nimport { TagInput } from \"./TagInput.js\";\nimport { NumberTagInput } from \"./NumberTagInput.js\";\nimport { Input } from \"../ui/input.js\";\nimport { DateTimeInput } from \"../common/DateTimeInput.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\";\nimport { buildCustomCondition } from \"./condition-builders.js\";\nimport { OP_OPTIONS as STRING_OPS } from \"./StringConditionEditor.js\";\nimport { OP_OPTIONS as NUMBER_OPS } from \"./NumberConditionEditor.js\";\nimport { OP_OPTIONS as DATETIME_OPS } from \"./DatetimeConditionEditor.js\";\nimport { OP_OPTIONS as BOOL_OPS } from \"./BoolConditionEditor.js\";\n\n// ── Default values per built-in type ─────────────────────────────────────────\n\nconst TYPE_DEFAULTS: Record<string, Record<string, unknown>> = {\n string: { op: \"eq\", value: \"\" },\n number: { op: \"eq\", value: 0 },\n bool: { value: true },\n datetime: { op: \"eq\", value: new Date().toISOString() },\n};\n\n// ── Meta generation ──────────────────────────────────────────────────────────\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function createPresetConditionMeta(presets: Presets): ConditionTypeMeta[] {\n return Object.entries(presets).map(([name, preset]) => {\n const isBuiltin = PRIMITIVE_TYPES.has(preset.type);\n const description = isBuiltin\n ? `Match the ${preset.key} key (${preset.type})`\n : `Custom ${preset.type} condition`;\n\n const baseDefaults = isBuiltin ? { ...TYPE_DEFAULTS[preset.type], key: preset.key } : {};\n\n return {\n type: name,\n label: capitalize(name),\n description,\n defaults: { ...baseDefaults, ...preset.defaults, type: name },\n };\n });\n}\n\n// ── Preset editor component factory ──────────────────────────────────────────\n\nexport function createPresetEditor(\n presetName: string,\n builtinType: string,\n presetKey: string,\n): ComponentType<ConditionValueEditorProps> {\n function PresetConditionEditor({ condition, onChange }: ConditionValueEditorProps) {\n const rec = useMemo(() => condition as Record<string, unknown>, [condition]);\n const update = useCallback(\n (field: string, value: unknown) => {\n onChange(\n buildCustomCondition({ ...rec, [field]: value, key: presetKey, type: presetName }),\n );\n },\n [rec, onChange],\n );\n\n switch (builtinType) {\n case \"string\": {\n const op = rec.op as string;\n const isArray = op === \"in\" || op === \"nin\";\n const isRegex = op === \"regex\";\n const handleOpChange = (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue\n ? [String(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as string[])[0] ?? \"\")\n : currentValue;\n onChange(\n buildCustomCondition({\n ...rec,\n op: newOp,\n value: coercedValue,\n key: presetKey,\n type: presetName,\n }),\n );\n };\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleOpChange}\n options={STRING_OPS}\n />\n {isArray ? (\n <TagInput\n value={(rec.value as string | string[]) ?? \"\"}\n onChange={(v) => update(\"value\", v)}\n placeholder={`e.g. ${presetKey} value`}\n />\n ) : isRegex ? (\n <Input\n className=\"h-8 font-mono text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder=\"e.g. ^test.*$\"\n onChange={(e) => update(\"value\", e.target.value)}\n />\n ) : (\n <Input\n className=\"h-8 text-sm\"\n value={String(rec.value ?? \"\")}\n placeholder={`e.g. ${presetKey} value`}\n onChange={(e) => update(\"value\", e.target.value)}\n />\n )}\n </ConditionRow>\n );\n }\n case \"number\": {\n const numOp = rec.op as string;\n const isNumArray = numOp === \"in\" || numOp === \"nin\";\n const handleNumOpChange = (newOp: string) => {\n const isArrayOp = newOp === \"in\" || newOp === \"nin\";\n const currentValue = rec.value;\n const coercedValue = isArrayOp\n ? Array.isArray(currentValue)\n ? currentValue\n : currentValue !== undefined && currentValue !== \"\"\n ? [Number(currentValue)]\n : []\n : Array.isArray(currentValue)\n ? ((currentValue as number[])[0] ?? 0)\n : currentValue;\n onChange(\n buildCustomCondition({\n ...rec,\n op: newOp,\n value: coercedValue,\n key: presetKey,\n type: presetName,\n }),\n );\n };\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={handleNumOpChange}\n options={NUMBER_OPS}\n />\n {isNumArray ? (\n <NumberTagInput\n value={(rec.value as number | number[]) ?? []}\n onChange={(v) => update(\"value\", v)}\n placeholder={`e.g. ${presetKey} value`}\n />\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 font-mono text-sm\"\n value={rec.value !== undefined ? String(rec.value) : \"\"}\n placeholder=\"e.g. 100\"\n onChange={(e) =>\n update(\"value\", e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n />\n )}\n </ConditionRow>\n );\n }\n case \"bool\":\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect value=\"eq\" options={BOOL_OPS} disabled />\n <Select\n value={String(rec.value ?? \"true\")}\n onValueChange={(v) => update(\"value\", v === \"true\")}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </ConditionRow>\n );\n case \"datetime\":\n return (\n <ConditionRow>\n <KeyInput value={presetKey} disabled />\n <OperatorSelect\n value={String(rec.op ?? \"eq\")}\n onChange={(v) => update(\"op\", v)}\n options={DATETIME_OPS}\n />\n <DateTimeInput value={String(rec.value ?? \"\")} onChange={(v) => update(\"value\", v)} />\n </ConditionRow>\n );\n }\n return null;\n }\n\n PresetConditionEditor.displayName = `PresetConditionEditor(${presetName})`;\n return PresetConditionEditor;\n}\n\n// ── Convenience factory ──────────────────────────────────────────────────────\n\nexport function createPresetUI(presets: Presets): ConditionExtensions {\n const extraConditionTypes = createPresetConditionMeta(presets);\n const editorOverrides = new Map<string, ComponentType<ConditionValueEditorProps>>();\n\n for (const [name, preset] of Object.entries(presets)) {\n if (PRIMITIVE_TYPES.has(preset.type) && preset.key) {\n editorOverrides.set(name, createPresetEditor(name, preset.type, preset.key));\n }\n }\n\n return { extraConditionTypes, editorOverrides };\n}\n","import { useMemo } from \"react\";\nimport type { Definition } from \"showwhat\";\nimport { DefinitionList } from \"@/components/definition-list/DefinitionList.js\";\nimport { DefinitionEditor } from \"@/components/definition-editor/DefinitionEditor.js\";\nimport { ErrorBoundary } from \"@/components/common/ErrorBoundary.js\";\nimport {\n StoreSourceContext,\n ActionStateContext,\n useActionRunner,\n useActionState,\n useStoreRef,\n} from \"./context.js\";\nimport { useConfiguratorSelector } from \"./useConfiguratorSelector.js\";\nimport { PreviewPanel } from \"./PreviewPanel.js\";\nimport type { ConfiguratorStore, ConfiguratorStoreSource } from \"./types.js\";\nimport {\n selectDefinitions,\n selectSelectedKey,\n selectValidationErrors,\n selectDirtyKeys,\n selectRevision,\n} from \"./selectors.js\";\nimport type { ConditionExtensions } from \"@/components/condition-builder/ConditionExtensionsContext.js\";\nimport { ConditionExtensionsProvider } from \"@/components/condition-builder/ConditionExtensionsContext.js\";\nimport type { ConditionEvaluator } from \"showwhat\";\nimport { FallbackEvaluatorProvider } from \"./fallback-context.js\";\n\n/**\n * Normalize a plain ConfiguratorStore into a ConfiguratorStoreSource.\n * When the store is a plain object (no subscribe/getSnapshot), we wrap it\n * in a trivial source whose snapshot is the object itself. The subscribe\n * callback is a no-op because React context changes already trigger rerenders.\n *\n * **Plain-store limitation:** Because `subscribe` is a no-op, React's\n * `useSyncExternalStore` cannot detect granular changes. Every new plain-store\n * reference produces a new source, which updates `StoreSourceContext` and\n * re-renders **all** consumers — selector-level granularity is defeated.\n * For production use cases that need fine-grained updates, provide a real\n * `ConfiguratorStoreSource` (e.g. a Zustand store) directly instead of a\n * plain object.\n */\nfunction useNormalizedSource(\n store: ConfiguratorStore | ConfiguratorStoreSource,\n): ConfiguratorStoreSource {\n return useMemo(() => {\n // If the store already satisfies the source interface, use it directly.\n if (isStoreSource(store)) {\n return store;\n }\n\n // Wrap a plain store object in a trivial source.\n // The memo dep is `store` itself, so every new plain-store reference\n // produces a new source, which updates StoreSourceContext and triggers\n // consumer rerenders. This is correct: plain stores are prop-driven\n // and don't support selector-level granularity. Use a\n // ConfiguratorStoreSource with a real subscribe for that.\n const snapshot = store;\n return {\n getSnapshot: () => snapshot,\n subscribe: () => () => {},\n };\n }, [store]);\n}\n\nfunction isStoreSource(obj: unknown): obj is ConfiguratorStoreSource {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"getSnapshot\" in obj &&\n \"subscribe\" in obj &&\n typeof (obj as ConfiguratorStoreSource).getSnapshot === \"function\" &&\n typeof (obj as ConfiguratorStoreSource).subscribe === \"function\"\n );\n}\n\nfunction ErrorBanner() {\n const { actionState, clearError } = useActionState();\n if (!actionState.error) return null;\n return (\n <div\n role=\"alert\"\n className=\"flex items-center justify-between border-b border-destructive/30 bg-destructive/10 px-4 py-2\"\n >\n <p className=\"text-xs font-medium text-destructive\">\n Action failed: {actionState.error.message}\n </p>\n <button type=\"button\" className=\"text-xs text-destructive underline\" onClick={clearError}>\n Dismiss\n </button>\n </div>\n );\n}\n\nfunction EditorLayout({ emptyState }: { emptyState?: React.ReactNode }) {\n const definitions = useConfiguratorSelector(selectDefinitions);\n const selectedKey = useConfiguratorSelector(selectSelectedKey);\n const validationErrors = useConfiguratorSelector(selectValidationErrors);\n const dirtyKeys = useConfiguratorSelector(selectDirtyKeys);\n const revision = useConfiguratorSelector(selectRevision);\n const getStore = useStoreRef();\n const { actionState, runAction } = useActionState();\n\n const selectedDefinition = selectedKey ? definitions[selectedKey] : null;\n\n if (Object.keys(definitions).length === 0 && emptyState) {\n return <>{emptyState}</>;\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n <ErrorBanner />\n\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Sidebar */}\n <div className=\"w-72 shrink-0 border-r border-border bg-muted/30\">\n <DefinitionList\n definitions={definitions}\n selectedKey={selectedKey}\n validationErrors={validationErrors}\n dirtyKeys={dirtyKeys}\n onSelect={(key) => {\n runAction(() => getStore().selectDefinition(key)).catch(() => {});\n }}\n onAdd={(key) => runAction(() => getStore().addDefinition(key))}\n onRemove={(key) => {\n runAction(() => getStore().removeDefinition(key)).catch(() => {});\n }}\n />\n </div>\n\n {/* Editor */}\n <div className=\"flex-1 overflow-hidden bg-background\">\n <ErrorBoundary>\n {selectedDefinition && selectedKey ? (\n <div key={`anim-${selectedKey}-${revision}`} className=\"h-full animate-fade-up\">\n <DefinitionEditor\n key={`${selectedKey}-${revision}`}\n definitionKey={selectedKey}\n definition={selectedDefinition}\n validationErrors={validationErrors[selectedKey]}\n isDirty={dirtyKeys.includes(selectedKey)}\n isPending={actionState.pending}\n onUpdate={(def: Definition) => {\n getStore()\n .updateDefinition(selectedKey, def)\n .catch(() => {});\n }}\n onRename={(newKey: string) =>\n runAction(() => getStore().renameDefinition(selectedKey, newKey))\n }\n onSave={() => {\n runAction(() => getStore().saveDefinition(selectedKey)).catch(() => {});\n }}\n onDiscard={() => {\n runAction(() => getStore().discardDefinition(selectedKey)).catch(() => {});\n }}\n />\n </div>\n ) : (\n <div className=\"flex h-full items-center justify-center text-sm text-muted-foreground\">\n Select a definition to edit\n </div>\n )}\n </ErrorBoundary>\n </div>\n\n {/* Preview */}\n <ErrorBoundary>\n <PreviewPanel />\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport function Configurator({\n store,\n className,\n emptyState,\n conditionExtensions,\n fallbackEvaluator,\n}: {\n store: ConfiguratorStore | ConfiguratorStoreSource;\n className?: string;\n emptyState?: React.ReactNode;\n conditionExtensions?: ConditionExtensions;\n fallbackEvaluator?: ConditionEvaluator;\n}) {\n const runner = useActionRunner();\n const storeSource = useNormalizedSource(store);\n\n return (\n <StoreSourceContext.Provider value={storeSource}>\n <ActionStateContext.Provider value={runner}>\n <ConditionExtensionsProvider value={conditionExtensions ?? null}>\n <FallbackEvaluatorProvider value={fallbackEvaluator ?? null}>\n <div className={className}>\n <EditorLayout emptyState={emptyState} />\n </div>\n </FallbackEvaluatorProvider>\n </ConditionExtensionsProvider>\n </ActionStateContext.Provider>\n </StoreSourceContext.Provider>\n );\n}\n","import { createContext, useCallback, useContext, useSyncExternalStore, useState } from \"react\";\nimport type { ActionState, ConfiguratorStore, ConfiguratorStoreSource } from \"./types.js\";\n\nexport interface ActionStateContextValue {\n actionState: ActionState;\n runAction: (action: () => Promise<void>) => Promise<void>;\n clearError: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Contexts\n// ---------------------------------------------------------------------------\n\n/** Carries only the store source — changes rarely (only when the store identity changes). */\nexport const StoreSourceContext = createContext<ConfiguratorStoreSource | null>(null);\n\n/** Carries action state (pending / error) — changes on every async action lifecycle event. */\nexport const ActionStateContext = createContext<ActionStateContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\nfunction useStoreSource(): ConfiguratorStoreSource {\n const source = useContext(StoreSourceContext);\n if (source) return source;\n throw new Error(\"useConfiguratorStore must be used within a <Configurator> component\");\n}\n\nexport function useConfiguratorStore(): ConfiguratorStore {\n const source = useStoreSource();\n return useSyncExternalStore(source.subscribe, source.getSnapshot);\n}\n\nexport function useActionState(): ActionStateContextValue {\n const ctx = useContext(ActionStateContext);\n if (ctx) return ctx;\n throw new Error(\"useActionState must be used within a <Configurator> component\");\n}\n\n/**\n * Returns a stable getter for the current store snapshot.\n * Use this to call store methods in event handlers without\n * subscribing the component to store changes.\n */\nexport function useStoreRef(): () => ConfiguratorStore {\n const source = useStoreSource();\n return useCallback(() => source.getSnapshot(), [source]);\n}\n\n/** Hook that wraps async store actions with pending/error tracking. */\nexport function useActionRunner(): ActionStateContextValue {\n const [state, setState] = useState<ActionState>({ pending: false, error: null });\n\n const run = useCallback(async (action: () => Promise<void>) => {\n setState({ pending: true, error: null });\n try {\n await action();\n setState({ pending: false, error: null });\n } catch (err) {\n setState({ pending: false, error: err instanceof Error ? err : new Error(String(err)) });\n throw err; // Re-throw so callers that await can react to the failure\n }\n }, []);\n\n const clearError = useCallback(() => setState((s) => ({ ...s, error: null })), []);\n\n return {\n actionState: state,\n runAction: run,\n clearError,\n };\n}\n","import { useContext, useCallback, useSyncExternalStore } from \"react\";\nimport type { ConfiguratorStore } from \"./types.js\";\nimport { StoreSourceContext } from \"./context.js\";\n\n/**\n * Select a slice of the ConfiguratorStore with subscription-level\n * short-circuiting. The component only rerenders when the selected\n * value changes (via `Object.is` equality).\n *\n * Reads only from StoreSourceContext so action-state changes\n * (pending / error) do NOT trigger rerenders in selector consumers.\n */\nexport function useConfiguratorSelector<T>(selector: (store: ConfiguratorStore) => T): T {\n const source = useContext(StoreSourceContext);\n\n if (!source) {\n throw new Error(\"useConfiguratorSelector must be used within a <Configurator> component\");\n }\n\n const getSnapshot = useCallback(() => selector(source.getSnapshot()), [source, selector]);\n\n return useSyncExternalStore(source.subscribe, getSnapshot);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Badge } from \"@/components/ui/badge.js\";\nimport { Button } from \"@/components/ui/button.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog.js\";\nimport { Label } from \"@/components/ui/label.js\";\nimport { ScrollArea } from \"@/components/ui/scroll-area.js\";\nimport { Separator } from \"@/components/ui/separator.js\";\nimport { Textarea } from \"@/components/ui/textarea.js\";\nimport { ChevronRight, Eye, Loader2, Maximize2, Play } from \"lucide-react\";\nimport { resolve } from \"showwhat\";\nimport type { ConditionEvaluator } from \"showwhat\";\nimport { DefinitionInactiveError, DefinitionNotFoundError, VariationNotFoundError } from \"showwhat\";\nimport type { Context } from \"showwhat\";\nimport { useConfiguratorSelector } from \"./useConfiguratorSelector.js\";\nimport type { PreviewResult } from \"./preview-store.js\";\nimport { selectDefinitions, selectSelectedKey } from \"./selectors.js\";\nimport { useFallbackEvaluator } from \"./fallback-context.js\";\n\nfunction ResultBadge({ result, onViewMeta }: { result: PreviewResult; onViewMeta?: () => void }) {\n switch (result.status) {\n case \"success\":\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Badge className=\"bg-status-active/15 text-green-700 hover:bg-status-active/15 dark:text-green-400\">\n Matched\n </Badge>\n {onViewMeta ? (\n <button\n type=\"button\"\n className=\"flex items-center gap-1 text-xs text-muted-foreground/60 hover:text-muted-foreground hover:cursor-pointer\"\n onClick={onViewMeta}\n aria-label=\"View evaluation meta\"\n >\n <Eye className=\"size-3\" />\n <span>Details</span>\n <span>|</span>\n <span>Variation #{result.meta.variation.index}</span>\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\">\n Variation #{result.meta.variation.index}\n </span>\n )}\n </div>\n <div className=\"rounded-md border border-border bg-background p-2\">\n <pre className=\"whitespace-pre-wrap break-all font-mono text-xs\">\n {typeof result.value === \"string\"\n ? result.value\n : JSON.stringify(result.value, null, 2)}\n </pre>\n </div>\n </div>\n );\n case \"inactive\":\n return (\n <div className=\"space-y-2\">\n <Badge className=\"bg-amber-500/15 text-amber-600 hover:bg-amber-500/15\">Inactive</Badge>\n <p className=\"text-xs text-muted-foreground\">{result.message}</p>\n </div>\n );\n case \"no-match\":\n return (\n <div className=\"space-y-2\">\n <Badge className=\"bg-orange-500/15 text-orange-600 hover:bg-orange-500/15\">\n No Match\n </Badge>\n <p className=\"text-xs text-muted-foreground\">{result.message}</p>\n </div>\n );\n case \"error\":\n return (\n <div className=\"space-y-2\">\n <Badge variant=\"destructive\">Error</Badge>\n <p className=\"text-xs text-destructive\">{result.message}</p>\n </div>\n );\n }\n}\n\nfunction parseContextJson(text: string): Context {\n const trimmed = text.trim();\n if (!trimmed) return {};\n const parsed = JSON.parse(trimmed);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new SyntaxError(\"Context must be a JSON object\");\n }\n const context: Context = {};\n for (const [key, value] of Object.entries(parsed)) {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n context[key] = value;\n }\n }\n return context;\n}\n\nfunction parseEvaluatorOverrides(text: string): Record<string, boolean> {\n const overrides: Record<string, boolean> = {};\n for (const line of text.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx < 1) continue;\n const type = trimmed.slice(0, idx).trim();\n const value = trimmed\n .slice(idx + 1)\n .trim()\n .toLowerCase();\n if (type && (value === \"true\" || value === \"false\")) {\n overrides[type] = value === \"true\";\n }\n }\n return overrides;\n}\n\nfunction JsonEditorDialog({\n open,\n onOpenChange,\n value,\n onSave,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n value: string;\n onSave: (value: string) => void;\n}) {\n const [draft, setDraft] = useState(value);\n const [formatError, setFormatError] = useState<string | null>(null);\n\n // Sync draft when dialog opens\n useEffect(() => {\n if (open) {\n setDraft(value);\n setFormatError(null);\n }\n }, [open, value]);\n\n function handleFormat() {\n const trimmed = draft.trim();\n if (!trimmed) return;\n try {\n const parsed = JSON.parse(trimmed);\n setDraft(JSON.stringify(parsed, null, 2));\n setFormatError(null);\n } catch {\n setFormatError(\"Invalid JSON\");\n }\n }\n\n function handleSave() {\n onSave(draft);\n onOpenChange(false);\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>Edit Context</DialogTitle>\n <DialogDescription>\n JSON object with context values for resolving the definition.\n </DialogDescription>\n </DialogHeader>\n <Textarea\n placeholder={'{\\n \"env\": \"production\",\\n \"region\": \"us-east-1\"\\n}'}\n value={draft}\n onChange={(e) => {\n setDraft(e.target.value);\n setFormatError(null);\n }}\n className={`min-h-64 font-mono text-sm ${formatError ? \"border-destructive\" : \"\"}`}\n rows={14}\n />\n {formatError && <p className=\"text-xs text-destructive\">{formatError}</p>}\n <DialogFooter>\n <Button variant=\"outline\" size=\"sm\" onClick={handleFormat}>\n Format\n </Button>\n <Button size=\"sm\" onClick={handleSave}>\n Apply\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport function PreviewPanel() {\n const definitions = useConfiguratorSelector(selectDefinitions);\n const selectedKey = useConfiguratorSelector(selectSelectedKey);\n const externalFallback = useFallbackEvaluator();\n\n const [contextText, setContextText] = useState(\"\");\n const [evaluatorText, setEvaluatorText] = useState(\"\");\n const [contextError, setContextError] = useState<string | null>(null);\n const [simulatorOpen, setSimulatorOpen] = useState(false);\n const [jsonEditorOpen, setJsonEditorOpen] = useState(false);\n const [previewResult, setPreviewResult] = useState<PreviewResult | null>(null);\n const [isResolving, setIsResolving] = useState(false);\n const [metaDialogOpen, setMetaDialogOpen] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Clear result and abort in-flight requests when selection changes\n useEffect(() => {\n abortControllerRef.current?.abort();\n abortControllerRef.current = null;\n setPreviewResult(null);\n\n return () => {\n abortControllerRef.current?.abort();\n };\n }, [selectedKey]);\n\n const fallback: ConditionEvaluator | undefined = useMemo(() => {\n const overrides = parseEvaluatorOverrides(evaluatorText);\n const hasOverrides = Object.keys(overrides).length > 0;\n\n if (!hasOverrides && !externalFallback) return undefined;\n\n return async (args) => {\n const type = (args.condition as { type: string }).type;\n if (type in overrides) return overrides[type];\n if (externalFallback) return externalFallback(args);\n return false;\n };\n }, [evaluatorText, externalFallback]);\n\n const handleResolve = useCallback(async () => {\n if (!selectedKey || !definitions[selectedKey]) {\n setPreviewResult({ status: \"error\", message: \"No definition selected\" });\n return;\n }\n\n abortControllerRef.current?.abort();\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n setIsResolving(true);\n setContextError(null);\n\n let context: Context;\n try {\n context = parseContextJson(contextText);\n } catch {\n setPreviewResult({ status: \"error\", message: \"Invalid JSON in context\" });\n setIsResolving(false);\n return;\n }\n\n try {\n const result = await resolve({\n definitions: { [selectedKey]: definitions[selectedKey] },\n context,\n options: fallback ? { fallback } : undefined,\n });\n\n if (controller.signal.aborted) return;\n\n const resolution = result[selectedKey];\n setPreviewResult({\n status: \"success\",\n value: resolution.value,\n meta: resolution.meta,\n });\n } catch (err) {\n if (controller.signal.aborted) return;\n\n if (err instanceof DefinitionInactiveError) {\n setPreviewResult({\n status: \"inactive\",\n message: `\"${selectedKey}\" is inactive`,\n });\n } else if (err instanceof VariationNotFoundError) {\n setPreviewResult({\n status: \"no-match\",\n message: \"No variation matched the given context\",\n });\n } else if (err instanceof DefinitionNotFoundError) {\n setPreviewResult({\n status: \"error\",\n message: `Definition \"${selectedKey}\" not found`,\n });\n } else {\n setPreviewResult({\n status: \"error\",\n message: err instanceof Error ? err.message : \"Unknown error\",\n });\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsResolving(false);\n }\n }\n }, [selectedKey, definitions, contextText, fallback]);\n\n return (\n <div className=\"flex w-80 shrink-0 flex-col border-l border-border bg-muted/30\">\n {/* Header */}\n <div className=\"flex h-12 items-center border-b border-border px-3\">\n <span className=\"text-sm font-semibold\">Preview</span>\n </div>\n\n <ScrollArea className=\"flex-1\">\n <div className=\"space-y-4 p-3\">\n {/* Selected definition */}\n <div>\n <Label className=\"text-xs text-muted-foreground\">Definition</Label>\n <p className=\"mt-0.5 truncate font-mono text-sm\">{selectedKey ?? \"None selected\"}</p>\n </div>\n\n <Separator />\n\n {/* Context (JSON) — read-only preview, click to edit */}\n <div>\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Context</Label>\n <button\n type=\"button\"\n className=\"flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground\"\n onClick={() => setJsonEditorOpen(true)}\n >\n <Maximize2 className=\"h-3 w-3\" />\n Edit\n </button>\n </div>\n <button\n type=\"button\"\n /* v8 ignore next */\n className={`mt-1.5 w-full cursor-pointer rounded-md border bg-transparent px-3 py-2 text-left transition-colors hover:border-ring ${contextError ? \"border-destructive\" : \"border-input\"}`}\n onClick={() => setJsonEditorOpen(true)}\n >\n {contextText.trim() ? (\n <pre className=\"max-h-28 overflow-hidden font-mono text-xs text-foreground\">\n {contextText}\n </pre>\n ) : (\n <span className=\"font-mono text-xs text-muted-foreground\">\n {'{ \"env\": \"production\" }'}\n </span>\n )}\n </button>\n {/* v8 ignore next */}\n {contextError && <p className=\"mt-1 text-[10px] text-destructive\">{contextError}</p>}\n <JsonEditorDialog\n open={jsonEditorOpen}\n onOpenChange={setJsonEditorOpen}\n value={contextText}\n onSave={(v) => {\n setContextText(v);\n setContextError(null);\n }}\n />\n </div>\n\n <Separator />\n\n {/* Condition simulator (collapsible) */}\n <div>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setSimulatorOpen((o) => !o)}\n >\n <ChevronRight\n className={`h-3.5 w-3.5 transition-transform ${simulatorOpen ? \"rotate-90\" : \"\"}`}\n />\n Condition Simulator\n </button>\n {simulatorOpen && (\n <div className=\"mt-2\">\n <Textarea\n placeholder={\"tier:true\\ngeo:false\"}\n value={evaluatorText}\n onChange={(e) => setEvaluatorText(e.target.value)}\n className=\"min-h-20 font-mono text-xs\"\n rows={6}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Simulate unregistered condition types. One type:true|false per line\n </p>\n </div>\n )}\n </div>\n\n {/* Resolve button */}\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={handleResolve}\n disabled={!selectedKey || isResolving}\n >\n {isResolving ? (\n <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" />\n ) : (\n <Play className=\"mr-1.5 h-4 w-4\" />\n )}\n Resolve\n </Button>\n\n {/* Result */}\n {previewResult && (\n <>\n <Separator />\n <div className=\"animate-slide-in-right\">\n <Label className=\"text-xs text-muted-foreground\">Result</Label>\n <div className=\"mt-1.5\">\n <ResultBadge\n result={previewResult}\n onViewMeta={\n previewResult.status === \"success\" ? () => setMetaDialogOpen(true) : undefined\n }\n />\n </div>\n {previewResult.status === \"success\" && (\n <Dialog open={metaDialogOpen} onOpenChange={setMetaDialogOpen}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>Evaluation Meta</DialogTitle>\n <DialogDescription>\n Full resolution metadata from the last evaluation.\n </DialogDescription>\n </DialogHeader>\n <ScrollArea className=\"max-h-96\">\n <pre className=\"whitespace-pre-wrap break-all font-mono text-xs\">\n {JSON.stringify(previewResult.meta, null, 2)}\n </pre>\n </ScrollArea>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","import type { ConfiguratorStore } from \"./types.js\";\n\n/* Stable selectors – defined once to avoid re-creation across components. */\nexport const selectDefinitions = (s: ConfiguratorStore) => s.definitions;\nexport const selectSelectedKey = (s: ConfiguratorStore) => s.selectedKey;\nexport const selectValidationErrors = (s: ConfiguratorStore) => s.validationErrors;\nexport const selectDirtyKeys = (s: ConfiguratorStore) => s.dirtyKeys;\nexport const selectRevision = (s: ConfiguratorStore) => s.revision;\n","import { createContext, useContext } from \"react\";\nimport type { ConditionEvaluator } from \"showwhat\";\n\nconst FallbackEvaluatorContext = createContext<ConditionEvaluator | null>(null);\n\nexport const FallbackEvaluatorProvider = FallbackEvaluatorContext.Provider;\n\nexport function useFallbackEvaluator(): ConditionEvaluator | null {\n return useContext(FallbackEvaluatorContext);\n}\n"],"mappings":"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","names":["useCallback","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsxs","next","jsx","jsxs","useCallback","useCallback","useMemo","useCallback","useState","jsx","jsxs","useState","useCallback","next","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","useState","jsx","jsxs","useState","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useCallback","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","useMemo","jsx","jsxs","OP_OPTIONS","meta","useMemo","meta","Slot","jsx","Slot","jsx","jsx","jsxs","jsx","jsxs","CheckIcon","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","useRef","useState","jsx","jsxs","useState","useRef","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","memo","X","useCallback","useRef","useState","jsx","jsxs","useState","useRef","useCallback","jsx","meta","Fragment","jsx","jsxs","meta","Fragment","jsx","jsxs","useCallback","useMemo","useMemo","useCallback","next","Fragment","jsx","jsxs","ConditionGroup","jsx","jsxs","memo","ConditionBlock","meta","X","jsx","jsxs","Fragment","memo","useState","isAndCondition","isOrCondition","isAndCondition","isOrCondition","meta","jsx","jsxs","memo","VariationCard","useState","useCallback","useMemo","jsx","useMemo","useCallback","next","useRef","useState","Plus","jsx","jsxs","useState","useRef","Plus","useState","Plus","X","memo","useState","Trash2","Fragment","jsx","jsxs","memo","DefinitionListItem","useState","Trash2","jsx","jsxs","useState","X","Plus","useCallback","useMemo","jsx","jsxs","useMemo","useCallback","OP_OPTIONS","useMemo","createContext","useCallback","useContext","useState","useContext","useCallback","useSyncExternalStore","useContext","useCallback","useSyncExternalStore","useCallback","useMemo","useRef","useState","ChevronRight","Eye","createContext","useContext","Fragment","jsx","jsxs","Eye","useState","useRef","useMemo","useCallback","ChevronRight","Fragment","jsx","jsxs","useMemo"]}
|