@misael703/ui 1.62.0 → 1.62.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/{chunk-ORQPCZNF.mjs → chunk-2GCYYHNG.mjs} +20 -14
- package/dist/chunk-2GCYYHNG.mjs.map +1 -0
- package/dist/{chunk-F2MD6DAE.js → chunk-FI2XCF3F.js} +3 -3
- package/dist/chunk-FI2XCF3F.js.map +1 -0
- package/dist/{chunk-5G3DVB5B.mjs → chunk-GL5C55DU.mjs} +3 -3
- package/dist/{chunk-5G3DVB5B.mjs.map → chunk-GL5C55DU.mjs.map} +1 -1
- package/dist/{chunk-NUTHJQYH.js → chunk-JNISZPSL.js} +4 -4
- package/dist/{chunk-NUTHJQYH.js.map → chunk-JNISZPSL.js.map} +1 -1
- package/dist/{chunk-IKMKQUUR.js → chunk-K4VUQFUA.js} +20 -14
- package/dist/{chunk-IKMKQUUR.js.map → chunk-K4VUQFUA.js.map} +1 -1
- package/dist/{chunk-DLPTIVZB.mjs → chunk-NHSPQDB2.mjs} +3 -3
- package/dist/{chunk-DLPTIVZB.mjs.map → chunk-NHSPQDB2.mjs.map} +1 -1
- package/dist/{chunk-M7QZCHMM.js → chunk-O4TKMQEY.js} +3 -3
- package/dist/{chunk-M7QZCHMM.js.map → chunk-O4TKMQEY.js.map} +1 -1
- package/dist/{chunk-B6PQAH5C.mjs → chunk-TJ5LRNVT.mjs} +3 -3
- package/dist/chunk-TJ5LRNVT.mjs.map +1 -0
- package/dist/{chunk-2UW2K5MV.mjs → chunk-UQJU332W.mjs} +3 -3
- package/dist/{chunk-2UW2K5MV.mjs.map → chunk-UQJU332W.mjs.map} +1 -1
- package/dist/{chunk-E6BTT4I7.js → chunk-V7MNWM6L.js} +4 -4
- package/dist/{chunk-E6BTT4I7.js.map → chunk-V7MNWM6L.js.map} +1 -1
- package/dist/{chunk-324O7B3R.js → chunk-X4EESFGG.js} +3 -3
- package/dist/{chunk-324O7B3R.js.map → chunk-X4EESFGG.js.map} +1 -1
- package/dist/{chunk-GNI5MH36.mjs → chunk-YKFZCOOB.mjs} +3 -3
- package/dist/{chunk-GNI5MH36.mjs.map → chunk-YKFZCOOB.mjs.map} +1 -1
- package/dist/components/AdvancedPickers.js +6 -6
- package/dist/components/AdvancedPickers.mjs +1 -1
- package/dist/components/AppShell.js +4 -4
- package/dist/components/AppShell.mjs +2 -2
- package/dist/components/Charts.d.mts +7 -1
- package/dist/components/Charts.d.ts +7 -1
- package/dist/components/Charts.js +6 -6
- package/dist/components/Charts.mjs +1 -1
- package/dist/components/Commerce.js +14 -14
- package/dist/components/Commerce.mjs +3 -3
- package/dist/components/Editing.js +9 -9
- package/dist/components/Editing.mjs +3 -3
- package/dist/components/Overlay.js +4 -4
- package/dist/components/Overlay.mjs +2 -2
- package/dist/hooks/index.js +5 -5
- package/dist/hooks/index.mjs +1 -1
- package/dist/index.js +39 -39
- package/dist/index.mjs +8 -8
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-B6PQAH5C.mjs.map +0 -1
- package/dist/chunk-F2MD6DAE.js.map +0 -1
- package/dist/chunk-ORQPCZNF.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Commerce.tsx"],"names":["jsx","cx","Star","getBrand","jsxs","Fragment","useLocale","Minus","Plus","Check","Heart","React","Drawer","Trash","format","X"],"mappings":"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","file":"chunk-NUTHJQYH.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Drawer } from './Overlay';\nimport { Heart, Minus, Plus, Star, Trash, X, Check } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- Rating ------------------------------------------------------\nexport interface RatingProps {\n value: number; // 0..max\n max?: number; // default 5\n /** Si se pasa, se vuelve interactivo. */\n onChange?: (value: number) => void;\n size?: number;\n /** Permite medias estrellas (display only). */\n allowHalf?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Rating({\n value, max = 5, onChange, size = 16, allowHalf = true, className, ariaLabel,\n}: RatingProps) {\n const isInteractive = !!onChange;\n return (\n <div\n className={cx('rating', isInteractive && 'rating--interactive', className)}\n role={isInteractive ? 'slider' : 'img'}\n aria-label={ariaLabel ?? `${value} de ${max} estrellas`}\n aria-valuenow={isInteractive ? value : undefined}\n aria-valuemin={isInteractive ? 0 : undefined}\n aria-valuemax={isInteractive ? max : undefined}\n >\n {Array.from({ length: max }, (_, i) => {\n const idx = i + 1;\n const fill = value >= idx ? 1 : (allowHalf && value >= idx - 0.5 ? 0.5 : 0);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('rating__star', fill === 1 && 'is-full', fill === 0.5 && 'is-half')}\n disabled={!isInteractive}\n onClick={() => onChange?.(idx)}\n aria-label={`${idx} ${idx === 1 ? 'estrella' : 'estrellas'}`}\n >\n <Star size={size} />\n </button>\n );\n })}\n </div>\n );\n}\n\n// ---------- PriceDisplay -----------------------------------------------\nexport interface PriceDisplayProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n amount: number;\n /** Precio original tachado (para descuentos). */\n compareAt?: number;\n /** ISO 4217. Default desde `getBrand().currency`. */\n currency?: string;\n /** BCP 47. Default desde `getBrand().locale`. */\n locale?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Muestra \"% off\" si hay compareAt. Default: true. */\n showDiscount?: boolean;\n}\n\nexport function PriceDisplay({\n amount, compareAt, currency, locale,\n size = 'md', showDiscount = true, className, ...rest\n}: PriceDisplayProps) {\n const brand = getBrand();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const hasDiscount = compareAt != null && compareAt > amount;\n const discount = hasDiscount ? Math.round(((compareAt - amount) / compareAt) * 100) : 0;\n\n return (\n <div className={cx('price', `price--${size}`, className)} {...rest}>\n <span className=\"price__amount\">{fmt(amount)}</span>\n {hasDiscount && (\n <>\n <span className=\"price__compare\"><del>{fmt(compareAt)}</del></span>\n {showDiscount && discount > 0 && (\n <span className=\"price__discount\">-{discount}%</span>\n )}\n </>\n )}\n </div>\n );\n}\n\n// ---------- QuantitySelector (compacto) --------------------------------\nexport interface QuantitySelectorProps {\n value: number;\n onChange: (v: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n id?: string;\n}\n\nexport function QuantitySelector({\n value, onChange, min = 1, max, step = 1, disabled, size = 'md', className, id,\n}: QuantitySelectorProps) {\n const t = useLocale();\n const set = (next: number) => {\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange(v);\n };\n const dec = () => set(value - step);\n const inc = () => set(value + step);\n return (\n <div className={cx('qty', `qty--${size}`, disabled && 'is-disabled', className)}>\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.decreaseQty']}\n onClick={dec}\n disabled={disabled || (typeof min === 'number' && value <= min)}\n >\n <Minus size={14} />\n </button>\n <input\n id={id}\n type=\"number\"\n className=\"qty__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(Number(e.target.value))}\n aria-label={t['commerce.quantity']}\n />\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.increaseQty']}\n onClick={inc}\n disabled={disabled || (typeof max === 'number' && value >= max)}\n >\n <Plus size={14} />\n </button>\n </div>\n );\n}\n\n// ---------- VariantSelector --------------------------------------------\nexport interface VariantOption<T = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n /** Color hex/rgb para chips de tipo \"color\". */\n swatch?: string;\n}\n\nexport interface VariantSelectorProps<T = string> {\n label?: React.ReactNode;\n options: VariantOption<T>[];\n value: T | null;\n onChange: (value: T) => void;\n /** 'chip' (default), 'swatch' (círculos de color). */\n appearance?: 'chip' | 'swatch';\n className?: string;\n}\n\nexport function VariantSelector<T extends string | number = string>({\n label, options, value, onChange, appearance = 'chip', className,\n}: VariantSelectorProps<T>) {\n return (\n <div className={cx('variants', className)}>\n {label && <div className=\"variants__label\">{label}</div>}\n <div className={cx('variants__options', `variants__options--${appearance}`)} role=\"radiogroup\">\n {options.map((o) => {\n const selected = value === o.value;\n if (appearance === 'swatch') {\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__swatch', selected && 'is-selected', o.disabled && 'is-disabled')}\n style={{ background: o.swatch }}\n title={typeof o.label === 'string' ? o.label : String(o.value)}\n aria-label={typeof o.label === 'string' ? o.label : String(o.value)}\n onClick={() => onChange(o.value)}\n >\n {selected && <Check size={14} />}\n </button>\n );\n }\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__chip', selected && 'is-selected', o.disabled && 'is-disabled')}\n onClick={() => onChange(o.value)}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ---------- WishlistButton ---------------------------------------------\nexport interface WishlistButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n active?: boolean;\n onToggle?: (next: boolean) => void;\n size?: number;\n}\n\nexport function WishlistButton({ active = false, onToggle, size = 20, className, ...rest }: WishlistButtonProps) {\n const t = useLocale();\n return (\n <button\n type=\"button\"\n className={cx('wishlist', active && 'is-active', className)}\n aria-label={active ? t['commerce.removeFavorite'] : t['commerce.addFavorite']}\n aria-pressed={active}\n onClick={() => onToggle?.(!active)}\n {...rest}\n >\n <Heart size={size} />\n </button>\n );\n}\n\n// ---------- PromoCodeInput ---------------------------------------------\nexport interface PromoCodeInputProps {\n /** Validador async. Resuelve con un mensaje de éxito o lanza un Error con el mensaje. */\n onApply: (code: string) => Promise<string>;\n placeholder?: string;\n buttonLabel?: string;\n className?: string;\n id?: string;\n}\n\nexport function PromoCodeInput({\n onApply, placeholder,\n buttonLabel, className, id,\n}: PromoCodeInputProps) {\n const [code, setCode] = React.useState('');\n const [state, setState] = React.useState<'idle' | 'loading' | 'success' | 'error'>('idle');\n const [message, setMessage] = React.useState<string | null>(null);\n const t = useLocale();\n const ph = placeholder ?? t['commerce.promoPlaceholder'];\n const btn = buttonLabel ?? t['commerce.applyCoupon'];\n\n const apply = async () => {\n if (!code.trim()) return;\n setState('loading');\n setMessage(null);\n try {\n const msg = await onApply(code.trim());\n setState('success');\n setMessage(msg);\n } catch (err) {\n setState('error');\n setMessage(err instanceof Error ? err.message : t['commerce.promoInvalid']);\n }\n };\n\n return (\n <div className={cx('promo', state === 'success' && 'is-success', state === 'error' && 'is-error', className)}>\n <div className=\"promo__row\">\n <input\n id={id}\n type=\"text\"\n className=\"input promo__input\"\n value={code}\n placeholder={ph}\n disabled={state === 'loading' || state === 'success'}\n onChange={(e) => { setCode(e.target.value.toUpperCase()); if (state !== 'idle') setState('idle'); }}\n onKeyDown={(e) => e.key === 'Enter' && apply()}\n />\n <button\n type=\"button\"\n className=\"btn btn--primary btn--md\"\n disabled={!code.trim() || state === 'loading' || state === 'success'}\n onClick={apply}\n >\n {state === 'loading' ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : btn}\n </button>\n </div>\n {message && <div className={cx('promo__message', `promo__message--${state}`)}>{message}</div>}\n </div>\n );\n}\n\n// ---------- FreeShippingProgress ---------------------------------------\nexport interface FreeShippingProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Subtotal actual del cart. */\n current: number;\n /** Threshold para envío gratis. */\n threshold: number;\n currency?: string;\n locale?: string;\n achievedMessage?: React.ReactNode;\n}\n\nexport function FreeShippingProgress({\n current, threshold, currency, locale,\n achievedMessage,\n className, ...rest\n}: FreeShippingProgressProps) {\n const brand = getBrand();\n const t = useLocale();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const pct = Math.min(100, (current / threshold) * 100);\n const remaining = Math.max(0, threshold - current);\n const achieved = current >= threshold;\n const successMsg = achievedMessage ?? t['commerce.shippingAchieved'];\n\n return (\n <div className={cx('shipping-progress', achieved && 'is-achieved', className)} {...rest}>\n <div className=\"shipping-progress__text\">\n {achieved ? successMsg : <>{t['commerce.shippingPrefix']}<strong>{fmt(remaining)}</strong>{t['commerce.shippingSuffix']}</>}\n </div>\n <div className=\"shipping-progress__track\" aria-hidden=\"true\">\n <div className=\"shipping-progress__bar\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n}\n\n// ---------- CartDrawer + line items ------------------------------------\nexport interface CartLineItem {\n id: string;\n name: React.ReactNode;\n variant?: React.ReactNode;\n image?: string;\n unitPrice: number;\n quantity: number;\n}\n\nexport interface CartDrawerProps {\n open: boolean;\n onClose: () => void;\n items: CartLineItem[];\n onQuantityChange?: (id: string, qty: number) => void;\n onRemove?: (id: string) => void;\n onCheckout?: () => void;\n freeShippingThreshold?: number;\n currency?: string;\n locale?: string;\n}\n\nexport function CartDrawer({\n open, onClose, items,\n onQuantityChange, onRemove, onCheckout,\n freeShippingThreshold, currency, locale,\n}: CartDrawerProps) {\n const brand = getBrand();\n const t = useLocale();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const subtotal = items.reduce((sum, it) => sum + it.unitPrice * it.quantity, 0);\n const fmt = (n: number) =>\n new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }).format(n);\n\n return (\n <Drawer\n open={open}\n onClose={onClose}\n title={t['commerce.cartTitle']}\n footer={\n <div className=\"cart__footer\">\n {freeShippingThreshold != null && (\n <FreeShippingProgress current={subtotal} threshold={freeShippingThreshold} currency={resolvedCurrency} locale={resolvedLocale} />\n )}\n <div className=\"cart__totals\">\n <span>{t['commerce.subtotal']}</span>\n <strong>{fmt(subtotal)}</strong>\n </div>\n <button type=\"button\" className=\"btn btn--primary btn--lg btn--block\" disabled={items.length === 0} onClick={onCheckout}>\n {t['commerce.checkout']}\n </button>\n </div>\n }\n >\n {items.length === 0 ? (\n <div className=\"cart__empty\">{t['commerce.cartEmpty']}</div>\n ) : (\n <ul className=\"cart__list\">\n {items.map((it) => (\n <li key={it.id} className=\"cart__item\">\n <div className=\"cart__item-media\">\n {it.image ? <img src={it.image} alt=\"\" /> : <div className=\"cart__item-placeholder\" />}\n </div>\n <div className=\"cart__item-body\">\n <div className=\"cart__item-name\">{it.name}</div>\n {it.variant && <div className=\"cart__item-variant\">{it.variant}</div>}\n <div className=\"cart__item-price\">{fmt(it.unitPrice)}</div>\n </div>\n <div className=\"cart__item-actions\">\n {onQuantityChange ? (\n <QuantitySelector\n size=\"sm\"\n value={it.quantity}\n onChange={(q) => onQuantityChange(it.id, q)}\n />\n ) : (\n <span className=\"cart__item-qty\">x{it.quantity}</span>\n )}\n {onRemove && (\n <button\n type=\"button\"\n className=\"cart__item-remove\"\n aria-label={t['commerce.removeFromCart']}\n onClick={() => onRemove(it.id)}\n >\n <Trash size={14} />\n </button>\n )}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Drawer>\n );\n}\n\n// ---------- OrderSummary ------------------------------------------------\nexport interface OrderLineRow {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Aplica estilo de total (negrita, más grande). */\n emphasis?: boolean;\n}\n\nexport interface OrderSummaryProps extends Omit<React.HTMLAttributes<HTMLDListElement>, 'title'> {\n rows: OrderLineRow[];\n title?: React.ReactNode;\n}\n\nexport function OrderSummary({ rows, title, className, ...rest }: OrderSummaryProps) {\n return (\n <div className={cx('order-summary', className)}>\n {title && <div className=\"order-summary__title\">{title}</div>}\n <dl className=\"order-summary__list\" {...rest}>\n {rows.map((r, i) => (\n <div key={i} className={cx('order-summary__row', r.emphasis && 'is-emphasis')}>\n <dt>{r.label}</dt>\n <dd>{r.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\n// ---------- AddressForm (generic field composer) -----------------------\n// The kit doesn't ship country-specific fields. Consumers pass a `fields`\n// array describing which inputs to render and the order. For Chile, that\n// means defining `[{ key: 'rut', ... }, { key: 'comuna', ... }, ...]` in\n// app code. For other markets, define different fields.\n//\n// Layout: each field declares its `width` ('full' | 'half' | 'third').\n// The form renders in a 6-column CSS grid, where 'full' spans 6, 'half'\n// spans 3, and 'third' spans 2. On narrow viewports everything stacks.\n\nexport interface AddressFieldOption {\n value: string;\n label: React.ReactNode;\n}\n\nexport interface AddressField {\n /** Key del campo en el objeto `value`. */\n key: string;\n label: React.ReactNode;\n type?: 'text' | 'select' | 'textarea';\n placeholder?: string;\n /** Solo para `type: 'select'`. */\n options?: readonly AddressFieldOption[];\n /** Placeholder de la opción vacía. Default: 'Selecciona…' (locale: `common.search` no aplica). */\n selectPlaceholder?: string;\n /** Anchura en una grilla de 6 columnas. Default: 'full'. */\n width?: 'full' | 'half' | 'third';\n /** Solo para `type: 'textarea'`. */\n rows?: number;\n}\n\nexport interface AddressFormProps {\n fields: AddressField[];\n value: Record<string, string>;\n onChange: (value: Record<string, string>) => void;\n className?: string;\n}\n\nexport function AddressForm({ fields, value, onChange, className }: AddressFormProps) {\n const reactId = React.useId();\n const set = (key: string, v: string) => onChange({ ...value, [key]: v });\n\n return (\n <div className={cx('address-form', className)}>\n {fields.map((f) => {\n const id = `${reactId}-${f.key}`;\n const width = f.width ?? 'full';\n const v = value[f.key] ?? '';\n return (\n <div key={f.key} className={cx('form-field', `address-form__field--${width}`)}>\n <label className=\"label\" htmlFor={id}>{f.label}</label>\n {f.type === 'select' ? (\n <select\n id={id}\n className=\"select\"\n value={v}\n onChange={(e) => set(f.key, e.target.value)}\n >\n <option value=\"\">{f.selectPlaceholder ?? 'Selecciona…'}</option>\n {f.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {typeof o.label === 'string' ? o.label : o.value}\n </option>\n ))}\n </select>\n ) : f.type === 'textarea' ? (\n <textarea\n id={id}\n className=\"textarea\"\n value={v}\n placeholder={f.placeholder}\n rows={f.rows ?? 2}\n onChange={(e) => set(f.key, e.target.value)}\n />\n ) : (\n <input\n id={id}\n className=\"input\"\n value={v}\n placeholder={f.placeholder}\n onChange={(e) => set(f.key, e.target.value)}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n// ---------- CompareTable -----------------------------------------------\nexport interface CompareItem {\n id: string;\n name: React.ReactNode;\n image?: string;\n price?: React.ReactNode;\n}\n\nexport interface CompareAttribute {\n key: string;\n label: React.ReactNode;\n /** Valor por item, indexado por id. */\n values: Record<string, React.ReactNode>;\n}\n\nexport interface CompareTableProps extends React.HTMLAttributes<HTMLTableElement> {\n items: CompareItem[];\n attributes: CompareAttribute[];\n onRemove?: (id: string) => void;\n}\n\nexport function CompareTable({ items, attributes, onRemove, className, ...rest }: CompareTableProps) {\n const t = useLocale();\n return (\n <div className={cx('compare', className)}>\n <table className=\"compare__table\" {...rest}>\n <thead>\n <tr>\n <th />\n {items.map((it) => (\n <th key={it.id} scope=\"col\">\n <div className=\"compare__head\">\n {it.image && <img src={it.image} alt=\"\" className=\"compare__img\" />}\n <div className=\"compare__name\">{it.name}</div>\n {it.price && <div className=\"compare__price\">{it.price}</div>}\n {onRemove && (\n <button\n type=\"button\"\n className=\"compare__remove\"\n aria-label={format(t['commerce.removeItem'], { name: typeof it.name === 'string' ? it.name : 'item' })}\n onClick={() => onRemove(it.id)}\n >\n <X size={14} />\n </button>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {attributes.map((attr) => (\n <tr key={attr.key}>\n <th scope=\"row\" className=\"compare__attr\">{attr.label}</th>\n {items.map((it) => (\n <td key={it.id} className=\"compare__cell\">{attr.values[it.id] ?? '—'}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Commerce.tsx"],"names":["jsx","cx","Star","getBrand","jsxs","Fragment","useLocale","Minus","Plus","Check","Heart","React","Drawer","Trash","format","X"],"mappings":"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","file":"chunk-JNISZPSL.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Drawer } from './Overlay';\nimport { Heart, Minus, Plus, Star, Trash, X, Check } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- Rating ------------------------------------------------------\nexport interface RatingProps {\n value: number; // 0..max\n max?: number; // default 5\n /** Si se pasa, se vuelve interactivo. */\n onChange?: (value: number) => void;\n size?: number;\n /** Permite medias estrellas (display only). */\n allowHalf?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Rating({\n value, max = 5, onChange, size = 16, allowHalf = true, className, ariaLabel,\n}: RatingProps) {\n const isInteractive = !!onChange;\n return (\n <div\n className={cx('rating', isInteractive && 'rating--interactive', className)}\n role={isInteractive ? 'slider' : 'img'}\n aria-label={ariaLabel ?? `${value} de ${max} estrellas`}\n aria-valuenow={isInteractive ? value : undefined}\n aria-valuemin={isInteractive ? 0 : undefined}\n aria-valuemax={isInteractive ? max : undefined}\n >\n {Array.from({ length: max }, (_, i) => {\n const idx = i + 1;\n const fill = value >= idx ? 1 : (allowHalf && value >= idx - 0.5 ? 0.5 : 0);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('rating__star', fill === 1 && 'is-full', fill === 0.5 && 'is-half')}\n disabled={!isInteractive}\n onClick={() => onChange?.(idx)}\n aria-label={`${idx} ${idx === 1 ? 'estrella' : 'estrellas'}`}\n >\n <Star size={size} />\n </button>\n );\n })}\n </div>\n );\n}\n\n// ---------- PriceDisplay -----------------------------------------------\nexport interface PriceDisplayProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n amount: number;\n /** Precio original tachado (para descuentos). */\n compareAt?: number;\n /** ISO 4217. Default desde `getBrand().currency`. */\n currency?: string;\n /** BCP 47. Default desde `getBrand().locale`. */\n locale?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Muestra \"% off\" si hay compareAt. Default: true. */\n showDiscount?: boolean;\n}\n\nexport function PriceDisplay({\n amount, compareAt, currency, locale,\n size = 'md', showDiscount = true, className, ...rest\n}: PriceDisplayProps) {\n const brand = getBrand();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const hasDiscount = compareAt != null && compareAt > amount;\n const discount = hasDiscount ? Math.round(((compareAt - amount) / compareAt) * 100) : 0;\n\n return (\n <div className={cx('price', `price--${size}`, className)} {...rest}>\n <span className=\"price__amount\">{fmt(amount)}</span>\n {hasDiscount && (\n <>\n <span className=\"price__compare\"><del>{fmt(compareAt)}</del></span>\n {showDiscount && discount > 0 && (\n <span className=\"price__discount\">-{discount}%</span>\n )}\n </>\n )}\n </div>\n );\n}\n\n// ---------- QuantitySelector (compacto) --------------------------------\nexport interface QuantitySelectorProps {\n value: number;\n onChange: (v: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n id?: string;\n}\n\nexport function QuantitySelector({\n value, onChange, min = 1, max, step = 1, disabled, size = 'md', className, id,\n}: QuantitySelectorProps) {\n const t = useLocale();\n const set = (next: number) => {\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange(v);\n };\n const dec = () => set(value - step);\n const inc = () => set(value + step);\n return (\n <div className={cx('qty', `qty--${size}`, disabled && 'is-disabled', className)}>\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.decreaseQty']}\n onClick={dec}\n disabled={disabled || (typeof min === 'number' && value <= min)}\n >\n <Minus size={14} />\n </button>\n <input\n id={id}\n type=\"number\"\n className=\"qty__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(Number(e.target.value))}\n aria-label={t['commerce.quantity']}\n />\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.increaseQty']}\n onClick={inc}\n disabled={disabled || (typeof max === 'number' && value >= max)}\n >\n <Plus size={14} />\n </button>\n </div>\n );\n}\n\n// ---------- VariantSelector --------------------------------------------\nexport interface VariantOption<T = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n /** Color hex/rgb para chips de tipo \"color\". */\n swatch?: string;\n}\n\nexport interface VariantSelectorProps<T = string> {\n label?: React.ReactNode;\n options: VariantOption<T>[];\n value: T | null;\n onChange: (value: T) => void;\n /** 'chip' (default), 'swatch' (círculos de color). */\n appearance?: 'chip' | 'swatch';\n className?: string;\n}\n\nexport function VariantSelector<T extends string | number = string>({\n label, options, value, onChange, appearance = 'chip', className,\n}: VariantSelectorProps<T>) {\n return (\n <div className={cx('variants', className)}>\n {label && <div className=\"variants__label\">{label}</div>}\n <div className={cx('variants__options', `variants__options--${appearance}`)} role=\"radiogroup\">\n {options.map((o) => {\n const selected = value === o.value;\n if (appearance === 'swatch') {\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__swatch', selected && 'is-selected', o.disabled && 'is-disabled')}\n style={{ background: o.swatch }}\n title={typeof o.label === 'string' ? o.label : String(o.value)}\n aria-label={typeof o.label === 'string' ? o.label : String(o.value)}\n onClick={() => onChange(o.value)}\n >\n {selected && <Check size={14} />}\n </button>\n );\n }\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__chip', selected && 'is-selected', o.disabled && 'is-disabled')}\n onClick={() => onChange(o.value)}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ---------- WishlistButton ---------------------------------------------\nexport interface WishlistButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n active?: boolean;\n onToggle?: (next: boolean) => void;\n size?: number;\n}\n\nexport function WishlistButton({ active = false, onToggle, size = 20, className, ...rest }: WishlistButtonProps) {\n const t = useLocale();\n return (\n <button\n type=\"button\"\n className={cx('wishlist', active && 'is-active', className)}\n aria-label={active ? t['commerce.removeFavorite'] : t['commerce.addFavorite']}\n aria-pressed={active}\n onClick={() => onToggle?.(!active)}\n {...rest}\n >\n <Heart size={size} />\n </button>\n );\n}\n\n// ---------- PromoCodeInput ---------------------------------------------\nexport interface PromoCodeInputProps {\n /** Validador async. Resuelve con un mensaje de éxito o lanza un Error con el mensaje. */\n onApply: (code: string) => Promise<string>;\n placeholder?: string;\n buttonLabel?: string;\n className?: string;\n id?: string;\n}\n\nexport function PromoCodeInput({\n onApply, placeholder,\n buttonLabel, className, id,\n}: PromoCodeInputProps) {\n const [code, setCode] = React.useState('');\n const [state, setState] = React.useState<'idle' | 'loading' | 'success' | 'error'>('idle');\n const [message, setMessage] = React.useState<string | null>(null);\n const t = useLocale();\n const ph = placeholder ?? t['commerce.promoPlaceholder'];\n const btn = buttonLabel ?? t['commerce.applyCoupon'];\n\n const apply = async () => {\n if (!code.trim()) return;\n setState('loading');\n setMessage(null);\n try {\n const msg = await onApply(code.trim());\n setState('success');\n setMessage(msg);\n } catch (err) {\n setState('error');\n setMessage(err instanceof Error ? err.message : t['commerce.promoInvalid']);\n }\n };\n\n return (\n <div className={cx('promo', state === 'success' && 'is-success', state === 'error' && 'is-error', className)}>\n <div className=\"promo__row\">\n <input\n id={id}\n type=\"text\"\n className=\"input promo__input\"\n value={code}\n placeholder={ph}\n disabled={state === 'loading' || state === 'success'}\n onChange={(e) => { setCode(e.target.value.toUpperCase()); if (state !== 'idle') setState('idle'); }}\n onKeyDown={(e) => e.key === 'Enter' && apply()}\n />\n <button\n type=\"button\"\n className=\"btn btn--primary btn--md\"\n disabled={!code.trim() || state === 'loading' || state === 'success'}\n onClick={apply}\n >\n {state === 'loading' ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : btn}\n </button>\n </div>\n {message && <div className={cx('promo__message', `promo__message--${state}`)}>{message}</div>}\n </div>\n );\n}\n\n// ---------- FreeShippingProgress ---------------------------------------\nexport interface FreeShippingProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Subtotal actual del cart. */\n current: number;\n /** Threshold para envío gratis. */\n threshold: number;\n currency?: string;\n locale?: string;\n achievedMessage?: React.ReactNode;\n}\n\nexport function FreeShippingProgress({\n current, threshold, currency, locale,\n achievedMessage,\n className, ...rest\n}: FreeShippingProgressProps) {\n const brand = getBrand();\n const t = useLocale();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const pct = Math.min(100, (current / threshold) * 100);\n const remaining = Math.max(0, threshold - current);\n const achieved = current >= threshold;\n const successMsg = achievedMessage ?? t['commerce.shippingAchieved'];\n\n return (\n <div className={cx('shipping-progress', achieved && 'is-achieved', className)} {...rest}>\n <div className=\"shipping-progress__text\">\n {achieved ? successMsg : <>{t['commerce.shippingPrefix']}<strong>{fmt(remaining)}</strong>{t['commerce.shippingSuffix']}</>}\n </div>\n <div className=\"shipping-progress__track\" aria-hidden=\"true\">\n <div className=\"shipping-progress__bar\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n}\n\n// ---------- CartDrawer + line items ------------------------------------\nexport interface CartLineItem {\n id: string;\n name: React.ReactNode;\n variant?: React.ReactNode;\n image?: string;\n unitPrice: number;\n quantity: number;\n}\n\nexport interface CartDrawerProps {\n open: boolean;\n onClose: () => void;\n items: CartLineItem[];\n onQuantityChange?: (id: string, qty: number) => void;\n onRemove?: (id: string) => void;\n onCheckout?: () => void;\n freeShippingThreshold?: number;\n currency?: string;\n locale?: string;\n}\n\nexport function CartDrawer({\n open, onClose, items,\n onQuantityChange, onRemove, onCheckout,\n freeShippingThreshold, currency, locale,\n}: CartDrawerProps) {\n const brand = getBrand();\n const t = useLocale();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const subtotal = items.reduce((sum, it) => sum + it.unitPrice * it.quantity, 0);\n const fmt = (n: number) =>\n new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }).format(n);\n\n return (\n <Drawer\n open={open}\n onClose={onClose}\n title={t['commerce.cartTitle']}\n footer={\n <div className=\"cart__footer\">\n {freeShippingThreshold != null && (\n <FreeShippingProgress current={subtotal} threshold={freeShippingThreshold} currency={resolvedCurrency} locale={resolvedLocale} />\n )}\n <div className=\"cart__totals\">\n <span>{t['commerce.subtotal']}</span>\n <strong>{fmt(subtotal)}</strong>\n </div>\n <button type=\"button\" className=\"btn btn--primary btn--lg btn--block\" disabled={items.length === 0} onClick={onCheckout}>\n {t['commerce.checkout']}\n </button>\n </div>\n }\n >\n {items.length === 0 ? (\n <div className=\"cart__empty\">{t['commerce.cartEmpty']}</div>\n ) : (\n <ul className=\"cart__list\">\n {items.map((it) => (\n <li key={it.id} className=\"cart__item\">\n <div className=\"cart__item-media\">\n {it.image ? <img src={it.image} alt=\"\" /> : <div className=\"cart__item-placeholder\" />}\n </div>\n <div className=\"cart__item-body\">\n <div className=\"cart__item-name\">{it.name}</div>\n {it.variant && <div className=\"cart__item-variant\">{it.variant}</div>}\n <div className=\"cart__item-price\">{fmt(it.unitPrice)}</div>\n </div>\n <div className=\"cart__item-actions\">\n {onQuantityChange ? (\n <QuantitySelector\n size=\"sm\"\n value={it.quantity}\n onChange={(q) => onQuantityChange(it.id, q)}\n />\n ) : (\n <span className=\"cart__item-qty\">x{it.quantity}</span>\n )}\n {onRemove && (\n <button\n type=\"button\"\n className=\"cart__item-remove\"\n aria-label={t['commerce.removeFromCart']}\n onClick={() => onRemove(it.id)}\n >\n <Trash size={14} />\n </button>\n )}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Drawer>\n );\n}\n\n// ---------- OrderSummary ------------------------------------------------\nexport interface OrderLineRow {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Aplica estilo de total (negrita, más grande). */\n emphasis?: boolean;\n}\n\nexport interface OrderSummaryProps extends Omit<React.HTMLAttributes<HTMLDListElement>, 'title'> {\n rows: OrderLineRow[];\n title?: React.ReactNode;\n}\n\nexport function OrderSummary({ rows, title, className, ...rest }: OrderSummaryProps) {\n return (\n <div className={cx('order-summary', className)}>\n {title && <div className=\"order-summary__title\">{title}</div>}\n <dl className=\"order-summary__list\" {...rest}>\n {rows.map((r, i) => (\n <div key={i} className={cx('order-summary__row', r.emphasis && 'is-emphasis')}>\n <dt>{r.label}</dt>\n <dd>{r.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\n// ---------- AddressForm (generic field composer) -----------------------\n// The kit doesn't ship country-specific fields. Consumers pass a `fields`\n// array describing which inputs to render and the order. For Chile, that\n// means defining `[{ key: 'rut', ... }, { key: 'comuna', ... }, ...]` in\n// app code. For other markets, define different fields.\n//\n// Layout: each field declares its `width` ('full' | 'half' | 'third').\n// The form renders in a 6-column CSS grid, where 'full' spans 6, 'half'\n// spans 3, and 'third' spans 2. On narrow viewports everything stacks.\n\nexport interface AddressFieldOption {\n value: string;\n label: React.ReactNode;\n}\n\nexport interface AddressField {\n /** Key del campo en el objeto `value`. */\n key: string;\n label: React.ReactNode;\n type?: 'text' | 'select' | 'textarea';\n placeholder?: string;\n /** Solo para `type: 'select'`. */\n options?: readonly AddressFieldOption[];\n /** Placeholder de la opción vacía. Default: 'Selecciona…' (locale: `common.search` no aplica). */\n selectPlaceholder?: string;\n /** Anchura en una grilla de 6 columnas. Default: 'full'. */\n width?: 'full' | 'half' | 'third';\n /** Solo para `type: 'textarea'`. */\n rows?: number;\n}\n\nexport interface AddressFormProps {\n fields: AddressField[];\n value: Record<string, string>;\n onChange: (value: Record<string, string>) => void;\n className?: string;\n}\n\nexport function AddressForm({ fields, value, onChange, className }: AddressFormProps) {\n const reactId = React.useId();\n const set = (key: string, v: string) => onChange({ ...value, [key]: v });\n\n return (\n <div className={cx('address-form', className)}>\n {fields.map((f) => {\n const id = `${reactId}-${f.key}`;\n const width = f.width ?? 'full';\n const v = value[f.key] ?? '';\n return (\n <div key={f.key} className={cx('form-field', `address-form__field--${width}`)}>\n <label className=\"label\" htmlFor={id}>{f.label}</label>\n {f.type === 'select' ? (\n <select\n id={id}\n className=\"select\"\n value={v}\n onChange={(e) => set(f.key, e.target.value)}\n >\n <option value=\"\">{f.selectPlaceholder ?? 'Selecciona…'}</option>\n {f.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {typeof o.label === 'string' ? o.label : o.value}\n </option>\n ))}\n </select>\n ) : f.type === 'textarea' ? (\n <textarea\n id={id}\n className=\"textarea\"\n value={v}\n placeholder={f.placeholder}\n rows={f.rows ?? 2}\n onChange={(e) => set(f.key, e.target.value)}\n />\n ) : (\n <input\n id={id}\n className=\"input\"\n value={v}\n placeholder={f.placeholder}\n onChange={(e) => set(f.key, e.target.value)}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n// ---------- CompareTable -----------------------------------------------\nexport interface CompareItem {\n id: string;\n name: React.ReactNode;\n image?: string;\n price?: React.ReactNode;\n}\n\nexport interface CompareAttribute {\n key: string;\n label: React.ReactNode;\n /** Valor por item, indexado por id. */\n values: Record<string, React.ReactNode>;\n}\n\nexport interface CompareTableProps extends React.HTMLAttributes<HTMLTableElement> {\n items: CompareItem[];\n attributes: CompareAttribute[];\n onRemove?: (id: string) => void;\n}\n\nexport function CompareTable({ items, attributes, onRemove, className, ...rest }: CompareTableProps) {\n const t = useLocale();\n return (\n <div className={cx('compare', className)}>\n <table className=\"compare__table\" {...rest}>\n <thead>\n <tr>\n <th />\n {items.map((it) => (\n <th key={it.id} scope=\"col\">\n <div className=\"compare__head\">\n {it.image && <img src={it.image} alt=\"\" className=\"compare__img\" />}\n <div className=\"compare__name\">{it.name}</div>\n {it.price && <div className=\"compare__price\">{it.price}</div>}\n {onRemove && (\n <button\n type=\"button\"\n className=\"compare__remove\"\n aria-label={format(t['commerce.removeItem'], { name: typeof it.name === 'string' ? it.name : 'item' })}\n onClick={() => onRemove(it.id)}\n >\n <X size={14} />\n </button>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {attributes.map((attr) => (\n <tr key={attr.key}>\n <th scope=\"row\" className=\"compare__attr\">{attr.label}</th>\n {items.map((it) => (\n <td key={it.id} className=\"compare__cell\">{attr.values[it.id] ?? '—'}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
|
|
@@ -240,21 +240,27 @@ function Sparkline({
|
|
|
240
240
|
height = 32,
|
|
241
241
|
color = "var(--color-primary)",
|
|
242
242
|
fill = true,
|
|
243
|
+
interactive = false,
|
|
243
244
|
className,
|
|
244
245
|
ariaLabel
|
|
245
246
|
}) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
{
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
247
|
+
const margin = interactive ? { top: 4, right: 4, bottom: 4, left: 4 } : { top: 2, right: 0, bottom: 2, left: 0 };
|
|
248
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkPASF6T4H_js.cx("sparkline", className), role: "img", "aria-label": ariaLabel, style: { width, height }, children: /* @__PURE__ */ jsxRuntime.jsx(R.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(R.AreaChart, { data, margin, children: [
|
|
249
|
+
interactive && /* @__PURE__ */ jsxRuntime.jsx(R.Tooltip, { contentStyle: { background: "var(--bg-surface)", border: "1px solid var(--border-default)", borderRadius: 8, fontSize: 12 } }),
|
|
250
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
251
|
+
R.Area,
|
|
252
|
+
{
|
|
253
|
+
type: "monotone",
|
|
254
|
+
dataKey,
|
|
255
|
+
stroke: color,
|
|
256
|
+
strokeWidth: 1.5,
|
|
257
|
+
fill: fill ? color : "none",
|
|
258
|
+
fillOpacity: fill ? 0.18 : 0,
|
|
259
|
+
isAnimationActive: false,
|
|
260
|
+
activeDot: interactive ? { r: 2.5, strokeWidth: 0, fill: color } : false
|
|
261
|
+
}
|
|
262
|
+
)
|
|
263
|
+
] }) }) });
|
|
258
264
|
}
|
|
259
265
|
|
|
260
266
|
exports.AreaChart = AreaChart;
|
|
@@ -262,5 +268,5 @@ exports.BarChart = BarChart;
|
|
|
262
268
|
exports.DonutChart = DonutChart;
|
|
263
269
|
exports.LineChart = LineChart;
|
|
264
270
|
exports.Sparkline = Sparkline;
|
|
265
|
-
//# sourceMappingURL=chunk-
|
|
266
|
-
//# sourceMappingURL=chunk-
|
|
271
|
+
//# sourceMappingURL=chunk-K4VUQFUA.js.map
|
|
272
|
+
//# sourceMappingURL=chunk-K4VUQFUA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Charts.tsx"],"names":["jsx","cx","jsxs","Fragment","tooltipProps"],"mappings":"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","file":"chunk-IKMKQUUR.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\n/**\n * Lightweight chart wrappers. We do NOT bundle Recharts — the host app provides it\n * and passes the modules in via the `recharts` prop so consumers only pay for what they use.\n *\n * Recharts is treated as an implicit peer dependency: install it in the host\n * app if you use any chart component. Use **recharts ≥ 3** — earlier versions use\n * `defaultProps` on function components, which logs a deprecation warning under\n * React 19. recharts 3 removed them; these wrappers use default parameters, so on\n * recharts 3.8+ the console stays clean (verified).\n *\n * Usage in a Next.js client component:\n *\n * import * as Recharts from 'recharts';\n * import { LineChart } from '@misael703/elalba-ui';\n * <LineChart recharts={Recharts} data={...} dataKey=\"value\" categoryKey=\"month\" />\n */\n\n// Structural mirror of the Recharts public API. `any` is intentional here:\n// each Recharts component has a different prop shape, and typing them\n// exhaustively would mean depending on `recharts` types — which would force\n// consumers to install recharts even when they don't use any chart.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RechartsComp = React.ComponentType<any>;\n\nexport type RechartsLike = {\n ResponsiveContainer: RechartsComp;\n LineChart: RechartsComp;\n AreaChart: RechartsComp;\n BarChart: RechartsComp;\n PieChart: RechartsComp;\n Line: RechartsComp;\n Area: RechartsComp;\n Bar: RechartsComp;\n Pie: RechartsComp;\n Cell: RechartsComp;\n CartesianGrid: RechartsComp;\n XAxis: RechartsComp;\n YAxis: RechartsComp;\n Tooltip: RechartsComp;\n Legend: RechartsComp;\n};\n\nconst PALETTE = [\n 'var(--color-primary)',\n 'var(--color-secondary)',\n 'var(--color-primary-900)',\n 'var(--color-success)',\n 'var(--color-warning)',\n 'var(--color-danger)',\n '#6b7e95',\n '#d4a574',\n];\n\nexport interface BaseChartProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n height?: number;\n className?: string;\n ariaLabel?: string;\n}\n\n// Mirror of Recharts' AxisInterval. Controls how category ticks thin on\n// collision so dense series (e.g. daily points) don't crowd the axis.\nexport type AxisInterval =\n | number\n | 'preserveStart'\n | 'preserveEnd'\n | 'preserveStartEnd'\n | 'equidistantPreserveStart'\n | 'equidistantPreserveEnd';\n\n// Shared cartesian controls (Line/Area/Bar). DonutChart/Sparkline don't have a\n// category axis, so they keep BaseChartProps.\nexport interface CartesianChartProps<D = any> extends BaseChartProps<D> {\n categoryKey: keyof D & string;\n series: Array<{ key: keyof D & string; label?: string; color?: string }>;\n showGrid?: boolean;\n showLegend?: boolean;\n /** Format each category-axis tick label, e.g. shorten `2026-05-23`. → XAxis.tickFormatter */\n xTickFormatter?: (value: string) => string;\n /** Thin out category ticks on collision. → XAxis.interval. Default `preserveStartEnd`. */\n xTickInterval?: AxisInterval;\n /** Rotate category-axis labels N degrees (anchors end + reserves height so they don't clip). */\n xTickAngle?: number;\n /** Format numeric values (value-axis ticks + tooltip). */\n valueFormatter?: (value: number) => string;\n /**\n * Allow fractional value-axis ticks. Default: auto — `false` when every series\n * value is an integer (count data → no `0.25` ticks), `true` otherwise. Pass\n * explicitly to override the auto-detection.\n */\n allowDecimals?: boolean;\n /**\n * Format the category label in the tooltip. Defaults to `xTickFormatter` so the\n * tooltip matches the axis (e.g. both show `18 jun`, not the raw `2026-06-18`).\n */\n tooltipLabelFormatter?: (value: string) => string;\n}\n\nconst DEFAULT_X_INTERVAL: AxisInterval = 'preserveStartEnd';\n\n// Recharts XAxis/YAxis are `any`-typed (structural mirror), so tick controls go\n// in as a spread. `rotate` is off when the category axis is the Y axis\n// (horizontal bars: those labels are already horizontal).\nfunction categoryTickProps(\n opts: Pick<CartesianChartProps, 'xTickFormatter' | 'xTickInterval' | 'xTickAngle'>,\n rotate = true,\n): Record<string, unknown> {\n const props: Record<string, unknown> = { interval: opts.xTickInterval ?? DEFAULT_X_INTERVAL };\n if (opts.xTickFormatter) props.tickFormatter = opts.xTickFormatter;\n if (rotate && opts.xTickAngle) {\n props.angle = opts.xTickAngle;\n props.textAnchor = 'end';\n props.height = 56; // reserve room so the rotated label isn't clipped\n }\n return props;\n}\n\n// Value axis: `allowDecimals` (count data → integer-only ticks) + optional\n// numeric tick formatter.\nfunction valueAxisProps(valueFormatter: ((v: number) => string) | undefined, allowDecimals: boolean): Record<string, unknown> {\n const props: Record<string, unknown> = { allowDecimals };\n if (valueFormatter) props.tickFormatter = (v: number) => valueFormatter(Number(v));\n return props;\n}\n\n// Tooltip: value formatter + a category-label formatter that defaults to the\n// axis tick formatter (so the hovered label matches the axis).\nfunction tooltipProps(\n valueFormatter: ((v: number) => string) | undefined,\n tooltipLabelFormatter: ((v: string) => string) | undefined,\n xTickFormatter: ((v: string) => string) | undefined,\n): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n if (valueFormatter) props.formatter = (v: unknown) => valueFormatter(Number(v));\n const labelFormatter = tooltipLabelFormatter ?? xTickFormatter;\n if (labelFormatter) props.labelFormatter = (v: unknown) => labelFormatter(String(v));\n return props;\n}\n\n// True when every plotted value is an integer → drives the `allowDecimals` auto-\n// detection (count series shouldn't get `0.25`-style ticks).\nfunction allIntegerValues<D>(data: D[], keys: string[]): boolean {\n for (const row of data) {\n for (const k of keys) {\n const v = (row as Record<string, unknown>)[k];\n if (typeof v === 'number' && Number.isFinite(v) && !Number.isInteger(v)) return false;\n }\n }\n return true;\n}\n\n// ---------- LineChart ---------------------------------------------------\nexport interface LineChartProps<D = any> extends CartesianChartProps<D> {\n smooth?: boolean;\n /** Interpolation. `monotone` smooths (default, back-compat); `linear` draws honest\n * straight segments — recommended for counts/stepped series (no phantom humps over zeros). */\n curve?: 'linear' | 'monotone';\n}\n\nexport function LineChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: LineChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.LineChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Line\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </R.LineChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- AreaChart ---------------------------------------------------\nexport interface AreaChartProps<D = any> extends LineChartProps<D> {\n stacked?: boolean;\n}\n\nexport function AreaChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve, stacked,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: AreaChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.AreaChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Area\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n fillOpacity={0.18}\n strokeWidth={2}\n />\n ))}\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- BarChart ----------------------------------------------------\nexport interface BarChartProps<D = any> extends CartesianChartProps<D> {\n layout?: 'vertical' | 'horizontal';\n stacked?: boolean;\n}\n\nconst BAR_RADIUS = 4;\n\nexport function BarChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n layout = 'vertical', stacked, showGrid = true, showLegend = true,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: BarChartProps<D>) {\n const isHorizontal = layout === 'horizontal';\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n // Radius must round the VALUE end: top for columns ([tl,tr,br,bl] → [R,R,0,0]),\n // right for horizontal bars ([0,R,R,0]). The old hardcoded [4,4,0,0] left\n // horizontal bars rounded-top / pointed-bottom.\n const endRadius = isHorizontal ? [0, BAR_RADIUS, BAR_RADIUS, 0] : [BAR_RADIUS, BAR_RADIUS, 0, 0];\n const lastIdx = series.length - 1;\n const catTicks = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle });\n const catTicksNoRotate = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle }, false);\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.BarChart data={data} layout={isHorizontal ? 'vertical' : 'horizontal'} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={isHorizontal} horizontal={!isHorizontal} />}\n {isHorizontal ? (\n <>\n <R.XAxis type=\"number\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.YAxis dataKey={categoryKey} type=\"category\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} width={96} {...catTicksNoRotate} />\n </>\n ) : (\n <>\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...catTicks} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n </>\n )}\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} cursor={{ fill: 'var(--bg-subtle)' }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => {\n // Stacked: only the outermost (last) segment carries the end radius;\n // inner segments stay square so the stack reads as one bar.\n const barRadius = stacked ? (i === lastIdx ? endRadius : [0, 0, 0, 0]) : endRadius;\n return (\n <R.Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n radius={barRadius}\n maxBarSize={48}\n />\n );\n })}\n </R.BarChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- DonutChart --------------------------------------------------\nexport interface DonutChartProps extends Omit<BaseChartProps, 'data'> {\n data: Array<{ name: string; value: number; color?: string }>;\n centerLabel?: React.ReactNode;\n showLegend?: boolean;\n innerRadius?: number;\n outerRadius?: number;\n /** Format slice names in tooltip + legend, e.g. `V_REGION` → `V Región` (no need to pre-map the data). */\n nameFormatter?: (name: string) => string;\n /** Format slice values in the tooltip. */\n valueFormatter?: (value: number) => string;\n}\n\nexport function DonutChart({\n recharts: R, data, height = 240, className, ariaLabel,\n centerLabel, showLegend = true, innerRadius = 60, outerRadius = 88,\n nameFormatter, valueFormatter,\n}: DonutChartProps) {\n // Recharts Tooltip formatter returns [formattedValue, formattedName].\n const tooltipProps = (nameFormatter || valueFormatter)\n ? { formatter: (v: unknown, n: unknown) => [valueFormatter ? valueFormatter(Number(v)) : v, nameFormatter ? nameFormatter(String(n)) : n] }\n : {};\n return (\n <div className={cx('chart chart--donut', className)} role=\"img\" aria-label={ariaLabel}>\n <div className=\"chart__donut-area\" style={{ height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.PieChart>\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps} />\n <R.Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n stroke=\"var(--bg-surface)\"\n >\n {data.map((d, i) => <R.Cell key={i} fill={d.color ?? PALETTE[i % PALETTE.length]} />)}\n </R.Pie>\n </R.PieChart>\n </R.ResponsiveContainer>\n {centerLabel && <div className=\"chart__center\">{centerLabel}</div>}\n </div>\n {showLegend && (\n <ul className=\"chart__legend\" aria-hidden=\"true\">\n {data.map((d, i) => (\n <li key={d.name} className=\"chart__legend-item\">\n <span\n className=\"chart__legend-swatch\"\n style={{ background: d.color ?? PALETTE[i % PALETTE.length] }}\n />\n <span className=\"chart__legend-label\">{nameFormatter ? nameFormatter(d.name) : d.name}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ---------- Sparkline ---------------------------------------------------\nexport interface SparklineProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n dataKey: keyof D & string;\n width?: number;\n height?: number;\n color?: string;\n fill?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Sparkline<D = any>({\n recharts: R, data, dataKey,\n width = 120, height = 32, color = 'var(--color-primary)',\n fill = true, className, ariaLabel,\n}: SparklineProps<D>) {\n return (\n <div className={cx('sparkline', className)} role=\"img\" aria-label={ariaLabel} style={{ width, height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.AreaChart data={data} margin={{ top: 2, right: 0, bottom: 2, left: 0 }}>\n <R.Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1.5}\n fill={fill ? color : 'none'}\n fillOpacity={fill ? 0.18 : 0}\n isAnimationActive={false}\n />\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Charts.tsx"],"names":["jsx","cx","jsxs","Fragment","tooltipProps"],"mappings":"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","file":"chunk-K4VUQFUA.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\n/**\n * Lightweight chart wrappers. We do NOT bundle Recharts — the host app provides it\n * and passes the modules in via the `recharts` prop so consumers only pay for what they use.\n *\n * Recharts is treated as an implicit peer dependency: install it in the host\n * app if you use any chart component. Use **recharts ≥ 3** — earlier versions use\n * `defaultProps` on function components, which logs a deprecation warning under\n * React 19. recharts 3 removed them; these wrappers use default parameters, so on\n * recharts 3.8+ the console stays clean (verified).\n *\n * Usage in a Next.js client component:\n *\n * import * as Recharts from 'recharts';\n * import { LineChart } from '@misael703/elalba-ui';\n * <LineChart recharts={Recharts} data={...} dataKey=\"value\" categoryKey=\"month\" />\n */\n\n// Structural mirror of the Recharts public API. `any` is intentional here:\n// each Recharts component has a different prop shape, and typing them\n// exhaustively would mean depending on `recharts` types — which would force\n// consumers to install recharts even when they don't use any chart.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RechartsComp = React.ComponentType<any>;\n\nexport type RechartsLike = {\n ResponsiveContainer: RechartsComp;\n LineChart: RechartsComp;\n AreaChart: RechartsComp;\n BarChart: RechartsComp;\n PieChart: RechartsComp;\n Line: RechartsComp;\n Area: RechartsComp;\n Bar: RechartsComp;\n Pie: RechartsComp;\n Cell: RechartsComp;\n CartesianGrid: RechartsComp;\n XAxis: RechartsComp;\n YAxis: RechartsComp;\n Tooltip: RechartsComp;\n Legend: RechartsComp;\n};\n\nconst PALETTE = [\n 'var(--color-primary)',\n 'var(--color-secondary)',\n 'var(--color-primary-900)',\n 'var(--color-success)',\n 'var(--color-warning)',\n 'var(--color-danger)',\n '#6b7e95',\n '#d4a574',\n];\n\nexport interface BaseChartProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n height?: number;\n className?: string;\n ariaLabel?: string;\n}\n\n// Mirror of Recharts' AxisInterval. Controls how category ticks thin on\n// collision so dense series (e.g. daily points) don't crowd the axis.\nexport type AxisInterval =\n | number\n | 'preserveStart'\n | 'preserveEnd'\n | 'preserveStartEnd'\n | 'equidistantPreserveStart'\n | 'equidistantPreserveEnd';\n\n// Shared cartesian controls (Line/Area/Bar). DonutChart/Sparkline don't have a\n// category axis, so they keep BaseChartProps.\nexport interface CartesianChartProps<D = any> extends BaseChartProps<D> {\n categoryKey: keyof D & string;\n series: Array<{ key: keyof D & string; label?: string; color?: string }>;\n showGrid?: boolean;\n showLegend?: boolean;\n /** Format each category-axis tick label, e.g. shorten `2026-05-23`. → XAxis.tickFormatter */\n xTickFormatter?: (value: string) => string;\n /** Thin out category ticks on collision. → XAxis.interval. Default `preserveStartEnd`. */\n xTickInterval?: AxisInterval;\n /** Rotate category-axis labels N degrees (anchors end + reserves height so they don't clip). */\n xTickAngle?: number;\n /** Format numeric values (value-axis ticks + tooltip). */\n valueFormatter?: (value: number) => string;\n /**\n * Allow fractional value-axis ticks. Default: auto — `false` when every series\n * value is an integer (count data → no `0.25` ticks), `true` otherwise. Pass\n * explicitly to override the auto-detection.\n */\n allowDecimals?: boolean;\n /**\n * Format the category label in the tooltip. Defaults to `xTickFormatter` so the\n * tooltip matches the axis (e.g. both show `18 jun`, not the raw `2026-06-18`).\n */\n tooltipLabelFormatter?: (value: string) => string;\n}\n\nconst DEFAULT_X_INTERVAL: AxisInterval = 'preserveStartEnd';\n\n// Recharts XAxis/YAxis are `any`-typed (structural mirror), so tick controls go\n// in as a spread. `rotate` is off when the category axis is the Y axis\n// (horizontal bars: those labels are already horizontal).\nfunction categoryTickProps(\n opts: Pick<CartesianChartProps, 'xTickFormatter' | 'xTickInterval' | 'xTickAngle'>,\n rotate = true,\n): Record<string, unknown> {\n const props: Record<string, unknown> = { interval: opts.xTickInterval ?? DEFAULT_X_INTERVAL };\n if (opts.xTickFormatter) props.tickFormatter = opts.xTickFormatter;\n if (rotate && opts.xTickAngle) {\n props.angle = opts.xTickAngle;\n props.textAnchor = 'end';\n props.height = 56; // reserve room so the rotated label isn't clipped\n }\n return props;\n}\n\n// Value axis: `allowDecimals` (count data → integer-only ticks) + optional\n// numeric tick formatter.\nfunction valueAxisProps(valueFormatter: ((v: number) => string) | undefined, allowDecimals: boolean): Record<string, unknown> {\n const props: Record<string, unknown> = { allowDecimals };\n if (valueFormatter) props.tickFormatter = (v: number) => valueFormatter(Number(v));\n return props;\n}\n\n// Tooltip: value formatter + a category-label formatter that defaults to the\n// axis tick formatter (so the hovered label matches the axis).\nfunction tooltipProps(\n valueFormatter: ((v: number) => string) | undefined,\n tooltipLabelFormatter: ((v: string) => string) | undefined,\n xTickFormatter: ((v: string) => string) | undefined,\n): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n if (valueFormatter) props.formatter = (v: unknown) => valueFormatter(Number(v));\n const labelFormatter = tooltipLabelFormatter ?? xTickFormatter;\n if (labelFormatter) props.labelFormatter = (v: unknown) => labelFormatter(String(v));\n return props;\n}\n\n// True when every plotted value is an integer → drives the `allowDecimals` auto-\n// detection (count series shouldn't get `0.25`-style ticks).\nfunction allIntegerValues<D>(data: D[], keys: string[]): boolean {\n for (const row of data) {\n for (const k of keys) {\n const v = (row as Record<string, unknown>)[k];\n if (typeof v === 'number' && Number.isFinite(v) && !Number.isInteger(v)) return false;\n }\n }\n return true;\n}\n\n// ---------- LineChart ---------------------------------------------------\nexport interface LineChartProps<D = any> extends CartesianChartProps<D> {\n smooth?: boolean;\n /** Interpolation. `monotone` smooths (default, back-compat); `linear` draws honest\n * straight segments — recommended for counts/stepped series (no phantom humps over zeros). */\n curve?: 'linear' | 'monotone';\n}\n\nexport function LineChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: LineChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.LineChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Line\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </R.LineChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- AreaChart ---------------------------------------------------\nexport interface AreaChartProps<D = any> extends LineChartProps<D> {\n stacked?: boolean;\n}\n\nexport function AreaChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve, stacked,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: AreaChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.AreaChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Area\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n fillOpacity={0.18}\n strokeWidth={2}\n />\n ))}\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- BarChart ----------------------------------------------------\nexport interface BarChartProps<D = any> extends CartesianChartProps<D> {\n layout?: 'vertical' | 'horizontal';\n stacked?: boolean;\n}\n\nconst BAR_RADIUS = 4;\n\nexport function BarChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n layout = 'vertical', stacked, showGrid = true, showLegend = true,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter, allowDecimals, tooltipLabelFormatter,\n}: BarChartProps<D>) {\n const isHorizontal = layout === 'horizontal';\n const allowDec = allowDecimals ?? !allIntegerValues(data, series.map((s) => s.key));\n // Radius must round the VALUE end: top for columns ([tl,tr,br,bl] → [R,R,0,0]),\n // right for horizontal bars ([0,R,R,0]). The old hardcoded [4,4,0,0] left\n // horizontal bars rounded-top / pointed-bottom.\n const endRadius = isHorizontal ? [0, BAR_RADIUS, BAR_RADIUS, 0] : [BAR_RADIUS, BAR_RADIUS, 0, 0];\n const lastIdx = series.length - 1;\n const catTicks = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle });\n const catTicksNoRotate = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle }, false);\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.BarChart data={data} layout={isHorizontal ? 'vertical' : 'horizontal'} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={isHorizontal} horizontal={!isHorizontal} />}\n {isHorizontal ? (\n <>\n <R.XAxis type=\"number\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n <R.YAxis dataKey={categoryKey} type=\"category\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} width={96} {...catTicksNoRotate} />\n </>\n ) : (\n <>\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...catTicks} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueAxisProps(valueFormatter, allowDec)} />\n </>\n )}\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} cursor={{ fill: 'var(--bg-subtle)' }} {...tooltipProps(valueFormatter, tooltipLabelFormatter, xTickFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => {\n // Stacked: only the outermost (last) segment carries the end radius;\n // inner segments stay square so the stack reads as one bar.\n const barRadius = stacked ? (i === lastIdx ? endRadius : [0, 0, 0, 0]) : endRadius;\n return (\n <R.Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n radius={barRadius}\n maxBarSize={48}\n />\n );\n })}\n </R.BarChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- DonutChart --------------------------------------------------\nexport interface DonutChartProps extends Omit<BaseChartProps, 'data'> {\n data: Array<{ name: string; value: number; color?: string }>;\n centerLabel?: React.ReactNode;\n showLegend?: boolean;\n innerRadius?: number;\n outerRadius?: number;\n /** Format slice names in tooltip + legend, e.g. `V_REGION` → `V Región` (no need to pre-map the data). */\n nameFormatter?: (name: string) => string;\n /** Format slice values in the tooltip. */\n valueFormatter?: (value: number) => string;\n}\n\nexport function DonutChart({\n recharts: R, data, height = 240, className, ariaLabel,\n centerLabel, showLegend = true, innerRadius = 60, outerRadius = 88,\n nameFormatter, valueFormatter,\n}: DonutChartProps) {\n // Recharts Tooltip formatter returns [formattedValue, formattedName].\n const tooltipProps = (nameFormatter || valueFormatter)\n ? { formatter: (v: unknown, n: unknown) => [valueFormatter ? valueFormatter(Number(v)) : v, nameFormatter ? nameFormatter(String(n)) : n] }\n : {};\n return (\n <div className={cx('chart chart--donut', className)} role=\"img\" aria-label={ariaLabel}>\n <div className=\"chart__donut-area\" style={{ height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.PieChart>\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps} />\n <R.Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n stroke=\"var(--bg-surface)\"\n >\n {data.map((d, i) => <R.Cell key={i} fill={d.color ?? PALETTE[i % PALETTE.length]} />)}\n </R.Pie>\n </R.PieChart>\n </R.ResponsiveContainer>\n {centerLabel && <div className=\"chart__center\">{centerLabel}</div>}\n </div>\n {showLegend && (\n <ul className=\"chart__legend\" aria-hidden=\"true\">\n {data.map((d, i) => (\n <li key={d.name} className=\"chart__legend-item\">\n <span\n className=\"chart__legend-swatch\"\n style={{ background: d.color ?? PALETTE[i % PALETTE.length] }}\n />\n <span className=\"chart__legend-label\">{nameFormatter ? nameFormatter(d.name) : d.name}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ---------- Sparkline ---------------------------------------------------\nexport interface SparklineProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n dataKey: keyof D & string;\n width?: number;\n height?: number;\n color?: string;\n fill?: boolean;\n /**\n * Show a hover dot. Default `false` — a sparkline is glanceable/non-interactive\n * (the fine detail lives in the big LineChart). When off there's no active dot\n * to clip at the edges/base; when on, the margins are widened so it isn't cut.\n */\n interactive?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Sparkline<D = any>({\n recharts: R, data, dataKey,\n width = 120, height = 32, color = 'var(--color-primary)',\n fill = true, interactive = false, className, ariaLabel,\n}: SparklineProps<D>) {\n // No hover dot by default (it clips against the tiny margins at the first/last\n // point and the baseline). When interactive, leave room so it can't be cut off.\n const margin = interactive ? { top: 4, right: 4, bottom: 4, left: 4 } : { top: 2, right: 0, bottom: 2, left: 0 };\n return (\n <div className={cx('sparkline', className)} role=\"img\" aria-label={ariaLabel} style={{ width, height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.AreaChart data={data} margin={margin}>\n {interactive && <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} />}\n <R.Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1.5}\n fill={fill ? color : 'none'}\n fillOpacity={fill ? 0.18 : 0}\n isAnimationActive={false}\n activeDot={interactive ? { r: 2.5, strokeWidth: 0, fill: color } : false}\n />\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
import { useFocusTrap } from './chunk-XOV4D6J3.mjs';
|
|
2
3
|
import { useScrollLock } from './chunk-R5DCDEB5.mjs';
|
|
3
4
|
import { useDelayedUnmount } from './chunk-U3JH4T3A.mjs';
|
|
4
5
|
import { useEscape } from './chunk-6W7ZGWNA.mjs';
|
|
5
|
-
import { useFocusTrap } from './chunk-XOV4D6J3.mjs';
|
|
6
6
|
import { useLocale } from './chunk-OOIRRKJ7.mjs';
|
|
7
7
|
import { X } from './chunk-BJGMROKL.mjs';
|
|
8
8
|
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
@@ -123,5 +123,5 @@ function Drawer({
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
export { Drawer, Modal };
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
126
|
+
//# sourceMappingURL=chunk-NHSPQDB2.mjs.map
|
|
127
|
+
//# sourceMappingURL=chunk-NHSPQDB2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Overlay.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Overlay.tsx"],"names":[],"mappings":"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","file":"chunk-NHSPQDB2.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { useDelayedUnmount } from '../hooks/useDelayedUnmount';\nimport { useFocusTrap, useEscape, useScrollLock } from '../hooks';\n\n// Exit animation duration in ms. Must match `--duration-exit` and the\n// `is-closing` keyframes in src/styles/index.css (`.modal-backdrop`,\n// `.drawer-backdrop`).\nconst EXIT_MS = 150;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n}\n\nexport function Modal({\n open, onClose, title, children, footer, size = 'md',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: OverlayProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n // useDelayedUnmount keeps the DOM mounted during exit animation. The\n // a11y/scroll-lock hooks still consume `open` (the user's intent), not\n // `mounted` — we don't want to trap focus or block scroll while\n // animating out.\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('modal-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('modal', `modal--${size}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"modal__header\">\n <div id={titleId} className=\"modal__title\">{title}</div>\n <button type=\"button\" className=\"modal__close\" onClick={onClose} aria-label={t['modal.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"modal__body\">{children}</div>\n {footer && <div className=\"modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n\nexport interface DrawerProps extends OverlayProps {\n side?: 'left' | 'right';\n}\n\nexport function Drawer({\n open, onClose, title, children, footer, side = 'right',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: DrawerProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('drawer-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('drawer', `drawer--${side}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"drawer__header\">\n <div id={titleId} className=\"drawer__title\">{title}</div>\n <button type=\"button\" className=\"drawer__close\" onClick={onClose} aria-label={t['drawer.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"drawer__body\">{children}</div>\n {footer && <div className=\"drawer__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var chunk55P5FA5Q_js = require('./chunk-55P5FA5Q.js');
|
|
4
5
|
var chunkD2H4VZVL_js = require('./chunk-D2H4VZVL.js');
|
|
5
6
|
var chunkNPXEZCTA_js = require('./chunk-NPXEZCTA.js');
|
|
6
|
-
var chunk55P5FA5Q_js = require('./chunk-55P5FA5Q.js');
|
|
7
7
|
var chunkDKOAATV2_js = require('./chunk-DKOAATV2.js');
|
|
8
8
|
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
9
9
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
@@ -216,5 +216,5 @@ function PageHeader({ title, description, breadcrumbs, actions, meta, className
|
|
|
216
216
|
|
|
217
217
|
exports.AppShell = AppShell;
|
|
218
218
|
exports.PageHeader = PageHeader;
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-O4TKMQEY.js.map
|
|
220
|
+
//# sourceMappingURL=chunk-O4TKMQEY.js.map
|