@misael703/ui 1.15.0 → 1.17.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 +42 -3
- package/dist/{chunk-BBZESXFJ.mjs → chunk-2I7NE7QR.mjs} +2 -2
- package/dist/chunk-2I7NE7QR.mjs.map +1 -0
- package/dist/{chunk-N5D6AC6M.mjs → chunk-4QHE5H36.mjs} +34 -3
- package/dist/chunk-4QHE5H36.mjs.map +1 -0
- package/dist/{chunk-BGIX6G5V.mjs → chunk-5A3MAGA3.mjs} +48 -10
- package/dist/chunk-5A3MAGA3.mjs.map +1 -0
- package/dist/{chunk-DHCJMYFD.mjs → chunk-B4I6BMNS.mjs} +7 -3
- package/dist/chunk-B4I6BMNS.mjs.map +1 -0
- package/dist/{chunk-62F5E5NQ.js → chunk-DGBVPXGW.js} +14 -14
- package/dist/{chunk-62F5E5NQ.js.map → chunk-DGBVPXGW.js.map} +1 -1
- package/dist/{chunk-TIO7MIUN.js → chunk-FS42XEU7.js} +49 -9
- package/dist/chunk-FS42XEU7.js.map +1 -0
- package/dist/{chunk-OXX5RSZQ.js → chunk-IZELILHK.js} +2 -2
- package/dist/chunk-IZELILHK.js.map +1 -0
- package/dist/{chunk-DY3DCHWD.mjs → chunk-L4ITC2U6.mjs} +3 -3
- package/dist/{chunk-DY3DCHWD.mjs.map → chunk-L4ITC2U6.mjs.map} +1 -1
- package/dist/{chunk-D7RM4AY4.js → chunk-MJ6UOTWQ.js} +13 -13
- package/dist/{chunk-D7RM4AY4.js.map → chunk-MJ6UOTWQ.js.map} +1 -1
- package/dist/{chunk-HHEYTMBY.js → chunk-MVJITG75.js} +37 -2
- package/dist/chunk-MVJITG75.js.map +1 -0
- package/dist/{chunk-YL2IWHUZ.mjs → chunk-PKCLA2FD.mjs} +3 -3
- package/dist/{chunk-YL2IWHUZ.mjs.map → chunk-PKCLA2FD.mjs.map} +1 -1
- package/dist/{chunk-AZBX7UFI.js → chunk-PRECODB3.js} +8 -2
- package/dist/chunk-PRECODB3.js.map +1 -0
- package/dist/{chunk-ZMRN4DMC.js → chunk-XCZVZVYJ.js} +9 -9
- package/dist/{chunk-ZMRN4DMC.js.map → chunk-XCZVZVYJ.js.map} +1 -1
- package/dist/{chunk-5MIN6LUP.mjs → chunk-YNU45Y5T.mjs} +3 -3
- package/dist/{chunk-5MIN6LUP.mjs.map → chunk-YNU45Y5T.mjs.map} +1 -1
- package/dist/components/AdvancedPickers.js +6 -6
- package/dist/components/AdvancedPickers.mjs +2 -2
- package/dist/components/Display.d.mts +4 -3
- package/dist/components/Display.d.ts +4 -3
- package/dist/components/Display.js +12 -12
- package/dist/components/Display.mjs +1 -1
- package/dist/components/Display3.js +8 -8
- package/dist/components/Display3.mjs +2 -2
- package/dist/components/Layout.d.mts +32 -2
- package/dist/components/Layout.d.ts +32 -2
- package/dist/components/Layout.js +26 -18
- package/dist/components/Layout.mjs +1 -1
- package/dist/components/Pickers.js +7 -7
- package/dist/components/Pickers.mjs +2 -2
- package/dist/components/Toggle.d.mts +17 -1
- package/dist/components/Toggle.d.ts +17 -1
- package/dist/components/Toggle.js +12 -4
- package/dist/components/Toggle.mjs +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +95 -63
- package/dist/index.mjs +8 -8
- package/dist/presets/elalba/styles.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/utils/dateFormat.d.mts +24 -1
- package/dist/utils/dateFormat.d.ts +24 -1
- package/dist/utils/dateFormat.js +26 -10
- package/dist/utils/dateFormat.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-AZBX7UFI.js.map +0 -1
- package/dist/chunk-BBZESXFJ.mjs.map +0 -1
- package/dist/chunk-BGIX6G5V.mjs.map +0 -1
- package/dist/chunk-DHCJMYFD.mjs.map +0 -1
- package/dist/chunk-HHEYTMBY.js.map +0 -1
- package/dist/chunk-N5D6AC6M.mjs.map +0 -1
- package/dist/chunk-OXX5RSZQ.js.map +0 -1
- package/dist/chunk-TIO7MIUN.js.map +0 -1
package/README.md
CHANGED
|
@@ -155,13 +155,52 @@ Recetas de página listas para copiar, **no se publican en el paquete**
|
|
|
155
155
|
(viven en `src/blocks/`, fuera de `dist`). Componen los componentes del kit
|
|
156
156
|
en secciones reales. Mirálas renderizadas en Storybook bajo **Blocks/**:
|
|
157
157
|
|
|
158
|
+
### Genéricos (cross-app, no asumen dominio)
|
|
159
|
+
| Sub | Block | Compone |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| Shell | Admin dashboard | AppShell `headerLayout="top"` + PageHeader + Kpi + DataTable |
|
|
162
|
+
| Auth | Auth screen | Card + FormField + Input + Logo (centered, simple) |
|
|
163
|
+
| Auth | Auth split | Form izquierda + brand panel con watermark derecha |
|
|
164
|
+
| Data | Data table page | FilterPanel + DataTable (con `toolbar` slot) + BulkActionBar + TablePagination |
|
|
165
|
+
| Data | Detail page | PageHeader + Tabs + sticky meta sidebar (vista de 1 entidad) |
|
|
166
|
+
| Config | Settings page | Sidebar de secciones + form area (Cuenta · Notificaciones · Seguridad · Facturación) |
|
|
167
|
+
| Estados | Empty state page | EmptyState envuelto en page layout |
|
|
168
|
+
| Estados | Error page | Página de error con retry CTA y contacto de soporte |
|
|
169
|
+
| Estados | Not found | 404 con numeral brand-colored y dos acciones de recuperación |
|
|
170
|
+
| Utility | Onboarding checklist | Card + Progress + tareas chequeables con CTAs (activation pattern) |
|
|
171
|
+
| Utility | Notifications page | Inbox con filtros por tono + mark-all-as-read |
|
|
172
|
+
| Utility | Wizard page | Stepper horizontal + form centered + back/next (multi-step) |
|
|
173
|
+
| Utility | Audit log page | DataTable cronológico + DiffViewer en Modal (auditing) |
|
|
174
|
+
|
|
175
|
+
### Commerce
|
|
158
176
|
| Block | Compone |
|
|
159
177
|
|---|---|
|
|
160
|
-
|
|
|
161
|
-
|
|
|
162
|
-
|
|
|
178
|
+
| Product catalog | FilterPanel + grid de ProductCards + toolbar |
|
|
179
|
+
| Cart drawer | Drawer + line items + qty + OrderSummary + Pagar |
|
|
180
|
+
| Invoice document | Factura print-friendly con header, items, totales/IVA |
|
|
163
181
|
| Checkout | AddressForm + OrderSummary + PromoCodeInput + FreeShippingProgress |
|
|
164
182
|
|
|
183
|
+
### Dominio — Despachos
|
|
184
|
+
| Block | Compone |
|
|
185
|
+
|---|---|
|
|
186
|
+
| Dispatch board | Kanban con columnas por etapa del pipeline (Por confirmar → En ruta → Entregado) |
|
|
187
|
+
| Route map | Sidebar de paradas + área de mapa mock SVG con markers + polyline + vehículo pulsante |
|
|
188
|
+
| Delivery timeline | Timeline vertical del lifecycle de UNA entrega con timestamps, fotos y actor |
|
|
189
|
+
| Route schedule | Grid 7 días × N horas con bloques de ruta |
|
|
190
|
+
|
|
191
|
+
### Dominio — Rentools (arriendo de herramientas)
|
|
192
|
+
| Block | Compone |
|
|
193
|
+
|---|---|
|
|
194
|
+
| Tool catalog | Grid de herramientas con tarifa/día + disponibilidad + garantía + Reservar |
|
|
195
|
+
| Rental booking | DateRangePicker + cálculo días×tarifa en vivo + depósito separado |
|
|
196
|
+
| Availability calendar | Calendar con días reservado/mantención/libre + próximas reservas |
|
|
197
|
+
| Rental board | Kanban por estado (Reservado→Entregado→En uso→Por devolver→Devuelto + Atrasado) |
|
|
198
|
+
| Return inspection | Check-in con checklist de estado + daños + liquidación de garantía en vivo |
|
|
199
|
+
| Rental agreement | Contrato de arriendo print-friendly con firma |
|
|
200
|
+
| Rental detail | Vista de 1 arriendo: timeline de estado + meta (equipo/cliente/costos) |
|
|
201
|
+
|
|
202
|
+
Índice detallado con código embebido: **[docs/BLOCKS.md](./docs/BLOCKS.md)**.
|
|
203
|
+
|
|
165
204
|
Para usar uno: copia el `.tsx` desde `src/blocks/` a tu app y cambia el
|
|
166
205
|
import `from '../index'` por `from '@misael703/ui'`. Son puntos de partida,
|
|
167
206
|
no componentes configurables: una vez copiado, el código es tuyo.
|
|
@@ -158,5 +158,5 @@ function ProductCard({
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner };
|
|
161
|
-
//# sourceMappingURL=chunk-
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
161
|
+
//# sourceMappingURL=chunk-2I7NE7QR.mjs.map
|
|
162
|
+
//# sourceMappingURL=chunk-2I7NE7QR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Display.tsx"],"names":["Card","CardHeader","CardBody","CardFooter","ChipGroup"],"mappings":"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","file":"chunk-2I7NE7QR.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CategoryAccent = 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'cat-6';\nexport type CardAccent =\n | 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n /**\n * Typographic register. `'data'` (default) is the quiet data-chip:\n * sentence case, tinted, no hard border — it reads as metadata in a\n * dense table. `'label'` is the brand micro-label: uppercase texture\n * for eyebrows, kickers and short tags. Opt into `'label'` only when\n * the badge is a label, not a value.\n */\n tone?: 'data' | 'label';\n /**\n * Surface intensity, orthogonal to `variant` (which is the colour\n * role). `'soft'` (default) is the tinted chip. `'solid'` is a filled\n * chip (the variant's deep tone + white text). `'outline'` is a hairline\n * chip (transparent fill, the variant's deep tone for text + border).\n * `variant=\"neutral\" appearance=\"solid\"` is the dark/ink tag. Supersedes\n * the legacy `variant=\"solid\"` / `\"solid-orange\"` magic strings (still\n * supported, not removed).\n */\n appearance?: 'soft' | 'solid' | 'outline';\n}\n\nexport function Badge({\n variant = 'neutral', dot, pulse, tone = 'data', appearance = 'soft', className, children, ...rest\n}: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span\n className={cx(\n 'badge',\n `badge--${variant}`,\n tone === 'label' && 'badge--label',\n appearance !== 'soft' && `badge--app-${appearance}`,\n className\n )}\n {...rest}\n >\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
|
|
@@ -93,7 +93,38 @@ function buildMonthGrid(view, offset = 0) {
|
|
|
93
93
|
}
|
|
94
94
|
return { month, cells };
|
|
95
95
|
}
|
|
96
|
+
function parseLocalDay(iso) {
|
|
97
|
+
if (iso instanceof Date) return new Date(iso.getFullYear(), iso.getMonth(), iso.getDate());
|
|
98
|
+
const m = iso.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
99
|
+
if (m) return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));
|
|
100
|
+
const d = new Date(iso);
|
|
101
|
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
102
|
+
}
|
|
103
|
+
function isToday(iso, now = /* @__PURE__ */ new Date()) {
|
|
104
|
+
return isSameDay(parseLocalDay(iso), now);
|
|
105
|
+
}
|
|
106
|
+
function isTomorrow(iso, now = /* @__PURE__ */ new Date()) {
|
|
107
|
+
const t = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
|
|
108
|
+
return isSameDay(parseLocalDay(iso), t);
|
|
109
|
+
}
|
|
110
|
+
function isYesterday(iso, now = /* @__PURE__ */ new Date()) {
|
|
111
|
+
const y = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
|
|
112
|
+
return isSameDay(parseLocalDay(iso), y);
|
|
113
|
+
}
|
|
114
|
+
function formatRelativeDay(iso, opts = {}) {
|
|
115
|
+
const locale = opts.locale ?? getBrand().locale ?? "es-CL";
|
|
116
|
+
const now = opts.now ?? /* @__PURE__ */ new Date();
|
|
117
|
+
const target = parseLocalDay(iso);
|
|
118
|
+
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
119
|
+
const diffDays = Math.round((target.getTime() - today.getTime()) / 864e5);
|
|
120
|
+
if (Math.abs(diffDays) <= 1) {
|
|
121
|
+
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
|
|
122
|
+
const s = rtf.format(diffDays, "day");
|
|
123
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
124
|
+
}
|
|
125
|
+
return new Intl.DateTimeFormat(locale, { weekday: "short", day: "numeric", month: "short" }).format(target);
|
|
126
|
+
}
|
|
96
127
|
|
|
97
|
-
export { addMonths, buildMonthGrid, dateFormatPlaceholder, detectFormatFromLocale, formatDate, isSameDay, parseDate, resolveDateFormat, startOfMonth };
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
export { addMonths, buildMonthGrid, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth };
|
|
129
|
+
//# sourceMappingURL=chunk-4QHE5H36.mjs.map
|
|
130
|
+
//# sourceMappingURL=chunk-4QHE5H36.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/dateFormat.ts"],"names":[],"mappings":"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","file":"chunk-4QHE5H36.mjs","sourcesContent":["import { getBrand } from '../brand';\n\n/**\n * Date display formats supported by the kit's date pickers.\n *\n * - `iso` → `2026-05-02` (ISO 8601, year-month-day)\n * - `dmy` → `02-05-2026` (day-month-year, common in es-CL, es-ES, en-GB, pt-BR)\n * - `mdy` → `05-02-2026` (month-day-year, en-US)\n * - `auto` → derived from `configureBrand().locale` via Intl.DateTimeFormat\n */\nexport type DateFormat = 'iso' | 'dmy' | 'mdy' | 'auto';\n\n/** A concrete (non-`auto`) format. */\nexport type ResolvedDateFormat = Exclude<DateFormat, 'auto'>;\n\n/**\n * Inspects the locale's date-part order using `Intl.DateTimeFormat.formatToParts`.\n * No hardcoded country lists — uses the runtime's CLDR data.\n */\nexport function detectFormatFromLocale(locale: string): ResolvedDateFormat {\n try {\n const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(2024, 0, 2));\n const order: string[] = [];\n for (const p of parts) {\n if (p.type === 'year') order.push('y');\n else if (p.type === 'month') order.push('m');\n else if (p.type === 'day') order.push('d');\n }\n const key = order.join('');\n if (key === 'ymd') return 'iso';\n if (key === 'mdy') return 'mdy';\n return 'dmy';\n } catch {\n return 'dmy';\n }\n}\n\n/** Resolves `'auto'` against the current `configureBrand().locale`. */\nexport function resolveDateFormat(format: DateFormat): ResolvedDateFormat {\n if (format === 'auto') return detectFormatFromLocale(getBrand().locale);\n return format;\n}\n\nconst PLACEHOLDERS: Record<ResolvedDateFormat, string> = {\n iso: 'aaaa-mm-dd',\n dmy: 'dd-mm-aaaa',\n mdy: 'mm-dd-aaaa',\n};\n\n/** Localized placeholder for the given resolved format. */\nexport function dateFormatPlaceholder(format: ResolvedDateFormat): string {\n return PLACEHOLDERS[format];\n}\n\n/** Format a Date as a string in the given resolved format. Always uses `-` as separator. */\nexport function formatDate(d: Date, format: ResolvedDateFormat): string {\n const yyyy = d.getFullYear();\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n if (format === 'iso') return `${yyyy}-${mm}-${dd}`;\n if (format === 'dmy') return `${dd}-${mm}-${yyyy}`;\n return `${mm}-${dd}-${yyyy}`;\n}\n\n/**\n * Parse a user-typed date string. Tolerant of `-`, `/`, `.` separators.\n *\n * Always accepts ISO `aaaa-mm-dd` regardless of `format` (it's the canonical\n * wire format, used by APIs and `<input type=\"date\">`). Otherwise, interprets\n * the parts according to the provided format.\n *\n * Returns `null` for invalid dates (out of range, non-existent days like Feb 30,\n * unparseable strings).\n */\nexport function parseDate(s: string, format: ResolvedDateFormat): Date | null {\n const trimmed = s.trim();\n if (!trimmed) return null;\n\n // Always accept ISO as a fallback (wire format).\n const iso = trimmed.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (iso) {\n return safeDate(Number(iso[1]), Number(iso[2]), Number(iso[3]));\n }\n\n const m = trimmed.match(/^(\\d{1,4})[\\-\\/.](\\d{1,2})[\\-\\/.](\\d{1,4})$/);\n if (!m) return null;\n\n let y: number, mo: number, d: number;\n if (format === 'iso') {\n y = Number(m[1]); mo = Number(m[2]); d = Number(m[3]);\n } else if (format === 'dmy') {\n d = Number(m[1]); mo = Number(m[2]); y = Number(m[3]);\n } else {\n mo = Number(m[1]); d = Number(m[2]); y = Number(m[3]);\n }\n\n // 2-digit years: assume 2000s.\n if (y < 100) y += 2000;\n\n return safeDate(y, mo, d);\n}\n\nfunction safeDate(y: number, mo: number, d: number): Date | null {\n if (mo < 1 || mo > 12 || d < 1 || d > 31) return null;\n const dt = new Date(y, mo - 1, d);\n if (\n isNaN(dt.getTime()) ||\n dt.getFullYear() !== y ||\n dt.getMonth() !== mo - 1 ||\n dt.getDate() !== d\n ) {\n return null;\n }\n return dt;\n}\n\n// ---------- Calendar helpers (shared by the date pickers) ----------------\n// Previously duplicated verbatim in Pickers.tsx, AdvancedPickers.tsx and\n// Display3.tsx. Single source now; behavior is unchanged.\n\n/** First day of `d`'s month at local midnight. */\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n/** `d` shifted by `n` months, normalized to the first of that month. */\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\n/** True when `a` and `b` are the same calendar day (local time). */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Compact month grid used by the date pickers: leading `null`s pad the days\n * before the 1st of a Monday-first week, followed by one `Date` per day of the\n * month (no adjacent-month spillover). The full-month `Calendar` uses a\n * different fixed 42-cell model on purpose, so it does not consume this.\n *\n * @param view Any date within the reference month.\n * @param offset Months to add to `view` (0 = same month, 1 = next, ...).\n */\nexport function buildMonthGrid(\n view: Date,\n offset = 0\n): { month: Date; cells: (Date | null)[] } {\n const month = addMonths(view, offset);\n const startDow = (month.getDay() + 6) % 7; // Monday = 0\n const days = new Date(month.getFullYear(), month.getMonth() + 1, 0).getDate();\n const cells: (Date | null)[] = [];\n for (let i = 0; i < startDow; i++) cells.push(null);\n for (let d = 1; d <= days; d++) {\n cells.push(new Date(month.getFullYear(), month.getMonth(), d));\n }\n return { month, cells };\n}\n\n// ---------- Relative day helpers ----------------------------------------\n\n/**\n * Parse a date-only ISO (`YYYY-MM-DD`, optionally with a time suffix) to a\n * Date at **local midnight**. `new Date('2026-05-22')` parses as UTC\n * midnight, which lands on the 21st in negative-offset timezones — a classic\n * off-by-one-day SSR bug. Reading the Y-M-D parts and constructing a local\n * Date avoids it: the calendar day is always the one written in the string.\n */\nfunction parseLocalDay(iso: string | Date): Date {\n if (iso instanceof Date) return new Date(iso.getFullYear(), iso.getMonth(), iso.getDate());\n const m = iso.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n if (m) return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n const d = new Date(iso);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\n/** True if `iso` is the same calendar day as `now` (default today, local). */\nexport function isToday(iso: string | Date, now: Date = new Date()): boolean {\n return isSameDay(parseLocalDay(iso), now);\n}\n\n/** True if `iso` is the calendar day after `now` (default today, local). */\nexport function isTomorrow(iso: string | Date, now: Date = new Date()): boolean {\n const t = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n return isSameDay(parseLocalDay(iso), t);\n}\n\n/** True if `iso` is the calendar day before `now` (default today, local). */\nexport function isYesterday(iso: string | Date, now: Date = new Date()): boolean {\n const y = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);\n return isSameDay(parseLocalDay(iso), y);\n}\n\nexport interface RelativeDayOptions {\n /** BCP-47 locale. Defaults to the configured brand locale (es-CL). */\n locale?: string;\n /** Reference \"today\". Pass a fixed value for deterministic SSR / tests. */\n now?: Date;\n}\n\n/**\n * Human day label: \"Hoy\" / \"Mañana\" / \"Ayer\" for ±1 day, otherwise the\n * localized weekday + day + month (\"mar 26 may\"). The ±1 words come from\n * `Intl.RelativeTimeFormat(..., { numeric: 'auto' })` so they're correct in\n * any locale; capitalized for use as a standalone label.\n *\n * Deterministic across timezones: the day delta is computed from local\n * calendar parts (via `parseLocalDay`), never from UTC timestamps, so an\n * ISO date never renders as the wrong day. Pass `now` to pin it for SSR.\n */\nexport function formatRelativeDay(iso: string | Date, opts: RelativeDayOptions = {}): string {\n const locale = opts.locale ?? getBrand().locale ?? 'es-CL';\n const now = opts.now ?? new Date();\n const target = parseLocalDay(iso);\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const diffDays = Math.round((target.getTime() - today.getTime()) / 86_400_000);\n\n if (Math.abs(diffDays) <= 1) {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n const s = rtf.format(diffDays, 'day');\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n return new Intl.DateTimeFormat(locale, { weekday: 'short', day: 'numeric', month: 'short' }).format(target);\n}\n"]}
|
|
@@ -177,17 +177,55 @@ function Container({ size = "lg", className, style, ...rest }) {
|
|
|
177
177
|
);
|
|
178
178
|
}
|
|
179
179
|
function Grid({ columns, gap = 4, minColWidth, className, style, ...rest }) {
|
|
180
|
-
const
|
|
180
|
+
const gapVar = `var(--space-${gap})`;
|
|
181
|
+
if (minColWidth) {
|
|
182
|
+
const w = typeof minColWidth === "number" ? `${minColWidth}px` : minColWidth;
|
|
183
|
+
return /* @__PURE__ */ jsx(
|
|
184
|
+
"div",
|
|
185
|
+
{
|
|
186
|
+
className: cx("grid", className),
|
|
187
|
+
style: { display: "grid", gridTemplateColumns: `repeat(auto-fit, minmax(${w}, 1fr))`, gap: gapVar, ...style },
|
|
188
|
+
...rest
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
if (columns && typeof columns === "object") {
|
|
193
|
+
const vars = {};
|
|
194
|
+
if (columns.base != null) vars["--grid-cols"] = String(columns.base);
|
|
195
|
+
if (columns.sm != null) vars["--grid-cols-sm"] = String(columns.sm);
|
|
196
|
+
if (columns.md != null) vars["--grid-cols-md"] = String(columns.md);
|
|
197
|
+
if (columns.lg != null) vars["--grid-cols-lg"] = String(columns.lg);
|
|
198
|
+
if (columns.xl != null) vars["--grid-cols-xl"] = String(columns.xl);
|
|
199
|
+
return /* @__PURE__ */ jsx(
|
|
200
|
+
"div",
|
|
201
|
+
{
|
|
202
|
+
className: cx("grid", "grid--responsive", className),
|
|
203
|
+
style: { gap: gapVar, ...vars, ...style },
|
|
204
|
+
...rest
|
|
205
|
+
}
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
const tpl = typeof columns === "number" ? `repeat(${columns}, minmax(0, 1fr))` : columns ?? "repeat(12, minmax(0, 1fr))";
|
|
181
209
|
return /* @__PURE__ */ jsx(
|
|
182
210
|
"div",
|
|
183
211
|
{
|
|
184
212
|
className: cx("grid", className),
|
|
185
|
-
style: {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
213
|
+
style: { display: "grid", gridTemplateColumns: tpl, gap: gapVar, ...style },
|
|
214
|
+
...rest
|
|
215
|
+
}
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
var Cluster = React.forwardRef(
|
|
219
|
+
function Cluster2(props, ref) {
|
|
220
|
+
return /* @__PURE__ */ jsx(Stack, { ref, direction: "row", wrap: true, align: props.align ?? "center", ...props });
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
function Spacer({ size, style, ...rest }) {
|
|
224
|
+
return /* @__PURE__ */ jsx(
|
|
225
|
+
"div",
|
|
226
|
+
{
|
|
227
|
+
"aria-hidden": "true",
|
|
228
|
+
style: size != null ? { flex: "0 0 auto", width: `var(--space-${size})`, height: `var(--space-${size})`, ...style } : { flex: "1 1 auto", ...style },
|
|
191
229
|
...rest
|
|
192
230
|
}
|
|
193
231
|
);
|
|
@@ -238,6 +276,6 @@ function Stepper({ steps, current, className }) {
|
|
|
238
276
|
}) });
|
|
239
277
|
}
|
|
240
278
|
|
|
241
|
-
export { Container, Divider, Grid, HStack, KeyValue, KeyValueRow, ListGroup, ListGroupItem, Stack, Stepper, Tab, TabList, TabPanel, Table, Tabs, Tooltip, VStack };
|
|
242
|
-
//# sourceMappingURL=chunk-
|
|
243
|
-
//# sourceMappingURL=chunk-
|
|
279
|
+
export { Cluster, Container, Divider, Grid, HStack, KeyValue, KeyValueRow, ListGroup, ListGroupItem, Spacer, Stack, Stepper, Tab, TabList, TabPanel, Table, Tabs, Tooltip, VStack };
|
|
280
|
+
//# sourceMappingURL=chunk-5A3MAGA3.mjs.map
|
|
281
|
+
//# sourceMappingURL=chunk-5A3MAGA3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Layout.tsx"],"names":["Table","Divider","Stack","HStack","VStack","Cluster","ListGroup","ListGroupItem"],"mappings":"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","file":"chunk-5A3MAGA3.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"]}
|
|
@@ -44,6 +44,9 @@ function ToggleGroup(props) {
|
|
|
44
44
|
};
|
|
45
45
|
return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { type, value: current, setValue, size, variant, disabled }, children: /* @__PURE__ */ jsx("div", { role: "group", "aria-label": ariaLabel, className: cx("toggle-group", className), children }) });
|
|
46
46
|
}
|
|
47
|
+
function SegmentedControl({ className, ...rest }) {
|
|
48
|
+
return /* @__PURE__ */ jsx(ToggleGroup, { type: "single", className: cx("toggle-group--segmented", className), ...rest });
|
|
49
|
+
}
|
|
47
50
|
var ToggleGroupItem = React.forwardRef(function ToggleGroupItem2({ value, className, children, disabled: itemDisabled, ...rest }, ref) {
|
|
48
51
|
const ctx = React.useContext(ToggleGroupContext);
|
|
49
52
|
if (!ctx) throw new Error("ToggleGroupItem must be used inside ToggleGroup");
|
|
@@ -71,7 +74,8 @@ var ToggleGroupItem = React.forwardRef(function ToggleGroupItem2({ value, classN
|
|
|
71
74
|
}
|
|
72
75
|
);
|
|
73
76
|
});
|
|
77
|
+
var SegmentedControlItem = ToggleGroupItem;
|
|
74
78
|
|
|
75
|
-
export { Toggle, ToggleGroup, ToggleGroupItem };
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem };
|
|
80
|
+
//# sourceMappingURL=chunk-B4I6BMNS.mjs.map
|
|
81
|
+
//# sourceMappingURL=chunk-B4I6BMNS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Toggle.tsx"],"names":["Toggle","ToggleGroupItem"],"mappings":"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","file":"chunk-B4I6BMNS.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\nexport type ToggleVariant = 'default' | 'outline';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { pressed, defaultPressed, onPressedChange, size = 'md', variant = 'default', className, children, onClick, ...rest },\n ref\n) {\n const [internal, setInternal] = React.useState(defaultPressed ?? false);\n const isControlled = pressed !== undefined;\n const value = isControlled ? pressed : internal;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n className={cx('toggle', `toggle--${size}`, `toggle--${variant}`, value && 'is-pressed', className)}\n onClick={(e) => {\n const next = !value;\n if (!isControlled) setInternal(next);\n onPressedChange?.(next);\n onClick?.(e);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string | string[];\n setValue: (next: string | string[]) => void;\n size: ToggleSize;\n variant: ToggleVariant;\n disabled: boolean;\n}\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null);\n\ninterface ToggleGroupBaseProps {\n size?: ToggleSize;\n variant?: ToggleVariant;\n disabled?: boolean;\n className?: string;\n ariaLabel?: string;\n children: React.ReactNode;\n}\n\nexport interface ToggleGroupSingleProps extends ToggleGroupBaseProps {\n type: 'single';\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n rovingFocus?: boolean;\n}\n\nexport interface ToggleGroupMultipleProps extends ToggleGroupBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\nexport function ToggleGroup(props: ToggleGroupProps) {\n const { type, size = 'md', variant = 'default', disabled = false, className, ariaLabel, children } = props;\n\n const initial: string | string[] =\n type === 'single' ? (props.defaultValue ?? '') : (props.defaultValue ?? []);\n const [internal, setInternal] = React.useState<string | string[]>(initial);\n\n const isControlled = props.value !== undefined && props.value !== null;\n const current: string | string[] = isControlled\n ? type === 'single'\n ? (props.value ?? '')\n : (props.value ?? [])\n : internal;\n\n const setValue = (next: string | string[]) => {\n if (!isControlled) setInternal(next);\n if (type === 'single') {\n const v = (next as string) || null;\n (props as ToggleGroupSingleProps).onChange?.(v);\n } else {\n (props as ToggleGroupMultipleProps).onChange?.(next as string[]);\n }\n };\n\n return (\n <ToggleGroupContext.Provider value={{ type, value: current, setValue, size, variant, disabled }}>\n <div role=\"group\" aria-label={ariaLabel} className={cx('toggle-group', className)}>\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n}\n\n/**\n * `SegmentedControl` — a single-select `ToggleGroup` with equal-width\n * segments. The common case (view switcher, filter mode, on/off pair) is\n * `type=\"single\"`; this drops the discriminant so you can't trip the\n * cryptic union error from forgetting `type`. Use `SegmentedControlItem`\n * (alias of `ToggleGroupItem`) for the options.\n *\n * <SegmentedControl value={view} onChange={setView} ariaLabel=\"Vista\">\n * <SegmentedControlItem value=\"list\">Lista</SegmentedControlItem>\n * <SegmentedControlItem value=\"grid\">Tarjetas</SegmentedControlItem>\n * </SegmentedControl>\n */\nexport type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;\n\nexport function SegmentedControl({ className, ...rest }: SegmentedControlProps) {\n return <ToggleGroup type=\"single\" className={cx('toggle-group--segmented', className)} {...rest} />;\n}\n\nexport interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n}\n\nexport const ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItemProps>(function ToggleGroupItem(\n { value, className, children, disabled: itemDisabled, ...rest },\n ref\n) {\n const ctx = React.useContext(ToggleGroupContext);\n if (!ctx) throw new Error('ToggleGroupItem must be used inside ToggleGroup');\n const isPressed =\n ctx.type === 'single'\n ? ctx.value === value\n : Array.isArray(ctx.value) && ctx.value.includes(value);\n\n const onClick = () => {\n if (ctx.type === 'single') {\n ctx.setValue(isPressed ? '' : value);\n } else {\n const arr = (ctx.value as string[]) ?? [];\n ctx.setValue(isPressed ? arr.filter((v) => v !== value) : [...arr, value]);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={ctx.disabled || itemDisabled}\n className={cx('toggle', `toggle--${ctx.size}`, `toggle--${ctx.variant}`, 'toggle-group__item', isPressed && 'is-pressed', className)}\n onClick={onClick}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\n/** Alias of `ToggleGroupItem` for use inside `SegmentedControl`. */\nexport const SegmentedControlItem = ToggleGroupItem;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkMVJITG75_js = require('./chunk-MVJITG75.js');
|
|
5
5
|
var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
|
|
6
6
|
var chunk7I5LFBQR_js = require('./chunk-7I5LFBQR.js');
|
|
7
7
|
var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
|
|
@@ -211,12 +211,12 @@ function DatePicker({
|
|
|
211
211
|
format = "auto"
|
|
212
212
|
}) {
|
|
213
213
|
const locale = chunk4VMQLSHV_js.useLocale();
|
|
214
|
-
const fmt =
|
|
215
|
-
const ph = placeholder ??
|
|
214
|
+
const fmt = chunkMVJITG75_js.resolveDateFormat(format);
|
|
215
|
+
const ph = placeholder ?? chunkMVJITG75_js.dateFormatPlaceholder(fmt);
|
|
216
216
|
const weekdays = locale["picker.weekdaysShort"];
|
|
217
217
|
const months = locale["calendar.months"];
|
|
218
218
|
const [open, setOpen] = React__namespace.useState(false);
|
|
219
|
-
const [view, setView] = React__namespace.useState(() =>
|
|
219
|
+
const [view, setView] = React__namespace.useState(() => chunkMVJITG75_js.startOfMonth(value ?? /* @__PURE__ */ new Date()));
|
|
220
220
|
const wrapRef = React__namespace.useRef(null);
|
|
221
221
|
const popoverRef = React__namespace.useRef(null);
|
|
222
222
|
const pos = chunk7I5LFBQR_js.usePopoverPosition(wrapRef, popoverRef, {
|
|
@@ -231,9 +231,9 @@ function DatePicker({
|
|
|
231
231
|
refs: [wrapRef, popoverRef]
|
|
232
232
|
});
|
|
233
233
|
React__namespace.useEffect(() => {
|
|
234
|
-
if (value) setView(
|
|
234
|
+
if (value) setView(chunkMVJITG75_js.startOfMonth(value));
|
|
235
235
|
}, [value]);
|
|
236
|
-
const { cells } =
|
|
236
|
+
const { cells } = chunkMVJITG75_js.buildMonthGrid(view, 0);
|
|
237
237
|
const isDisabled = (d) => minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()) || maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
|
|
238
238
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: wrapRef, className: chunkPASF6T4H_js.cx("datepicker", invalid && "is-invalid", disabled && "is-disabled", className), children: [
|
|
239
239
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -244,9 +244,9 @@ function DatePicker({
|
|
|
244
244
|
className: "datepicker__input",
|
|
245
245
|
placeholder: ph,
|
|
246
246
|
disabled,
|
|
247
|
-
value: value ?
|
|
247
|
+
value: value ? chunkMVJITG75_js.formatDate(value, fmt) : "",
|
|
248
248
|
onChange: (e) => {
|
|
249
|
-
const d =
|
|
249
|
+
const d = chunkMVJITG75_js.parseDate(e.target.value, fmt);
|
|
250
250
|
onChange(d);
|
|
251
251
|
},
|
|
252
252
|
onFocus: () => setOpen(true),
|
|
@@ -278,20 +278,20 @@ function DatePicker({
|
|
|
278
278
|
},
|
|
279
279
|
children: [
|
|
280
280
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "datepicker__nav", children: [
|
|
281
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) =>
|
|
281
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, -1)), "aria-label": locale["calendar.prevMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronLeft, { size: 16 }) }),
|
|
282
282
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "datepicker__title", children: [
|
|
283
283
|
months[view.getMonth()],
|
|
284
284
|
" ",
|
|
285
285
|
view.getFullYear()
|
|
286
286
|
] }),
|
|
287
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) =>
|
|
287
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, 1)), "aria-label": locale["calendar.nextMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronRight, { size: 16 }) })
|
|
288
288
|
] }),
|
|
289
289
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "datepicker__grid", children: [
|
|
290
290
|
weekdays.map((w, i) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "datepicker__dow", children: w }, i)),
|
|
291
291
|
cells.map((d, i) => {
|
|
292
292
|
if (!d) return /* @__PURE__ */ jsxRuntime.jsx("span", {}, `b${i}`);
|
|
293
|
-
const sel = value &&
|
|
294
|
-
const today =
|
|
293
|
+
const sel = value && chunkMVJITG75_js.isSameDay(d, value);
|
|
294
|
+
const today = chunkMVJITG75_js.isSameDay(d, /* @__PURE__ */ new Date());
|
|
295
295
|
const off = isDisabled(d);
|
|
296
296
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
297
297
|
"button",
|
|
@@ -575,5 +575,5 @@ exports.DatePicker = DatePicker;
|
|
|
575
575
|
exports.FileUpload = FileUpload;
|
|
576
576
|
exports.MonthPicker = MonthPicker;
|
|
577
577
|
exports.YearPicker = YearPicker;
|
|
578
|
-
//# sourceMappingURL=chunk-
|
|
579
|
-
//# sourceMappingURL=chunk-
|
|
578
|
+
//# sourceMappingURL=chunk-DGBVPXGW.js.map
|
|
579
|
+
//# sourceMappingURL=chunk-DGBVPXGW.js.map
|