@cdx-ui/primitives 0.0.1-beta.170 → 0.0.1-beta.171

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.
Files changed (49) hide show
  1. package/lib/commonjs/slider/SliderRail.js +35 -9
  2. package/lib/commonjs/slider/SliderRail.js.map +1 -1
  3. package/lib/commonjs/slider/SliderRoot.js +155 -97
  4. package/lib/commonjs/slider/SliderRoot.js.map +1 -1
  5. package/lib/commonjs/slider/SliderThumb.js +182 -68
  6. package/lib/commonjs/slider/SliderThumb.js.map +1 -1
  7. package/lib/commonjs/slider/context.js +4 -1
  8. package/lib/commonjs/slider/context.js.map +1 -1
  9. package/lib/commonjs/slider/index.js +36 -0
  10. package/lib/commonjs/slider/index.js.map +1 -1
  11. package/lib/commonjs/slider/useSliderPointer.js +1 -1
  12. package/lib/commonjs/slider/useSliderPointer.js.map +1 -1
  13. package/lib/commonjs/slider/utils.js +68 -0
  14. package/lib/commonjs/slider/utils.js.map +1 -1
  15. package/lib/module/slider/SliderRail.js +35 -9
  16. package/lib/module/slider/SliderRail.js.map +1 -1
  17. package/lib/module/slider/SliderRoot.js +157 -99
  18. package/lib/module/slider/SliderRoot.js.map +1 -1
  19. package/lib/module/slider/SliderThumb.js +185 -71
  20. package/lib/module/slider/SliderThumb.js.map +1 -1
  21. package/lib/module/slider/context.js +1 -0
  22. package/lib/module/slider/context.js.map +1 -1
  23. package/lib/module/slider/index.js +2 -2
  24. package/lib/module/slider/index.js.map +1 -1
  25. package/lib/module/slider/useSliderPointer.js +1 -1
  26. package/lib/module/slider/useSliderPointer.js.map +1 -1
  27. package/lib/module/slider/utils.js +63 -0
  28. package/lib/module/slider/utils.js.map +1 -1
  29. package/lib/typescript/slider/SliderRail.d.ts.map +1 -1
  30. package/lib/typescript/slider/SliderRoot.d.ts +2 -2
  31. package/lib/typescript/slider/SliderRoot.d.ts.map +1 -1
  32. package/lib/typescript/slider/SliderThumb.d.ts.map +1 -1
  33. package/lib/typescript/slider/context.d.ts +53 -9
  34. package/lib/typescript/slider/context.d.ts.map +1 -1
  35. package/lib/typescript/slider/index.d.ts +4 -4
  36. package/lib/typescript/slider/index.d.ts.map +1 -1
  37. package/lib/typescript/slider/types.d.ts +44 -8
  38. package/lib/typescript/slider/types.d.ts.map +1 -1
  39. package/lib/typescript/slider/utils.d.ts +8 -0
  40. package/lib/typescript/slider/utils.d.ts.map +1 -1
  41. package/package.json +3 -3
  42. package/src/slider/SliderRail.tsx +56 -8
  43. package/src/slider/SliderRoot.tsx +255 -136
  44. package/src/slider/SliderThumb.tsx +240 -88
  45. package/src/slider/context.tsx +53 -9
  46. package/src/slider/index.ts +9 -2
  47. package/src/slider/types.ts +49 -8
  48. package/src/slider/useSliderPointer.ts +1 -1
  49. package/src/slider/utils.ts +76 -0
@@ -88,6 +88,82 @@ export function formatSliderValue(value: number): string {
88
88
  return Number.isInteger(value) ? String(value) : value.toFixed(1);
89
89
  }
90
90
 
91
+ export function arraysEqual(a: readonly number[], b: readonly number[]): boolean {
92
+ if (a.length !== b.length) {
93
+ return false;
94
+ }
95
+ return a.every((value, index) => value === b[index]);
96
+ }
97
+
98
+ export function normalizeSliderValue(
99
+ input: number | readonly number[] | undefined,
100
+ min: number,
101
+ defaultScalar?: number,
102
+ ): number[] {
103
+ if (input == null) {
104
+ return [defaultScalar ?? min];
105
+ }
106
+ if (Array.isArray(input)) {
107
+ return [...input];
108
+ }
109
+ return [input as number];
110
+ }
111
+
112
+ export function denormalizeSliderValue(
113
+ values: readonly number[],
114
+ asArray: boolean,
115
+ ): number | number[] {
116
+ return asArray ? [...values] : values[0];
117
+ }
118
+
119
+ export function getClosestValueIndex(values: readonly number[], target: number): number {
120
+ if (values.length === 0) {
121
+ return 0;
122
+ }
123
+
124
+ let closestIndex = 0;
125
+ let closestDistance = Math.abs(values[0] - target);
126
+
127
+ for (let index = 1; index < values.length; index += 1) {
128
+ const distance = Math.abs(values[index] - target);
129
+ if (distance < closestDistance) {
130
+ closestDistance = distance;
131
+ closestIndex = index;
132
+ }
133
+ }
134
+
135
+ return closestIndex;
136
+ }
137
+
138
+ export function getFillExtent(
139
+ startPercent: number,
140
+ endPercent: number,
141
+ trackSize: number,
142
+ thumbSize: number,
143
+ ): { offset: number; length: number } {
144
+ if (trackSize <= 0) {
145
+ return { offset: 0, length: 0 };
146
+ }
147
+
148
+ const start = (clamp(startPercent, 0, 100) / 100) * trackSize;
149
+ const end = (clamp(endPercent, 0, 100) / 100) * trackSize;
150
+ const span = end - start;
151
+
152
+ if (span > 0) {
153
+ return { offset: start, length: span };
154
+ }
155
+
156
+ if (start <= 0) {
157
+ return { offset: 0, length: 0 };
158
+ }
159
+
160
+ const halfThumb = Math.max(thumbSize, 0) / 2;
161
+ const offset = clamp(start - halfThumb, 0, trackSize);
162
+ const endUnderThumb = clamp(start + halfThumb, 0, trackSize);
163
+
164
+ return { offset, length: endUnderThumb - offset };
165
+ }
166
+
91
167
  export function getMarkerStepValues(min: number, max: number, step: number): number[] {
92
168
  if (step <= 0 || max <= min) {
93
169
  return [];