@misael703/ui 1.66.1 → 1.67.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/dist/{chunk-5C7LUIBN.mjs → chunk-SJIXLIWE.mjs} +121 -12
- package/dist/chunk-SJIXLIWE.mjs.map +1 -0
- package/dist/{chunk-SA7NCLEK.js → chunk-YCHRGMAX.js} +121 -12
- package/dist/chunk-YCHRGMAX.js.map +1 -0
- package/dist/components/InputsExtra.d.mts +6 -0
- package/dist/components/InputsExtra.d.ts +6 -0
- package/dist/components/InputsExtra.js +10 -10
- package/dist/components/InputsExtra.mjs +1 -1
- package/dist/index.js +10 -10
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-5C7LUIBN.mjs.map +0 -1
- package/dist/chunk-SA7NCLEK.js.map +0 -1
|
@@ -139,28 +139,137 @@ function TagInput({
|
|
|
139
139
|
)
|
|
140
140
|
] });
|
|
141
141
|
}
|
|
142
|
-
var
|
|
142
|
+
var useIsoLayoutEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
143
|
+
var countDigits = (s) => {
|
|
144
|
+
let n = 0;
|
|
145
|
+
for (let i = 0; i < s.length; i++) {
|
|
146
|
+
const c = s.charCodeAt(i);
|
|
147
|
+
if (c >= 48 && c <= 57) n++;
|
|
148
|
+
}
|
|
149
|
+
return n;
|
|
150
|
+
};
|
|
151
|
+
var caretPosAfterDigits = (formatted, n) => {
|
|
152
|
+
if (n <= 0) {
|
|
153
|
+
const m = formatted.search(/\d/);
|
|
154
|
+
return m === -1 ? formatted.length : m;
|
|
155
|
+
}
|
|
156
|
+
let count = 0;
|
|
157
|
+
for (let i = 0; i < formatted.length; i++) {
|
|
158
|
+
const c = formatted.charCodeAt(i);
|
|
159
|
+
if (c >= 48 && c <= 57) {
|
|
160
|
+
count++;
|
|
161
|
+
if (count === n) return i + 1;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return formatted.length;
|
|
165
|
+
};
|
|
166
|
+
var MoneyInput = React.forwardRef(function MoneyInput2({ value, onChange, currency, locale, invalid, className, disabled, liveFormat = true, ...rest }, ref) {
|
|
143
167
|
const brand = getBrand();
|
|
144
168
|
const resolvedCurrency = currency ?? brand.currency;
|
|
145
169
|
const resolvedLocale = locale ?? brand.locale;
|
|
170
|
+
const formatter = React.useMemo(
|
|
171
|
+
() => new Intl.NumberFormat(resolvedLocale, { style: "currency", currency: resolvedCurrency, maximumFractionDigits: 0 }),
|
|
172
|
+
[resolvedLocale, resolvedCurrency]
|
|
173
|
+
);
|
|
174
|
+
const innerRef = React.useRef(null);
|
|
175
|
+
const setRefs = React.useCallback((node) => {
|
|
176
|
+
innerRef.current = node;
|
|
177
|
+
if (typeof ref === "function") ref(node);
|
|
178
|
+
else if (ref) ref.current = node;
|
|
179
|
+
}, [ref]);
|
|
180
|
+
const caretRef = React.useRef(null);
|
|
146
181
|
const [focus, setFocus] = React.useState(false);
|
|
147
|
-
const
|
|
182
|
+
const toRaw = (s) => {
|
|
183
|
+
const digits = s.replace(/\D/g, "");
|
|
184
|
+
if (!digits) return "";
|
|
185
|
+
return (s.trimStart().startsWith("-") ? "-" : "") + digits;
|
|
186
|
+
};
|
|
187
|
+
const commit = (raw, caretDigits) => {
|
|
188
|
+
caretRef.current = caretDigits;
|
|
189
|
+
if (!raw || raw === "-") return onChange(null);
|
|
190
|
+
const n = Number(raw);
|
|
191
|
+
onChange(Number.isFinite(n) ? n : null);
|
|
192
|
+
};
|
|
193
|
+
useIsoLayoutEffect(() => {
|
|
194
|
+
const node = innerRef.current;
|
|
195
|
+
const target = caretRef.current;
|
|
196
|
+
if (!liveFormat || node == null || target == null) return;
|
|
197
|
+
caretRef.current = null;
|
|
198
|
+
if (typeof document !== "undefined" && document.activeElement !== node) return;
|
|
199
|
+
const pos = caretPosAfterDigits(node.value, target);
|
|
200
|
+
node.setSelectionRange(pos, pos);
|
|
201
|
+
}, [value, liveFormat]);
|
|
202
|
+
const formatted = value == null ? "" : formatter.format(value);
|
|
203
|
+
if (!liveFormat) {
|
|
204
|
+
const display = value == null ? "" : focus ? String(value) : formatted;
|
|
205
|
+
return /* @__PURE__ */ jsx(
|
|
206
|
+
"input",
|
|
207
|
+
{
|
|
208
|
+
ref: setRefs,
|
|
209
|
+
type: "text",
|
|
210
|
+
inputMode: "numeric",
|
|
211
|
+
className: cx("input", invalid && "is-invalid", className),
|
|
212
|
+
value: display,
|
|
213
|
+
disabled,
|
|
214
|
+
onFocus: () => setFocus(true),
|
|
215
|
+
onBlur: () => setFocus(false),
|
|
216
|
+
onChange: (e) => {
|
|
217
|
+
const cleaned = e.target.value.replace(/[^\d-]/g, "");
|
|
218
|
+
if (!cleaned || cleaned === "-") return onChange(null);
|
|
219
|
+
const n = Number(cleaned);
|
|
220
|
+
onChange(Number.isFinite(n) ? n : null);
|
|
221
|
+
},
|
|
222
|
+
"aria-invalid": invalid || void 0,
|
|
223
|
+
...rest
|
|
224
|
+
}
|
|
225
|
+
);
|
|
226
|
+
}
|
|
148
227
|
return /* @__PURE__ */ jsx(
|
|
149
228
|
"input",
|
|
150
229
|
{
|
|
151
|
-
ref,
|
|
230
|
+
ref: setRefs,
|
|
152
231
|
type: "text",
|
|
153
232
|
inputMode: "numeric",
|
|
154
233
|
className: cx("input", invalid && "is-invalid", className),
|
|
155
|
-
value:
|
|
234
|
+
value: formatted,
|
|
156
235
|
disabled,
|
|
157
|
-
|
|
158
|
-
|
|
236
|
+
onKeyDown: (e) => {
|
|
237
|
+
if (e.key !== "Backspace" && e.key !== "Delete") return;
|
|
238
|
+
const node = e.currentTarget;
|
|
239
|
+
const s = node.value;
|
|
240
|
+
const start = node.selectionStart ?? s.length;
|
|
241
|
+
const end = node.selectionEnd ?? start;
|
|
242
|
+
const allDigits = s.replace(/\D/g, "");
|
|
243
|
+
const sign = s.trimStart().startsWith("-") ? "-" : "";
|
|
244
|
+
e.preventDefault();
|
|
245
|
+
if (start !== end) {
|
|
246
|
+
const from = countDigits(s.slice(0, start));
|
|
247
|
+
const to = countDigits(s.slice(0, end));
|
|
248
|
+
commit(sign + allDigits.slice(0, from) + allDigits.slice(to), from);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const left = countDigits(s.slice(0, start));
|
|
252
|
+
if (e.key === "Backspace") {
|
|
253
|
+
if (left === 0) {
|
|
254
|
+
caretRef.current = 0;
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const next = allDigits.slice(0, left - 1) + allDigits.slice(left);
|
|
258
|
+
commit(next ? sign + next : "", left - 1);
|
|
259
|
+
} else {
|
|
260
|
+
if (left >= allDigits.length) {
|
|
261
|
+
caretRef.current = left;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const next = allDigits.slice(0, left) + allDigits.slice(left + 1);
|
|
265
|
+
commit(next ? sign + next : "", left);
|
|
266
|
+
}
|
|
267
|
+
},
|
|
159
268
|
onChange: (e) => {
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
269
|
+
const node = e.target;
|
|
270
|
+
const start = node.selectionStart ?? node.value.length;
|
|
271
|
+
const left = countDigits(node.value.slice(0, start));
|
|
272
|
+
commit(toRaw(node.value), left);
|
|
164
273
|
},
|
|
165
274
|
"aria-invalid": invalid || void 0,
|
|
166
275
|
...rest
|
|
@@ -362,5 +471,5 @@ function CheckboxGroup({ value, onChange, options, orientation = "vertical", cla
|
|
|
362
471
|
}
|
|
363
472
|
|
|
364
473
|
export { CheckboxGroup, MoneyInput, PhoneInput, Progress, ProgressCircle, RadioGroup, Slider, TagInput, TimePicker };
|
|
365
|
-
//# sourceMappingURL=chunk-
|
|
366
|
-
//# sourceMappingURL=chunk-
|
|
474
|
+
//# sourceMappingURL=chunk-SJIXLIWE.mjs.map
|
|
475
|
+
//# sourceMappingURL=chunk-SJIXLIWE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["Slider","MoneyInput"],"mappings":"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","file":"chunk-SJIXLIWE.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X, Clock } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\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 * Format the amount live while typing (grouped thousands + currency symbol),\n * identical focused and on blur. Default `true`. Set `false` for the legacy\n * behaviour (raw number while focused, formatted only on blur).\n */\n liveFormat?: boolean;\n}\n\n// useLayoutEffect warns on the server; fall back to useEffect there. Caret\n// restoration is a browser-only concern, so the no-op server pass is fine.\nconst useIsoLayoutEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nconst countDigits = (s: string): number => {\n let n = 0;\n for (let i = 0; i < s.length; i++) { const c = s.charCodeAt(i); if (c >= 48 && c <= 57) n++; }\n return n;\n};\n\n// Index in `formatted` right AFTER the n-th digit (skipping symbol/separators).\n// n <= 0 → just before the first digit (after a leading symbol/sign).\nconst caretPosAfterDigits = (formatted: string, n: number): number => {\n if (n <= 0) { const m = formatted.search(/\\d/); return m === -1 ? formatted.length : m; }\n let count = 0;\n for (let i = 0; i < formatted.length; i++) {\n const c = formatted.charCodeAt(i);\n if (c >= 48 && c <= 57) { count++; if (count === n) return i + 1; }\n }\n return formatted.length;\n};\n\nexport const MoneyInput = React.forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency, locale, invalid, className, disabled, liveFormat = true, ...rest },\n ref\n) {\n const brand = getBrand();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const formatter = React.useMemo(\n () => new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }),\n [resolvedLocale, resolvedCurrency]\n );\n\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n const setRefs = React.useCallback((node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }, [ref]);\n\n // Digit-count target for caret restoration, set on each edit, applied after\n // the controlled re-render reformats the string.\n const caretRef = React.useRef<number | null>(null);\n const [focus, setFocus] = React.useState(false);\n\n // Sign-aware: keep a single leading '-' when negatives are typed (matches the\n // legacy /[^\\d-]/ tolerance), strip everything else to digits.\n const toRaw = (s: string): string => {\n const digits = s.replace(/\\D/g, '');\n if (!digits) return '';\n return (s.trimStart().startsWith('-') ? '-' : '') + digits;\n };\n const commit = (raw: string, caretDigits: number) => {\n caretRef.current = caretDigits;\n if (!raw || raw === '-') return onChange(null);\n const n = Number(raw);\n onChange(Number.isFinite(n) ? n : null);\n };\n\n useIsoLayoutEffect(() => {\n const node = innerRef.current;\n const target = caretRef.current;\n if (!liveFormat || node == null || target == null) return;\n caretRef.current = null;\n if (typeof document !== 'undefined' && document.activeElement !== node) return;\n const pos = caretPosAfterDigits(node.value, target);\n node.setSelectionRange(pos, pos);\n }, [value, liveFormat]);\n\n const formatted = value == null ? '' : formatter.format(value);\n\n if (!liveFormat) {\n const display = value == null ? '' : focus ? String(value) : formatted;\n return (\n <input\n ref={setRefs}\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 return (\n <input\n ref={setRefs}\n type=\"text\"\n inputMode=\"numeric\"\n className={cx('input', invalid && 'is-invalid', className)}\n value={formatted}\n disabled={disabled}\n onKeyDown={(e) => {\n if (e.key !== 'Backspace' && e.key !== 'Delete') return;\n const node = e.currentTarget;\n const s = node.value;\n const start = node.selectionStart ?? s.length;\n const end = node.selectionEnd ?? start;\n const allDigits = s.replace(/\\D/g, '');\n const sign = s.trimStart().startsWith('-') ? '-' : '';\n e.preventDefault();\n if (start !== end) {\n // Selection: drop the digits inside it, caret before the selection.\n const from = countDigits(s.slice(0, start));\n const to = countDigits(s.slice(0, end));\n commit(sign + allDigits.slice(0, from) + allDigits.slice(to), from);\n return;\n }\n const left = countDigits(s.slice(0, start));\n if (e.key === 'Backspace') {\n if (left === 0) { caretRef.current = 0; return; } // nothing to the left\n const next = allDigits.slice(0, left - 1) + allDigits.slice(left);\n commit(next ? sign + next : '', left - 1);\n } else {\n if (left >= allDigits.length) { caretRef.current = left; return; } // nothing to the right\n const next = allDigits.slice(0, left) + allDigits.slice(left + 1);\n commit(next ? sign + next : '', left);\n }\n }}\n onChange={(e) => {\n const node = e.target;\n const start = node.selectionStart ?? node.value.length;\n const left = countDigits(node.value.slice(0, start));\n commit(toRaw(node.value), left);\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 (custom popover, HH:mm[:ss] / hour) --------------\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst rangeBy = (end: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < end; i += step) out.push(i);\n return out;\n};\n// Parse 'HH', 'HH:mm' or 'HH:mm:ss' into a [h, m, s] tuple; missing parts → 0.\nconst parseTime = (v: string): [number, number, number] => {\n const [h, m, s] = v.split(':');\n return [Number(h) || 0, Number(m) || 0, Number(s) || 0];\n};\n\nexport interface TimePickerProps {\n /**\n * Time of day. String format follows `granularity`: `'minute'` → `'HH:mm'`\n * (e.g. `'14:37'`), `'second'` → `'HH:mm:ss'` (e.g. `'14:37:09'`),\n * `'hour'` → `'HH:00'` (e.g. `'14:00'`).\n */\n value: string;\n onChange: (v: string) => void;\n /**\n * Precision of the control. Default `'minute'`.\n * - `'minute'`: hour + minute columns; value `HH:mm`.\n * - `'second'`: hour + minute + second columns; value `HH:mm:ss`.\n * - `'hour'`: a single hour column; value `HH:00`.\n */\n granularity?: TimeGranularity;\n /**\n * Increment of the finest column, in units of `granularity` (minutes /\n * seconds / hours). Omit for `1` (every value of the unit — e.g. any minute).\n * `step` thins that column: `granularity='minute'` + `step={15}` → minutes\n * `00 15 30 45`. Coarser columns always step by 1.\n */\n step?: number;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\n// One scrollable column of the picker. A listbox with roving `aria-activedescendant`\n// (the container is the single tab stop) so a 60-item column adds one focus stop,\n// not sixty; Arrow/Home/End move + commit, and the active cell is centered.\nfunction TimeColumn({ label, values, selected, idBase, onSelect }: {\n label: string;\n values: number[];\n selected: number;\n idBase: string;\n onSelect: (v: number) => void;\n}) {\n const listRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n const active = list?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (list && active) list.scrollTop = active.offsetTop - list.clientHeight / 2 + active.offsetHeight / 2;\n }, [selected]);\n const idx = Math.max(0, values.indexOf(selected));\n const onKeyDown = (e: React.KeyboardEvent) => {\n let next = idx;\n if (e.key === 'ArrowDown') next = (idx + 1) % values.length;\n else if (e.key === 'ArrowUp') next = (idx - 1 + values.length) % values.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = values.length - 1;\n else return;\n e.preventDefault();\n onSelect(values[next]);\n };\n return (\n <div\n ref={listRef}\n className=\"timepicker__col kit-scrollbar\"\n role=\"listbox\"\n aria-label={label}\n tabIndex={0}\n aria-activedescendant={`${idBase}-${selected}`}\n onKeyDown={onKeyDown}\n >\n {values.map((v) => (\n <div\n key={v}\n id={`${idBase}-${v}`}\n role=\"option\"\n aria-selected={v === selected}\n className={cx('timepicker__cell', v === selected && 'is-selected')}\n onClick={() => onSelect(v)}\n >{pad2(v)}</div>\n ))}\n </div>\n );\n}\n\nexport function TimePicker({ value, onChange, granularity = 'minute', step, invalid, disabled, className, id }: TimePickerProps) {\n const t = useLocale();\n const reactId = React.useId();\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const [h, m, s] = parseTime(value);\n const unitStep = step && step > 0 ? step : 1;\n const showMinutes = granularity !== 'hour';\n const showSeconds = granularity === 'second';\n // `step` thins the finest column for the chosen granularity; coarser ones step by 1.\n const hours = rangeBy(24, granularity === 'hour' ? unitStep : 1);\n const minutes = rangeBy(60, granularity === 'minute' ? unitStep : 1);\n const seconds = rangeBy(60, unitStep);\n\n const compose = (hh: number, mm: number, ss: number): string =>\n granularity === 'hour' ? `${pad2(hh)}:00`\n : granularity === 'minute' ? `${pad2(hh)}:${pad2(mm)}`\n : `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;\n\n const pos = usePopoverPosition(wrapRef, popoverRef, { open, side: 'bottom', align: 'start', offset: 4 });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef], returnFocusRef: triggerRef });\n\n const label = value ? compose(h, m, s) : t['picker.selectTime'];\n\n return (\n <div ref={wrapRef} className={cx('timepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"timepicker__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{label}</span>\n <span className=\"timepicker__icon\" aria-hidden=\"true\"><Clock size={16} /></span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('timepicker__popover', 'is-floating')}\n role=\"dialog\"\n aria-label={t['picker.selectTime']}\n style={{ position: 'fixed', top: pos.top, left: pos.left, visibility: pos.ready ? 'visible' : 'hidden' }}\n >\n <div className=\"timepicker__cols\">\n <TimeColumn label={t['picker.hours']} idBase={`${reactId}-h`} values={hours} selected={h}\n onSelect={(hh) => onChange(compose(hh, m, s))} />\n {showMinutes && (\n <TimeColumn label={t['picker.minutes']} idBase={`${reactId}-m`} values={minutes} selected={m}\n onSelect={(mm) => onChange(compose(h, mm, s))} />\n )}\n {showSeconds && (\n <TimeColumn label={t['picker.seconds']} idBase={`${reactId}-s`} values={seconds} selected={s}\n onSelect={(ss) => onChange(compose(h, m, ss))} />\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\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"]}
|
|
@@ -161,28 +161,137 @@ function TagInput({
|
|
|
161
161
|
)
|
|
162
162
|
] });
|
|
163
163
|
}
|
|
164
|
-
var
|
|
164
|
+
var useIsoLayoutEffect = typeof document !== "undefined" ? React__namespace.useLayoutEffect : React__namespace.useEffect;
|
|
165
|
+
var countDigits = (s) => {
|
|
166
|
+
let n = 0;
|
|
167
|
+
for (let i = 0; i < s.length; i++) {
|
|
168
|
+
const c = s.charCodeAt(i);
|
|
169
|
+
if (c >= 48 && c <= 57) n++;
|
|
170
|
+
}
|
|
171
|
+
return n;
|
|
172
|
+
};
|
|
173
|
+
var caretPosAfterDigits = (formatted, n) => {
|
|
174
|
+
if (n <= 0) {
|
|
175
|
+
const m = formatted.search(/\d/);
|
|
176
|
+
return m === -1 ? formatted.length : m;
|
|
177
|
+
}
|
|
178
|
+
let count = 0;
|
|
179
|
+
for (let i = 0; i < formatted.length; i++) {
|
|
180
|
+
const c = formatted.charCodeAt(i);
|
|
181
|
+
if (c >= 48 && c <= 57) {
|
|
182
|
+
count++;
|
|
183
|
+
if (count === n) return i + 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return formatted.length;
|
|
187
|
+
};
|
|
188
|
+
var MoneyInput = React__namespace.forwardRef(function MoneyInput2({ value, onChange, currency, locale, invalid, className, disabled, liveFormat = true, ...rest }, ref) {
|
|
165
189
|
const brand = chunk3PXYCXDW_js.getBrand();
|
|
166
190
|
const resolvedCurrency = currency ?? brand.currency;
|
|
167
191
|
const resolvedLocale = locale ?? brand.locale;
|
|
192
|
+
const formatter = React__namespace.useMemo(
|
|
193
|
+
() => new Intl.NumberFormat(resolvedLocale, { style: "currency", currency: resolvedCurrency, maximumFractionDigits: 0 }),
|
|
194
|
+
[resolvedLocale, resolvedCurrency]
|
|
195
|
+
);
|
|
196
|
+
const innerRef = React__namespace.useRef(null);
|
|
197
|
+
const setRefs = React__namespace.useCallback((node) => {
|
|
198
|
+
innerRef.current = node;
|
|
199
|
+
if (typeof ref === "function") ref(node);
|
|
200
|
+
else if (ref) ref.current = node;
|
|
201
|
+
}, [ref]);
|
|
202
|
+
const caretRef = React__namespace.useRef(null);
|
|
168
203
|
const [focus, setFocus] = React__namespace.useState(false);
|
|
169
|
-
const
|
|
204
|
+
const toRaw = (s) => {
|
|
205
|
+
const digits = s.replace(/\D/g, "");
|
|
206
|
+
if (!digits) return "";
|
|
207
|
+
return (s.trimStart().startsWith("-") ? "-" : "") + digits;
|
|
208
|
+
};
|
|
209
|
+
const commit = (raw, caretDigits) => {
|
|
210
|
+
caretRef.current = caretDigits;
|
|
211
|
+
if (!raw || raw === "-") return onChange(null);
|
|
212
|
+
const n = Number(raw);
|
|
213
|
+
onChange(Number.isFinite(n) ? n : null);
|
|
214
|
+
};
|
|
215
|
+
useIsoLayoutEffect(() => {
|
|
216
|
+
const node = innerRef.current;
|
|
217
|
+
const target = caretRef.current;
|
|
218
|
+
if (!liveFormat || node == null || target == null) return;
|
|
219
|
+
caretRef.current = null;
|
|
220
|
+
if (typeof document !== "undefined" && document.activeElement !== node) return;
|
|
221
|
+
const pos = caretPosAfterDigits(node.value, target);
|
|
222
|
+
node.setSelectionRange(pos, pos);
|
|
223
|
+
}, [value, liveFormat]);
|
|
224
|
+
const formatted = value == null ? "" : formatter.format(value);
|
|
225
|
+
if (!liveFormat) {
|
|
226
|
+
const display = value == null ? "" : focus ? String(value) : formatted;
|
|
227
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
228
|
+
"input",
|
|
229
|
+
{
|
|
230
|
+
ref: setRefs,
|
|
231
|
+
type: "text",
|
|
232
|
+
inputMode: "numeric",
|
|
233
|
+
className: chunkPASF6T4H_js.cx("input", invalid && "is-invalid", className),
|
|
234
|
+
value: display,
|
|
235
|
+
disabled,
|
|
236
|
+
onFocus: () => setFocus(true),
|
|
237
|
+
onBlur: () => setFocus(false),
|
|
238
|
+
onChange: (e) => {
|
|
239
|
+
const cleaned = e.target.value.replace(/[^\d-]/g, "");
|
|
240
|
+
if (!cleaned || cleaned === "-") return onChange(null);
|
|
241
|
+
const n = Number(cleaned);
|
|
242
|
+
onChange(Number.isFinite(n) ? n : null);
|
|
243
|
+
},
|
|
244
|
+
"aria-invalid": invalid || void 0,
|
|
245
|
+
...rest
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
}
|
|
170
249
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
171
250
|
"input",
|
|
172
251
|
{
|
|
173
|
-
ref,
|
|
252
|
+
ref: setRefs,
|
|
174
253
|
type: "text",
|
|
175
254
|
inputMode: "numeric",
|
|
176
255
|
className: chunkPASF6T4H_js.cx("input", invalid && "is-invalid", className),
|
|
177
|
-
value:
|
|
256
|
+
value: formatted,
|
|
178
257
|
disabled,
|
|
179
|
-
|
|
180
|
-
|
|
258
|
+
onKeyDown: (e) => {
|
|
259
|
+
if (e.key !== "Backspace" && e.key !== "Delete") return;
|
|
260
|
+
const node = e.currentTarget;
|
|
261
|
+
const s = node.value;
|
|
262
|
+
const start = node.selectionStart ?? s.length;
|
|
263
|
+
const end = node.selectionEnd ?? start;
|
|
264
|
+
const allDigits = s.replace(/\D/g, "");
|
|
265
|
+
const sign = s.trimStart().startsWith("-") ? "-" : "";
|
|
266
|
+
e.preventDefault();
|
|
267
|
+
if (start !== end) {
|
|
268
|
+
const from = countDigits(s.slice(0, start));
|
|
269
|
+
const to = countDigits(s.slice(0, end));
|
|
270
|
+
commit(sign + allDigits.slice(0, from) + allDigits.slice(to), from);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const left = countDigits(s.slice(0, start));
|
|
274
|
+
if (e.key === "Backspace") {
|
|
275
|
+
if (left === 0) {
|
|
276
|
+
caretRef.current = 0;
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const next = allDigits.slice(0, left - 1) + allDigits.slice(left);
|
|
280
|
+
commit(next ? sign + next : "", left - 1);
|
|
281
|
+
} else {
|
|
282
|
+
if (left >= allDigits.length) {
|
|
283
|
+
caretRef.current = left;
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const next = allDigits.slice(0, left) + allDigits.slice(left + 1);
|
|
287
|
+
commit(next ? sign + next : "", left);
|
|
288
|
+
}
|
|
289
|
+
},
|
|
181
290
|
onChange: (e) => {
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
const
|
|
185
|
-
|
|
291
|
+
const node = e.target;
|
|
292
|
+
const start = node.selectionStart ?? node.value.length;
|
|
293
|
+
const left = countDigits(node.value.slice(0, start));
|
|
294
|
+
commit(toRaw(node.value), left);
|
|
186
295
|
},
|
|
187
296
|
"aria-invalid": invalid || void 0,
|
|
188
297
|
...rest
|
|
@@ -392,5 +501,5 @@ exports.RadioGroup = RadioGroup;
|
|
|
392
501
|
exports.Slider = Slider;
|
|
393
502
|
exports.TagInput = TagInput;
|
|
394
503
|
exports.TimePicker = TimePicker;
|
|
395
|
-
//# sourceMappingURL=chunk-
|
|
396
|
-
//# sourceMappingURL=chunk-
|
|
504
|
+
//# sourceMappingURL=chunk-YCHRGMAX.js.map
|
|
505
|
+
//# sourceMappingURL=chunk-YCHRGMAX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["React","Slider","cx","jsx","jsxs","useLocale","format","X","MoneyInput","getBrand","usePopoverPosition","useDismiss","Clock","Portal"],"mappings":"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","file":"chunk-YCHRGMAX.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X, Clock } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\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 * Format the amount live while typing (grouped thousands + currency symbol),\n * identical focused and on blur. Default `true`. Set `false` for the legacy\n * behaviour (raw number while focused, formatted only on blur).\n */\n liveFormat?: boolean;\n}\n\n// useLayoutEffect warns on the server; fall back to useEffect there. Caret\n// restoration is a browser-only concern, so the no-op server pass is fine.\nconst useIsoLayoutEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nconst countDigits = (s: string): number => {\n let n = 0;\n for (let i = 0; i < s.length; i++) { const c = s.charCodeAt(i); if (c >= 48 && c <= 57) n++; }\n return n;\n};\n\n// Index in `formatted` right AFTER the n-th digit (skipping symbol/separators).\n// n <= 0 → just before the first digit (after a leading symbol/sign).\nconst caretPosAfterDigits = (formatted: string, n: number): number => {\n if (n <= 0) { const m = formatted.search(/\\d/); return m === -1 ? formatted.length : m; }\n let count = 0;\n for (let i = 0; i < formatted.length; i++) {\n const c = formatted.charCodeAt(i);\n if (c >= 48 && c <= 57) { count++; if (count === n) return i + 1; }\n }\n return formatted.length;\n};\n\nexport const MoneyInput = React.forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency, locale, invalid, className, disabled, liveFormat = true, ...rest },\n ref\n) {\n const brand = getBrand();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const formatter = React.useMemo(\n () => new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }),\n [resolvedLocale, resolvedCurrency]\n );\n\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n const setRefs = React.useCallback((node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }, [ref]);\n\n // Digit-count target for caret restoration, set on each edit, applied after\n // the controlled re-render reformats the string.\n const caretRef = React.useRef<number | null>(null);\n const [focus, setFocus] = React.useState(false);\n\n // Sign-aware: keep a single leading '-' when negatives are typed (matches the\n // legacy /[^\\d-]/ tolerance), strip everything else to digits.\n const toRaw = (s: string): string => {\n const digits = s.replace(/\\D/g, '');\n if (!digits) return '';\n return (s.trimStart().startsWith('-') ? '-' : '') + digits;\n };\n const commit = (raw: string, caretDigits: number) => {\n caretRef.current = caretDigits;\n if (!raw || raw === '-') return onChange(null);\n const n = Number(raw);\n onChange(Number.isFinite(n) ? n : null);\n };\n\n useIsoLayoutEffect(() => {\n const node = innerRef.current;\n const target = caretRef.current;\n if (!liveFormat || node == null || target == null) return;\n caretRef.current = null;\n if (typeof document !== 'undefined' && document.activeElement !== node) return;\n const pos = caretPosAfterDigits(node.value, target);\n node.setSelectionRange(pos, pos);\n }, [value, liveFormat]);\n\n const formatted = value == null ? '' : formatter.format(value);\n\n if (!liveFormat) {\n const display = value == null ? '' : focus ? String(value) : formatted;\n return (\n <input\n ref={setRefs}\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 return (\n <input\n ref={setRefs}\n type=\"text\"\n inputMode=\"numeric\"\n className={cx('input', invalid && 'is-invalid', className)}\n value={formatted}\n disabled={disabled}\n onKeyDown={(e) => {\n if (e.key !== 'Backspace' && e.key !== 'Delete') return;\n const node = e.currentTarget;\n const s = node.value;\n const start = node.selectionStart ?? s.length;\n const end = node.selectionEnd ?? start;\n const allDigits = s.replace(/\\D/g, '');\n const sign = s.trimStart().startsWith('-') ? '-' : '';\n e.preventDefault();\n if (start !== end) {\n // Selection: drop the digits inside it, caret before the selection.\n const from = countDigits(s.slice(0, start));\n const to = countDigits(s.slice(0, end));\n commit(sign + allDigits.slice(0, from) + allDigits.slice(to), from);\n return;\n }\n const left = countDigits(s.slice(0, start));\n if (e.key === 'Backspace') {\n if (left === 0) { caretRef.current = 0; return; } // nothing to the left\n const next = allDigits.slice(0, left - 1) + allDigits.slice(left);\n commit(next ? sign + next : '', left - 1);\n } else {\n if (left >= allDigits.length) { caretRef.current = left; return; } // nothing to the right\n const next = allDigits.slice(0, left) + allDigits.slice(left + 1);\n commit(next ? sign + next : '', left);\n }\n }}\n onChange={(e) => {\n const node = e.target;\n const start = node.selectionStart ?? node.value.length;\n const left = countDigits(node.value.slice(0, start));\n commit(toRaw(node.value), left);\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 (custom popover, HH:mm[:ss] / hour) --------------\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst rangeBy = (end: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < end; i += step) out.push(i);\n return out;\n};\n// Parse 'HH', 'HH:mm' or 'HH:mm:ss' into a [h, m, s] tuple; missing parts → 0.\nconst parseTime = (v: string): [number, number, number] => {\n const [h, m, s] = v.split(':');\n return [Number(h) || 0, Number(m) || 0, Number(s) || 0];\n};\n\nexport interface TimePickerProps {\n /**\n * Time of day. String format follows `granularity`: `'minute'` → `'HH:mm'`\n * (e.g. `'14:37'`), `'second'` → `'HH:mm:ss'` (e.g. `'14:37:09'`),\n * `'hour'` → `'HH:00'` (e.g. `'14:00'`).\n */\n value: string;\n onChange: (v: string) => void;\n /**\n * Precision of the control. Default `'minute'`.\n * - `'minute'`: hour + minute columns; value `HH:mm`.\n * - `'second'`: hour + minute + second columns; value `HH:mm:ss`.\n * - `'hour'`: a single hour column; value `HH:00`.\n */\n granularity?: TimeGranularity;\n /**\n * Increment of the finest column, in units of `granularity` (minutes /\n * seconds / hours). Omit for `1` (every value of the unit — e.g. any minute).\n * `step` thins that column: `granularity='minute'` + `step={15}` → minutes\n * `00 15 30 45`. Coarser columns always step by 1.\n */\n step?: number;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\n// One scrollable column of the picker. A listbox with roving `aria-activedescendant`\n// (the container is the single tab stop) so a 60-item column adds one focus stop,\n// not sixty; Arrow/Home/End move + commit, and the active cell is centered.\nfunction TimeColumn({ label, values, selected, idBase, onSelect }: {\n label: string;\n values: number[];\n selected: number;\n idBase: string;\n onSelect: (v: number) => void;\n}) {\n const listRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n const active = list?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (list && active) list.scrollTop = active.offsetTop - list.clientHeight / 2 + active.offsetHeight / 2;\n }, [selected]);\n const idx = Math.max(0, values.indexOf(selected));\n const onKeyDown = (e: React.KeyboardEvent) => {\n let next = idx;\n if (e.key === 'ArrowDown') next = (idx + 1) % values.length;\n else if (e.key === 'ArrowUp') next = (idx - 1 + values.length) % values.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = values.length - 1;\n else return;\n e.preventDefault();\n onSelect(values[next]);\n };\n return (\n <div\n ref={listRef}\n className=\"timepicker__col kit-scrollbar\"\n role=\"listbox\"\n aria-label={label}\n tabIndex={0}\n aria-activedescendant={`${idBase}-${selected}`}\n onKeyDown={onKeyDown}\n >\n {values.map((v) => (\n <div\n key={v}\n id={`${idBase}-${v}`}\n role=\"option\"\n aria-selected={v === selected}\n className={cx('timepicker__cell', v === selected && 'is-selected')}\n onClick={() => onSelect(v)}\n >{pad2(v)}</div>\n ))}\n </div>\n );\n}\n\nexport function TimePicker({ value, onChange, granularity = 'minute', step, invalid, disabled, className, id }: TimePickerProps) {\n const t = useLocale();\n const reactId = React.useId();\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const [h, m, s] = parseTime(value);\n const unitStep = step && step > 0 ? step : 1;\n const showMinutes = granularity !== 'hour';\n const showSeconds = granularity === 'second';\n // `step` thins the finest column for the chosen granularity; coarser ones step by 1.\n const hours = rangeBy(24, granularity === 'hour' ? unitStep : 1);\n const minutes = rangeBy(60, granularity === 'minute' ? unitStep : 1);\n const seconds = rangeBy(60, unitStep);\n\n const compose = (hh: number, mm: number, ss: number): string =>\n granularity === 'hour' ? `${pad2(hh)}:00`\n : granularity === 'minute' ? `${pad2(hh)}:${pad2(mm)}`\n : `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;\n\n const pos = usePopoverPosition(wrapRef, popoverRef, { open, side: 'bottom', align: 'start', offset: 4 });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef], returnFocusRef: triggerRef });\n\n const label = value ? compose(h, m, s) : t['picker.selectTime'];\n\n return (\n <div ref={wrapRef} className={cx('timepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"timepicker__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{label}</span>\n <span className=\"timepicker__icon\" aria-hidden=\"true\"><Clock size={16} /></span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('timepicker__popover', 'is-floating')}\n role=\"dialog\"\n aria-label={t['picker.selectTime']}\n style={{ position: 'fixed', top: pos.top, left: pos.left, visibility: pos.ready ? 'visible' : 'hidden' }}\n >\n <div className=\"timepicker__cols\">\n <TimeColumn label={t['picker.hours']} idBase={`${reactId}-h`} values={hours} selected={h}\n onSelect={(hh) => onChange(compose(hh, m, s))} />\n {showMinutes && (\n <TimeColumn label={t['picker.minutes']} idBase={`${reactId}-m`} values={minutes} selected={m}\n onSelect={(mm) => onChange(compose(h, mm, s))} />\n )}\n {showSeconds && (\n <TimeColumn label={t['picker.seconds']} idBase={`${reactId}-s`} values={seconds} selected={s}\n onSelect={(ss) => onChange(compose(h, m, ss))} />\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\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"]}
|
|
@@ -46,6 +46,12 @@ interface MoneyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElemen
|
|
|
46
46
|
currency?: string;
|
|
47
47
|
locale?: string;
|
|
48
48
|
invalid?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Format the amount live while typing (grouped thousands + currency symbol),
|
|
51
|
+
* identical focused and on blur. Default `true`. Set `false` for the legacy
|
|
52
|
+
* behaviour (raw number while focused, formatted only on blur).
|
|
53
|
+
*/
|
|
54
|
+
liveFormat?: boolean;
|
|
49
55
|
}
|
|
50
56
|
declare const MoneyInput: React.ForwardRefExoticComponent<MoneyInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
51
57
|
interface PhoneInputProps {
|
|
@@ -46,6 +46,12 @@ interface MoneyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElemen
|
|
|
46
46
|
currency?: string;
|
|
47
47
|
locale?: string;
|
|
48
48
|
invalid?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Format the amount live while typing (grouped thousands + currency symbol),
|
|
51
|
+
* identical focused and on blur. Default `true`. Set `false` for the legacy
|
|
52
|
+
* behaviour (raw number while focused, formatted only on blur).
|
|
53
|
+
*/
|
|
54
|
+
liveFormat?: boolean;
|
|
49
55
|
}
|
|
50
56
|
declare const MoneyInput: React.ForwardRefExoticComponent<MoneyInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
51
57
|
interface PhoneInputProps {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkYCHRGMAX_js = require('../chunk-YCHRGMAX.js');
|
|
5
5
|
require('../chunk-AB52PRTH.js');
|
|
6
6
|
require('../chunk-WAGWB35Q.js');
|
|
7
7
|
require('../chunk-3PXYCXDW.js');
|
|
@@ -15,39 +15,39 @@ require('../chunk-PASF6T4H.js');
|
|
|
15
15
|
|
|
16
16
|
Object.defineProperty(exports, "CheckboxGroup", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkYCHRGMAX_js.CheckboxGroup; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "MoneyInput", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkYCHRGMAX_js.MoneyInput; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "PhoneInput", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkYCHRGMAX_js.PhoneInput; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "Progress", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkYCHRGMAX_js.Progress; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "ProgressCircle", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkYCHRGMAX_js.ProgressCircle; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "RadioGroup", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkYCHRGMAX_js.RadioGroup; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "Slider", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkYCHRGMAX_js.Slider; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "TagInput", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkYCHRGMAX_js.TagInput; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "TimePicker", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkYCHRGMAX_js.TimePicker; }
|
|
51
51
|
});
|
|
52
52
|
//# sourceMappingURL=InputsExtra.js.map
|
|
53
53
|
//# sourceMappingURL=InputsExtra.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { CheckboxGroup, MoneyInput, PhoneInput, Progress, ProgressCircle, RadioGroup, Slider, TagInput, TimePicker } from '../chunk-
|
|
2
|
+
export { CheckboxGroup, MoneyInput, PhoneInput, Progress, ProgressCircle, RadioGroup, Slider, TagInput, TimePicker } from '../chunk-SJIXLIWE.mjs';
|
|
3
3
|
import '../chunk-IGNKSI2E.mjs';
|
|
4
4
|
import '../chunk-FKBQYQQD.mjs';
|
|
5
5
|
import '../chunk-5GEWIK4T.mjs';
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ var chunkRPNLDCRV_js = require('./chunk-RPNLDCRV.js');
|
|
|
12
12
|
var chunkEHTHHF2P_js = require('./chunk-EHTHHF2P.js');
|
|
13
13
|
var chunkVFZ7VMU2_js = require('./chunk-VFZ7VMU2.js');
|
|
14
14
|
var chunkQHRP73CS_js = require('./chunk-QHRP73CS.js');
|
|
15
|
-
var
|
|
15
|
+
var chunkYCHRGMAX_js = require('./chunk-YCHRGMAX.js');
|
|
16
16
|
var chunkSQJVGL7Y_js = require('./chunk-SQJVGL7Y.js');
|
|
17
17
|
var chunkNU4GAGUV_js = require('./chunk-NU4GAGUV.js');
|
|
18
18
|
var chunkDYZM6NZU_js = require('./chunk-DYZM6NZU.js');
|
|
@@ -160,39 +160,39 @@ Object.defineProperty(exports, "ResizablePanel", {
|
|
|
160
160
|
});
|
|
161
161
|
Object.defineProperty(exports, "CheckboxGroup", {
|
|
162
162
|
enumerable: true,
|
|
163
|
-
get: function () { return
|
|
163
|
+
get: function () { return chunkYCHRGMAX_js.CheckboxGroup; }
|
|
164
164
|
});
|
|
165
165
|
Object.defineProperty(exports, "MoneyInput", {
|
|
166
166
|
enumerable: true,
|
|
167
|
-
get: function () { return
|
|
167
|
+
get: function () { return chunkYCHRGMAX_js.MoneyInput; }
|
|
168
168
|
});
|
|
169
169
|
Object.defineProperty(exports, "PhoneInput", {
|
|
170
170
|
enumerable: true,
|
|
171
|
-
get: function () { return
|
|
171
|
+
get: function () { return chunkYCHRGMAX_js.PhoneInput; }
|
|
172
172
|
});
|
|
173
173
|
Object.defineProperty(exports, "Progress", {
|
|
174
174
|
enumerable: true,
|
|
175
|
-
get: function () { return
|
|
175
|
+
get: function () { return chunkYCHRGMAX_js.Progress; }
|
|
176
176
|
});
|
|
177
177
|
Object.defineProperty(exports, "ProgressCircle", {
|
|
178
178
|
enumerable: true,
|
|
179
|
-
get: function () { return
|
|
179
|
+
get: function () { return chunkYCHRGMAX_js.ProgressCircle; }
|
|
180
180
|
});
|
|
181
181
|
Object.defineProperty(exports, "RadioGroup", {
|
|
182
182
|
enumerable: true,
|
|
183
|
-
get: function () { return
|
|
183
|
+
get: function () { return chunkYCHRGMAX_js.RadioGroup; }
|
|
184
184
|
});
|
|
185
185
|
Object.defineProperty(exports, "Slider", {
|
|
186
186
|
enumerable: true,
|
|
187
|
-
get: function () { return
|
|
187
|
+
get: function () { return chunkYCHRGMAX_js.Slider; }
|
|
188
188
|
});
|
|
189
189
|
Object.defineProperty(exports, "TagInput", {
|
|
190
190
|
enumerable: true,
|
|
191
|
-
get: function () { return
|
|
191
|
+
get: function () { return chunkYCHRGMAX_js.TagInput; }
|
|
192
192
|
});
|
|
193
193
|
Object.defineProperty(exports, "TimePicker", {
|
|
194
194
|
enumerable: true,
|
|
195
|
-
get: function () { return
|
|
195
|
+
get: function () { return chunkYCHRGMAX_js.TimePicker; }
|
|
196
196
|
});
|
|
197
197
|
Object.defineProperty(exports, "Cluster", {
|
|
198
198
|
enumerable: true,
|
package/dist/index.mjs
CHANGED
|
@@ -10,7 +10,7 @@ export { NotificationCenter } from './chunk-67SCO4BO.mjs';
|
|
|
10
10
|
export { PermissionMatrix } from './chunk-DAITXFG3.mjs';
|
|
11
11
|
export { Combobox, DatePicker, FileUpload, MonthPicker, YearPicker } from './chunk-HGS3ATU2.mjs';
|
|
12
12
|
export { ResizableGroup, ResizableHandle, ResizablePanel } from './chunk-ML5IYW5D.mjs';
|
|
13
|
-
export { CheckboxGroup, MoneyInput, PhoneInput, Progress, ProgressCircle, RadioGroup, Slider, TagInput, TimePicker } from './chunk-
|
|
13
|
+
export { CheckboxGroup, MoneyInput, PhoneInput, Progress, ProgressCircle, RadioGroup, Slider, TagInput, TimePicker } from './chunk-SJIXLIWE.mjs';
|
|
14
14
|
export { Cluster, Container, Divider, Grid, HStack, KeyValue, KeyValueRow, ListGroup, ListGroupItem, Spacer, Stack, Stepper, Tab, TabList, TabPanel, Table, Tabs, Tooltip, VStack } from './chunk-TGAAJCUZ.mjs';
|
|
15
15
|
export { Logo } from './chunk-JMFDIN5R.mjs';
|
|
16
16
|
export { CategoryNav, Hero, Testimonial } from './chunk-XRWMJVSI.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@misael703/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.67.0",
|
|
4
4
|
"description": "Generic React + TypeScript UI kit, optimized for Next.js. Tokens, accessible components, runtime-configurable theming via presets.",
|
|
5
5
|
"author": "Misael Ocas <misael.ocas@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["Slider","MoneyInput"],"mappings":"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","file":"chunk-5C7LUIBN.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X, Clock } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\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 (custom popover, HH:mm[:ss] / hour) --------------\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst rangeBy = (end: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < end; i += step) out.push(i);\n return out;\n};\n// Parse 'HH', 'HH:mm' or 'HH:mm:ss' into a [h, m, s] tuple; missing parts → 0.\nconst parseTime = (v: string): [number, number, number] => {\n const [h, m, s] = v.split(':');\n return [Number(h) || 0, Number(m) || 0, Number(s) || 0];\n};\n\nexport interface TimePickerProps {\n /**\n * Time of day. String format follows `granularity`: `'minute'` → `'HH:mm'`\n * (e.g. `'14:37'`), `'second'` → `'HH:mm:ss'` (e.g. `'14:37:09'`),\n * `'hour'` → `'HH:00'` (e.g. `'14:00'`).\n */\n value: string;\n onChange: (v: string) => void;\n /**\n * Precision of the control. Default `'minute'`.\n * - `'minute'`: hour + minute columns; value `HH:mm`.\n * - `'second'`: hour + minute + second columns; value `HH:mm:ss`.\n * - `'hour'`: a single hour column; value `HH:00`.\n */\n granularity?: TimeGranularity;\n /**\n * Increment of the finest column, in units of `granularity` (minutes /\n * seconds / hours). Omit for `1` (every value of the unit — e.g. any minute).\n * `step` thins that column: `granularity='minute'` + `step={15}` → minutes\n * `00 15 30 45`. Coarser columns always step by 1.\n */\n step?: number;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\n// One scrollable column of the picker. A listbox with roving `aria-activedescendant`\n// (the container is the single tab stop) so a 60-item column adds one focus stop,\n// not sixty; Arrow/Home/End move + commit, and the active cell is centered.\nfunction TimeColumn({ label, values, selected, idBase, onSelect }: {\n label: string;\n values: number[];\n selected: number;\n idBase: string;\n onSelect: (v: number) => void;\n}) {\n const listRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n const active = list?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (list && active) list.scrollTop = active.offsetTop - list.clientHeight / 2 + active.offsetHeight / 2;\n }, [selected]);\n const idx = Math.max(0, values.indexOf(selected));\n const onKeyDown = (e: React.KeyboardEvent) => {\n let next = idx;\n if (e.key === 'ArrowDown') next = (idx + 1) % values.length;\n else if (e.key === 'ArrowUp') next = (idx - 1 + values.length) % values.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = values.length - 1;\n else return;\n e.preventDefault();\n onSelect(values[next]);\n };\n return (\n <div\n ref={listRef}\n className=\"timepicker__col kit-scrollbar\"\n role=\"listbox\"\n aria-label={label}\n tabIndex={0}\n aria-activedescendant={`${idBase}-${selected}`}\n onKeyDown={onKeyDown}\n >\n {values.map((v) => (\n <div\n key={v}\n id={`${idBase}-${v}`}\n role=\"option\"\n aria-selected={v === selected}\n className={cx('timepicker__cell', v === selected && 'is-selected')}\n onClick={() => onSelect(v)}\n >{pad2(v)}</div>\n ))}\n </div>\n );\n}\n\nexport function TimePicker({ value, onChange, granularity = 'minute', step, invalid, disabled, className, id }: TimePickerProps) {\n const t = useLocale();\n const reactId = React.useId();\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const [h, m, s] = parseTime(value);\n const unitStep = step && step > 0 ? step : 1;\n const showMinutes = granularity !== 'hour';\n const showSeconds = granularity === 'second';\n // `step` thins the finest column for the chosen granularity; coarser ones step by 1.\n const hours = rangeBy(24, granularity === 'hour' ? unitStep : 1);\n const minutes = rangeBy(60, granularity === 'minute' ? unitStep : 1);\n const seconds = rangeBy(60, unitStep);\n\n const compose = (hh: number, mm: number, ss: number): string =>\n granularity === 'hour' ? `${pad2(hh)}:00`\n : granularity === 'minute' ? `${pad2(hh)}:${pad2(mm)}`\n : `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;\n\n const pos = usePopoverPosition(wrapRef, popoverRef, { open, side: 'bottom', align: 'start', offset: 4 });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef], returnFocusRef: triggerRef });\n\n const label = value ? compose(h, m, s) : t['picker.selectTime'];\n\n return (\n <div ref={wrapRef} className={cx('timepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"timepicker__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{label}</span>\n <span className=\"timepicker__icon\" aria-hidden=\"true\"><Clock size={16} /></span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('timepicker__popover', 'is-floating')}\n role=\"dialog\"\n aria-label={t['picker.selectTime']}\n style={{ position: 'fixed', top: pos.top, left: pos.left, visibility: pos.ready ? 'visible' : 'hidden' }}\n >\n <div className=\"timepicker__cols\">\n <TimeColumn label={t['picker.hours']} idBase={`${reactId}-h`} values={hours} selected={h}\n onSelect={(hh) => onChange(compose(hh, m, s))} />\n {showMinutes && (\n <TimeColumn label={t['picker.minutes']} idBase={`${reactId}-m`} values={minutes} selected={m}\n onSelect={(mm) => onChange(compose(h, mm, s))} />\n )}\n {showSeconds && (\n <TimeColumn label={t['picker.seconds']} idBase={`${reactId}-s`} values={seconds} selected={s}\n onSelect={(ss) => onChange(compose(h, m, ss))} />\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/InputsExtra.tsx"],"names":["React","Slider","cx","jsx","jsxs","useLocale","format","X","MoneyInput","getBrand","usePopoverPosition","useDismiss","Clock","Portal"],"mappings":"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","file":"chunk-SA7NCLEK.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X, Clock } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\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 (custom popover, HH:mm[:ss] / hour) --------------\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst rangeBy = (end: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < end; i += step) out.push(i);\n return out;\n};\n// Parse 'HH', 'HH:mm' or 'HH:mm:ss' into a [h, m, s] tuple; missing parts → 0.\nconst parseTime = (v: string): [number, number, number] => {\n const [h, m, s] = v.split(':');\n return [Number(h) || 0, Number(m) || 0, Number(s) || 0];\n};\n\nexport interface TimePickerProps {\n /**\n * Time of day. String format follows `granularity`: `'minute'` → `'HH:mm'`\n * (e.g. `'14:37'`), `'second'` → `'HH:mm:ss'` (e.g. `'14:37:09'`),\n * `'hour'` → `'HH:00'` (e.g. `'14:00'`).\n */\n value: string;\n onChange: (v: string) => void;\n /**\n * Precision of the control. Default `'minute'`.\n * - `'minute'`: hour + minute columns; value `HH:mm`.\n * - `'second'`: hour + minute + second columns; value `HH:mm:ss`.\n * - `'hour'`: a single hour column; value `HH:00`.\n */\n granularity?: TimeGranularity;\n /**\n * Increment of the finest column, in units of `granularity` (minutes /\n * seconds / hours). Omit for `1` (every value of the unit — e.g. any minute).\n * `step` thins that column: `granularity='minute'` + `step={15}` → minutes\n * `00 15 30 45`. Coarser columns always step by 1.\n */\n step?: number;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\n// One scrollable column of the picker. A listbox with roving `aria-activedescendant`\n// (the container is the single tab stop) so a 60-item column adds one focus stop,\n// not sixty; Arrow/Home/End move + commit, and the active cell is centered.\nfunction TimeColumn({ label, values, selected, idBase, onSelect }: {\n label: string;\n values: number[];\n selected: number;\n idBase: string;\n onSelect: (v: number) => void;\n}) {\n const listRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n const active = list?.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (list && active) list.scrollTop = active.offsetTop - list.clientHeight / 2 + active.offsetHeight / 2;\n }, [selected]);\n const idx = Math.max(0, values.indexOf(selected));\n const onKeyDown = (e: React.KeyboardEvent) => {\n let next = idx;\n if (e.key === 'ArrowDown') next = (idx + 1) % values.length;\n else if (e.key === 'ArrowUp') next = (idx - 1 + values.length) % values.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = values.length - 1;\n else return;\n e.preventDefault();\n onSelect(values[next]);\n };\n return (\n <div\n ref={listRef}\n className=\"timepicker__col kit-scrollbar\"\n role=\"listbox\"\n aria-label={label}\n tabIndex={0}\n aria-activedescendant={`${idBase}-${selected}`}\n onKeyDown={onKeyDown}\n >\n {values.map((v) => (\n <div\n key={v}\n id={`${idBase}-${v}`}\n role=\"option\"\n aria-selected={v === selected}\n className={cx('timepicker__cell', v === selected && 'is-selected')}\n onClick={() => onSelect(v)}\n >{pad2(v)}</div>\n ))}\n </div>\n );\n}\n\nexport function TimePicker({ value, onChange, granularity = 'minute', step, invalid, disabled, className, id }: TimePickerProps) {\n const t = useLocale();\n const reactId = React.useId();\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const [h, m, s] = parseTime(value);\n const unitStep = step && step > 0 ? step : 1;\n const showMinutes = granularity !== 'hour';\n const showSeconds = granularity === 'second';\n // `step` thins the finest column for the chosen granularity; coarser ones step by 1.\n const hours = rangeBy(24, granularity === 'hour' ? unitStep : 1);\n const minutes = rangeBy(60, granularity === 'minute' ? unitStep : 1);\n const seconds = rangeBy(60, unitStep);\n\n const compose = (hh: number, mm: number, ss: number): string =>\n granularity === 'hour' ? `${pad2(hh)}:00`\n : granularity === 'minute' ? `${pad2(hh)}:${pad2(mm)}`\n : `${pad2(hh)}:${pad2(mm)}:${pad2(ss)}`;\n\n const pos = usePopoverPosition(wrapRef, popoverRef, { open, side: 'bottom', align: 'start', offset: 4 });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef], returnFocusRef: triggerRef });\n\n const label = value ? compose(h, m, s) : t['picker.selectTime'];\n\n return (\n <div ref={wrapRef} className={cx('timepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"timepicker__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{label}</span>\n <span className=\"timepicker__icon\" aria-hidden=\"true\"><Clock size={16} /></span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('timepicker__popover', 'is-floating')}\n role=\"dialog\"\n aria-label={t['picker.selectTime']}\n style={{ position: 'fixed', top: pos.top, left: pos.left, visibility: pos.ready ? 'visible' : 'hidden' }}\n >\n <div className=\"timepicker__cols\">\n <TimeColumn label={t['picker.hours']} idBase={`${reactId}-h`} values={hours} selected={h}\n onSelect={(hh) => onChange(compose(hh, m, s))} />\n {showMinutes && (\n <TimeColumn label={t['picker.minutes']} idBase={`${reactId}-m`} values={minutes} selected={m}\n onSelect={(mm) => onChange(compose(h, mm, s))} />\n )}\n {showSeconds && (\n <TimeColumn label={t['picker.seconds']} idBase={`${reactId}-s`} values={seconds} selected={s}\n onSelect={(ss) => onChange(compose(h, m, ss))} />\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\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"]}
|