@sit-onyx/headless 0.7.1 → 0.8.0-dev-20260323184401

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,8 +1,4 @@
1
1
  import { HTMLAttributes, MaybeRef, Ref } from 'vue';
2
- export type SliderMark = {
3
- value: number;
4
- label?: string;
5
- };
6
2
  type SliderValue = number | [number, number];
7
3
  export type NormalizedSliderValue = [number] | [number, number];
8
4
  export type CreateSliderOptions<TValue extends SliderValue = SliderValue> = {
@@ -40,14 +36,6 @@ export type CreateSliderOptions<TValue extends SliderValue = SliderValue> = {
40
36
  * @default false
41
37
  */
42
38
  disabled?: MaybeRef<boolean>;
43
- /**
44
- * Whether to show marks inside the slider rail.
45
- * - `true`: will generate marks automatically based on `step` prop
46
- * - array of numbers or `SliderMark` objects: will shown at the specified values with optional labels
47
- *
48
- * @default false
49
- */
50
- marks?: MaybeRef<SliderMark[] | number[] | boolean>;
51
39
  /**
52
40
  * Aria label for the slider.
53
41
  */
@@ -255,17 +243,6 @@ export declare const createSlider: <TValue extends SliderValue>(options: CreateS
255
243
  onTransitionstart?: ((payload: TransitionEvent) => void) | undefined;
256
244
  ref: import('vue').WritableComputedRef<HTMLElement | null, HTMLElement | null>;
257
245
  }>;
258
- /**
259
- * Individual thumb elements for each value (span)
260
- */
261
- thumbContainer: import('vue').ComputedRef<(data: {
262
- index: number;
263
- value: number;
264
- }) => {
265
- style: {
266
- left: string;
267
- };
268
- }>;
269
246
  /**
270
247
  * Input inside each thumb for accessibility
271
248
  */
@@ -468,46 +445,20 @@ export declare const createSlider: <TValue extends SliderValue>(options: CreateS
468
445
  disabled: boolean | undefined;
469
446
  ref: import('vue').WritableComputedRef<HTMLElement | null, HTMLElement | null> | undefined;
470
447
  }>;
471
- /**
472
- * Single Mark element inside the rail
473
- */
474
- mark: import('vue').ComputedRef<(data: {
475
- value: number;
476
- label?: string;
477
- padding: string;
478
- markWidth: string;
479
- }) => {
480
- "aria-hidden": true;
481
- style: {
482
- left: string;
483
- };
484
- }>;
485
- /**
486
- * Label for each mark
487
- */
488
- markLabel: import('vue').ComputedRef<(data: {
489
- value: number;
490
- }) => {
491
- "aria-hidden": true;
492
- style: {
493
- left: string;
494
- transform: "translateX(-50%)";
495
- };
496
- }>;
448
+ }, {
449
+ normalizedValue: import('vue').ComputedRef<NormalizedSliderValue>;
450
+ shiftStep: import('vue').ComputedRef<number>;
497
451
  /**
498
452
  * Track element representing the selected range
499
453
  */
500
454
  track: import('vue').ComputedRef<{
501
- style: {
502
- left: string;
503
- width: string;
504
- };
455
+ start: number;
456
+ startPercentage: number;
457
+ end: number;
458
+ endPercentage: number;
505
459
  }>;
506
460
  }, {
507
- normalizedValue: import('vue').ComputedRef<NormalizedSliderValue>;
508
- shiftStep: import('vue').ComputedRef<number>;
509
- marks: import('vue').ComputedRef<SliderMark[]>;
510
- }, {
461
+ getValueInPercentage: import('vue').ComputedRef<(value: number) => number>;
511
462
  updateValue: (value: number, index: number) => void;
512
463
  updateValueByStep: (direction: "increase" | "decrease") => void;
513
464
  }>;
package/dist/index.js CHANGED
@@ -1245,20 +1245,6 @@ const createSlider = createBuilder(
1245
1245
  const stepMultiple = Math.max(1, Math.round((max.value - min.value) * 0.1 / step.value));
1246
1246
  return stepMultiple * step.value;
1247
1247
  });
1248
- const marks = computed(() => {
1249
- const _marks = toValue(options.marks);
1250
- if (!_marks) return [];
1251
- if (_marks === true) {
1252
- const markCount = Math.floor((max.value - min.value) / step.value) + 1;
1253
- return Array.from({ length: markCount }, (_, index) => {
1254
- return { value: min.value + step.value * index };
1255
- });
1256
- }
1257
- return _marks.map((mark) => {
1258
- if (typeof mark === "number") return { value: mark };
1259
- return mark;
1260
- }).sort((a, b) => a.value - b.value);
1261
- });
1262
1248
  const getNormalizedValue = computed(() => {
1263
1249
  return (value) => {
1264
1250
  let values = typeof value === "number" ? [value] : value;
@@ -1379,12 +1365,6 @@ const createSlider = createBuilder(
1379
1365
  ...toValue(options.disabled) ? void 0 : events
1380
1366
  };
1381
1367
  }),
1382
- /**
1383
- * Individual thumb elements for each value (span)
1384
- */
1385
- thumbContainer: computed(() => (data) => ({
1386
- style: { left: `${getValueInPercentage.value(data.value)}%` }
1387
- })),
1388
1368
  /**
1389
1369
  * Input inside each thumb for accessibility
1390
1370
  */
@@ -1408,58 +1388,30 @@ const createSlider = createBuilder(
1408
1388
  ref: data.index === 0 ? firstThumbRef : data.index === 1 ? secondThumbRef : void 0,
1409
1389
  ...toValue(options.disabled) ? void 0 : events
1410
1390
  };
1411
- }),
1412
- /**
1413
- * Single Mark element inside the rail
1414
- */
1415
- mark: computed(
1416
- () => (data) => {
1417
- const percentage = getValueInPercentage.value(data.value);
1418
- return {
1419
- "aria-hidden": true,
1420
- style: {
1421
- // adjusting the position for the marks with consideration to their width and a padding/safe-zone.
1422
- left: `calc(${data.padding} + (100% - 2 * ${data.padding} - ${data.markWidth}) * ${percentage} / 100)`
1423
- }
1424
- };
1425
- }
1426
- ),
1427
- /**
1428
- * Label for each mark
1429
- */
1430
- markLabel: computed(() => (data) => {
1431
- const left = getValueInPercentage.value(data.value);
1432
- return {
1433
- "aria-hidden": true,
1434
- style: {
1435
- left: `${left}%`,
1436
- transform: "translateX(-50%)"
1437
- }
1438
- };
1439
- }),
1391
+ })
1392
+ },
1393
+ state: {
1394
+ normalizedValue,
1395
+ shiftStep,
1440
1396
  /**
1441
1397
  * Track element representing the selected range
1442
1398
  */
1443
1399
  track: computed(() => {
1444
1400
  const isRange = normalizedValue.value.length > 1;
1445
- const offsetValue = isRange ? normalizedValue.value[0] : min.value;
1446
- const left = getValueInPercentage.value(offsetValue);
1447
- const lengthValue = normalizedValue.value.at(-1);
1448
- const width = getValueInPercentage.value(lengthValue) - left;
1401
+ const start = isRange ? normalizedValue.value[0] : min.value;
1402
+ const startPercentage = getValueInPercentage.value(start);
1403
+ const end = normalizedValue.value.at(-1);
1404
+ const endPercentage = getValueInPercentage.value(end);
1449
1405
  return {
1450
- style: {
1451
- left: `${left}%`,
1452
- width: `${width}%`
1453
- }
1406
+ start,
1407
+ startPercentage,
1408
+ end,
1409
+ endPercentage
1454
1410
  };
1455
1411
  })
1456
1412
  },
1457
- state: {
1458
- normalizedValue,
1459
- shiftStep,
1460
- marks
1461
- },
1462
1413
  internals: {
1414
+ getValueInPercentage,
1463
1415
  updateValue,
1464
1416
  updateValueByStep
1465
1417
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sit-onyx/headless",
3
3
  "description": "Headless composables for Vue",
4
- "version": "0.7.1",
4
+ "version": "0.8.0-dev-20260323184401",
5
5
  "type": "module",
6
6
  "author": "Schwarz IT KG",
7
7
  "license": "Apache-2.0",