@misael703/ui 1.31.1 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -1
- package/dist/{chunk-42EYBIRW.js → chunk-2PNXLTEM.js} +3 -3
- package/dist/{chunk-42EYBIRW.js.map → chunk-2PNXLTEM.js.map} +1 -1
- package/dist/{chunk-ULRTSRBP.mjs → chunk-37TC4VQO.mjs} +3 -3
- package/dist/{chunk-ULRTSRBP.mjs.map → chunk-37TC4VQO.mjs.map} +1 -1
- package/dist/{chunk-K325NBYF.js → chunk-3J26VOMQ.js} +5 -5
- package/dist/{chunk-K325NBYF.js.map → chunk-3J26VOMQ.js.map} +1 -1
- package/dist/{chunk-4WGXCRNN.js → chunk-3JRP3DGM.js} +3 -3
- package/dist/{chunk-4WGXCRNN.js.map → chunk-3JRP3DGM.js.map} +1 -1
- package/dist/{chunk-TO4EQVAN.js → chunk-4R5BHEDE.js} +5 -5
- package/dist/{chunk-TO4EQVAN.js.map → chunk-4R5BHEDE.js.map} +1 -1
- package/dist/{chunk-EHJNOVHL.mjs → chunk-6KVN77YG.mjs} +3 -3
- package/dist/{chunk-EHJNOVHL.mjs.map → chunk-6KVN77YG.mjs.map} +1 -1
- package/dist/{chunk-74ALPTUE.js → chunk-6SSTTJV4.js} +4 -4
- package/dist/{chunk-74ALPTUE.js.map → chunk-6SSTTJV4.js.map} +1 -1
- package/dist/{chunk-VSBCBKOL.mjs → chunk-7MJW6ACR.mjs} +5 -5
- package/dist/{chunk-VSBCBKOL.mjs.map → chunk-7MJW6ACR.mjs.map} +1 -1
- package/dist/{chunk-ITYDWKUE.js → chunk-A6RSCEJT.js} +4 -4
- package/dist/{chunk-ITYDWKUE.js.map → chunk-A6RSCEJT.js.map} +1 -1
- package/dist/{chunk-FVNW5TYQ.js → chunk-AGMDYCGG.js} +5 -5
- package/dist/{chunk-FVNW5TYQ.js.map → chunk-AGMDYCGG.js.map} +1 -1
- package/dist/{chunk-PUXXDABJ.mjs → chunk-AVPMOZ4Q.mjs} +3 -3
- package/dist/{chunk-PUXXDABJ.mjs.map → chunk-AVPMOZ4Q.mjs.map} +1 -1
- package/dist/{chunk-VHYTJD6Z.mjs → chunk-BJGMROKL.mjs} +21 -3
- package/dist/chunk-BJGMROKL.mjs.map +1 -0
- package/dist/{chunk-ZQ4HEU55.js → chunk-BJHR3ALO.js} +11 -11
- package/dist/{chunk-ZQ4HEU55.js.map → chunk-BJHR3ALO.js.map} +1 -1
- package/dist/{chunk-3HA3VO2I.js → chunk-C4AKMVDZ.js} +23 -2
- package/dist/chunk-C4AKMVDZ.js.map +1 -0
- package/dist/{chunk-7IPB5A75.mjs → chunk-DBV6FV4V.mjs} +3 -3
- package/dist/{chunk-7IPB5A75.mjs.map → chunk-DBV6FV4V.mjs.map} +1 -1
- package/dist/{chunk-QP5HKKTM.mjs → chunk-DH3IXJRJ.mjs} +4 -4
- package/dist/{chunk-QP5HKKTM.mjs.map → chunk-DH3IXJRJ.mjs.map} +1 -1
- package/dist/{chunk-KD7353FR.js → chunk-DJGWCSKQ.js} +5 -5
- package/dist/{chunk-KD7353FR.js.map → chunk-DJGWCSKQ.js.map} +1 -1
- package/dist/{chunk-AS4NTE2Q.js → chunk-DYZM6NZU.js} +5 -5
- package/dist/{chunk-AS4NTE2Q.js.map → chunk-DYZM6NZU.js.map} +1 -1
- package/dist/{chunk-R4KMFKP4.mjs → chunk-E6JUMXZM.mjs} +4 -4
- package/dist/{chunk-R4KMFKP4.mjs.map → chunk-E6JUMXZM.mjs.map} +1 -1
- package/dist/{chunk-SEYLCARU.mjs → chunk-ECZR37QC.mjs} +3 -3
- package/dist/{chunk-SEYLCARU.mjs.map → chunk-ECZR37QC.mjs.map} +1 -1
- package/dist/{chunk-FQ7RZJBG.mjs → chunk-ESOUBZQJ.mjs} +4 -4
- package/dist/{chunk-FQ7RZJBG.mjs.map → chunk-ESOUBZQJ.mjs.map} +1 -1
- package/dist/{chunk-ZKPFXBE7.js → chunk-EW7PJQYR.js} +8 -8
- package/dist/{chunk-ZKPFXBE7.js.map → chunk-EW7PJQYR.js.map} +1 -1
- package/dist/{chunk-I7URH4F2.mjs → chunk-FR4JV3JA.mjs} +3 -3
- package/dist/{chunk-I7URH4F2.mjs.map → chunk-FR4JV3JA.mjs.map} +1 -1
- package/dist/{chunk-4CPGEYY3.js → chunk-GGILBESE.js} +5 -5
- package/dist/{chunk-4CPGEYY3.js.map → chunk-GGILBESE.js.map} +1 -1
- package/dist/{chunk-UD37YQ4T.js → chunk-GHSI2DHL.js} +77 -33
- package/dist/chunk-GHSI2DHL.js.map +1 -0
- package/dist/{chunk-6BU22FZ7.js → chunk-GSL6LVPL.js} +13 -13
- package/dist/{chunk-6BU22FZ7.js.map → chunk-GSL6LVPL.js.map} +1 -1
- package/dist/{chunk-732BPQGZ.js → chunk-HCTY5QYL.js} +3 -3
- package/dist/{chunk-732BPQGZ.js.map → chunk-HCTY5QYL.js.map} +1 -1
- package/dist/{chunk-TMU6UXWF.mjs → chunk-I4DNKFCV.mjs} +71 -27
- package/dist/chunk-I4DNKFCV.mjs.map +1 -0
- package/dist/{chunk-HEI6PUMK.js → chunk-JKBJ2AKX.js} +4 -4
- package/dist/{chunk-HEI6PUMK.js.map → chunk-JKBJ2AKX.js.map} +1 -1
- package/dist/{chunk-QR6X2UOT.mjs → chunk-JMFDIN5R.mjs} +3 -3
- package/dist/{chunk-QR6X2UOT.mjs.map → chunk-JMFDIN5R.mjs.map} +1 -1
- package/dist/{chunk-HDQNM3GC.mjs → chunk-JNHASKGK.mjs} +5 -5
- package/dist/{chunk-HDQNM3GC.mjs.map → chunk-JNHASKGK.mjs.map} +1 -1
- package/dist/{chunk-L7IEAJSD.js → chunk-K2KG2NIT.js} +4 -4
- package/dist/{chunk-L7IEAJSD.js.map → chunk-K2KG2NIT.js.map} +1 -1
- package/dist/{chunk-QKUH25YO.js → chunk-KXDLNZWQ.js} +9 -9
- package/dist/{chunk-QKUH25YO.js.map → chunk-KXDLNZWQ.js.map} +1 -1
- package/dist/{chunk-ZKLTT2PW.mjs → chunk-M4I2MAO3.mjs} +4 -4
- package/dist/{chunk-ZKLTT2PW.mjs.map → chunk-M4I2MAO3.mjs.map} +1 -1
- package/dist/{chunk-X62VJCF3.js → chunk-MJAFMXPQ.js} +6 -6
- package/dist/{chunk-X62VJCF3.js.map → chunk-MJAFMXPQ.js.map} +1 -1
- package/dist/{chunk-KJ6YAYWS.js → chunk-MW7HQCFC.js} +3 -3
- package/dist/{chunk-KJ6YAYWS.js.map → chunk-MW7HQCFC.js.map} +1 -1
- package/dist/{chunk-QC3XHUF4.js → chunk-NIIDSI6V.js} +5 -5
- package/dist/{chunk-QC3XHUF4.js.map → chunk-NIIDSI6V.js.map} +1 -1
- package/dist/{chunk-KNKIJOES.js → chunk-NO3YQXB5.js} +10 -10
- package/dist/{chunk-KNKIJOES.js.map → chunk-NO3YQXB5.js.map} +1 -1
- package/dist/{chunk-PUEGDRTJ.mjs → chunk-NS6CI6RP.mjs} +3 -3
- package/dist/{chunk-PUEGDRTJ.mjs.map → chunk-NS6CI6RP.mjs.map} +1 -1
- package/dist/{chunk-JZNUYA42.js → chunk-NU4GAGUV.js} +3 -3
- package/dist/{chunk-JZNUYA42.js.map → chunk-NU4GAGUV.js.map} +1 -1
- package/dist/{chunk-574VINGB.mjs → chunk-OIYIWG53.mjs} +4 -4
- package/dist/{chunk-574VINGB.mjs.map → chunk-OIYIWG53.mjs.map} +1 -1
- package/dist/{chunk-H3227BHR.mjs → chunk-PX4LOZPZ.mjs} +5 -5
- package/dist/{chunk-H3227BHR.mjs.map → chunk-PX4LOZPZ.mjs.map} +1 -1
- package/dist/{chunk-KDCMQRYI.mjs → chunk-Q4RVZHC6.mjs} +5 -5
- package/dist/{chunk-KDCMQRYI.mjs.map → chunk-Q4RVZHC6.mjs.map} +1 -1
- package/dist/{chunk-V54BL7YF.mjs → chunk-RGQ4VV2S.mjs} +3 -3
- package/dist/{chunk-V54BL7YF.mjs.map → chunk-RGQ4VV2S.mjs.map} +1 -1
- package/dist/{chunk-SAVJLOGS.mjs → chunk-RPCMGRG7.mjs} +4 -4
- package/dist/{chunk-SAVJLOGS.mjs.map → chunk-RPCMGRG7.mjs.map} +1 -1
- package/dist/{chunk-NQGUJ4B5.mjs → chunk-S2HLK4QZ.mjs} +3 -3
- package/dist/{chunk-NQGUJ4B5.mjs.map → chunk-S2HLK4QZ.mjs.map} +1 -1
- package/dist/{chunk-LOQG2PQC.js → chunk-SH34AAZX.js} +8 -8
- package/dist/{chunk-LOQG2PQC.js.map → chunk-SH34AAZX.js.map} +1 -1
- package/dist/{chunk-TS3WC3G4.mjs → chunk-SUQLII3F.mjs} +3 -3
- package/dist/{chunk-TS3WC3G4.mjs.map → chunk-SUQLII3F.mjs.map} +1 -1
- package/dist/{chunk-UYANLSRC.js → chunk-TX4BUYX4.js} +5 -5
- package/dist/{chunk-UYANLSRC.js.map → chunk-TX4BUYX4.js.map} +1 -1
- package/dist/{chunk-SDKXMULE.mjs → chunk-URGXXUY3.mjs} +4 -4
- package/dist/{chunk-SDKXMULE.mjs.map → chunk-URGXXUY3.mjs.map} +1 -1
- package/dist/{chunk-AU7VNBV2.mjs → chunk-VG5FQ6SU.mjs} +6 -6
- package/dist/{chunk-AU7VNBV2.mjs.map → chunk-VG5FQ6SU.mjs.map} +1 -1
- package/dist/{chunk-ZA2AXUIB.mjs → chunk-VXJTDBSM.mjs} +3 -3
- package/dist/{chunk-ZA2AXUIB.mjs.map → chunk-VXJTDBSM.mjs.map} +1 -1
- package/dist/{chunk-EAVUJY3H.js → chunk-WAGJKBGW.js} +5 -5
- package/dist/{chunk-EAVUJY3H.js.map → chunk-WAGJKBGW.js.map} +1 -1
- package/dist/{chunk-HFRMDYNW.mjs → chunk-X36H75RR.mjs} +3 -3
- package/dist/{chunk-HFRMDYNW.mjs.map → chunk-X36H75RR.mjs.map} +1 -1
- package/dist/{chunk-2LHXOVX2.mjs → chunk-XRWMJVSI.mjs} +3 -3
- package/dist/{chunk-2LHXOVX2.mjs.map → chunk-XRWMJVSI.mjs.map} +1 -1
- package/dist/{chunk-DTWQA7TN.mjs → chunk-XSUX5CU6.mjs} +3 -3
- package/dist/{chunk-DTWQA7TN.mjs.map → chunk-XSUX5CU6.mjs.map} +1 -1
- package/dist/{chunk-PMZDGU63.js → chunk-YHRNSINQ.js} +9 -9
- package/dist/{chunk-PMZDGU63.js.map → chunk-YHRNSINQ.js.map} +1 -1
- package/dist/{chunk-ZTAAFZNC.mjs → chunk-YXUYWO2W.mjs} +3 -3
- package/dist/{chunk-ZTAAFZNC.mjs.map → chunk-YXUYWO2W.mjs.map} +1 -1
- package/dist/{chunk-X2YSLKDS.js → chunk-ZFFKQLSM.js} +8 -8
- package/dist/{chunk-X2YSLKDS.js.map → chunk-ZFFKQLSM.js.map} +1 -1
- package/dist/{chunk-OLOSL6KO.js → chunk-ZZFJNKKI.js} +8 -8
- package/dist/{chunk-OLOSL6KO.js.map → chunk-ZZFJNKKI.js.map} +1 -1
- package/dist/components/AdvancedPickers.d.mts +19 -3
- package/dist/components/AdvancedPickers.d.ts +19 -3
- package/dist/components/AdvancedPickers.js +9 -9
- package/dist/components/AdvancedPickers.mjs +5 -5
- package/dist/components/AppShell.js +7 -7
- package/dist/components/AppShell.mjs +5 -5
- package/dist/components/Carousel.js +3 -3
- package/dist/components/Carousel.mjs +2 -2
- package/dist/components/Code.js +4 -4
- package/dist/components/Code.mjs +2 -2
- package/dist/components/Comments.js +8 -8
- package/dist/components/Comments.mjs +5 -5
- package/dist/components/Commerce.js +18 -18
- package/dist/components/Commerce.mjs +7 -7
- package/dist/components/ContextMenu.js +3 -3
- package/dist/components/ContextMenu.mjs +2 -2
- package/dist/components/DataTable.js +10 -10
- package/dist/components/DataTable.mjs +4 -4
- package/dist/components/Display.js +13 -13
- package/dist/components/Display.mjs +2 -2
- package/dist/components/Display2.js +7 -7
- package/dist/components/Display2.mjs +3 -3
- package/dist/components/Display3.js +11 -11
- package/dist/components/Display3.mjs +5 -5
- package/dist/components/Editing.js +13 -13
- package/dist/components/Editing.mjs +8 -8
- package/dist/components/Filters.js +8 -8
- package/dist/components/Filters.mjs +2 -2
- package/dist/components/Form.js +12 -12
- package/dist/components/Form.mjs +2 -2
- package/dist/components/Gallery.js +4 -4
- package/dist/components/Gallery.mjs +2 -2
- package/dist/components/HoverCard.js +3 -3
- package/dist/components/HoverCard.mjs +2 -2
- package/dist/components/Icons.d.mts +4 -1
- package/dist/components/Icons.d.ts +4 -1
- package/dist/components/Icons.js +84 -72
- package/dist/components/Icons.mjs +1 -1
- package/dist/components/Inputs.js +6 -6
- package/dist/components/Inputs.mjs +2 -2
- package/dist/components/InputsExtra.js +12 -12
- package/dist/components/InputsExtra.mjs +3 -3
- package/dist/components/Layout.js +22 -22
- package/dist/components/Layout.mjs +3 -3
- package/dist/components/Logo.js +3 -3
- package/dist/components/Logo.mjs +2 -2
- package/dist/components/Marketing.js +5 -5
- package/dist/components/Marketing.mjs +2 -2
- package/dist/components/Menubar.js +3 -3
- package/dist/components/Menubar.mjs +2 -2
- package/dist/components/NavigationMenu.js +4 -4
- package/dist/components/NavigationMenu.mjs +3 -3
- package/dist/components/Notifications.js +3 -3
- package/dist/components/Notifications.mjs +2 -2
- package/dist/components/Overlay.js +8 -8
- package/dist/components/Overlay.mjs +6 -6
- package/dist/components/Permissions.js +4 -4
- package/dist/components/Permissions.mjs +3 -3
- package/dist/components/Pickers.js +9 -9
- package/dist/components/Pickers.mjs +4 -4
- package/dist/components/Popover.js +3 -3
- package/dist/components/Popover.mjs +2 -2
- package/dist/components/Toast.js +4 -4
- package/dist/components/Toast.mjs +2 -2
- package/dist/hooks/index.js +10 -10
- package/dist/hooks/index.mjs +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +273 -261
- package/dist/index.mjs +39 -39
- package/package.json +1 -1
- package/dist/chunk-3HA3VO2I.js.map +0 -1
- package/dist/chunk-TMU6UXWF.mjs.map +0 -1
- package/dist/chunk-UD37YQ4T.js.map +0 -1
- package/dist/chunk-VHYTJD6Z.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["Slider","MoneyInput"],"mappings":"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","file":"chunk-R4KMFKP4.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- Slider ------------------------------------------------------\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type'> {\n value: number;\n onChange: (v: number) => void;\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n formatValue?: (v: number) => string;\n}\n\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(function Slider(\n { value, onChange, min = 0, max = 100, step = 1, showValue, formatValue, className, ...rest },\n ref\n) {\n const pct = ((value - min) / (max - min)) * 100;\n return (\n <div className={cx('slider', className)}>\n <input\n ref={ref}\n type=\"range\"\n className=\"slider__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n onChange={(e) => onChange(Number(e.target.value))}\n style={{ '--pct': `${pct}%` } as React.CSSProperties}\n {...rest}\n />\n {showValue && (\n <span className=\"slider__value\">{formatValue ? formatValue(value) : value}</span>\n )}\n </div>\n );\n});\n\n// ---------- Progress (linear + circular) --------------------------------\nexport interface ProgressProps {\n value: number; // 0–100\n variant?: 'blue' | 'orange' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function Progress({ value, variant = 'blue', showLabel, size = 'md', className }: ProgressProps) {\n const v = Math.max(0, Math.min(100, value));\n return (\n <div className={cx('progress', size === 'sm' && 'progress--sm', className)}>\n <div className={cx('progress__bar', `progress__bar--${variant}`)} style={{ width: `${v}%` }} role=\"progressbar\" aria-valuenow={v} aria-valuemin={0} aria-valuemax={100} />\n {showLabel && <span className=\"progress__label\">{Math.round(v)}%</span>}\n </div>\n );\n}\n\nexport interface ProgressCircleProps {\n value: number;\n size?: number;\n stroke?: number;\n variant?: 'blue' | 'orange' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n className?: string;\n}\n\nexport function ProgressCircle({ value, size = 64, stroke = 6, variant = 'blue', showLabel = true, className }: ProgressCircleProps) {\n const v = Math.max(0, Math.min(100, value));\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n const off = c - (v / 100) * c;\n const colorVar = {\n blue: 'var(--color-primary)',\n orange: 'var(--color-secondary)',\n success: 'var(--color-success)',\n warning: 'var(--color-warning)',\n danger: 'var(--color-danger)',\n }[variant];\n return (\n <div className={cx('progress-circle', className)} style={{ width: size, height: size }} role=\"progressbar\" aria-valuenow={v} aria-valuemin={0} aria-valuemax={100}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <circle cx={size/2} cy={size/2} r={r} stroke=\"var(--bg-subtle)\" strokeWidth={stroke} fill=\"none\" />\n <circle\n cx={size/2} cy={size/2} r={r}\n stroke={colorVar} strokeWidth={stroke} fill=\"none\"\n strokeDasharray={c} strokeDashoffset={off} strokeLinecap=\"round\"\n style={{ transform: 'rotate(-90deg)', transformOrigin: '50% 50%', transition: 'stroke-dashoffset 320ms var(--ease-standard, ease-out)' }}\n />\n </svg>\n {showLabel && <span className=\"progress-circle__label\">{Math.round(v)}%</span>}\n </div>\n );\n}\n\n// ---------- Tag input ---------------------------------------------------\nexport interface TagInputProps {\n value: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n separator?: RegExp;\n maxTags?: number;\n validate?: (tag: string) => boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function TagInput({\n value, onChange, placeholder,\n separator = /[,\\s]+/, maxTags, validate, disabled, className, id,\n}: TagInputProps) {\n const [draft, setDraft] = React.useState('');\n const locale = useLocale();\n const ph = placeholder ?? locale['tagsInput.placeholder'];\n\n const addTags = (raw: string) => {\n const next = raw.split(separator).map((t) => t.trim()).filter(Boolean);\n if (next.length === 0) return;\n let merged = [...value];\n for (const t of next) {\n if (validate && !validate(t)) continue;\n if (merged.includes(t)) continue;\n if (maxTags && merged.length >= maxTags) break;\n merged.push(t);\n }\n onChange(merged);\n setDraft('');\n };\n\n return (\n <div className={cx('tag-input', disabled && 'is-disabled', className)} onClick={(e) => {\n const input = (e.currentTarget.querySelector('input') as HTMLInputElement);\n input?.focus();\n }}>\n {value.map((t, i) => (\n <span key={`${t}-${i}`} className=\"tag-input__tag\">\n {t}\n <button type=\"button\" aria-label={format(locale['tagsInput.remove'], { tag: t })} onClick={() => onChange(value.filter((_, idx) => idx !== i))}><X size={12} /></button>\n </span>\n ))}\n <input\n id={id}\n className=\"tag-input__field\"\n value={draft}\n disabled={disabled}\n placeholder={value.length === 0 ? ph : ''}\n onChange={(e) => {\n const v = e.target.value;\n if (separator.test(v)) addTags(v);\n else setDraft(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && draft.trim()) {\n e.preventDefault();\n addTags(draft);\n } else if (e.key === 'Backspace' && !draft && value.length) {\n onChange(value.slice(0, -1));\n }\n }}\n onBlur={() => draft.trim() && addTags(draft)}\n />\n </div>\n );\n}\n\n// ---------- MoneyInput (CLP-friendly, but accepts any locale) -----------\nexport interface MoneyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type'> {\n value: number | null;\n onChange: (v: number | null) => void;\n currency?: string; // 'CLP' | 'USD' | 'EUR' | …\n locale?: string; // 'es-CL' | …\n invalid?: boolean;\n}\n\nexport const MoneyInput = React.forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency, locale, invalid, className, disabled, ...rest },\n ref\n) {\n const brand = getBrand();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const [focus, setFocus] = React.useState(false);\n const display = value == null\n ? ''\n : focus\n ? String(value)\n : new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }).format(value);\n return (\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n className={cx('input', invalid && 'is-invalid', className)}\n value={display}\n disabled={disabled}\n onFocus={() => setFocus(true)}\n onBlur={() => setFocus(false)}\n onChange={(e) => {\n const cleaned = e.target.value.replace(/[^\\d-]/g, '');\n if (!cleaned || cleaned === '-') return onChange(null);\n const n = Number(cleaned);\n onChange(Number.isFinite(n) ? n : null);\n }}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\n// ---------- PhoneInput (CL default, prefix + digits) --------------------\nexport interface PhoneInputProps {\n value: string;\n onChange: (v: string) => void;\n prefix?: string;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n placeholder?: string;\n}\n\nexport function PhoneInput({ value, onChange, prefix, invalid, disabled, className, id, placeholder = '9 1234 5678' }: PhoneInputProps) {\n return (\n <div className={cx('phone-input', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n {prefix && <span className=\"phone-input__prefix\">{prefix}</span>}\n <input\n id={id}\n type=\"tel\"\n inputMode=\"tel\"\n placeholder={placeholder}\n className=\"phone-input__field\"\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value.replace(/[^\\d ]/g, ''))}\n aria-invalid={invalid || undefined}\n />\n </div>\n );\n}\n\n// ---------- TimePicker (HH:mm) ------------------------------------------\nexport interface TimePickerProps {\n value: string; // 'HH:mm'\n onChange: (v: string) => void;\n step?: number; // minutes\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function TimePicker({ value, onChange, step = 15, invalid, disabled, className, id }: TimePickerProps) {\n return (\n <input\n id={id}\n type=\"time\"\n step={step * 60}\n className={cx('input', invalid && 'is-invalid', className)}\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n aria-invalid={invalid || undefined}\n />\n );\n}\n\n// ---------- RadioGroup / CheckboxGroup ---------------------------------\nexport interface OptionItem<T = string> { value: T; label: React.ReactNode; description?: React.ReactNode; disabled?: boolean }\n\nexport interface RadioGroupProps<T = string> {\n value: T | null;\n onChange: (v: T) => void;\n options: OptionItem<T>[];\n name: string;\n orientation?: 'vertical' | 'horizontal';\n /** Accessible name for the group (announced as \"<label>, radio group\" by screen readers). */\n label?: string;\n className?: string;\n}\n\nexport function RadioGroup<T = string>({ value, onChange, options, name, orientation = 'vertical', label, className }: RadioGroupProps<T>) {\n return (\n <div role=\"radiogroup\" aria-label={label} className={cx('option-group', `option-group--${orientation}`, className)}>\n {options.map((o) => (\n <label key={String(o.value)} className={cx('option-row', o.disabled && 'is-disabled')}>\n <input\n type=\"radio\"\n className=\"radio\"\n name={name}\n checked={o.value === value}\n disabled={o.disabled}\n onChange={() => onChange(o.value)}\n />\n <span className=\"option-row__body\">\n <span className=\"option-row__label\">{o.label}</span>\n {o.description && <span className=\"option-row__desc\">{o.description}</span>}\n </span>\n </label>\n ))}\n </div>\n );\n}\n\nexport interface CheckboxGroupProps<T = string> {\n value: T[];\n onChange: (v: T[]) => void;\n options: OptionItem<T>[];\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n}\n\nexport function CheckboxGroup<T = string>({ value, onChange, options, orientation = 'vertical', className }: CheckboxGroupProps<T>) {\n const set = new Set(value);\n return (\n <div role=\"group\" className={cx('option-group', `option-group--${orientation}`, className)}>\n {options.map((o) => (\n <label key={String(o.value)} className={cx('option-row', o.disabled && 'is-disabled')}>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={set.has(o.value)}\n disabled={o.disabled}\n onChange={() => {\n if (set.has(o.value)) onChange(value.filter((v) => v !== o.value));\n else onChange([...value, o.value]);\n }}\n />\n <span className=\"option-row__body\">\n <span className=\"option-row__label\">{o.label}</span>\n {o.description && <span className=\"option-row__desc\">{o.description}</span>}\n </span>\n </label>\n ))}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["Slider","MoneyInput"],"mappings":"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","file":"chunk-E6JUMXZM.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- Slider ------------------------------------------------------\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type'> {\n value: number;\n onChange: (v: number) => void;\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n formatValue?: (v: number) => string;\n}\n\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(function Slider(\n { value, onChange, min = 0, max = 100, step = 1, showValue, formatValue, className, ...rest },\n ref\n) {\n const pct = ((value - min) / (max - min)) * 100;\n return (\n <div className={cx('slider', className)}>\n <input\n ref={ref}\n type=\"range\"\n className=\"slider__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n onChange={(e) => onChange(Number(e.target.value))}\n style={{ '--pct': `${pct}%` } as React.CSSProperties}\n {...rest}\n />\n {showValue && (\n <span className=\"slider__value\">{formatValue ? formatValue(value) : value}</span>\n )}\n </div>\n );\n});\n\n// ---------- Progress (linear + circular) --------------------------------\nexport interface ProgressProps {\n value: number; // 0–100\n variant?: 'blue' | 'orange' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function Progress({ value, variant = 'blue', showLabel, size = 'md', className }: ProgressProps) {\n const v = Math.max(0, Math.min(100, value));\n return (\n <div className={cx('progress', size === 'sm' && 'progress--sm', className)}>\n <div className={cx('progress__bar', `progress__bar--${variant}`)} style={{ width: `${v}%` }} role=\"progressbar\" aria-valuenow={v} aria-valuemin={0} aria-valuemax={100} />\n {showLabel && <span className=\"progress__label\">{Math.round(v)}%</span>}\n </div>\n );\n}\n\nexport interface ProgressCircleProps {\n value: number;\n size?: number;\n stroke?: number;\n variant?: 'blue' | 'orange' | 'success' | 'warning' | 'danger';\n showLabel?: boolean;\n className?: string;\n}\n\nexport function ProgressCircle({ value, size = 64, stroke = 6, variant = 'blue', showLabel = true, className }: ProgressCircleProps) {\n const v = Math.max(0, Math.min(100, value));\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n const off = c - (v / 100) * c;\n const colorVar = {\n blue: 'var(--color-primary)',\n orange: 'var(--color-secondary)',\n success: 'var(--color-success)',\n warning: 'var(--color-warning)',\n danger: 'var(--color-danger)',\n }[variant];\n return (\n <div className={cx('progress-circle', className)} style={{ width: size, height: size }} role=\"progressbar\" aria-valuenow={v} aria-valuemin={0} aria-valuemax={100}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <circle cx={size/2} cy={size/2} r={r} stroke=\"var(--bg-subtle)\" strokeWidth={stroke} fill=\"none\" />\n <circle\n cx={size/2} cy={size/2} r={r}\n stroke={colorVar} strokeWidth={stroke} fill=\"none\"\n strokeDasharray={c} strokeDashoffset={off} strokeLinecap=\"round\"\n style={{ transform: 'rotate(-90deg)', transformOrigin: '50% 50%', transition: 'stroke-dashoffset 320ms var(--ease-standard, ease-out)' }}\n />\n </svg>\n {showLabel && <span className=\"progress-circle__label\">{Math.round(v)}%</span>}\n </div>\n );\n}\n\n// ---------- Tag input ---------------------------------------------------\nexport interface TagInputProps {\n value: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n separator?: RegExp;\n maxTags?: number;\n validate?: (tag: string) => boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function TagInput({\n value, onChange, placeholder,\n separator = /[,\\s]+/, maxTags, validate, disabled, className, id,\n}: TagInputProps) {\n const [draft, setDraft] = React.useState('');\n const locale = useLocale();\n const ph = placeholder ?? locale['tagsInput.placeholder'];\n\n const addTags = (raw: string) => {\n const next = raw.split(separator).map((t) => t.trim()).filter(Boolean);\n if (next.length === 0) return;\n let merged = [...value];\n for (const t of next) {\n if (validate && !validate(t)) continue;\n if (merged.includes(t)) continue;\n if (maxTags && merged.length >= maxTags) break;\n merged.push(t);\n }\n onChange(merged);\n setDraft('');\n };\n\n return (\n <div className={cx('tag-input', disabled && 'is-disabled', className)} onClick={(e) => {\n const input = (e.currentTarget.querySelector('input') as HTMLInputElement);\n input?.focus();\n }}>\n {value.map((t, i) => (\n <span key={`${t}-${i}`} className=\"tag-input__tag\">\n {t}\n <button type=\"button\" aria-label={format(locale['tagsInput.remove'], { tag: t })} onClick={() => onChange(value.filter((_, idx) => idx !== i))}><X size={12} /></button>\n </span>\n ))}\n <input\n id={id}\n className=\"tag-input__field\"\n value={draft}\n disabled={disabled}\n placeholder={value.length === 0 ? ph : ''}\n onChange={(e) => {\n const v = e.target.value;\n if (separator.test(v)) addTags(v);\n else setDraft(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && draft.trim()) {\n e.preventDefault();\n addTags(draft);\n } else if (e.key === 'Backspace' && !draft && value.length) {\n onChange(value.slice(0, -1));\n }\n }}\n onBlur={() => draft.trim() && addTags(draft)}\n />\n </div>\n );\n}\n\n// ---------- MoneyInput (CLP-friendly, but accepts any locale) -----------\nexport interface MoneyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type'> {\n value: number | null;\n onChange: (v: number | null) => void;\n currency?: string; // 'CLP' | 'USD' | 'EUR' | …\n locale?: string; // 'es-CL' | …\n invalid?: boolean;\n}\n\nexport const MoneyInput = React.forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency, locale, invalid, className, disabled, ...rest },\n ref\n) {\n const brand = getBrand();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const [focus, setFocus] = React.useState(false);\n const display = value == null\n ? ''\n : focus\n ? String(value)\n : new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }).format(value);\n return (\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n className={cx('input', invalid && 'is-invalid', className)}\n value={display}\n disabled={disabled}\n onFocus={() => setFocus(true)}\n onBlur={() => setFocus(false)}\n onChange={(e) => {\n const cleaned = e.target.value.replace(/[^\\d-]/g, '');\n if (!cleaned || cleaned === '-') return onChange(null);\n const n = Number(cleaned);\n onChange(Number.isFinite(n) ? n : null);\n }}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\n// ---------- PhoneInput (CL default, prefix + digits) --------------------\nexport interface PhoneInputProps {\n value: string;\n onChange: (v: string) => void;\n prefix?: string;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n placeholder?: string;\n}\n\nexport function PhoneInput({ value, onChange, prefix, invalid, disabled, className, id, placeholder = '9 1234 5678' }: PhoneInputProps) {\n return (\n <div className={cx('phone-input', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n {prefix && <span className=\"phone-input__prefix\">{prefix}</span>}\n <input\n id={id}\n type=\"tel\"\n inputMode=\"tel\"\n placeholder={placeholder}\n className=\"phone-input__field\"\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value.replace(/[^\\d ]/g, ''))}\n aria-invalid={invalid || undefined}\n />\n </div>\n );\n}\n\n// ---------- TimePicker (HH:mm) ------------------------------------------\nexport interface TimePickerProps {\n value: string; // 'HH:mm'\n onChange: (v: string) => void;\n step?: number; // minutes\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function TimePicker({ value, onChange, step = 15, invalid, disabled, className, id }: TimePickerProps) {\n return (\n <input\n id={id}\n type=\"time\"\n step={step * 60}\n className={cx('input', invalid && 'is-invalid', className)}\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n aria-invalid={invalid || undefined}\n />\n );\n}\n\n// ---------- RadioGroup / CheckboxGroup ---------------------------------\nexport interface OptionItem<T = string> { value: T; label: React.ReactNode; description?: React.ReactNode; disabled?: boolean }\n\nexport interface RadioGroupProps<T = string> {\n value: T | null;\n onChange: (v: T) => void;\n options: OptionItem<T>[];\n name: string;\n orientation?: 'vertical' | 'horizontal';\n /** Accessible name for the group (announced as \"<label>, radio group\" by screen readers). */\n label?: string;\n className?: string;\n}\n\nexport function RadioGroup<T = string>({ value, onChange, options, name, orientation = 'vertical', label, className }: RadioGroupProps<T>) {\n return (\n <div role=\"radiogroup\" aria-label={label} className={cx('option-group', `option-group--${orientation}`, className)}>\n {options.map((o) => (\n <label key={String(o.value)} className={cx('option-row', o.disabled && 'is-disabled')}>\n <input\n type=\"radio\"\n className=\"radio\"\n name={name}\n checked={o.value === value}\n disabled={o.disabled}\n onChange={() => onChange(o.value)}\n />\n <span className=\"option-row__body\">\n <span className=\"option-row__label\">{o.label}</span>\n {o.description && <span className=\"option-row__desc\">{o.description}</span>}\n </span>\n </label>\n ))}\n </div>\n );\n}\n\nexport interface CheckboxGroupProps<T = string> {\n value: T[];\n onChange: (v: T[]) => void;\n options: OptionItem<T>[];\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n}\n\nexport function CheckboxGroup<T = string>({ value, onChange, options, orientation = 'vertical', className }: CheckboxGroupProps<T>) {\n const set = new Set(value);\n return (\n <div role=\"group\" className={cx('option-group', `option-group--${orientation}`, className)}>\n {options.map((o) => (\n <label key={String(o.value)} className={cx('option-row', o.disabled && 'is-disabled')}>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={set.has(o.value)}\n disabled={o.disabled}\n onChange={() => {\n if (set.has(o.value)) onChange(value.filter((v) => v !== o.value));\n else onChange([...value, o.value]);\n }}\n />\n <span className=\"option-row__body\">\n <span className=\"option-row__label\">{o.label}</span>\n {o.description && <span className=\"option-row__desc\">{o.description}</span>}\n </span>\n </label>\n ))}\n </div>\n );\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { format } from './chunk-KVOPVYZ5.mjs';
|
|
3
3
|
import { useLocale } from './chunk-PBWX4LU2.mjs';
|
|
4
|
-
import { ChevronLeft, ChevronRight, X } from './chunk-
|
|
4
|
+
import { ChevronLeft, ChevronRight, X } from './chunk-BJGMROKL.mjs';
|
|
5
5
|
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
@@ -143,5 +143,5 @@ function Lightbox({ open, onClose, images, index, onChange }) {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
export { ImageGallery, Lightbox };
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-ECZR37QC.mjs.map
|
|
147
|
+
//# sourceMappingURL=chunk-ECZR37QC.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Gallery.tsx"],"names":[],"mappings":"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","file":"chunk-SEYLCARU.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- ImageGallery ------------------------------------------------\nexport interface GalleryImage {\n src: string;\n alt?: string;\n thumbnail?: string; // si no se pasa, se usa src\n}\n\nexport interface ImageGalleryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n images: GalleryImage[];\n /** Index inicial. */\n defaultIndex?: number;\n /** Click en imagen principal abre lightbox. Default: true. */\n enableLightbox?: boolean;\n /** Layout de thumbnails. */\n thumbnailPosition?: 'bottom' | 'left';\n}\n\nexport function ImageGallery({\n images, defaultIndex = 0, enableLightbox = true,\n thumbnailPosition = 'bottom', className, ...rest\n}: ImageGalleryProps) {\n const [index, setIndex] = React.useState(defaultIndex);\n const [lightboxOpen, setLightboxOpen] = React.useState(false);\n const t = useLocale();\n\n if (images.length === 0) return null;\n const safeIndex = Math.max(0, Math.min(index, images.length - 1));\n const current = images[safeIndex];\n\n return (\n <>\n <div className={cx('gallery', `gallery--thumbs-${thumbnailPosition}`, className)} {...rest}>\n <div className=\"gallery__main\">\n <img\n src={current.src}\n alt={current.alt ?? ''}\n className=\"gallery__image\"\n onClick={() => enableLightbox && setLightboxOpen(true)}\n style={{ cursor: enableLightbox ? 'zoom-in' : 'default' }}\n />\n {images.length > 1 && (\n <>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={() => setIndex((i) => (i - 1 + images.length) % images.length)}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--next\"\n aria-label={t['gallery.next']}\n onClick={() => setIndex((i) => (i + 1) % images.length)}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {images.length > 1 && (\n <div className=\"gallery__thumbs\" role=\"tablist\" aria-label={t['gallery.thumbnails']}>\n {images.map((img, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={i === safeIndex}\n aria-label={format(t['gallery.imageNumber'], { n: i + 1 })}\n className={cx('gallery__thumb', i === safeIndex && 'is-active')}\n onClick={() => setIndex(i)}\n >\n <img src={img.thumbnail ?? img.src} alt={img.alt ?? ''} />\n </button>\n ))}\n </div>\n )}\n </div>\n\n {enableLightbox && (\n <Lightbox\n open={lightboxOpen}\n onClose={() => setLightboxOpen(false)}\n images={images}\n index={safeIndex}\n onChange={setIndex}\n />\n )}\n </>\n );\n}\n\n// ---------- Lightbox ---------------------------------------------------\nexport interface LightboxProps {\n open: boolean;\n onClose: () => void;\n images: GalleryImage[];\n index: number;\n onChange?: (i: number) => void;\n}\n\nexport function Lightbox({ open, onClose, images, index, onChange }: LightboxProps) {\n const t = useLocale();\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowLeft' && onChange) onChange((index - 1 + images.length) % images.length);\n else if (e.key === 'ArrowRight' && onChange) onChange((index + 1) % images.length);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, index, images.length, onChange, onClose]);\n\n if (!open || images.length === 0) return null;\n const current = images[Math.max(0, Math.min(index, images.length - 1))];\n\n return (\n <div className=\"lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label={t['gallery.viewer']} onClick={onClose}>\n <button\n type=\"button\"\n className=\"lightbox__close\"\n aria-label={t['gallery.close']}\n onClick={onClose}\n >\n <X size={20} />\n </button>\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={(e) => { e.stopPropagation(); onChange((index - 1 + images.length) % images.length); }}\n >\n <ChevronLeft size={24} />\n </button>\n )}\n <img src={current.src} alt={current.alt ?? ''} className=\"lightbox__image\" onClick={(e) => e.stopPropagation()} />\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--next\"\n aria-label={t['gallery.next']}\n onClick={(e) => { e.stopPropagation(); onChange((index + 1) % images.length); }}\n >\n <ChevronRight size={24} />\n </button>\n )}\n {images.length > 1 && (\n <div className=\"lightbox__counter\">{index + 1} / {images.length}</div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Gallery.tsx"],"names":[],"mappings":"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","file":"chunk-ECZR37QC.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- ImageGallery ------------------------------------------------\nexport interface GalleryImage {\n src: string;\n alt?: string;\n thumbnail?: string; // si no se pasa, se usa src\n}\n\nexport interface ImageGalleryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n images: GalleryImage[];\n /** Index inicial. */\n defaultIndex?: number;\n /** Click en imagen principal abre lightbox. Default: true. */\n enableLightbox?: boolean;\n /** Layout de thumbnails. */\n thumbnailPosition?: 'bottom' | 'left';\n}\n\nexport function ImageGallery({\n images, defaultIndex = 0, enableLightbox = true,\n thumbnailPosition = 'bottom', className, ...rest\n}: ImageGalleryProps) {\n const [index, setIndex] = React.useState(defaultIndex);\n const [lightboxOpen, setLightboxOpen] = React.useState(false);\n const t = useLocale();\n\n if (images.length === 0) return null;\n const safeIndex = Math.max(0, Math.min(index, images.length - 1));\n const current = images[safeIndex];\n\n return (\n <>\n <div className={cx('gallery', `gallery--thumbs-${thumbnailPosition}`, className)} {...rest}>\n <div className=\"gallery__main\">\n <img\n src={current.src}\n alt={current.alt ?? ''}\n className=\"gallery__image\"\n onClick={() => enableLightbox && setLightboxOpen(true)}\n style={{ cursor: enableLightbox ? 'zoom-in' : 'default' }}\n />\n {images.length > 1 && (\n <>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={() => setIndex((i) => (i - 1 + images.length) % images.length)}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--next\"\n aria-label={t['gallery.next']}\n onClick={() => setIndex((i) => (i + 1) % images.length)}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {images.length > 1 && (\n <div className=\"gallery__thumbs\" role=\"tablist\" aria-label={t['gallery.thumbnails']}>\n {images.map((img, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={i === safeIndex}\n aria-label={format(t['gallery.imageNumber'], { n: i + 1 })}\n className={cx('gallery__thumb', i === safeIndex && 'is-active')}\n onClick={() => setIndex(i)}\n >\n <img src={img.thumbnail ?? img.src} alt={img.alt ?? ''} />\n </button>\n ))}\n </div>\n )}\n </div>\n\n {enableLightbox && (\n <Lightbox\n open={lightboxOpen}\n onClose={() => setLightboxOpen(false)}\n images={images}\n index={safeIndex}\n onChange={setIndex}\n />\n )}\n </>\n );\n}\n\n// ---------- Lightbox ---------------------------------------------------\nexport interface LightboxProps {\n open: boolean;\n onClose: () => void;\n images: GalleryImage[];\n index: number;\n onChange?: (i: number) => void;\n}\n\nexport function Lightbox({ open, onClose, images, index, onChange }: LightboxProps) {\n const t = useLocale();\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowLeft' && onChange) onChange((index - 1 + images.length) % images.length);\n else if (e.key === 'ArrowRight' && onChange) onChange((index + 1) % images.length);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, index, images.length, onChange, onClose]);\n\n if (!open || images.length === 0) return null;\n const current = images[Math.max(0, Math.min(index, images.length - 1))];\n\n return (\n <div className=\"lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label={t['gallery.viewer']} onClick={onClose}>\n <button\n type=\"button\"\n className=\"lightbox__close\"\n aria-label={t['gallery.close']}\n onClick={onClose}\n >\n <X size={20} />\n </button>\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={(e) => { e.stopPropagation(); onChange((index - 1 + images.length) % images.length); }}\n >\n <ChevronLeft size={24} />\n </button>\n )}\n <img src={current.src} alt={current.alt ?? ''} className=\"lightbox__image\" onClick={(e) => e.stopPropagation()} />\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--next\"\n aria-label={t['gallery.next']}\n onClick={(e) => { e.stopPropagation(); onChange((index + 1) % images.length); }}\n >\n <ChevronRight size={24} />\n </button>\n )}\n {images.length > 1 && (\n <div className=\"lightbox__counter\">{index + 1} / {images.length}</div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Portal } from './chunk-FKBQYQQD.mjs';
|
|
3
|
+
import { usePopoverPosition } from './chunk-5XT2LX3I.mjs';
|
|
3
4
|
import { Separator } from './chunk-IEPKSPBX.mjs';
|
|
4
|
-
import { Check } from './chunk-
|
|
5
|
+
import { Check } from './chunk-BJGMROKL.mjs';
|
|
5
6
|
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
6
|
-
import { usePopoverPosition } from './chunk-5XT2LX3I.mjs';
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
9
9
|
|
|
@@ -277,5 +277,5 @@ function Stepper({ steps, current, className }) {
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
export { Cluster, Container, Divider, Grid, HStack, KeyValue, KeyValueRow, ListGroup, ListGroupItem, Spacer, Stack, Stepper, Tab, TabList, TabPanel, Table, Tabs, Tooltip, VStack };
|
|
280
|
-
//# sourceMappingURL=chunk-
|
|
281
|
-
//# sourceMappingURL=chunk-
|
|
280
|
+
//# sourceMappingURL=chunk-ESOUBZQJ.mjs.map
|
|
281
|
+
//# sourceMappingURL=chunk-ESOUBZQJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Layout.tsx"],"names":["Table","Divider","Stack","HStack","VStack","Cluster","ListGroup","ListGroupItem"],"mappings":";;;;;;;;AAaA,IAAM,WAAA,GAAoB,oBAAuC,IAAI,CAAA;AAU9D,SAAS,KAAK,EAAE,KAAA,EAAO,cAAc,QAAA,EAAU,QAAA,EAAU,WAAU,EAAc;AACtF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,gBAAgB,EAAE,CAAA;AACjE,EAAA,MAAM,IAAI,KAAA,IAAS,QAAA;AACnB,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAiB;AAC7B,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,WAAA,CAAY,IAAI,CAAA;AACzC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AACA,EAAA,2BACG,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,OAAO,CAAA,EAAG,QAAA,EAAU,MAAK,EACtD,QAAA,kBAAA,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,QAAQ,SAAS,CAAA,EAAI,UAAS,CAAA,EACnD,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAU,SAAA,EAAU,EAAsD;AAClG,EAAA,uBAAO,GAAA,CAAC,SAAI,IAAA,EAAK,SAAA,EAAU,WAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,QAAA,EAAS,CAAA;AAC/E;AAMO,SAAS,IAAI,EAAE,KAAA,EAAO,WAAW,QAAA,EAAU,GAAG,MAAK,EAAa;AACrE,EAAA,MAAM,GAAA,GAAY,iBAAW,WAAW,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,KAAU,KAAA;AAC7B,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,MAAA,IAAU,aAAa,SAAS,CAAA;AAAA,MAC3D,OAAA,EAAS,MAAM,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA;AAAA,MAChC,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAqE;AACzH,EAAA,MAAM,GAAA,GAAY,iBAAW,WAAW,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjE,EAAA,IAAI,GAAA,CAAI,KAAA,KAAU,KAAA,EAAO,OAAO,IAAA;AAChC,EAAA,uBAAO,GAAA,CAAC,SAAI,IAAA,EAAK,UAAA,EAAW,WAAW,EAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EAAI,QAAA,EAAS,CAAA;AACjF;AAGO,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EACzB,SAASA,MAAAA,CAAM,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC1C,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,8BAAC,OAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAI,GAAG,MAAM,CAAA,EAChE,CAAA;AAAA,EAEJ;AACF;AASO,SAAS,QAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,GAAO,OAAM,EAAiB;AACvE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAgB,aAAwB,IAAI,CAAA;AAClD,EAAA,MAAM,SAAA,GAAkB,aAAwB,IAAI,CAAA;AACpD,EAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,QAAA,GAAW,GAAG,OAAO,CAAA,QAAA,CAAA;AAC3B,EAAA,MAAM,SAAA,GAAkB,aAA6C,IAAI,CAAA;AACzE,EAAA,MAAM,UAAA,GAAmB,aAA6C,IAAI,CAAA;AAE1E,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,YAAA,CAAa,SAAA,CAAU,OAAO,CAAA;AACrD,IAAA,IAAI,UAAA,CAAW,OAAA,EAAS,YAAA,CAAa,UAAA,CAAW,OAAO,CAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,KAAA,EAAM;AACN,IAAA,SAAA,CAAU,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,GAAG,CAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,KAAA,EAAM;AACN,IAAA,UAAA,CAAW,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,KAAK,GAAG,EAAE,CAAA;AAAA,EAC1D,CAAA;AAEA,EAAM,gBAAU,MAAM,MAAM,KAAA,EAAM,EAAG,EAAE,CAAA;AAEvC,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,IACvC,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,OAAA,EAAS,SAAA,EAAW;AAAA,IACjD,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,KAAA,GAAc,mBAAa,QAAA,EAAU;AAAA,IACzC,kBAAA,EAAoB,IAAA,GAAO,QAAA,GAAW,QAAA,CAAS,MAAM,kBAAkB;AAAA,GACxE,CAAA;AAED,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE,CAAA;AAAA,MAC3C,YAAA,EAAc,IAAA;AAAA,MACd,YAAA,EAAc,IAAA;AAAA,MACd,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ,IAAA;AAAA,MAEP,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QACA,IAAA,wBACE,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAI,QAAA;AAAA,YACJ,IAAA,EAAK,SAAA;AAAA,YACL,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,aAAa,CAAA;AAAA,YAC9C,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,OAAA;AAAA,cACV,KAAK,GAAA,CAAI,GAAA;AAAA,cACT,MAAM,GAAA,CAAI,IAAA;AAAA,cACV,OAAA,EAAS,GAAA,CAAI,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,cACzB,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,aACtC;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAcO,IAAM,OAAA,GAAgB,KAAA,CAAA,UAAA,CAAyC,SAASC,QAAAA,CAC7E,EAAE,WAAA,GAAc,YAAA,EAAc,SAAA,EAAW,GAAG,IAAA,EAAK,EACjD,GAAA,EACA;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY,KAAA;AAAA,MACZ,WAAW,EAAA,CAAG,SAAA,EAAW,WAAA,KAAgB,UAAA,IAAc,qBAAqB,SAAS,CAAA;AAAA,MACpF,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAcM,IAAM,QAAc,KAAA,CAAA,UAAA,CAAuC,SAASC,OACzE,EAAE,SAAA,GAAY,UAAU,GAAA,GAAM,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,MAAM,MAAA,EAAQ,SAAA,EAAW,OAAO,GAAG,IAAA,IACpF,GAAA,EACA;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,MAChC,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,SAAS,aAAA,GAAgB,MAAA;AAAA,QAClC,aAAA,EAAe,SAAA;AAAA,QACf,GAAA,EAAK,eAAe,GAAG,CAAA,CAAA,CAAA;AAAA,QACvB,UAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAgB,OAAA;AAAA,QAChB,QAAA,EAAU,OAAO,MAAA,GAAS,MAAA;AAAA,QAC1B,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAEM,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EAC1B,SAASC,OAAAA,CAAO,KAAA,EAAO,GAAA,EAAK;AAC1B,IAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAU,KAAA,EAAM,OAAO,KAAA,CAAM,KAAA,IAAS,QAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,EACrF;AACF;AAEO,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EAC1B,SAASC,OAAAA,CAAO,KAAA,EAAO,GAAA,EAAK;AAC1B,IAAA,2BAAQ,KAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAAA,EACxD;AACF;AAOA,IAAM,aAAA,GAAgB,EAAE,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,MAAA,EAAO;AAEpE,SAAS,SAAA,CAAU,EAAE,IAAA,GAAO,IAAA,EAAM,WAAW,KAAA,EAAO,GAAG,MAAK,EAAmB;AACpF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,WAAA,EAAa,CAAA,WAAA,EAAc,IAAI,IAAI,SAAS,CAAA;AAAA,MAC1D,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,cAAc,IAAI,CAAA;AAAA,QAC5B,YAAA,EAAc,MAAA;AAAA,QACd,aAAA,EAAe,gBAAA;AAAA,QACf,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAoBO,SAAS,IAAA,CAAK,EAAE,OAAA,EAAS,GAAA,GAAM,CAAA,EAAG,aAAa,SAAA,EAAW,KAAA,EAAO,GAAG,IAAA,EAAK,EAAc;AAC5F,EAAA,MAAM,MAAA,GAAS,eAAe,GAAG,CAAA,CAAA,CAAA;AAGjC,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,IAAI,OAAO,WAAA,KAAgB,QAAA,GAAW,CAAA,EAAG,WAAW,CAAA,EAAA,CAAA,GAAO,WAAA;AACjE,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,QAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,mBAAA,EAAqB,CAAA,wBAAA,EAA2B,CAAC,CAAA,OAAA,CAAA,EAAW,GAAA,EAAK,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,QAC3G,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAIA,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC1C,IAAA,MAAM,OAA+B,EAAC;AACtC,IAAA,IAAI,OAAA,CAAQ,QAAQ,IAAA,EAAM,IAAA,CAAK,aAAa,CAAA,GAAI,MAAA,CAAO,QAAQ,IAAI,CAAA;AACnE,IAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA,GAAI,MAAA,CAAO,QAAQ,EAAE,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA,GAAI,MAAA,CAAO,QAAQ,EAAE,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA,GAAI,MAAA,CAAO,QAAQ,EAAE,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA,GAAI,MAAA,CAAO,QAAQ,EAAE,CAAA;AAClE,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,kBAAA,EAAoB,SAAS,CAAA;AAAA,QACnD,OAAO,EAAE,GAAA,EAAK,QAAQ,GAAG,IAAA,EAAM,GAAG,KAAA,EAAM;AAAA,QACvC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAEA,EAAA,MAAM,MAAM,OAAO,OAAA,KAAY,WAC3B,CAAA,OAAA,EAAU,OAAO,sBACjB,OAAA,IAAW,4BAAA;AACf,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,qBAAqB,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,MACzE,GAAG;AAAA;AAAA,GACN;AAEJ;AAQO,IAAM,OAAA,GAAgB,KAAA,CAAA,UAAA;AAAA,EAC3B,SAASC,QAAAA,CAAQ,KAAA,EAAO,GAAA,EAAK;AAC3B,IAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAU,KAAA,EAAM,IAAA,EAAI,IAAA,EAAC,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,QAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,EAC1F;AACF;AAaO,SAAS,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAG,MAAK,EAAgB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EACE,QAAQ,IAAA,GACJ,EAAE,MAAM,UAAA,EAAY,KAAA,EAAO,eAAe,IAAI,CAAA,CAAA,CAAA,EAAK,QAAQ,CAAA,YAAA,EAAe,IAAI,KAAK,GAAG,KAAA,KACtF,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,KAAA,EAAM;AAAA,MAElC,GAAG;AAAA;AAAA,GACN;AAEJ;AAQO,SAAS,SAAS,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,EAAkB;AAC/E,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,IAAA,EAAM,SAAS,CAAA;AAAA,MAC7B,KAAA,EAAO,QAAA,GAAW,EAAE,mBAAA,EAAqB,GAAG,OAAO,QAAA,KAAa,QAAA,GAAW,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,GAAO,QAAQ,CAAA,IAAA,CAAA,EAAQ,GAAG,OAAM,GAAI,KAAA;AAAA,MACzH,GAAG;AAAA;AAAA,GACN;AAEJ;AAOO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,QAAA,EAAS,EAAqB;AACjE,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC7B,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,OAAA,EAAS,QAAA,EAAS;AAAA,GAAA,EAClC,CAAA;AAEJ;AAGO,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EAC7B,SAASC,UAAAA,CAAU,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC9C,IAAA,uBAAO,GAAA,CAAC,QAAG,GAAA,EAAU,SAAA,EAAW,GAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EACzE;AACF;AAMO,IAAM,aAAA,GAAsB,KAAA,CAAA,UAAA;AAAA,EACjC,SAASC,eAAc,EAAE,WAAA,EAAa,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC/D,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,WAAA,IAAe,iCAAiC,SAAS,CAAA;AAAA,QAC1F,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AASO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,OAAA,EAAS,WAAU,EAAiB;AACnE,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EACnC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,IAAA,MAAM,QAAQ,CAAA,GAAI,OAAA,GAAU,SAAA,GAAY,CAAA,KAAM,UAAU,YAAA,GAAe,EAAA;AACvE,IAAA,4BACG,IAAA,EAAA,EAAW,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,KAAK,CAAA,EAC9C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,GAAI,OAAA,mBAAU,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,CAAA,GAAK,CAAA,GAAI,CAAA,EAAE,CAAA;AAAA,2BAC5E,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,QACxC,EAAE,WAAA,oBAAe,GAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EAAiB,YAAE,WAAA,EAAY;AAAA,OAAA,EAClE;AAAA,KAAA,EAAA,EALO,CAMT,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ","file":"chunk-FQ7RZJBG.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check } from './Icons';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { Separator } from './Primitives';\n\n// ---------- Tabs ---------------------------------------------------------\ninterface TabsContextValue {\n value: string;\n setValue: (v: string) => void;\n}\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nexport interface TabsProps {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tabs({ value, defaultValue, onChange, children, className }: TabsProps) {\n const [internal, setInternal] = React.useState(defaultValue ?? '');\n const v = value ?? internal;\n const setV = (next: string) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n };\n return (\n <TabsContext.Provider value={{ value: v, setValue: setV }}>\n <div className={cx('tabs', className)}>{children}</div>\n </TabsContext.Provider>\n );\n}\n\nexport function TabList({ children, className }: { children: React.ReactNode; className?: string }) {\n return <div role=\"tablist\" className={cx('tabs__list', className)}>{children}</div>;\n}\n\nexport interface TabProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n}\n\nexport function Tab({ value, className, children, ...rest }: TabProps) {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error('<Tab> must be used inside <Tabs>');\n const active = ctx.value === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={cx('tabs__tab', active && 'is-active', className)}\n onClick={() => ctx.setValue(value)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport function TabPanel({ value, children, className }: { value: string; children: React.ReactNode; className?: string }) {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error('<TabPanel> must be used inside <Tabs>');\n if (ctx.value !== value) return null;\n return <div role=\"tabpanel\" className={cx('tabs__panel', className)}>{children}</div>;\n}\n\n// ---------- Table --------------------------------------------------------\nexport const Table = React.forwardRef<HTMLTableElement, React.TableHTMLAttributes<HTMLTableElement>>(\n function Table({ className, ...rest }, ref) {\n return (\n <div className=\"table-wrap\">\n <table ref={ref} className={cx('table', className)} {...rest} />\n </div>\n );\n }\n);\n\n// ---------- Tooltip (CSS hover) ------------------------------------------\nexport interface TooltipProps {\n label: React.ReactNode;\n children: React.ReactElement;\n side?: 'top' | 'bottom' | 'left' | 'right';\n}\n\nexport function Tooltip({ label, children, side = 'top' }: TooltipProps) {\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLSpanElement>(null);\n const bubbleRef = React.useRef<HTMLSpanElement>(null);\n const reactId = React.useId();\n const bubbleId = `${reactId}-tooltip`;\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), 150);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), 80);\n };\n\n React.useEffect(() => () => clear(), []);\n\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open]);\n\n const pos = usePopoverPosition(wrapRef, bubbleRef, {\n open,\n side,\n align: 'center',\n offset: 8,\n });\n\n const child = React.cloneElement(children, {\n 'aria-describedby': open ? bubbleId : children.props['aria-describedby'],\n });\n\n return (\n <span\n ref={wrapRef}\n className={cx('tooltip', `tooltip--${side}`)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {child}\n {open && (\n <Portal>\n <span\n ref={bubbleRef}\n id={bubbleId}\n role=\"tooltip\"\n className={cx('tooltip__bubble', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n opacity: pos.ready ? 1 : 0,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {label}\n </span>\n </Portal>\n )}\n </span>\n );\n}\n\n// ---------- Divider ------------------------------------------------------\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * @deprecated Use `Separator` instead. `Divider` is a non-breaking alias kept\n * for existing consumers: it delegates to `Separator` with `decorative={false}`\n * (preserving the original `role=\"separator\"` semantics) and keeps emitting the\n * legacy `divider` / `divider--vertical` classes so styling is unchanged. New\n * code should import `Separator`.\n */\nexport const Divider = React.forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', className, ...rest },\n ref\n) {\n return (\n <Separator\n ref={ref}\n orientation={orientation}\n decorative={false}\n className={cx('divider', orientation === 'vertical' && 'divider--vertical', className)}\n {...rest}\n />\n );\n});\n\n// ---------- Stack / HStack / VStack -------------------------------------\ntype SpaceToken = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24;\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'row' | 'column';\n gap?: SpaceToken;\n align?: React.CSSProperties['alignItems'];\n justify?: React.CSSProperties['justifyContent'];\n wrap?: boolean;\n inline?: boolean;\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(function Stack(\n { direction = 'column', gap = 4, align, justify, wrap, inline, className, style, ...rest },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cx('stack', className)}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: `var(--space-${gap})`,\n alignItems: align,\n justifyContent: justify,\n flexWrap: wrap ? 'wrap' : undefined,\n ...style,\n }}\n {...rest}\n />\n );\n});\n\nexport const HStack = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction'>>(\n function HStack(props, ref) {\n return <Stack ref={ref} direction=\"row\" align={props.align ?? 'center'} {...props} />;\n }\n);\n\nexport const VStack = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction'>>(\n function VStack(props, ref) {\n return <Stack ref={ref} direction=\"column\" {...props} />;\n }\n);\n\n// ---------- Container ----------------------------------------------------\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nconst CONTAINER_MAX = { sm: 640, md: 768, lg: 1024, xl: 1280, full: '100%' };\n\nexport function Container({ size = 'lg', className, style, ...rest }: ContainerProps) {\n return (\n <div\n className={cx('container', `container--${size}`, className)}\n style={{\n width: '100%',\n maxWidth: CONTAINER_MAX[size],\n marginInline: 'auto',\n paddingInline: 'var(--space-4)',\n ...style,\n }}\n {...rest}\n />\n );\n}\n\n// ---------- Grid ---------------------------------------------------------\n/**\n * Column count. A number/string is fixed; an object is responsive per\n * breakpoint (each breakpoint inherits the previous one if omitted).\n * Breakpoints match the kit tokens: sm 480 · md 768 · lg 1024 · xl 1280.\n */\nexport type ResponsiveColumns =\n | number\n | string\n | { base?: number; sm?: number; md?: number; lg?: number; xl?: number };\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: ResponsiveColumns;\n gap?: SpaceToken;\n /** Intrinsically responsive auto-fit columns; takes precedence over `columns`. */\n minColWidth?: number | string;\n}\n\nexport function Grid({ columns, gap = 4, minColWidth, className, style, ...rest }: GridProps) {\n const gapVar = `var(--space-${gap})`;\n\n // auto-fit: intrinsic responsiveness, no breakpoints needed.\n if (minColWidth) {\n const w = typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth;\n return (\n <div\n className={cx('grid', className)}\n style={{ display: 'grid', gridTemplateColumns: `repeat(auto-fit, minmax(${w}, 1fr))`, gap: gapVar, ...style }}\n {...rest}\n />\n );\n }\n\n // Responsive object: emit per-breakpoint custom props; `.grid--responsive`\n // (in index.css) reads them through media queries with an inherit chain.\n if (columns && typeof columns === 'object') {\n const vars: Record<string, string> = {};\n if (columns.base != null) vars['--grid-cols'] = String(columns.base);\n if (columns.sm != null) vars['--grid-cols-sm'] = String(columns.sm);\n if (columns.md != null) vars['--grid-cols-md'] = String(columns.md);\n if (columns.lg != null) vars['--grid-cols-lg'] = String(columns.lg);\n if (columns.xl != null) vars['--grid-cols-xl'] = String(columns.xl);\n return (\n <div\n className={cx('grid', 'grid--responsive', className)}\n style={{ gap: gapVar, ...vars, ...style } as React.CSSProperties}\n {...rest}\n />\n );\n }\n\n const tpl = typeof columns === 'number'\n ? `repeat(${columns}, minmax(0, 1fr))`\n : columns ?? 'repeat(12, minmax(0, 1fr))';\n return (\n <div\n className={cx('grid', className)}\n style={{ display: 'grid', gridTemplateColumns: tpl, gap: gapVar, ...style }}\n {...rest}\n />\n );\n}\n\n// ---------- Cluster / Spacer --------------------------------------------\n/**\n * Horizontal group that wraps — the \"cluster\" layout primitive (Braid /\n * Every Layout). Sugar for `<Stack direction=\"row\" wrap>`. Use for tag\n * lists, button rows, filter chips: items flow and wrap, gap stays even.\n */\nexport const Cluster = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction' | 'wrap'>>(\n function Cluster(props, ref) {\n return <Stack ref={ref} direction=\"row\" wrap align={props.align ?? 'center'} {...props} />;\n }\n);\n\nexport interface SpacerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Fixed size on a space token. Omit for a flexible spacer (`flex: 1`). */\n size?: SpaceToken;\n}\n\n/**\n * Spacing element. With `size`, a fixed gap on the space scale. Without it,\n * a flexible spacer that eats remaining space in a flex container (pushes\n * siblings apart) — e.g. a toolbar with left items + `<Spacer />` + right\n * items.\n */\nexport function Spacer({ size, style, ...rest }: SpacerProps) {\n return (\n <div\n aria-hidden=\"true\"\n style={\n size != null\n ? { flex: '0 0 auto', width: `var(--space-${size})`, height: `var(--space-${size})`, ...style }\n : { flex: '1 1 auto', ...style }\n }\n {...rest}\n />\n );\n}\n\n// ---------- KeyValue ----------------------------------------------------\nexport interface KeyValueProps extends React.HTMLAttributes<HTMLDListElement> {\n /** Override del ancho de la columna de keys (default 200px) */\n keyWidth?: number | string;\n}\n\nexport function KeyValue({ keyWidth, className, style, ...rest }: KeyValueProps) {\n return (\n <dl\n className={cx('kv', className)}\n style={keyWidth ? { gridTemplateColumns: `${typeof keyWidth === 'number' ? `${keyWidth}px` : keyWidth} 1fr`, ...style } : style}\n {...rest}\n />\n );\n}\n\nexport interface KeyValueRowProps {\n label: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport function KeyValueRow({ label, children }: KeyValueRowProps) {\n return (\n <>\n <dt className=\"kv__k\">{label}</dt>\n <dd className=\"kv__v\">{children}</dd>\n </>\n );\n}\n\n// ---------- ListGroup ---------------------------------------------------\nexport const ListGroup = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n function ListGroup({ className, ...rest }, ref) {\n return <ul ref={ref} className={cx('list-group', className)} {...rest} />;\n }\n);\n\nexport interface ListGroupItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n interactive?: boolean;\n}\n\nexport const ListGroupItem = React.forwardRef<HTMLLIElement, ListGroupItemProps>(\n function ListGroupItem({ interactive, className, ...rest }, ref) {\n return (\n <li\n ref={ref}\n className={cx('list-group__item', interactive && 'list-group__item--interactive', className)}\n {...rest}\n />\n );\n }\n);\n\n// ---------- Stepper ------------------------------------------------------\nexport interface StepperProps {\n steps: Array<{ label: string; description?: string }>;\n current: number;\n className?: string;\n}\n\nexport function Stepper({ steps, current, className }: StepperProps) {\n return (\n <ol className={cx('stepper', className)}>\n {steps.map((s, i) => {\n const state = i < current ? 'is-done' : i === current ? 'is-current' : '';\n return (\n <li key={i} className={cx('stepper__item', state)}>\n <span className=\"stepper__circle\">{i < current ? <Check size={16} /> : i + 1}</span>\n <div>\n <div className=\"stepper__label\">{s.label}</div>\n {s.description && <div className=\"stepper__desc\">{s.description}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Layout.tsx"],"names":["Table","Divider","Stack","HStack","VStack","Cluster","ListGroup","ListGroupItem"],"mappings":"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","file":"chunk-ESOUBZQJ.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check } from './Icons';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { Separator } from './Primitives';\n\n// ---------- Tabs ---------------------------------------------------------\ninterface TabsContextValue {\n value: string;\n setValue: (v: string) => void;\n}\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nexport interface TabsProps {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tabs({ value, defaultValue, onChange, children, className }: TabsProps) {\n const [internal, setInternal] = React.useState(defaultValue ?? '');\n const v = value ?? internal;\n const setV = (next: string) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n };\n return (\n <TabsContext.Provider value={{ value: v, setValue: setV }}>\n <div className={cx('tabs', className)}>{children}</div>\n </TabsContext.Provider>\n );\n}\n\nexport function TabList({ children, className }: { children: React.ReactNode; className?: string }) {\n return <div role=\"tablist\" className={cx('tabs__list', className)}>{children}</div>;\n}\n\nexport interface TabProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n}\n\nexport function Tab({ value, className, children, ...rest }: TabProps) {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error('<Tab> must be used inside <Tabs>');\n const active = ctx.value === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={cx('tabs__tab', active && 'is-active', className)}\n onClick={() => ctx.setValue(value)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport function TabPanel({ value, children, className }: { value: string; children: React.ReactNode; className?: string }) {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error('<TabPanel> must be used inside <Tabs>');\n if (ctx.value !== value) return null;\n return <div role=\"tabpanel\" className={cx('tabs__panel', className)}>{children}</div>;\n}\n\n// ---------- Table --------------------------------------------------------\nexport const Table = React.forwardRef<HTMLTableElement, React.TableHTMLAttributes<HTMLTableElement>>(\n function Table({ className, ...rest }, ref) {\n return (\n <div className=\"table-wrap\">\n <table ref={ref} className={cx('table', className)} {...rest} />\n </div>\n );\n }\n);\n\n// ---------- Tooltip (CSS hover) ------------------------------------------\nexport interface TooltipProps {\n label: React.ReactNode;\n children: React.ReactElement;\n side?: 'top' | 'bottom' | 'left' | 'right';\n}\n\nexport function Tooltip({ label, children, side = 'top' }: TooltipProps) {\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLSpanElement>(null);\n const bubbleRef = React.useRef<HTMLSpanElement>(null);\n const reactId = React.useId();\n const bubbleId = `${reactId}-tooltip`;\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), 150);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), 80);\n };\n\n React.useEffect(() => () => clear(), []);\n\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open]);\n\n const pos = usePopoverPosition(wrapRef, bubbleRef, {\n open,\n side,\n align: 'center',\n offset: 8,\n });\n\n const child = React.cloneElement(children, {\n 'aria-describedby': open ? bubbleId : children.props['aria-describedby'],\n });\n\n return (\n <span\n ref={wrapRef}\n className={cx('tooltip', `tooltip--${side}`)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {child}\n {open && (\n <Portal>\n <span\n ref={bubbleRef}\n id={bubbleId}\n role=\"tooltip\"\n className={cx('tooltip__bubble', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n opacity: pos.ready ? 1 : 0,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {label}\n </span>\n </Portal>\n )}\n </span>\n );\n}\n\n// ---------- Divider ------------------------------------------------------\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * @deprecated Use `Separator` instead. `Divider` is a non-breaking alias kept\n * for existing consumers: it delegates to `Separator` with `decorative={false}`\n * (preserving the original `role=\"separator\"` semantics) and keeps emitting the\n * legacy `divider` / `divider--vertical` classes so styling is unchanged. New\n * code should import `Separator`.\n */\nexport const Divider = React.forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', className, ...rest },\n ref\n) {\n return (\n <Separator\n ref={ref}\n orientation={orientation}\n decorative={false}\n className={cx('divider', orientation === 'vertical' && 'divider--vertical', className)}\n {...rest}\n />\n );\n});\n\n// ---------- Stack / HStack / VStack -------------------------------------\ntype SpaceToken = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24;\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'row' | 'column';\n gap?: SpaceToken;\n align?: React.CSSProperties['alignItems'];\n justify?: React.CSSProperties['justifyContent'];\n wrap?: boolean;\n inline?: boolean;\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(function Stack(\n { direction = 'column', gap = 4, align, justify, wrap, inline, className, style, ...rest },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cx('stack', className)}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: `var(--space-${gap})`,\n alignItems: align,\n justifyContent: justify,\n flexWrap: wrap ? 'wrap' : undefined,\n ...style,\n }}\n {...rest}\n />\n );\n});\n\nexport const HStack = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction'>>(\n function HStack(props, ref) {\n return <Stack ref={ref} direction=\"row\" align={props.align ?? 'center'} {...props} />;\n }\n);\n\nexport const VStack = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction'>>(\n function VStack(props, ref) {\n return <Stack ref={ref} direction=\"column\" {...props} />;\n }\n);\n\n// ---------- Container ----------------------------------------------------\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nconst CONTAINER_MAX = { sm: 640, md: 768, lg: 1024, xl: 1280, full: '100%' };\n\nexport function Container({ size = 'lg', className, style, ...rest }: ContainerProps) {\n return (\n <div\n className={cx('container', `container--${size}`, className)}\n style={{\n width: '100%',\n maxWidth: CONTAINER_MAX[size],\n marginInline: 'auto',\n paddingInline: 'var(--space-4)',\n ...style,\n }}\n {...rest}\n />\n );\n}\n\n// ---------- Grid ---------------------------------------------------------\n/**\n * Column count. A number/string is fixed; an object is responsive per\n * breakpoint (each breakpoint inherits the previous one if omitted).\n * Breakpoints match the kit tokens: sm 480 · md 768 · lg 1024 · xl 1280.\n */\nexport type ResponsiveColumns =\n | number\n | string\n | { base?: number; sm?: number; md?: number; lg?: number; xl?: number };\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: ResponsiveColumns;\n gap?: SpaceToken;\n /** Intrinsically responsive auto-fit columns; takes precedence over `columns`. */\n minColWidth?: number | string;\n}\n\nexport function Grid({ columns, gap = 4, minColWidth, className, style, ...rest }: GridProps) {\n const gapVar = `var(--space-${gap})`;\n\n // auto-fit: intrinsic responsiveness, no breakpoints needed.\n if (minColWidth) {\n const w = typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth;\n return (\n <div\n className={cx('grid', className)}\n style={{ display: 'grid', gridTemplateColumns: `repeat(auto-fit, minmax(${w}, 1fr))`, gap: gapVar, ...style }}\n {...rest}\n />\n );\n }\n\n // Responsive object: emit per-breakpoint custom props; `.grid--responsive`\n // (in index.css) reads them through media queries with an inherit chain.\n if (columns && typeof columns === 'object') {\n const vars: Record<string, string> = {};\n if (columns.base != null) vars['--grid-cols'] = String(columns.base);\n if (columns.sm != null) vars['--grid-cols-sm'] = String(columns.sm);\n if (columns.md != null) vars['--grid-cols-md'] = String(columns.md);\n if (columns.lg != null) vars['--grid-cols-lg'] = String(columns.lg);\n if (columns.xl != null) vars['--grid-cols-xl'] = String(columns.xl);\n return (\n <div\n className={cx('grid', 'grid--responsive', className)}\n style={{ gap: gapVar, ...vars, ...style } as React.CSSProperties}\n {...rest}\n />\n );\n }\n\n const tpl = typeof columns === 'number'\n ? `repeat(${columns}, minmax(0, 1fr))`\n : columns ?? 'repeat(12, minmax(0, 1fr))';\n return (\n <div\n className={cx('grid', className)}\n style={{ display: 'grid', gridTemplateColumns: tpl, gap: gapVar, ...style }}\n {...rest}\n />\n );\n}\n\n// ---------- Cluster / Spacer --------------------------------------------\n/**\n * Horizontal group that wraps — the \"cluster\" layout primitive (Braid /\n * Every Layout). Sugar for `<Stack direction=\"row\" wrap>`. Use for tag\n * lists, button rows, filter chips: items flow and wrap, gap stays even.\n */\nexport const Cluster = React.forwardRef<HTMLDivElement, Omit<StackProps, 'direction' | 'wrap'>>(\n function Cluster(props, ref) {\n return <Stack ref={ref} direction=\"row\" wrap align={props.align ?? 'center'} {...props} />;\n }\n);\n\nexport interface SpacerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Fixed size on a space token. Omit for a flexible spacer (`flex: 1`). */\n size?: SpaceToken;\n}\n\n/**\n * Spacing element. With `size`, a fixed gap on the space scale. Without it,\n * a flexible spacer that eats remaining space in a flex container (pushes\n * siblings apart) — e.g. a toolbar with left items + `<Spacer />` + right\n * items.\n */\nexport function Spacer({ size, style, ...rest }: SpacerProps) {\n return (\n <div\n aria-hidden=\"true\"\n style={\n size != null\n ? { flex: '0 0 auto', width: `var(--space-${size})`, height: `var(--space-${size})`, ...style }\n : { flex: '1 1 auto', ...style }\n }\n {...rest}\n />\n );\n}\n\n// ---------- KeyValue ----------------------------------------------------\nexport interface KeyValueProps extends React.HTMLAttributes<HTMLDListElement> {\n /** Override del ancho de la columna de keys (default 200px) */\n keyWidth?: number | string;\n}\n\nexport function KeyValue({ keyWidth, className, style, ...rest }: KeyValueProps) {\n return (\n <dl\n className={cx('kv', className)}\n style={keyWidth ? { gridTemplateColumns: `${typeof keyWidth === 'number' ? `${keyWidth}px` : keyWidth} 1fr`, ...style } : style}\n {...rest}\n />\n );\n}\n\nexport interface KeyValueRowProps {\n label: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport function KeyValueRow({ label, children }: KeyValueRowProps) {\n return (\n <>\n <dt className=\"kv__k\">{label}</dt>\n <dd className=\"kv__v\">{children}</dd>\n </>\n );\n}\n\n// ---------- ListGroup ---------------------------------------------------\nexport const ListGroup = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n function ListGroup({ className, ...rest }, ref) {\n return <ul ref={ref} className={cx('list-group', className)} {...rest} />;\n }\n);\n\nexport interface ListGroupItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n interactive?: boolean;\n}\n\nexport const ListGroupItem = React.forwardRef<HTMLLIElement, ListGroupItemProps>(\n function ListGroupItem({ interactive, className, ...rest }, ref) {\n return (\n <li\n ref={ref}\n className={cx('list-group__item', interactive && 'list-group__item--interactive', className)}\n {...rest}\n />\n );\n }\n);\n\n// ---------- Stepper ------------------------------------------------------\nexport interface StepperProps {\n steps: Array<{ label: string; description?: string }>;\n current: number;\n className?: string;\n}\n\nexport function Stepper({ steps, current, className }: StepperProps) {\n return (\n <ol className={cx('stepper', className)}>\n {steps.map((s, i) => {\n const state = i < current ? 'is-done' : i === current ? 'is-current' : '';\n return (\n <li key={i} className={cx('stepper__item', state)}>\n <span className=\"stepper__circle\">{i < current ? <Check size={16} /> : i + 1}</span>\n <div>\n <div className=\"stepper__label\">{s.label}</div>\n {s.description && <div className=\"stepper__desc\">{s.description}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkU6ZXX4WF_js = require('./chunk-U6ZXX4WF.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
6
6
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var reactDom = require('react-dom');
|
|
@@ -29,10 +29,10 @@ function _interopNamespace(e) {
|
|
|
29
29
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
30
30
|
|
|
31
31
|
var VARIANT_ICON = {
|
|
32
|
-
success:
|
|
33
|
-
warning:
|
|
34
|
-
danger:
|
|
35
|
-
info:
|
|
32
|
+
success: chunkC4AKMVDZ_js.CheckCircle,
|
|
33
|
+
warning: chunkC4AKMVDZ_js.AlertTriangle,
|
|
34
|
+
danger: chunkC4AKMVDZ_js.AlertCircle,
|
|
35
|
+
info: chunkC4AKMVDZ_js.Info
|
|
36
36
|
};
|
|
37
37
|
var EXIT_MS = 150;
|
|
38
38
|
var ToastContext = React__namespace.createContext(null);
|
|
@@ -123,7 +123,7 @@ function ToastProvider({ children }) {
|
|
|
123
123
|
t.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast__title", children: t.title }),
|
|
124
124
|
t.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast__desc", children: t.description })
|
|
125
125
|
] }),
|
|
126
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast__close", "aria-label": locale["toast.close"], onClick: () => dismiss(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast__close", "aria-label": locale["toast.close"], onClick: () => dismiss(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.X, { size: 16 }) })
|
|
127
127
|
]
|
|
128
128
|
},
|
|
129
129
|
t.id
|
|
@@ -143,5 +143,5 @@ function useToast() {
|
|
|
143
143
|
|
|
144
144
|
exports.ToastProvider = ToastProvider;
|
|
145
145
|
exports.useToast = useToast;
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-EW7PJQYR.js.map
|
|
147
|
+
//# sourceMappingURL=chunk-EW7PJQYR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Toast.tsx"],"names":["CheckCircle","AlertTriangle","AlertCircle","Info","React","useLocale","jsx","jsxs","cx","X","createPortal"],"mappings":"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","file":"chunk-ZKPFXBE7.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { X, CheckCircle, AlertTriangle, AlertCircle, Info } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { cx } from '../utils/cx';\n\nconst VARIANT_ICON = {\n success: CheckCircle,\n warning: AlertTriangle,\n danger: AlertCircle,\n info: Info,\n} as const;\n\n// Exit animation duration. Must match `--duration-exit` and the\n// `.toast.is-closing` keyframes (`toastSlideOut`) in src/styles/index.css.\nconst EXIT_MS = 150;\n\nexport interface ToastItem {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: 'info' | 'success' | 'warning' | 'danger';\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: ToastItem[];\n push: (t: Omit<ToastItem, 'id'>) => string;\n dismiss: (id: string) => void;\n}\n\nconst ToastContext = React.createContext<ToastContextValue | null>(null);\n\ninterface ToastTimerState {\n handle: ReturnType<typeof setTimeout>;\n startedAt: number;\n remaining: number;\n}\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = React.useState<ToastItem[]>([]);\n // Toasts in the closing window: still rendered with `is-closing` class so\n // CSS can play the exit animation, but already removed from new-toast\n // accounting (auto-dismiss timer cancelled, can't be paused/resumed).\n const [closingIds, setClosingIds] = React.useState<Set<string>>(new Set());\n // SSR-safe portal gating. Without this, the first client render emits a\n // `toast-stack` div into document.body via createPortal, while the\n // server-rendered HTML doesn't — Next.js App Router flags it as a\n // hydration mismatch. Starting `mounted=false` keeps the first client\n // render identical to the server; the effect flips it true after\n // hydration and the portal mounts on the next pass.\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => setMounted(true), []);\n const timers = React.useRef<Map<string, ToastTimerState>>(new Map());\n const exitTimers = React.useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const locale = useLocale();\n\n const dismiss = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (state) {\n clearTimeout(state.handle);\n timers.current.delete(id);\n }\n // Already in the closing window? skip (idempotent).\n if (exitTimers.current.has(id)) return;\n setClosingIds((prev) => {\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n const handle = setTimeout(() => {\n exitTimers.current.delete(id);\n setToasts((list) => list.filter((toast) => toast.id !== id));\n setClosingIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, EXIT_MS);\n exitTimers.current.set(id, handle);\n }, []);\n\n const push = React.useCallback(\n (t: Omit<ToastItem, 'id'>) => {\n const id = Math.random().toString(36).slice(2);\n const item: ToastItem = { id, duration: 4000, variant: 'info', ...t };\n setToasts((list) => [...list, item]);\n if (item.duration && item.duration > 0) {\n const handle = setTimeout(() => dismiss(id), item.duration);\n timers.current.set(id, { handle, startedAt: Date.now(), remaining: item.duration });\n }\n return id;\n },\n [dismiss]\n );\n\n // Pause auto-dismiss while pointer is over the toast — users reading a\n // multi-line message shouldn't have it disappear mid-read.\n const pause = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (!state) return;\n clearTimeout(state.handle);\n const elapsed = Date.now() - state.startedAt;\n const remaining = Math.max(0, state.remaining - elapsed);\n timers.current.set(id, { ...state, remaining });\n }, []);\n\n const resume = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (!state) return;\n const handle = setTimeout(() => dismiss(id), state.remaining);\n timers.current.set(id, { handle, startedAt: Date.now(), remaining: state.remaining });\n }, [dismiss]);\n\n React.useEffect(() => {\n const map = timers.current;\n const exits = exitTimers.current;\n return () => {\n map.forEach((state) => clearTimeout(state.handle));\n map.clear();\n exits.forEach((handle) => clearTimeout(handle));\n exits.clear();\n };\n }, []);\n\n // Portal the stack to body so it isn't clipped by ancestor stacking contexts\n // (overflow:hidden, transform, filter on app shell layouts).\n // aria-atomic intentionally omitted: with `false` (default), screen readers\n // announce only newly added toasts instead of re-reading the entire stack.\n const stack = (\n <div className=\"toast-stack\" aria-live=\"polite\">\n {toasts.map((t) => {\n const variant = t.variant ?? 'info';\n const Icon = VARIANT_ICON[variant];\n return (\n <div\n key={t.id}\n className={cx('toast', `toast--${variant}`, closingIds.has(t.id) && 'is-closing')}\n role=\"status\"\n onMouseEnter={() => pause(t.id)}\n onMouseLeave={() => resume(t.id)}\n onFocus={() => pause(t.id)}\n onBlur={() => resume(t.id)}\n >\n <span className=\"toast__icon\" aria-hidden=\"true\"><Icon size={20} /></span>\n <div className=\"toast__body\">\n {t.title && <div className=\"toast__title\">{t.title}</div>}\n {t.description && <div className=\"toast__desc\">{t.description}</div>}\n </div>\n <button type=\"button\" className=\"toast__close\" aria-label={locale['toast.close']} onClick={() => dismiss(t.id)}><X size={16} /></button>\n </div>\n );\n })}\n </div>\n );\n\n // Memoize the provider value so consumers calling useToast() to access\n // only `push`/`dismiss` (the common case) don't re-render on every state\n // change. Without this, every toast push churned every consumer.\n const ctx = React.useMemo(() => ({ toasts, push, dismiss }), [toasts, push, dismiss]);\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n {mounted && typeof document !== 'undefined' && createPortal(stack, document.body)}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used inside <ToastProvider>');\n return ctx;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Toast.tsx"],"names":["CheckCircle","AlertTriangle","AlertCircle","Info","React","useLocale","jsx","jsxs","cx","X","createPortal"],"mappings":"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","file":"chunk-EW7PJQYR.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { X, CheckCircle, AlertTriangle, AlertCircle, Info } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { cx } from '../utils/cx';\n\nconst VARIANT_ICON = {\n success: CheckCircle,\n warning: AlertTriangle,\n danger: AlertCircle,\n info: Info,\n} as const;\n\n// Exit animation duration. Must match `--duration-exit` and the\n// `.toast.is-closing` keyframes (`toastSlideOut`) in src/styles/index.css.\nconst EXIT_MS = 150;\n\nexport interface ToastItem {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: 'info' | 'success' | 'warning' | 'danger';\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: ToastItem[];\n push: (t: Omit<ToastItem, 'id'>) => string;\n dismiss: (id: string) => void;\n}\n\nconst ToastContext = React.createContext<ToastContextValue | null>(null);\n\ninterface ToastTimerState {\n handle: ReturnType<typeof setTimeout>;\n startedAt: number;\n remaining: number;\n}\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = React.useState<ToastItem[]>([]);\n // Toasts in the closing window: still rendered with `is-closing` class so\n // CSS can play the exit animation, but already removed from new-toast\n // accounting (auto-dismiss timer cancelled, can't be paused/resumed).\n const [closingIds, setClosingIds] = React.useState<Set<string>>(new Set());\n // SSR-safe portal gating. Without this, the first client render emits a\n // `toast-stack` div into document.body via createPortal, while the\n // server-rendered HTML doesn't — Next.js App Router flags it as a\n // hydration mismatch. Starting `mounted=false` keeps the first client\n // render identical to the server; the effect flips it true after\n // hydration and the portal mounts on the next pass.\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => setMounted(true), []);\n const timers = React.useRef<Map<string, ToastTimerState>>(new Map());\n const exitTimers = React.useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const locale = useLocale();\n\n const dismiss = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (state) {\n clearTimeout(state.handle);\n timers.current.delete(id);\n }\n // Already in the closing window? skip (idempotent).\n if (exitTimers.current.has(id)) return;\n setClosingIds((prev) => {\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n const handle = setTimeout(() => {\n exitTimers.current.delete(id);\n setToasts((list) => list.filter((toast) => toast.id !== id));\n setClosingIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, EXIT_MS);\n exitTimers.current.set(id, handle);\n }, []);\n\n const push = React.useCallback(\n (t: Omit<ToastItem, 'id'>) => {\n const id = Math.random().toString(36).slice(2);\n const item: ToastItem = { id, duration: 4000, variant: 'info', ...t };\n setToasts((list) => [...list, item]);\n if (item.duration && item.duration > 0) {\n const handle = setTimeout(() => dismiss(id), item.duration);\n timers.current.set(id, { handle, startedAt: Date.now(), remaining: item.duration });\n }\n return id;\n },\n [dismiss]\n );\n\n // Pause auto-dismiss while pointer is over the toast — users reading a\n // multi-line message shouldn't have it disappear mid-read.\n const pause = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (!state) return;\n clearTimeout(state.handle);\n const elapsed = Date.now() - state.startedAt;\n const remaining = Math.max(0, state.remaining - elapsed);\n timers.current.set(id, { ...state, remaining });\n }, []);\n\n const resume = React.useCallback((id: string) => {\n const state = timers.current.get(id);\n if (!state) return;\n const handle = setTimeout(() => dismiss(id), state.remaining);\n timers.current.set(id, { handle, startedAt: Date.now(), remaining: state.remaining });\n }, [dismiss]);\n\n React.useEffect(() => {\n const map = timers.current;\n const exits = exitTimers.current;\n return () => {\n map.forEach((state) => clearTimeout(state.handle));\n map.clear();\n exits.forEach((handle) => clearTimeout(handle));\n exits.clear();\n };\n }, []);\n\n // Portal the stack to body so it isn't clipped by ancestor stacking contexts\n // (overflow:hidden, transform, filter on app shell layouts).\n // aria-atomic intentionally omitted: with `false` (default), screen readers\n // announce only newly added toasts instead of re-reading the entire stack.\n const stack = (\n <div className=\"toast-stack\" aria-live=\"polite\">\n {toasts.map((t) => {\n const variant = t.variant ?? 'info';\n const Icon = VARIANT_ICON[variant];\n return (\n <div\n key={t.id}\n className={cx('toast', `toast--${variant}`, closingIds.has(t.id) && 'is-closing')}\n role=\"status\"\n onMouseEnter={() => pause(t.id)}\n onMouseLeave={() => resume(t.id)}\n onFocus={() => pause(t.id)}\n onBlur={() => resume(t.id)}\n >\n <span className=\"toast__icon\" aria-hidden=\"true\"><Icon size={20} /></span>\n <div className=\"toast__body\">\n {t.title && <div className=\"toast__title\">{t.title}</div>}\n {t.description && <div className=\"toast__desc\">{t.description}</div>}\n </div>\n <button type=\"button\" className=\"toast__close\" aria-label={locale['toast.close']} onClick={() => dismiss(t.id)}><X size={16} /></button>\n </div>\n );\n })}\n </div>\n );\n\n // Memoize the provider value so consumers calling useToast() to access\n // only `push`/`dismiss` (the common case) don't re-render on every state\n // change. Without this, every toast push churned every consumer.\n const ctx = React.useMemo(() => ({ toasts, push, dismiss }), [toasts, push, dismiss]);\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n {mounted && typeof document !== 'undefined' && createPortal(stack, document.body)}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used inside <ToastProvider>');\n return ctx;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Portal } from './chunk-FKBQYQQD.mjs';
|
|
3
|
-
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
4
3
|
import { useDismiss } from './chunk-6P2TKRTL.mjs';
|
|
5
4
|
import { usePopoverPosition } from './chunk-5XT2LX3I.mjs';
|
|
5
|
+
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
8
|
|
|
@@ -75,5 +75,5 @@ function Popover({
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export { Popover };
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-FR4JV3JA.mjs.map
|
|
79
|
+
//# sourceMappingURL=chunk-FR4JV3JA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Popover.tsx"],"names":[],"mappings":";;;;;;;AA0BO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA,GAAQ,QAAA;AAAA,EACR,MAAA,GAAS,CAAA;AAAA,EACT,mBAAA,GAAsB,IAAA;AAAA,EACtB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,WAAW,CAAA;AAClE,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAE7C,EAAA,MAAM,UAAA,GAAmB,aAAwB,IAAI,CAAA;AACrD,EAAA,MAAM,UAAA,GAAmB,aAAuB,IAAI,CAAA;AAEpD,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAkB;AACjC,IAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,IAAA,YAAA,GAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,UAAA,EAAY,UAAA,EAAY;AAAA,IACrD,IAAA;AAAA,IACA,IAAA,EAAM,SAAA;AAAA,IACN,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,UAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,UAAA,EAAY,UAAU,CAAA;AAAA,IAC7B,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,kBAAA;AAAA,QACV,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QAC5B,eAAA,EAAc,QAAA;AAAA,QACd,eAAA,EAAe,IAAA;AAAA,QAEd,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IAIC,IAAA,wBACE,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,gBAAgB,CAAA;AAAA,QAClD,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEC;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Popover.tsx"],"names":[],"mappings":";;;;;;;AA0BO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA,GAAQ,QAAA;AAAA,EACR,MAAA,GAAS,CAAA;AAAA,EACT,mBAAA,GAAsB,IAAA;AAAA,EACtB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,WAAW,CAAA;AAClE,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAE7C,EAAA,MAAM,UAAA,GAAmB,aAAwB,IAAI,CAAA;AACrD,EAAA,MAAM,UAAA,GAAmB,aAAuB,IAAI,CAAA;AAEpD,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAkB;AACjC,IAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,IAAA,YAAA,GAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,UAAA,EAAY,UAAA,EAAY;AAAA,IACrD,IAAA;AAAA,IACA,IAAA,EAAM,SAAA;AAAA,IACN,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,UAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,UAAA,EAAY,UAAU,CAAA;AAAA,IAC7B,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,kBAAA;AAAA,QACV,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QAC5B,eAAA,EAAc,QAAA;AAAA,QACd,eAAA,EAAe,IAAA;AAAA,QAEd,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IAIC,IAAA,wBACE,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,gBAAgB,CAAA;AAAA,QAClD,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEC;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-FR4JV3JA.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger: React.ReactNode;\n children: React.ReactNode;\n placement?: PopoverPlacement;\n align?: PopoverAlign;\n offset?: number;\n closeOnOutsideClick?: boolean;\n closeOnEscape?: boolean;\n className?: string;\n contentClassName?: string;\n ariaLabel?: string;\n}\n\nexport function Popover({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger,\n children,\n placement = 'bottom',\n align = 'center',\n offset = 8,\n closeOnOutsideClick = true,\n closeOnEscape = true,\n className,\n contentClassName,\n ariaLabel,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const triggerRef = React.useRef<HTMLSpanElement>(null);\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n const setOpen = (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const pos = usePopoverPosition(triggerRef, contentRef, {\n open,\n side: placement,\n align,\n offset,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [triggerRef, contentRef],\n closeOnEscape,\n closeOnOutsideClick,\n });\n\n return (\n <span className={cx('popover', className)}>\n <span\n ref={triggerRef}\n className=\"popover__trigger\"\n onClick={() => setOpen(!open)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n {trigger}\n </span>\n {/* Portaled to document.body so absolute coords (document-relative)\n match the positioning origin and overflow:hidden / transformed\n ancestors don't clip the panel. */}\n {open && (\n <Portal>\n <div\n ref={contentRef}\n role=\"dialog\"\n aria-label={ariaLabel}\n className={cx('popover__content', contentClassName)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {children}\n </div>\n </Portal>\n )}\n </span>\n );\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
5
5
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -106,7 +106,7 @@ function Carousel({
|
|
|
106
106
|
"aria-label": "Anterior",
|
|
107
107
|
onClick: prev,
|
|
108
108
|
disabled: !loop && index === 0,
|
|
109
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronLeft, { size: 20 })
|
|
110
110
|
}
|
|
111
111
|
),
|
|
112
112
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -117,7 +117,7 @@ function Carousel({
|
|
|
117
117
|
"aria-label": "Siguiente",
|
|
118
118
|
onClick: next,
|
|
119
119
|
disabled: !loop && index === total - 1,
|
|
120
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
120
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 20 })
|
|
121
121
|
}
|
|
122
122
|
)
|
|
123
123
|
] })
|
|
@@ -139,5 +139,5 @@ function Carousel({
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
exports.Carousel = Carousel;
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
142
|
+
//# sourceMappingURL=chunk-GGILBESE.js.map
|
|
143
|
+
//# sourceMappingURL=chunk-GGILBESE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Carousel.tsx"],"names":["React","jsxs","cx","jsx","Fragment","ChevronLeft","ChevronRight"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Carousel.tsx"],"names":["React","jsxs","cx","jsx","Fragment","ChevronLeft","ChevronRight"],"mappings":"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","file":"chunk-GGILBESE.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
|