@net-advantage/nabs-ui-slider 0.70.0 → 0.71.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.
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("react/jsx-runtime");var n=(0,e.forwardRef)(({label:n=`Slider`,value:r=0,min:i=0,max:a=100,step:o=1,disabled:s=!1,className:c=``,inputClassName:l=``,labelClassName:u=``,valueClassName:d=``,id:f,onChange:p,...m},h)=>{let g=(0,e.useId)(),_=f??`nabs-ui-slider-${g.replace(/:/g,``)}`,v=[`nabs-ui-slider`,s?`nabs-ui-slider--disabled`:``,c].filter(Boolean).join(` `),y=[`nabs-ui-slider__input`,l].filter(Boolean).join(` `),b=[`nabs-ui-slider__label`,u].filter(Boolean).join(` `),x=[`nabs-ui-slider__value`,d].filter(Boolean).join(` `);return(0,t.jsxs)(`div`,{className:v,children:[(0,t.jsxs)(`div`,{className:`nabs-ui-slider__header`,children:[(0,t.jsx)(`label`,{className:b,htmlFor:_,children:n}),(0,t.jsx)(`output`,{className:x,htmlFor:_,children:r})]}),(0,t.jsx)(`input`,{ref:h,id:_,className:y,type:`range`,value:r,min:i,max:a,step:o,disabled:s,onChange:p,...m}),(0,t.jsxs)(`div`,{className:`nabs-ui-slider__scale`,"aria-hidden":`true`,children:[(0,t.jsx)(`span`,{children:i}),(0,t.jsx)(`span`,{children:a})]})]})});n.displayName=`Slider`,exports.Slider=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("react/jsx-runtime");var n={value:0,min:0,max:100,step:1};function r(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}function i(e,t){let i=r(e,n.min),a=r(t,n.max);return i<=a?{min:i,max:a}:{min:a,max:i}}function a(e){let t=r(e,n.step);return t>0?t:n.step}function o(e,t,i){let a=r(e,n.value);return a<t?t:a>i?i:a}function s(e,t){return e||`nabs-ui-slider-${t.replace(/:/g,``)}`}function c({disabled:e=!1,className:t}){return[`nabs-ui-slider`,e?`nabs-ui-slider--disabled`:``,t??``].filter(Boolean).join(` `)}function l(e){return[`nabs-ui-slider__input`,e??``].filter(Boolean).join(` `)}function u(e){return[`nabs-ui-slider__label`,e??``].filter(Boolean).join(` `)}function d(e){return[`nabs-ui-slider__value`,e??``].filter(Boolean).join(` `)}function f({value:e,min:t,max:n,step:r}){let s=i(t,n),c=a(r);return{renderedValue:o(e,s.min,s.max),renderedMin:s.min,renderedMax:s.max,renderedStep:c}}var p=(0,e.forwardRef)(({label:n=`Slider`,value:r=0,min:i=0,max:a=100,step:o=1,disabled:p=!1,className:m=``,inputClassName:h=``,labelClassName:g=``,valueClassName:_=``,id:v,onChange:y,...b},x)=>{let S=s(v,(0,e.useId)()),C=c({disabled:p,className:m}),w=l(h),T=u(g),E=d(_),{renderedValue:D,renderedMin:O,renderedMax:k,renderedStep:A}=f({value:r,min:i,max:a,step:o});return(0,t.jsxs)(`div`,{className:C,children:[(0,t.jsxs)(`div`,{className:`nabs-ui-slider__header`,children:[(0,t.jsx)(`label`,{className:T,htmlFor:S,children:n}),(0,t.jsx)(`output`,{className:E,htmlFor:S,children:r})]}),(0,t.jsx)(`input`,{ref:x,id:S,className:w,type:`range`,value:D,min:O,max:k,step:A,disabled:p,onChange:y,...b}),(0,t.jsxs)(`div`,{className:`nabs-ui-slider__scale`,"aria-hidden":`true`,children:[(0,t.jsx)(`span`,{children:O}),(0,t.jsx)(`span`,{children:k})]})]})});p.displayName=`Slider`,exports.Slider=p;
@@ -1,48 +1,111 @@
1
1
  import { forwardRef as e, useId as t } from "react";
2
2
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
- //#region src/Slider.tsx
4
- var i = e(({ label: e = "Slider", value: i = 0, min: a = 0, max: o = 100, step: s = 1, disabled: c = !1, className: l = "", inputClassName: u = "", labelClassName: d = "", valueClassName: f = "", id: p, onChange: m, ...h }, g) => {
5
- let _ = t(), v = p ?? `nabs-ui-slider-${_.replace(/:/g, "")}`, y = [
3
+ //#region src/slider.model.ts
4
+ var i = {
5
+ value: 0,
6
+ min: 0,
7
+ max: 100,
8
+ step: 1
9
+ };
10
+ function a(e, t) {
11
+ return typeof e == "number" && Number.isFinite(e) ? e : t;
12
+ }
13
+ function o(e, t) {
14
+ let n = a(e, i.min), r = a(t, i.max);
15
+ return n <= r ? {
16
+ min: n,
17
+ max: r
18
+ } : {
19
+ min: r,
20
+ max: n
21
+ };
22
+ }
23
+ function s(e) {
24
+ let t = a(e, i.step);
25
+ return t > 0 ? t : i.step;
26
+ }
27
+ function c(e, t, n) {
28
+ let r = a(e, i.value);
29
+ return r < t ? t : r > n ? n : r;
30
+ }
31
+ //#endregion
32
+ //#region src/slider.view-model.ts
33
+ function l(e, t) {
34
+ return e || `nabs-ui-slider-${t.replace(/:/g, "")}`;
35
+ }
36
+ function u({ disabled: e = !1, className: t }) {
37
+ return [
6
38
  "nabs-ui-slider",
7
- c ? "nabs-ui-slider--disabled" : "",
8
- l
9
- ].filter(Boolean).join(" "), b = ["nabs-ui-slider__input", u].filter(Boolean).join(" "), x = ["nabs-ui-slider__label", d].filter(Boolean).join(" "), S = ["nabs-ui-slider__value", f].filter(Boolean).join(" ");
39
+ e ? "nabs-ui-slider--disabled" : "",
40
+ t ?? ""
41
+ ].filter(Boolean).join(" ");
42
+ }
43
+ function d(e) {
44
+ return ["nabs-ui-slider__input", e ?? ""].filter(Boolean).join(" ");
45
+ }
46
+ function f(e) {
47
+ return ["nabs-ui-slider__label", e ?? ""].filter(Boolean).join(" ");
48
+ }
49
+ function p(e) {
50
+ return ["nabs-ui-slider__value", e ?? ""].filter(Boolean).join(" ");
51
+ }
52
+ function m({ value: e, min: t, max: n, step: r }) {
53
+ let i = o(t, n), a = s(r);
54
+ return {
55
+ renderedValue: c(e, i.min, i.max),
56
+ renderedMin: i.min,
57
+ renderedMax: i.max,
58
+ renderedStep: a
59
+ };
60
+ }
61
+ //#endregion
62
+ //#region src/Slider.tsx
63
+ var h = e(({ label: e = "Slider", value: i = 0, min: a = 0, max: o = 100, step: s = 1, disabled: c = !1, className: h = "", inputClassName: g = "", labelClassName: _ = "", valueClassName: v = "", id: y, onChange: b, ...x }, S) => {
64
+ let C = l(y, t()), w = u({
65
+ disabled: c,
66
+ className: h
67
+ }), T = d(g), E = f(_), D = p(v), { renderedValue: O, renderedMin: k, renderedMax: A, renderedStep: j } = m({
68
+ value: i,
69
+ min: a,
70
+ max: o,
71
+ step: s
72
+ });
10
73
  return /* @__PURE__ */ r("div", {
11
- className: y,
74
+ className: w,
12
75
  children: [
13
76
  /* @__PURE__ */ r("div", {
14
77
  className: "nabs-ui-slider__header",
15
78
  children: [/* @__PURE__ */ n("label", {
16
- className: x,
17
- htmlFor: v,
79
+ className: E,
80
+ htmlFor: C,
18
81
  children: e
19
82
  }), /* @__PURE__ */ n("output", {
20
- className: S,
21
- htmlFor: v,
83
+ className: D,
84
+ htmlFor: C,
22
85
  children: i
23
86
  })]
24
87
  }),
25
88
  /* @__PURE__ */ n("input", {
26
- ref: g,
27
- id: v,
28
- className: b,
89
+ ref: S,
90
+ id: C,
91
+ className: T,
29
92
  type: "range",
30
- value: i,
31
- min: a,
32
- max: o,
33
- step: s,
93
+ value: O,
94
+ min: k,
95
+ max: A,
96
+ step: j,
34
97
  disabled: c,
35
- onChange: m,
36
- ...h
98
+ onChange: b,
99
+ ...x
37
100
  }),
38
101
  /* @__PURE__ */ r("div", {
39
102
  className: "nabs-ui-slider__scale",
40
103
  "aria-hidden": "true",
41
- children: [/* @__PURE__ */ n("span", { children: a }), /* @__PURE__ */ n("span", { children: o })]
104
+ children: [/* @__PURE__ */ n("span", { children: k }), /* @__PURE__ */ n("span", { children: A })]
42
105
  })
43
106
  ]
44
107
  });
45
108
  });
46
- i.displayName = "Slider";
109
+ h.displayName = "Slider";
47
110
  //#endregion
48
- export { i as Slider };
111
+ export { h as Slider };
@@ -0,0 +1,12 @@
1
+ export declare const sliderDefaults: {
2
+ readonly value: 0;
3
+ readonly min: 0;
4
+ readonly max: 100;
5
+ readonly step: 1;
6
+ };
7
+ export declare function normalizeSliderBounds(min: unknown, max: unknown): {
8
+ min: number;
9
+ max: number;
10
+ };
11
+ export declare function normalizeSliderStep(step: unknown): number;
12
+ export declare function clampSliderValue(value: unknown, min: number, max: number): number;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,26 @@
1
+ import { SliderProps } from './Slider.types';
2
+ export declare function buildSliderId(id: string | undefined, generatedId: string): string;
3
+ export declare function buildSliderClassName({ disabled, className }: {
4
+ disabled?: boolean;
5
+ className?: string | null;
6
+ }): string;
7
+ export declare function buildSliderInputClassName(inputClassName?: string | null): string;
8
+ export declare function buildSliderLabelClassName(labelClassName?: string | null): string;
9
+ export declare function buildSliderValueClassName(valueClassName?: string | null): string;
10
+ export declare function resolveSliderRenderModel({ value, min, max, step, }: {
11
+ value?: SliderProps["value"];
12
+ min?: SliderProps["min"];
13
+ max?: SliderProps["max"];
14
+ step?: SliderProps["step"];
15
+ }): {
16
+ renderedValue: number;
17
+ renderedMin: number;
18
+ renderedMax: number;
19
+ renderedStep: number;
20
+ };
21
+ export declare function toSliderStateLabel({ value, min, max, step, }: {
22
+ value: number;
23
+ min: number;
24
+ max: number;
25
+ step: number;
26
+ }): string;
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@net-advantage/nabs-ui-slider",
3
- "version": "0.70.0",
3
+ "version": "0.71.0",
4
4
  "description": "Reusable slider control for the Nabs UI library.",
5
5
  "type": "module",
6
6
  "main": "./dist/nabs-ui-slider.cjs",
@@ -25,11 +25,16 @@
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "@vitejs/plugin-react": "^6.0.1",
28
+ "@vitest/coverage-v8": "^3.2.4",
28
29
  "react-dom": "^19.2.6",
29
- "vite": "^8.0.12"
30
+ "vite": "^8.0.12",
31
+ "vitest": "^3.2.4"
30
32
  },
31
33
  "scripts": {
32
34
  "build": "vite build",
33
- "dev": "vite"
35
+ "dev": "vite",
36
+ "test:unit": "vitest run",
37
+ "test:unit:watch": "vitest",
38
+ "test:unit:coverage": "vitest run --coverage --coverage.reporter=html --coverage.reporter=json-summary --coverage.reporter=text-summary"
34
39
  }
35
40
  }