UNPKG

laif-ds

Version:

Design System di Laif con componenti React basati su principi di Atomic Design

153 lines (152 loc) 5.45 kB
"use client"; import { jsxs as u, jsx as l, Fragment as k } from "react/jsx-runtime"; import { cn as c } from "../../lib/utils.js"; import { Root as y, Track as F, Range as M, Thumb as b } from "../../node_modules/@radix-ui/react-slider/dist/index.js"; import { cva as w } from "../../node_modules/class-variance-authority/dist/index.js"; import * as P from "react"; import { Badge as x } from "./badge.js"; const S = w( "relative w-full grow overflow-hidden rounded-full bg-d-primary/20", { variants: { size: { base: "h-1.5", medium: "h-2", large: "h-2.5" } }, defaultVariants: { size: "base" } } ), N = w( c( "block rounded-full bg-d-background shadow transition-all duration-200 disabled:pointer-events-none disabled:opacity-50", // Use standard focus ring but adapted for circular slider thumb "focus-visible:outline-none focus-visible:ring-d-primary focus-visible:ring-[3px]", "border border-d-primary/50 hover:border-d-primary" // Added subtle border interaction ), { variants: { size: { base: "h-4 w-4", medium: "h-5 w-5", large: "h-6 w-6" } }, defaultVariants: { size: "base" } } ), B = P.forwardRef( ({ className: C, size: m, formatValue: t, showValues: $ = !1, showStickyLabel: s = !1, stickyLabelSuffix: h = "", fillOffset: o = !1, offsetValue: v, steps: d, showStepMarkers: z = !1, ...e }, R) => { const r = v !== void 0 ? v : e.min !== void 0 && e.max !== void 0 ? (e.min + e.max) / 2 : 50, f = () => { if (!o) return 0; const a = e.min || 0, i = (e.max || 100) - a; return (r - a) / i * 100; }, g = (a) => d ? d.reduce((n, i) => Math.abs(i - a) < Math.abs(n - a) ? i : n) : a, T = (a) => { if (!d || !e.onValueChange) { e.onValueChange && e.onValueChange(a); return; } const n = g(a[0]), i = a.length > 1 ? [n, g(a[1])] : [n]; e.onValueChange(i); }, j = (a) => { const n = e.min || 0, i = e.max || 100; return (a - n) / (i - n) * 100; }; return /* @__PURE__ */ u("div", { className: "flex w-full flex-col gap-1", children: [ /* @__PURE__ */ u( y, { ref: R, className: c( "relative flex w-full touch-none items-center select-none", C ), ...e, onValueChange: void 0, onValueChange: d ? T : e.onValueChange, children: [ /* @__PURE__ */ u(F, { className: c(S({ size: m })), children: [ d && z && /* @__PURE__ */ l("div", { className: "absolute h-full w-full", children: d.map((a, n) => /* @__PURE__ */ l( "div", { className: "bg-d-muted-foreground/50 absolute -mt-1.5 h-4 w-1 rounded-full", style: { left: `calc(${j(a)}% - 2px)`, top: "50%", transform: "translateY(-50%)" } }, n )) }), o && e.value ? /* @__PURE__ */ u(k, { children: [ /* @__PURE__ */ l("div", { className: "bg-d-muted/30 absolute h-full w-full" }), /* @__PURE__ */ l( "div", { className: "bg-d-primary absolute h-full", style: { left: e.value[0] < r ? `${(e.value[0] - (e.min || 0)) / ((e.max || 100) - (e.min || 0)) * 100}%` : `${f()}%`, right: e.value[0] > r ? `${100 - (e.value[0] - (e.min || 0)) / ((e.max || 100) - (e.min || 0)) * 100}%` : `${100 - f()}%` } } ) ] }) : /* @__PURE__ */ l(M, { className: "bg-d-primary absolute h-full" }) ] }), /* @__PURE__ */ l( b, { className: c(N({ size: m }), "relative"), children: s && e.value && /* @__PURE__ */ l( x, { variant: "default", className: "absolute -top-5 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2", children: t ? t(e.value[0]) : `${e.value[0]}${h}` } ) } ), e.value && e.value.length > 1 && /* @__PURE__ */ l( b, { className: c(N({ size: m }), "relative"), children: s && /* @__PURE__ */ l( x, { variant: "default", className: "absolute -top-5 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2", children: t ? t(e.value[1]) : `${e.value[1]}${h}` } ) } ) ] } ), $ && e.value && /* @__PURE__ */ u("div", { className: "text-d-muted-foreground flex justify-between text-xs font-medium", children: [ /* @__PURE__ */ l("span", { children: t ? t(e.value[0]) : e.value[0] }), e.value.length > 1 ? /* @__PURE__ */ l("span", { children: t ? t(e.value[1]) : e.value[1] }) : e.max !== void 0 ? /* @__PURE__ */ l("span", { children: t ? t(e.max) : e.max }) : null ] }) ] }); } ); B.displayName = y.displayName; export { B as Slider };