@fayz-ai/ui 0.18.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/analytics/derive.d.ts +1 -9
  2. package/dist/analytics/derive.d.ts.map +1 -1
  3. package/dist/chunk-AIUHVTVK.js +205 -0
  4. package/dist/chunk-AIUHVTVK.js.map +1 -0
  5. package/dist/{chunk-OBIU37AX.js → chunk-EGHEU3U5.js} +156 -48
  6. package/dist/chunk-EGHEU3U5.js.map +1 -0
  7. package/dist/{chunk-3OVZ5JJQ.js → chunk-GLRLWBBF.js} +4 -3
  8. package/dist/chunk-GLRLWBBF.js.map +1 -0
  9. package/dist/{chunk-ZLPYNHXH.js → chunk-MBGTFL4I.js} +3 -3
  10. package/dist/{chunk-ZLPYNHXH.js.map → chunk-MBGTFL4I.js.map} +1 -1
  11. package/dist/{chunk-AASANYXN.js → chunk-OB2ULDBD.js} +6 -4
  12. package/dist/chunk-OB2ULDBD.js.map +1 -0
  13. package/dist/{chunk-Z2ITFPGL.js → chunk-OYH7CEMB.js} +609 -173
  14. package/dist/chunk-OYH7CEMB.js.map +1 -0
  15. package/dist/{chunk-DFOAKWYB.js → chunk-P3YTL3MF.js} +140 -16
  16. package/dist/chunk-P3YTL3MF.js.map +1 -0
  17. package/dist/dashboard/index.js +2 -2
  18. package/dist/icons.d.ts.map +1 -1
  19. package/dist/icons.js +1 -1
  20. package/dist/index.d.ts +3 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +11 -25
  23. package/dist/index.js.map +1 -1
  24. package/dist/layout/AppShell.d.ts +9 -1
  25. package/dist/layout/AppShell.d.ts.map +1 -1
  26. package/dist/layout/ModulePage.d.ts +13 -0
  27. package/dist/layout/ModulePage.d.ts.map +1 -1
  28. package/dist/layout/SaveBar.d.ts +10 -1
  29. package/dist/layout/SaveBar.d.ts.map +1 -1
  30. package/dist/layout/Sidebar.d.ts +7 -1
  31. package/dist/layout/Sidebar.d.ts.map +1 -1
  32. package/dist/layout/Takeover.d.ts +31 -0
  33. package/dist/layout/Takeover.d.ts.map +1 -0
  34. package/dist/layout/index.d.ts +1 -0
  35. package/dist/layout/index.d.ts.map +1 -1
  36. package/dist/layout/index.js +3 -3
  37. package/dist/lib/error-message.d.ts +2 -0
  38. package/dist/lib/error-message.d.ts.map +1 -0
  39. package/dist/primitives/brand-marks.d.ts +11 -0
  40. package/dist/primitives/brand-marks.d.ts.map +1 -0
  41. package/dist/primitives/button.d.ts +1 -1
  42. package/dist/primitives/dot-badge.d.ts +27 -0
  43. package/dist/primitives/dot-badge.d.ts.map +1 -0
  44. package/dist/primitives/draft-commit-bar.d.ts +27 -0
  45. package/dist/primitives/draft-commit-bar.d.ts.map +1 -0
  46. package/dist/primitives/filter-check-list.d.ts +65 -0
  47. package/dist/primitives/filter-check-list.d.ts.map +1 -0
  48. package/dist/primitives/header-tabs.d.ts +35 -0
  49. package/dist/primitives/header-tabs.d.ts.map +1 -1
  50. package/dist/primitives/image-drop.d.ts.map +1 -1
  51. package/dist/primitives/index.d.ts +6 -0
  52. package/dist/primitives/index.d.ts.map +1 -1
  53. package/dist/primitives/index.js +4 -4
  54. package/dist/primitives/list-chrome.d.ts +5 -1
  55. package/dist/primitives/list-chrome.d.ts.map +1 -1
  56. package/dist/primitives/list-view.d.ts.map +1 -1
  57. package/dist/primitives/mini-calendar.d.ts +36 -0
  58. package/dist/primitives/mini-calendar.d.ts.map +1 -0
  59. package/dist/primitives/multi-select.d.ts +21 -0
  60. package/dist/primitives/multi-select.d.ts.map +1 -0
  61. package/dist/primitives/page-actions.d.ts.map +1 -1
  62. package/dist/primitives/refresh-button.d.ts.map +1 -1
  63. package/dist/primitives/row-actions.d.ts.map +1 -1
  64. package/dist/primitives/select.d.ts.map +1 -1
  65. package/dist/primitives/stock-entry-form.d.ts +52 -0
  66. package/dist/primitives/stock-entry-form.d.ts.map +1 -0
  67. package/dist/styles.css +124 -0
  68. package/dist/tailwind.cjs +1 -1
  69. package/dist/tailwind.cjs.map +1 -1
  70. package/dist/tailwind.js +1 -1
  71. package/dist/tailwind.js.map +1 -1
  72. package/dist/wizard/index.js +2 -2
  73. package/dist/wizard/useWizard.d.ts.map +1 -1
  74. package/package.json +2 -2
  75. package/dist/chunk-3OVZ5JJQ.js.map +0 -1
  76. package/dist/chunk-4GK6IHOI.js +0 -177
  77. package/dist/chunk-4GK6IHOI.js.map +0 -1
  78. package/dist/chunk-AASANYXN.js.map +0 -1
  79. package/dist/chunk-DFOAKWYB.js.map +0 -1
  80. package/dist/chunk-OBIU37AX.js.map +0 -1
  81. package/dist/chunk-Z2ITFPGL.js.map +0 -1
@@ -3,6 +3,7 @@ import * as React4 from 'react';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { CheckCircle2, AlertTriangle, XCircle, Info, Check, ImagePlus, Loader2, X } from 'lucide-react';
6
+ import { errorMessage } from '@fayz-ai/core';
6
7
 
7
8
  var TRACK = {
8
9
  sm: "h-4 w-7",
@@ -369,7 +370,7 @@ function ImageDrop({
369
370
  setUrl(next);
370
371
  onChange?.(next);
371
372
  } catch (err) {
372
- setError(err instanceof Error ? err.message : String(err));
373
+ setError(errorMessage(err));
373
374
  } finally {
374
375
  setBusy(false);
375
376
  }
@@ -536,5 +537,5 @@ function normalizeHex(raw) {
536
537
  }
537
538
 
538
539
  export { ColorPalette, ConfirmDialog, ImageDrop, OptionCards, OptionChips, StepProgress, Switch, normalizeHex };
539
- //# sourceMappingURL=chunk-3OVZ5JJQ.js.map
540
- //# sourceMappingURL=chunk-3OVZ5JJQ.js.map
540
+ //# sourceMappingURL=chunk-GLRLWBBF.js.map
541
+ //# sourceMappingURL=chunk-GLRLWBBF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/switch.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/step-progress.tsx","../src/primitives/option-select.tsx","../src/primitives/image-drop.tsx","../src/primitives/color-palette.tsx"],"names":["React","Switch","React2","jsxs","jsx","React3","React5","X"],"mappings":"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","file":"chunk-GLRLWBBF.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../lib/cn'\n\n// ---------------------------------------------------------------------------\n// Switch — ligar/desligar algo que vale IMEDIATAMENTE.\n//\n// É a diferença para o checkbox, e é o que decide qual usar: checkbox é uma\n// escolha que só existe quando o formulário for salvo (\"aceito os termos\");\n// switch é um interruptor — mexeu, mudou. Uma lista onde cada linha liga um\n// disparo é o segundo caso, e desenhá-lo como checkbox faz procurar o botão\n// Salvar que nunca vem.\n//\n// Sem Radix: é um <button role=\"switch\"> com aria-checked, que é exatamente o\n// contrato que o leitor de tela espera. Uma dependência a mais para animar um\n// círculo de 16px não se paga.\n// ---------------------------------------------------------------------------\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked: boolean\n onCheckedChange: (checked: boolean) => void\n /** 'sm' para linhas de lista, 'md' para formulários. */\n size?: 'sm' | 'md'\n /** Texto ao lado. Clicar nele também alterna — é área de toque de graça. */\n label?: React.ReactNode\n}\n\nconst TRACK = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n}\n\nconst THUMB = {\n sm: 'h-3 w-3 data-[on=true]:translate-x-3',\n md: 'h-4 w-4 data-[on=true]:translate-x-4',\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n { checked, onCheckedChange, size = 'sm', label, className, disabled, ...rest },\n ref,\n) {\n const control = (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={(e) => {\n // stopPropagation: o switch vive dentro de linhas clicáveis, e ligar\n // algo não deve navegar para outro lugar ao mesmo tempo.\n e.stopPropagation()\n rest.onClick?.(e)\n if (!disabled) onCheckedChange(!checked)\n }}\n className={cn(\n 'relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n TRACK[size],\n checked ? 'bg-primary' : 'bg-muted-foreground/30',\n className,\n )}\n {...rest}\n >\n <span\n data-on={checked}\n className={cn(\n 'pointer-events-none ml-0.5 inline-block rounded-full bg-background shadow-sm transition-transform',\n THUMB[size],\n )}\n />\n </button>\n )\n\n if (label == null) return control\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 text-xs text-muted-foreground',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {control}\n <span>{label}</span>\n </label>\n )\n})\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { AlertTriangle, Info, CheckCircle2, XCircle } from 'lucide-react'\nimport { cn } from '../lib/cn'\nimport { Button } from './button'\n\ntype ConfirmVariant = 'default' | 'destructive' | 'warning' | 'success'\n\ninterface ConfirmDialogProps {\n open: boolean\n onConfirm: () => void\n onCancel: () => void\n title: string\n description?: string\n confirmLabel?: string\n cancelLabel?: string\n variant?: ConfirmVariant\n loading?: boolean\n}\n\nconst VARIANT_CONFIG: Record<\n ConfirmVariant,\n {\n icon: React.ElementType\n iconBg: string\n iconColor: string\n buttonVariant: 'default' | 'destructive'\n }\n> = {\n default: {\n icon: Info,\n iconBg: 'bg-info/10',\n iconColor: 'text-info',\n buttonVariant: 'default',\n },\n destructive: {\n icon: XCircle,\n iconBg: 'bg-destructive/10',\n iconColor: 'text-destructive',\n buttonVariant: 'destructive',\n },\n warning: {\n icon: AlertTriangle,\n iconBg: 'bg-warning/10',\n iconColor: 'text-warning',\n buttonVariant: 'destructive',\n },\n success: {\n icon: CheckCircle2,\n iconBg: 'bg-success/10',\n iconColor: 'text-success',\n buttonVariant: 'default',\n },\n}\n\nexport function ConfirmDialog({\n open,\n onConfirm,\n onCancel,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n variant = 'default',\n loading = false,\n}: ConfirmDialogProps) {\n const config = VARIANT_CONFIG[variant]\n const Icon = config.icon\n\n React.useEffect(() => {\n if (!open) return\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') onCancel()\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, onCancel])\n\n if (!open) return null\n\n return createPortal(\n <div className=\"fixed inset-0 z-[60] flex items-center justify-center\">\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-[2px] animate-fade-in\"\n onClick={onCancel}\n />\n\n <div\n className=\"relative z-10 w-full max-w-sm mx-4 rounded-modal border border-border bg-card shadow-lg animate-zoom-in\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby=\"confirm-title\"\n aria-describedby={description ? 'confirm-desc' : undefined}\n >\n <div className=\"p-6\">\n <div className=\"flex gap-4\">\n <div className={cn('flex h-10 w-10 items-center justify-center rounded-full shrink-0', config.iconBg)}>\n <Icon className={cn('h-5 w-5', config.iconColor)} />\n </div>\n <div className=\"min-w-0 pt-0.5\">\n <h3 id=\"confirm-title\" className=\"text-sm font-semibold text-foreground\">\n {title}\n </h3>\n {description && (\n <p id=\"confirm-desc\" className=\"text-xs text-muted-foreground mt-1 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 mt-5\">\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel} disabled={loading}>\n {cancelLabel}\n </Button>\n <Button variant={config.buttonVariant} size=\"sm\" onClick={onConfirm} disabled={loading}>\n {loading ? 'Processing...' : confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import * as React from 'react'\nimport { cn } from '../lib/cn'\n\nexport interface StepProgressProps {\n /** How many steps the flow has. */\n total: number\n /** Zero-based index of the step on screen. */\n current: number\n /** Jump to a step. Only offered for steps already visited. */\n onSelect?: (index: number) => void\n className?: string\n 'aria-label'?: string\n}\n\n/**\n * Segmented progress rail — one bar per step, filled up to the current one.\n *\n * A single continuous bar tells you how far along you are; segments also tell you\n * how much is LEFT, which is what stops someone abandoning a form they think is\n * endless. Sits at the bottom of the wizard column, above the footer.\n */\nexport function StepProgress({ total, current, onSelect, className, ...rest }: StepProgressProps) {\n return (\n <div\n role=\"progressbar\"\n aria-label={rest['aria-label']}\n aria-valuemin={1}\n aria-valuemax={total}\n aria-valuenow={Math.min(current + 1, total)}\n className={cn('flex w-full items-center gap-2', className)}\n >\n {Array.from({ length: total }, (_, i) => {\n const done = i <= current\n // Only steps already behind you are clickable — jumping forward would skip\n // the validation the wizard runs on the way out of each step.\n const clickable = Boolean(onSelect) && i < current\n return (\n <button\n key={i}\n type=\"button\"\n tabIndex={clickable ? 0 : -1}\n aria-hidden={!clickable}\n disabled={!clickable}\n onClick={clickable ? () => onSelect?.(i) : undefined}\n className={cn(\n 'h-[2px] flex-1 rounded-full transition-colors duration-300',\n done ? 'bg-foreground' : 'bg-border',\n clickable && 'cursor-pointer hover:bg-foreground/70',\n )}\n />\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '../lib/cn'\n\nexport interface SelectableOption {\n value: string\n label: React.ReactNode\n /** Second line under the label — the sentence that makes the choice obvious. */\n hint?: React.ReactNode\n icon?: React.ReactNode\n}\n\ninterface SharedProps {\n options: ReadonlyArray<SelectableOption>\n /** A string in single mode, a list in `multi` mode. */\n value?: string | string[]\n onChange: (value: string | string[]) => void\n multi?: boolean\n disabled?: boolean\n /**\n * Bind 1–9 to the first nine options and print the digit on each one.\n *\n * Off by default: two shortcut-bound groups on one screen would both answer to\n * \"1\". The caller decides which group owns the keys.\n */\n shortcuts?: boolean\n className?: string\n 'aria-label'?: string\n}\n\n/** Toggle in multi mode, replace in single mode. */\nfunction nextValue(current: string | string[] | undefined, picked: string, multi: boolean): string | string[] {\n if (!multi) return picked\n const list = Array.isArray(current) ? current : current ? [current] : []\n return list.includes(picked) ? list.filter((v) => v !== picked) : [...list, picked]\n}\n\nfunction isSelected(current: string | string[] | undefined, option: string): boolean {\n return Array.isArray(current) ? current.includes(option) : current === option\n}\n\n/** Only the first nine get a digit — a two-key shortcut is slower than the mouse. */\nconst MAX_SHORTCUTS = 9\n\n/**\n * 1–9 pick the matching option. Ignored while a field has focus, so typing \"2\"\n * into \"how many chairs\" answers the question instead of jumping the form.\n */\nfunction useOptionShortcuts(\n options: ReadonlyArray<SelectableOption>,\n enabled: boolean,\n pick: (value: string) => void,\n) {\n const pickRef = React.useRef(pick)\n pickRef.current = pick\n const values = options.slice(0, MAX_SHORTCUTS).map((o) => o.value).join('\u0000')\n\n React.useEffect(() => {\n if (!enabled) return\n const list = values.split('\u0000').filter(Boolean)\n if (list.length === 0) return\n function onKey(e: KeyboardEvent) {\n if (e.metaKey || e.ctrlKey || e.altKey) return\n const el = e.target as HTMLElement | null\n const tag = el?.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || el?.isContentEditable) return\n const index = Number(e.key) - 1\n if (!Number.isInteger(index) || index < 0 || index >= list.length) return\n e.preventDefault()\n pickRef.current(list[index]!)\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [enabled, values])\n}\n\n/** The digit badge printed on a shortcut-bound option. */\nfunction KeyHint({ index, selected, corner }: { index: number; selected: boolean; corner?: boolean }) {\n return (\n <kbd\n aria-hidden\n className={cn(\n 'hidden h-5 min-w-[1.25rem] shrink-0 items-center justify-center rounded border px-1 font-mono text-[10px] font-semibold sm:inline-flex',\n // Parked in the corner rather than in the reading line: the shortcut is\n // an accelerator, not part of the answer, and inline it pushed every\n // label right and split the logo from the name it belongs to.\n corner && 'absolute right-2 top-2',\n selected\n ? 'border-primary/40 bg-primary/10 text-primary'\n : 'border-border bg-muted text-muted-foreground',\n )}\n >\n {index + 1}\n </kbd>\n )\n}\n\nexport interface OptionCardsProps extends SharedProps {\n /** Cards per row on wide screens. One column reads as a list — use it for long hints. */\n columns?: 1 | 2 | 3\n}\n\nconst COLUMNS: Record<1 | 2 | 3, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n}\n\n/**\n * Card picker — the answer surface for a question with a handful of options that\n * each need a sentence of explanation.\n *\n * Radix has no radio-group in this package and a native radio list cannot carry a\n * hint line, so this is a button grid with `role=\"radio\"`/`\"checkbox\"` semantics\n * layered back on.\n */\nexport function OptionCards({\n options, value, onChange, multi = false, disabled, shortcuts = false, columns = 2, className, ...rest\n}: OptionCardsProps) {\n useOptionShortcuts(options, shortcuts && !disabled, (picked) => onChange(nextValue(value, picked, multi)))\n return (\n <div\n role={multi ? 'group' : 'radiogroup'}\n aria-label={rest['aria-label']}\n className={cn('grid gap-2.5', COLUMNS[columns], className)}\n >\n {options.map((option, index) => {\n const selected = isSelected(value, option.value)\n const corner = shortcuts && index < MAX_SHORTCUTS\n return (\n <button\n key={option.value}\n type=\"button\"\n role={multi ? 'checkbox' : 'radio'}\n aria-checked={selected}\n disabled={disabled}\n onClick={() => onChange(nextValue(value, option.value, multi))}\n className={cn(\n 'group relative flex items-start gap-3 rounded-lg border bg-card p-4 text-left transition-all',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n selected\n ? 'border-primary ring-2 ring-primary/15'\n : 'border-border hover:-translate-y-px hover:border-foreground/25 hover:shadow-button',\n )}\n >\n {/* One thing in the corner. Once an option is picked its digit has\n done its job, and a check beside a number is two marks arguing\n about the same fact. */}\n {corner && selected && <Check className=\"absolute right-2 top-2 h-4 w-4 text-primary\" />}\n {corner && !selected && <KeyHint index={index} selected={false} corner />}\n {option.icon && <span className=\"mt-0.5 shrink-0 text-muted-foreground\">{option.icon}</span>}\n <span className={cn('min-w-0 flex-1', corner && 'pr-5')}>\n <span className=\"block text-sm font-semibold text-foreground\">{option.label}</span>\n {option.hint && (\n <span className=\"mt-0.5 block text-xs leading-relaxed text-muted-foreground\">{option.hint}</span>\n )}\n </span>\n {!corner && selected && <Check className=\"mt-0.5 h-4 w-4 shrink-0 text-primary\" />}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport type OptionChipsProps = SharedProps\n\n/**\n * Pill picker — same selection model as OptionCards, for lists long enough that\n * cards would push the question off screen (industries, channels, price bands).\n */\nexport function OptionChips({\n options, value, onChange, multi = false, disabled, shortcuts = false, className, ...rest\n}: OptionChipsProps) {\n useOptionShortcuts(options, shortcuts && !disabled, (picked) => onChange(nextValue(value, picked, multi)))\n return (\n <div\n role={multi ? 'group' : 'radiogroup'}\n aria-label={rest['aria-label']}\n className={cn('flex flex-wrap gap-2', className)}\n >\n {options.map((option, index) => {\n const selected = isSelected(value, option.value)\n return (\n <button\n key={option.value}\n type=\"button\"\n role={multi ? 'checkbox' : 'radio'}\n aria-checked={selected}\n disabled={disabled}\n onClick={() => onChange(nextValue(value, option.value, multi))}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-4 py-2 text-sm font-medium transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n selected\n ? 'border-primary bg-primary/5 text-foreground'\n : 'border-border bg-card text-muted-foreground hover:border-foreground/25 hover:text-foreground',\n )}\n >\n {option.icon}\n {shortcuts && index < MAX_SHORTCUTS && <KeyHint index={index} selected={selected} />}\n {option.label}\n {selected && <Check className=\"h-3.5 w-3.5 text-primary\" />}\n </button>\n )\n })}\n </div>\n )\n}\n","import { errorMessage } from '@fayz-ai/core'\nimport * as React from 'react'\nimport { ImagePlus, Loader2, X } from 'lucide-react'\nimport { cn } from '../lib/cn'\n\nexport interface ImageDropProps {\n /** Current image. Uncontrolled after the first upload — the component keeps what it uploaded. */\n value?: string\n /** Receives the file, returns the stored URL. Omit to render a read-only preview. */\n onUpload?: (file: File) => Promise<string>\n onChange?: (url: string | undefined) => void\n label?: string\n hint?: string\n accept?: string\n /** Cap in bytes, checked before `onUpload` runs. Default 5 MB. */\n maxBytes?: number\n shape?: 'square' | 'circle'\n disabled?: boolean\n /** Shown when the picked file is over `maxBytes`. `{max}` is replaced with the cap in MB. */\n tooLargeLabel?: string\n removeLabel?: string\n className?: string\n}\n\nconst DEFAULT_MAX_BYTES = 5 * 1024 * 1024\n\n/**\n * Image picker with preview — click or drop a file, see it, replace or clear it.\n *\n * Generalised from the CRUD form's image slot so surfaces that have no entity\n * behind them (workspace logo during setup, before the tenant row exists) get the\n * same affordance without importing the CRUD stack.\n */\nexport function ImageDrop({\n value,\n onUpload,\n onChange,\n label,\n hint,\n accept = 'image/*',\n maxBytes = DEFAULT_MAX_BYTES,\n shape = 'square',\n disabled,\n tooLargeLabel = 'File is larger than {max} MB.',\n removeLabel = 'Remove image',\n className,\n}: ImageDropProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [url, setUrl] = React.useState<string | undefined>(value)\n const [busy, setBusy] = React.useState(false)\n const [dragging, setDragging] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n React.useEffect(() => { setUrl(value) }, [value])\n\n const editable = Boolean(onUpload) && !disabled\n\n const handleFile = React.useCallback(\n async (file: File | undefined) => {\n if (!file || !onUpload) return\n if (file.size > maxBytes) {\n setError(tooLargeLabel.replace('{max}', String(Math.round(maxBytes / 1024 / 1024))))\n return\n }\n setBusy(true)\n setError(null)\n try {\n const next = await onUpload(file)\n setUrl(next)\n onChange?.(next)\n } catch (err: unknown) {\n setError(errorMessage(err))\n } finally {\n setBusy(false)\n }\n },\n [onUpload, onChange, maxBytes, tooLargeLabel],\n )\n\n const pick = () => { if (editable && !busy) inputRef.current?.click() }\n\n const clear = (e: React.MouseEvent) => {\n e.stopPropagation()\n setUrl(undefined)\n setError(null)\n onChange?.(undefined)\n }\n\n return (\n <div className={cn('flex items-center gap-4', className)}>\n <div\n onClick={pick}\n onKeyDown={(e) => { if (editable && (e.key === 'Enter' || e.key === ' ')) { e.preventDefault(); pick() } }}\n onDragOver={(e) => { if (editable) { e.preventDefault(); setDragging(true) } }}\n onDragLeave={() => setDragging(false)}\n onDrop={(e) => {\n if (!editable) return\n e.preventDefault()\n setDragging(false)\n void handleFile(e.dataTransfer.files?.[0])\n }}\n role={editable ? 'button' : undefined}\n tabIndex={editable ? 0 : undefined}\n className={cn(\n 'relative flex h-20 w-20 shrink-0 items-center justify-center overflow-hidden border-2 text-muted-foreground transition-colors',\n shape === 'circle' ? 'rounded-full' : 'rounded-xl',\n url ? 'border-solid border-border' : 'border-dashed border-border',\n dragging && 'border-primary text-primary',\n editable && 'cursor-pointer hover:border-primary/40 hover:text-primary/60',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n )}\n >\n {url ? <img src={url} alt=\"\" className=\"h-full w-full object-cover\" /> : <ImagePlus className=\"h-5 w-5\" />}\n {busy && (\n <span className=\"absolute inset-0 flex items-center justify-center bg-background/70\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </span>\n )}\n {url && editable && !busy && (\n <button\n type=\"button\"\n onClick={clear}\n aria-label={removeLabel}\n className=\"absolute right-0 top-0 flex h-5 w-5 items-center justify-center rounded-bl-lg bg-background/90 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n {editable && (\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0]\n e.target.value = ''\n void handleFile(file)\n }}\n />\n )}\n </div>\n <div className=\"min-w-0\">\n {label && <p className=\"text-sm font-medium text-foreground\">{label}</p>}\n {hint && !error && <p className=\"mt-0.5 text-xs leading-relaxed text-muted-foreground\">{hint}</p>}\n {error && <p className=\"mt-0.5 text-xs text-destructive\">{error}</p>}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '../lib/cn'\n\nexport interface ColorPaletteProps {\n /** Hex values, most prominent first. Shorter than `slots` is normal. */\n value?: ReadonlyArray<string>\n onChange: (colors: string[]) => void\n slots?: number\n /** One per slot, in order. Falls back to the slot number. */\n labels?: ReadonlyArray<string>\n removeLabel?: string\n className?: string\n}\n\nconst DEFAULT_SLOTS = 4\nconst FALLBACK_SWATCH = '#000000'\n\n/**\n * A fixed row of colour slots, each a swatch that opens the native picker plus a\n * hex field that accepts a paste.\n *\n * Slots rather than an add/remove list on purpose: brand colours arrive from a\n * crawl in a known order (primary, secondary, accent), and a positional row is\n * what makes \"the second one is wrong\" a one-click fix instead of a rebuild of\n * the whole palette.\n */\nexport function ColorPalette({\n value,\n onChange,\n slots = DEFAULT_SLOTS,\n labels,\n removeLabel = 'Remover cor',\n className,\n}: ColorPaletteProps) {\n const colors = React.useMemo(() => {\n const next = Array.from({ length: slots }, (_, i) => value?.[i] ?? '')\n return next\n }, [value, slots])\n\n // Trailing blanks are absence, not answers — a palette of two colours must\n // come back as two, or every consumer has to filter it again.\n const commit = (next: string[]) => {\n const trimmed = [...next]\n while (trimmed.length > 0 && !trimmed[trimmed.length - 1]) trimmed.pop()\n onChange(trimmed)\n }\n\n const setSlot = (index: number, hex: string) => {\n const next = [...colors]\n next[index] = hex\n commit(next)\n }\n\n return (\n <div className={cn('flex gap-2', className)}>\n {colors.map((color, index) => (\n <div key={index} className=\"flex-1 space-y-1\">\n <label className=\"group relative block cursor-pointer\">\n <div\n className={cn(\n 'h-10 rounded-lg border transition-colors',\n color ? 'border-border' : 'border-dashed border-border bg-muted/40',\n )}\n style={color ? { backgroundColor: color } : undefined}\n />\n <input\n type=\"color\"\n value={color || FALLBACK_SWATCH}\n aria-label={labels?.[index] ?? `Cor ${index + 1}`}\n onChange={(e) => setSlot(index, e.target.value)}\n className=\"absolute inset-0 cursor-pointer opacity-0\"\n />\n {color && (\n <button\n type=\"button\"\n aria-label={removeLabel}\n onClick={(e) => {\n // The swatch is inside the label, so a click would reopen the picker.\n e.preventDefault()\n e.stopPropagation()\n setSlot(index, '')\n }}\n className=\"absolute -right-1.5 -top-1.5 flex h-4 w-4 items-center justify-center rounded-full bg-foreground/80 text-background opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100\"\n >\n <X className=\"h-2.5 w-2.5\" />\n </button>\n )}\n </label>\n <input\n type=\"text\"\n value={color.toUpperCase()}\n placeholder={labels?.[index] ?? `${index + 1}`}\n onChange={(e) => setSlot(index, normalizeHex(e.target.value))}\n className=\"w-full truncate bg-transparent text-center text-[10px] text-muted-foreground outline-none placeholder:text-muted-foreground/50\"\n />\n </div>\n ))}\n </div>\n )\n}\n\n/** Tolerates a pasted `1F7A3D`, `#1f7a3d` or `rgb(...)`-free junk mid-typing. */\nexport function normalizeHex(raw: string): string {\n const cleaned = raw.replace(/[^0-9a-fA-F#]/g, '')\n const withHash = cleaned.startsWith('#') ? cleaned : `#${cleaned}`\n return withHash.slice(0, 7)\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { RangeControl, Dropdown, DropdownTrigger, ToolbarButton, DropdownContent, DropdownLabel, DropdownSeparator, DropdownCheckboxItem, DropdownItem, PageToolbar, Card, CardHeader, CardTitle, CardDescription, CardContent, DataTable, Skeleton } from './chunk-E44WOPCR.js';
2
2
  import { useHasPageHeaderHost, useLayoutStore } from './chunk-HKGTF2YA.js';
3
3
  import { cn, Button } from './chunk-OKZ6WQB3.js';
4
- import { getLucideIcon } from './chunk-4GK6IHOI.js';
4
+ import { getLucideIcon } from './chunk-AIUHVTVK.js';
5
5
  import * as React from 'react';
6
6
  import { SlidersHorizontal, RotateCcw, Check, Circle, WandSparkles, ArrowRight, TrendingUp, TrendingDown, EyeOff } from 'lucide-react';
7
7
  import { hashRouterAdapter, useTranslation, usePluginRuntime, getDashboardWidgets, resolvePluginComponent } from '@fayz-ai/core';
@@ -866,5 +866,5 @@ var defineOnboardingWidget = (input) => build("onboarding", 2, input);
866
866
  var defineCustomWidget = (input) => build("custom", 2, input);
867
867
 
868
868
  export { ChartWidget, DEFAULT_RANGE_OPTIONS, DashboardCanvas, DashboardCustomizeMenu, DashboardGrid, DashboardNavigateProvider, DashboardRangeControl, DashboardRangeProvider, GoldCard, KpiCard, OnboardingWidget, SidebarOnboarding, Sparkline, TableWidget, WidgetGrid, defineChartWidget, defineCustomWidget, defineKpiWidget, defineOnboardingWidget, defineTableWidget, formatKpiValue, renderIcon, resolveDashboardLayout, useDashboardNavigate, useDashboardPreferences, useDashboardRange, useOnboardingProgress };
869
- //# sourceMappingURL=chunk-ZLPYNHXH.js.map
870
- //# sourceMappingURL=chunk-ZLPYNHXH.js.map
869
+ //# sourceMappingURL=chunk-MBGTFL4I.js.map
870
+ //# sourceMappingURL=chunk-MBGTFL4I.js.map