danielgm-ui 0.4.1 → 0.4.2
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/slider.d.ts +2 -0
- package/dist/slider.js +11 -3
- package/dist/styles.css +21 -13
- package/package.json +1 -1
package/dist/slider.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface SliderBaseProps {
|
|
|
10
10
|
step?: number;
|
|
11
11
|
disabled?: boolean;
|
|
12
12
|
name?: string;
|
|
13
|
+
/** Visibilidad visual de los extremos en Slider y RangeSlider; conserva foco y accesibilidad. @defaultValue 'always' */
|
|
14
|
+
thumbVisibility?: 'always' | 'interaction';
|
|
13
15
|
/** Valor visible y aria-valuetext; útil para porcentajes, unidades o precios. */
|
|
14
16
|
formatValue?: (value: number) => string;
|
|
15
17
|
/** Marcas informativas, sin interacción propia. Deben estar entre min y max. */
|
package/dist/slider.js
CHANGED
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/** Radix mantiene teclado, gestos táctiles y valores de formulario; la librería aporta etiquetas y estilo. */
|
|
4
|
-
import { useId } from 'react';
|
|
4
|
+
import { useId, useState, useEffect } from 'react';
|
|
5
5
|
import * as Primitive from '@radix-ui/react-slider';
|
|
6
6
|
import { useControllable } from './internal/state.js';
|
|
7
7
|
import { cx, hasContent } from './utils.js';
|
|
8
8
|
/** Infraestructura interna; cada API pública mantiene un número fijo de controles. */
|
|
9
|
-
function SliderControl({ label, description, error, min = 0, max = 100, step = 1, disabled, name, formatValue = String, marks = [], className, id, values, change, commit, thumbLabels, }) {
|
|
9
|
+
function SliderControl({ label, description, error, min = 0, max = 100, step = 1, disabled, name, thumbVisibility = 'always', formatValue = String, marks = [], className, id, values, change, commit, thumbLabels, }) {
|
|
10
10
|
const generated = useId();
|
|
11
|
+
const [activePointer, setActivePointer] = useState(null);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (disabled)
|
|
14
|
+
setActivePointer(null);
|
|
15
|
+
}, [disabled]);
|
|
11
16
|
const controlId = id ?? `dgm-slider-${generated}`;
|
|
12
17
|
if (![min, max, step].every(Number.isFinite) || min >= max || step <= 0) {
|
|
13
18
|
throw new RangeError('Slider requires finite min < max and step > 0.');
|
|
14
19
|
}
|
|
15
20
|
const describedBy = cx(hasContent(description) && `${controlId}-description`, hasContent(error) && `${controlId}-error`) || undefined;
|
|
16
|
-
return (_jsxs("div", { className: cx('dgm-field', 'dgm-slider-field', className), id: controlId, children: [_jsxs("div", { className: "dgm-slider-heading", children: [_jsx("span", { className: "dgm-label", id: `${controlId}-label`, children: label }), _jsx("span", { className: "dgm-description", "aria-hidden": "true", children: values.map(formatValue).join(' – ') })] }), _jsxs(Primitive.Root, { className: "dgm-slider",
|
|
21
|
+
return (_jsxs("div", { className: cx('dgm-field', 'dgm-slider-field', className), id: controlId, children: [_jsxs("div", { className: "dgm-slider-heading", children: [_jsx("span", { className: "dgm-label", id: `${controlId}-label`, children: label }), _jsx("span", { className: "dgm-description", "aria-hidden": "true", children: values.map(formatValue).join(' – ') })] }), _jsxs(Primitive.Root, { className: "dgm-slider", "data-thumb-visibility": thumbVisibility, "data-dragging": !disabled && activePointer !== null ? '' : undefined, onPointerDownCapture: (event) => {
|
|
22
|
+
if (!disabled && event.button === 0)
|
|
23
|
+
setActivePointer(event.pointerId);
|
|
24
|
+
}, onPointerUpCapture: () => setActivePointer(null), onPointerCancelCapture: () => setActivePointer(null), onLostPointerCapture: () => setActivePointer(null), value: values, onValueChange: change, onValueCommit: commit, min: min, max: max, step: step, disabled: disabled, name: name, children: [_jsx(Primitive.Track, { className: "dgm-slider-track", children: _jsx(Primitive.Range, { className: "dgm-slider-range" }) }), values.map((value, index) => (_jsx(Primitive.Thumb, { name: name, className: "dgm-slider-thumb", "aria-labelledby": `${controlId}-label${thumbLabels ? ` ${controlId}-thumb-${index}` : ''}`, "aria-describedby": describedBy, "aria-invalid": hasContent(error) || undefined, "aria-valuetext": formatValue(value) }, index)))] }), thumbLabels?.map((text, index) => (_jsx("span", { id: `${controlId}-thumb-${index}`, className: "dgm-visually-hidden", children: text }, index))), marks.length > 0 && (_jsx("div", { className: "dgm-slider-marks", "aria-hidden": "true", children: marks
|
|
17
25
|
.filter((mark) => mark.value >= min && mark.value <= max)
|
|
18
26
|
.map((mark) => (_jsx("span", { style: { left: `${(100 * (mark.value - min)) / (max - min)}%` }, children: mark.label ?? formatValue(mark.value) }, mark.value))) })), hasContent(description) && (_jsx("span", { id: `${controlId}-description`, className: "dgm-description", children: description })), hasContent(error) && (_jsx("span", { id: `${controlId}-error`, className: "dgm-error", children: error }))] }));
|
|
19
27
|
}
|
package/dist/styles.css
CHANGED
|
@@ -2775,7 +2775,7 @@ button.dgm-step:hover:not(:disabled),
|
|
|
2775
2775
|
}
|
|
2776
2776
|
.dgm-table-sort-icon {
|
|
2777
2777
|
position: absolute;
|
|
2778
|
-
inset-inline-end: 0;
|
|
2778
|
+
inset-inline-end: 0.5625rem;
|
|
2779
2779
|
top: 50%;
|
|
2780
2780
|
width: 0.875rem;
|
|
2781
2781
|
height: 0.875rem;
|
|
@@ -2793,22 +2793,13 @@ button.dgm-step:hover:not(:disabled),
|
|
|
2793
2793
|
opacity: 1;
|
|
2794
2794
|
transform: translateY(-50%) scale(1);
|
|
2795
2795
|
}
|
|
2796
|
-
.dgm-data-table th
|
|
2797
|
-
.dgm-data-table th[data-align='end'] .dgm-table-sort[data-sorted] .dgm-table-sort-label {
|
|
2796
|
+
.dgm-data-table th .dgm-table-sort[data-sorted] .dgm-table-sort-label {
|
|
2798
2797
|
transform: translateX(-0.5625rem);
|
|
2799
2798
|
}
|
|
2800
|
-
.dgm-data-table th[data-align='center'] .dgm-table-sort-icon,
|
|
2801
|
-
.dgm-data-table th[data-align='end'] .dgm-table-sort-icon {
|
|
2802
|
-
inset-inline-end: 0.5625rem;
|
|
2803
|
-
}
|
|
2804
2799
|
.dgm-data-table th[data-align='start'] .dgm-table-sort {
|
|
2805
2800
|
margin-inline-start: calc(-1 * var(--dgm-table-sort-space));
|
|
2806
2801
|
}
|
|
2807
|
-
[dir='rtl']
|
|
2808
|
-
.dgm-data-table
|
|
2809
|
-
th:not([data-align='start'])
|
|
2810
|
-
.dgm-table-sort[data-sorted]
|
|
2811
|
-
.dgm-table-sort-label {
|
|
2802
|
+
[dir='rtl'] .dgm-data-table th .dgm-table-sort[data-sorted] .dgm-table-sort-label {
|
|
2812
2803
|
transform: translateX(0.5625rem);
|
|
2813
2804
|
}
|
|
2814
2805
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -3139,6 +3130,22 @@ button.dgm-step:disabled {
|
|
|
3139
3130
|
box-shadow: 0 2px 5px #0002;
|
|
3140
3131
|
cursor: grab;
|
|
3141
3132
|
}
|
|
3133
|
+
/* Opacidad conserva la geometría, el área táctil y los controles accesibles. */
|
|
3134
|
+
.dgm-slider[data-thumb-visibility='interaction'] .dgm-slider-thumb {
|
|
3135
|
+
opacity: 0;
|
|
3136
|
+
transition: opacity 0.15s ease;
|
|
3137
|
+
}
|
|
3138
|
+
.dgm-slider[data-thumb-visibility='interaction']:not([data-disabled]):focus-within
|
|
3139
|
+
.dgm-slider-thumb,
|
|
3140
|
+
.dgm-slider[data-thumb-visibility='interaction']:not([data-disabled])[data-dragging]
|
|
3141
|
+
.dgm-slider-thumb {
|
|
3142
|
+
opacity: 1;
|
|
3143
|
+
}
|
|
3144
|
+
@media (hover: hover) {
|
|
3145
|
+
.dgm-slider[data-thumb-visibility='interaction']:not([data-disabled]):hover .dgm-slider-thumb {
|
|
3146
|
+
opacity: 1;
|
|
3147
|
+
}
|
|
3148
|
+
}
|
|
3142
3149
|
.dgm-slider-thumb::after {
|
|
3143
3150
|
content: '';
|
|
3144
3151
|
position: absolute;
|
|
@@ -3584,7 +3591,8 @@ button.dgm-step:disabled {
|
|
|
3584
3591
|
.dgm-navigation-content {
|
|
3585
3592
|
animation: none;
|
|
3586
3593
|
}
|
|
3587
|
-
.dgm-toggle-item
|
|
3594
|
+
.dgm-toggle-item,
|
|
3595
|
+
.dgm-slider[data-thumb-visibility='interaction'] .dgm-slider-thumb {
|
|
3588
3596
|
transition: none;
|
|
3589
3597
|
}
|
|
3590
3598
|
}
|