@pittorica/slider-react 0.24.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,16 +4,32 @@ The `Slider` component.
4
4
 
5
5
  ## Installation
6
6
 
7
- ```bash
7
+ \`\`\`bash
8
8
  npm install @pittorica/slider-react
9
- ```
9
+ \`\`\`
10
10
 
11
11
  ## Usage
12
12
 
13
- ```jsx
13
+ \`\`\`jsx
14
14
  import { Slider } from '@pittorica/slider-react';
15
- // TODO: Add usage example
16
- ```
15
+
16
+ function MyForm() {
17
+ return (
18
+
19
+ <form>
20
+ <Slider
21
+ min={0}
22
+ max={100}
23
+ defaultValue={50}
24
+ color="source" // Default color is now 'source'
25
+ required // Mark as required
26
+ label="Volume"
27
+ />
28
+ <button type="submit">Submit</button>
29
+ </form>
30
+ );
31
+ }
32
+ \`\`\`
17
33
 
18
34
  ## License
19
35
 
package/dist/Slider.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { type Ref } from 'react';
1
+ import { type ElementType } from 'react';
2
2
  import { type BoxProps } from '@pittorica/box-react';
3
3
  import type { PittoricaColor } from '@pittorica/text-react';
4
- export interface SliderProps extends Omit<BoxProps, 'onChange' | 'value' | 'defaultValue'> {
4
+ export type SliderProps<E extends ElementType = 'div'> = Omit<BoxProps<E>, 'onChange' | 'value' | 'defaultValue'> & {
5
5
  value?: number;
6
6
  defaultValue?: number;
7
7
  min?: number;
@@ -10,14 +10,14 @@ export interface SliderProps extends Omit<BoxProps, 'onChange' | 'value' | 'defa
10
10
  disabled?: boolean;
11
11
  color?: PittoricaColor;
12
12
  onValueChange?: (value: number) => void;
13
- }
13
+ required?: boolean;
14
+ };
14
15
  /**
15
16
  * Slider component for numeric input via dragging.
17
+ * Fully polymorphic and agnostic using Box foundation.
16
18
  */
17
19
  export declare const Slider: {
18
- ({ value: controlledValue, defaultValue, min, max, step, disabled, color, onValueChange, className, style, ref, ...props }: SliderProps & {
19
- ref?: Ref<HTMLDivElement>;
20
- }): import("react/jsx-runtime").JSX.Element;
20
+ <E extends ElementType = "div">({ value: controlledValue, defaultValue, min, max, step, disabled, color, onValueChange, required, className, style, as, ...props }: SliderProps<E>): import("react/jsx-runtime").JSX.Element;
21
21
  displayName: string;
22
22
  };
23
23
  //# sourceMappingURL=Slider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../src/Slider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EAKT,MAAM,OAAO,CAAC;AAIf,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,QAAQ,EACR,UAAU,GAAG,OAAO,GAAG,cAAc,CACtC;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;gIAahB,WAAW,GAAG;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;KAAE;;CAuF7C,CAAC"}
1
+ {"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../src/Slider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,OAAO,CAAC;AAIf,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAAI,IAAI,CAC3D,QAAQ,CAAC,CAAC,CAAC,EACX,UAAU,GAAG,OAAO,GAAG,cAAc,CACtC,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM;KAAI,CAAC,SAAS,WAAW,8IAczC,WAAW,CAAC,CAAC,CAAC;;CAoFhB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export type { SliderProps } from './Slider.js';
2
- export { Slider } from './Slider.js';
1
+ export * from './Slider.js';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,152 +1,147 @@
1
- import { jsx as T, jsxs as D } from "react/jsx-runtime";
2
- import { useState as F, useRef as U, useCallback as W } from "react";
3
- function A(e) {
4
- var i, r, t = "";
5
- if (typeof e == "string" || typeof e == "number") t += e;
6
- else if (typeof e == "object") if (Array.isArray(e)) {
7
- var s = e.length;
8
- for (i = 0; i < s; i++) e[i] && (r = A(e[i])) && (t && (t += " "), t += r);
9
- } else for (r in e) e[r] && (t && (t += " "), t += r);
1
+ import { jsx as w, jsxs as E } from "react/jsx-runtime";
2
+ import { useState as D, useRef as U, useCallback as W } from "react";
3
+ function B(i) {
4
+ var e, a, t = "";
5
+ if (typeof i == "string" || typeof i == "number") t += i;
6
+ else if (typeof i == "object") if (Array.isArray(i)) {
7
+ var s = i.length;
8
+ for (e = 0; e < s; e++) i[e] && (a = B(i[e])) && (t && (t += " "), t += a);
9
+ } else for (a in i) i[a] && (t && (t += " "), t += a);
10
10
  return t;
11
11
  }
12
- function q() {
13
- for (var e, i, r = 0, t = "", s = arguments.length; r < s; r++) (e = arguments[r]) && (i = A(e)) && (t && (t += " "), t += i);
12
+ function I() {
13
+ for (var i, e, a = 0, t = "", s = arguments.length; a < s; a++) (i = arguments[a]) && (e = B(i)) && (t && (t += " "), t += e);
14
14
  return t;
15
15
  }
16
- function B(e) {
17
- var i, r, t = "";
18
- if (typeof e == "string" || typeof e == "number") t += e;
19
- else if (typeof e == "object") if (Array.isArray(e)) {
20
- var s = e.length;
21
- for (i = 0; i < s; i++) e[i] && (r = B(e[i])) && (t && (t += " "), t += r);
22
- } else for (r in e) e[r] && (t && (t += " "), t += r);
16
+ function j(i) {
17
+ var e, a, t = "";
18
+ if (typeof i == "string" || typeof i == "number") t += i;
19
+ else if (typeof i == "object") if (Array.isArray(i)) {
20
+ var s = i.length;
21
+ for (e = 0; e < s; e++) i[e] && (a = j(i[e])) && (t && (t += " "), t += a);
22
+ } else for (a in i) i[a] && (t && (t += " "), t += a);
23
23
  return t;
24
24
  }
25
- function I() {
26
- for (var e, i, r = 0, t = "", s = arguments.length; r < s; r++) (e = arguments[r]) && (i = B(e)) && (t && (t += " "), t += i);
25
+ function V() {
26
+ for (var i, e, a = 0, t = "", s = arguments.length; a < s; a++) (i = arguments[a]) && (e = j(i)) && (t && (t += " "), t += e);
27
27
  return t;
28
28
  }
29
- const E = ({
30
- ref: e,
31
- as: i = "div",
32
- children: r,
33
- display: t,
34
- m: s,
35
- mt: c,
36
- mr: n,
37
- mb: p,
38
- ml: v,
39
- p: g,
40
- pt: y,
41
- pr: b,
42
- pb: $,
43
- pl: w,
44
- width: m,
45
- height: u,
46
- position: h,
47
- style: x,
48
- className: N,
49
- href: L,
50
- target: S,
51
- rel: M,
52
- htmlFor: l,
53
- type: f,
54
- name: d,
55
- disabled: o,
56
- ...j
29
+ const k = ({
30
+ as: i,
31
+ children: e,
32
+ display: a,
33
+ m: t,
34
+ mt: s,
35
+ mr: p,
36
+ mb: n,
37
+ ml: c,
38
+ mx: u,
39
+ my: f,
40
+ p: $,
41
+ pt: b,
42
+ pr: x,
43
+ pb: N,
44
+ pl: T,
45
+ px: m,
46
+ py: d,
47
+ width: g,
48
+ height: h,
49
+ position: y,
50
+ style: L,
51
+ className: P,
52
+ disabled: R,
53
+ required: S,
54
+ ...l
57
55
  }) => {
58
- const a = {};
59
- t && (a.display = t), m && (a.width = m), u && (a.height = u), h && (a.position = h), s && (a.margin = `var(--pittorica-space-${s})`), c && (a.marginTop = `var(--pittorica-space-${c})`), n && (a.marginRight = `var(--pittorica-space-${n})`), p && (a.marginBottom = `var(--pittorica-space-${p})`), v && (a.marginLeft = `var(--pittorica-space-${v})`), g && (a.padding = `var(--pittorica-space-${g})`), y && (a.paddingTop = `var(--pittorica-space-${y})`), b && (a.paddingRight = `var(--pittorica-space-${b})`), $ && (a.paddingBottom = `var(--pittorica-space-${$})`), w && (a.paddingLeft = `var(--pittorica-space-${w})`);
60
- const P = {
61
- ...x,
62
- ...a
56
+ const v = i || "div", r = {};
57
+ a && (r.display = a), g && (r.width = g), h && (r.height = h), y && (r.position = y), t && (r.margin = `var(--pittorica-space-${t})`), s && (r.marginTop = `var(--pittorica-space-${s})`), p && (r.marginRight = `var(--pittorica-space-${p})`), n && (r.marginBottom = `var(--pittorica-space-${n})`), c && (r.marginLeft = `var(--pittorica-space-${c})`), u && (r.marginLeft = `var(--pittorica-space-${u})`, r.marginRight = `var(--pittorica-space-${u})`), f && (r.marginTop = `var(--pittorica-space-${f})`, r.marginBottom = `var(--pittorica-space-${f})`), $ && (r.padding = `var(--pittorica-space-${$})`), b && (r.paddingTop = `var(--pittorica-space-${b})`), x && (r.paddingRight = `var(--pittorica-space-${x})`), N && (r.paddingBottom = `var(--pittorica-space-${N})`), T && (r.paddingLeft = `var(--pittorica-space-${T})`), m && (r.paddingLeft = `var(--pittorica-space-${m})`, r.paddingRight = `var(--pittorica-space-${m})`), d && (r.paddingTop = `var(--pittorica-space-${d})`, r.paddingBottom = `var(--pittorica-space-${d})`);
58
+ const o = {
59
+ ...L,
60
+ ...r
63
61
  };
64
- return /* @__PURE__ */ T(
65
- i,
62
+ return /* @__PURE__ */ w(
63
+ v,
66
64
  {
67
- ref: e,
68
- className: I("pittorica-box", N),
69
- style: P,
70
- href: L,
71
- target: S,
72
- rel: M,
73
- htmlFor: l,
74
- type: f,
75
- name: d,
76
- disabled: o,
77
- ...j,
78
- children: r
65
+ className: V("pittorica-box", P),
66
+ style: o,
67
+ disabled: R,
68
+ required: S,
69
+ ...l,
70
+ children: e
79
71
  }
80
72
  );
81
73
  };
82
- E.displayName = "Box";
83
- const V = ({
84
- value: e,
85
- defaultValue: i = 0,
86
- min: r = 0,
74
+ k.displayName = "Box";
75
+ const X = ({
76
+ value: i,
77
+ defaultValue: e = 0,
78
+ min: a = 0,
87
79
  max: t = 100,
88
80
  step: s = 1,
89
- disabled: c = !1,
90
- color: n = "indigo",
91
- onValueChange: p,
92
- className: v,
93
- style: g,
94
- ref: y,
95
- ...b
81
+ disabled: p = !1,
82
+ color: n = "source",
83
+ onValueChange: c,
84
+ required: u = !1,
85
+ className: f,
86
+ style: $,
87
+ as: b,
88
+ ...x
96
89
  }) => {
97
- const [$, w] = F(i), m = U(null), u = e !== void 0, h = u ? e : $, x = (h - r) / (t - r) * 100, N = W(
98
- (l, f) => {
99
- const d = m.current || f;
100
- if (!d) return;
101
- const o = d.getBoundingClientRect();
90
+ const [N, T] = D(e), m = U(null), d = i !== void 0, g = d ? i : N, h = (g - a) / (t - a) * 100, y = W(
91
+ (l, v) => {
92
+ const r = m.current || v;
93
+ if (!r) return;
94
+ const o = r.getBoundingClientRect();
102
95
  if (!o || o.width <= 0) return;
103
- const P = Math.max(0, Math.min((typeof l == "number" ? l : 0) - (o.left || 0), o.width)) / o.width * (t - r) + r, k = Math.round(P / s) * s, R = Math.max(r, Math.min(t, k));
104
- Number.isNaN(R) || (u || w(R), p == null || p(R));
96
+ const q = Math.max(0, Math.min((typeof l == "number" ? l : 0) - (o.left || 0), o.width)) / o.width * (t - a) + a, A = Math.round(q / s) * s, M = Math.max(a, Math.min(t, A));
97
+ Number.isNaN(M) || (d || T(M), c == null || c(M));
105
98
  },
106
- [t, r, s, u, p]
99
+ [t, a, s, d, c]
107
100
  ), L = (l) => {
108
- if (c) return;
109
- N(l.clientX, l.currentTarget);
110
- const f = (o) => N(o.clientX), d = () => {
111
- globalThis.removeEventListener("pointermove", f), globalThis.removeEventListener("pointerup", d);
101
+ if (p) return;
102
+ y(l.clientX, l.currentTarget);
103
+ const v = (o) => y(o.clientX), r = () => {
104
+ globalThis.removeEventListener("pointermove", v), globalThis.removeEventListener("pointerup", r);
112
105
  };
113
- globalThis.addEventListener("pointermove", f), globalThis.addEventListener("pointerup", d);
114
- }, M = n !== "inherit" && !(n != null && n.startsWith("#")) && !(n != null && n.startsWith("rgb")) ? `var(--pittorica-${n}-9)` : n;
115
- return /* @__PURE__ */ D(
116
- E,
106
+ globalThis.addEventListener("pointermove", v), globalThis.addEventListener("pointerup", r);
107
+ }, R = n !== "inherit" && !(n != null && n.startsWith("#")) && !(n != null && n.startsWith("rgb")) ? `var(--pittorica-${n}-9)` : n;
108
+ return /* @__PURE__ */ E(
109
+ k,
117
110
  {
118
- ...b,
119
- ref: y,
120
- className: q("pittorica-slider-root", v),
121
- "data-disabled": c,
111
+ as: b || "div",
112
+ className: I("pittorica-slider-root", f),
113
+ "data-disabled": p,
122
114
  onPointerDown: L,
123
- style: { "--pittorica-source-color": M, ...g },
115
+ "aria-required": u,
116
+ style: { "--pittorica-source-color": R, ...$ },
117
+ ...x,
124
118
  children: [
125
- /* @__PURE__ */ T("div", { className: "pittorica-slider-track", ref: m, children: /* @__PURE__ */ T(
119
+ /* @__PURE__ */ w("div", { className: "pittorica-slider-track", ref: m, children: /* @__PURE__ */ w(
126
120
  "div",
127
121
  {
128
122
  className: "pittorica-slider-range",
129
- style: { width: `${x}%` }
123
+ style: { width: `${h}%` }
130
124
  }
131
125
  ) }),
132
- /* @__PURE__ */ T(
126
+ /* @__PURE__ */ w(
133
127
  "div",
134
128
  {
135
129
  role: "slider",
136
- "aria-valuemin": r,
130
+ "aria-valuemin": a,
137
131
  "aria-valuemax": t,
138
- "aria-valuenow": h,
139
- "aria-disabled": c,
140
- tabIndex: c ? -1 : 0,
132
+ "aria-valuenow": g,
133
+ "aria-disabled": p,
134
+ "aria-required": u,
135
+ tabIndex: p ? -1 : 0,
141
136
  className: "pittorica-slider-thumb",
142
- style: { position: "absolute", left: `calc(${x}% - 8px)` }
137
+ style: { position: "absolute", left: `calc(${h}% - 8px)` }
143
138
  }
144
139
  )
145
140
  ]
146
141
  }
147
142
  );
148
143
  };
149
- V.displayName = "Slider";
144
+ X.displayName = "Slider";
150
145
  export {
151
- V as Slider
146
+ X as Slider
152
147
  };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@pittorica/slider-react",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
+ "homepage": "https://pittorica.dcdavidev.me",
4
5
  "type": "module",
5
6
  "main": "./dist/index.js",
6
7
  "module": "./dist/index.js",
@@ -10,8 +11,8 @@
10
11
  ],
11
12
  "dependencies": {
12
13
  "clsx": "^2.1.1",
13
- "@pittorica/box-react": "0.24.0",
14
- "@pittorica/text-react": "0.24.0"
14
+ "@pittorica/box-react": "0.26.0",
15
+ "@pittorica/text-react": "0.26.0"
15
16
  },
16
17
  "devDependencies": {
17
18
  "@testing-library/jest-dom": "^6.9.1",
@@ -21,10 +22,10 @@
21
22
  "@vitejs/plugin-react": "^4.0.0",
22
23
  "jsdom": "^22.0.0",
23
24
  "typescript": "^5.0.0",
24
- "vite": "^5.0.0",
25
- "vitest": "^2.1.9",
26
- "@pittorica/theme-react": "0.24.0",
27
- "pittorica": "0.24.0"
25
+ "vite": "^6.4.1",
26
+ "vitest": "^3.2.4",
27
+ "pittorica": "0.26.0",
28
+ "@pittorica/theme-react": "0.26.0"
28
29
  },
29
30
  "peerDependencies": {
30
31
  "react": ">=19",
@@ -34,8 +35,7 @@
34
35
  "build": "npm run clean && npm run build:js && npm run build:types",
35
36
  "build:js": "vite build",
36
37
  "build:types": "tsc -p tsconfig.json",
37
- "clean": "rm -rf dist",
38
- "dev": "vite",
38
+ "clean": "rm -rf dist *.tsbuildinfo",
39
39
  "test": "vitest run",
40
40
  "test:watch": "vitest"
41
41
  }
@@ -1,7 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { Slider } from './Slider';
3
- declare const meta: Meta<typeof Slider>;
4
- export default meta;
5
- export declare const Basic: StoryObj<typeof Slider>;
6
- export declare const Stepped: StoryObj<typeof Slider>;
7
- //# sourceMappingURL=Slider.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Slider.stories.d.ts","sourceRoot":"","sources":["../src/Slider.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAI7B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,MAAM,CAKzC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,OAAO,MAAM,CAO3C,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- */
4
- import '@testing-library/jest-dom';
5
- //# sourceMappingURL=Slider.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Slider.test.d.ts","sourceRoot":"","sources":["../src/Slider.test.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,2BAA2B,CAAC"}