@agnos-ui/core 0.9.3 → 0.9.4

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,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const slider = require("../../slider-DSx5CAce.cjs");
3
+ const slider = require("../../slider-BdwTKTRg.cjs");
4
4
  exports.createSlider = slider.createSlider;
5
5
  exports.getSliderDefaultConfig = slider.getSliderDefaultConfig;
@@ -1,4 +1,4 @@
1
- import { c, g } from "../../slider-BmxQ3A_u.js";
1
+ import { c, g } from "../../slider-BZ2kIKCL.js";
2
2
  export {
3
3
  c as createSlider,
4
4
  g as getSliderDefaultConfig
package/index.cjs CHANGED
@@ -9,7 +9,7 @@ const pagination = require("./pagination-C1TT-oea.cjs");
9
9
  const progressbar = require("./progressbar-CRvhNB5R.cjs");
10
10
  const rating = require("./rating-DAb6nR67.cjs");
11
11
  const select = require("./select-C0rJJQfl.cjs");
12
- const slider = require("./slider-DSx5CAce.cjs");
12
+ const slider = require("./slider-BdwTKTRg.cjs");
13
13
  const toaster = require("./toaster-Cayg6Lbq.cjs");
14
14
  const tree = require("./tree-Pvr2rZ-D.cjs");
15
15
  const config = require("./config.cjs");
@@ -72,6 +72,7 @@ exports.getKeyName = services_navManager.getKeyName;
72
72
  exports.isInternalInputNavigation = services_navManager.isInternalInputNavigation;
73
73
  exports.portal = services_portal.portal;
74
74
  exports.createResizeObserver = services_resizeObserver.createResizeObserver;
75
+ exports.createResizeObserverMap = services_resizeObserver.createResizeObserverMap;
75
76
  exports.siblingsInert = services_siblingsInert.siblingsInert;
76
77
  exports.hash$ = services_hash.hash$;
77
78
  exports.createTransition = services_transitions_baseTransitions.createTransition;
package/index.js CHANGED
@@ -7,7 +7,7 @@ import { c as c5, g as g5 } from "./pagination-B97wBLok.js";
7
7
  import { c as c6, g as g6 } from "./progressbar-BWBlRk_Y.js";
8
8
  import { c as c7, g as g7 } from "./rating-BXvy9kXq.js";
9
9
  import { c as c8, g as g8 } from "./select-BdjpnE7_.js";
10
- import { c as c9, g as g9 } from "./slider-BmxQ3A_u.js";
10
+ import { c as c9, g as g9 } from "./slider-BZ2kIKCL.js";
11
11
  import { T, c as c10, d, g as g10 } from "./toaster-XfzHDqz_.js";
12
12
  import { c as c11, g as g11 } from "./tree-BFrXdJox.js";
13
13
  import { createWidgetsConfig, mergeInto } from "./config.js";
@@ -18,7 +18,7 @@ import { createIntersection } from "./services/intersection.js";
18
18
  import { createMatchMedia } from "./services/matchMedia.js";
19
19
  import { createNavManager, getKeyName, isInternalInputNavigation } from "./services/navManager.js";
20
20
  import { portal } from "./services/portal.js";
21
- import { createResizeObserver } from "./services/resizeObserver.js";
21
+ import { createResizeObserver, createResizeObserverMap } from "./services/resizeObserver.js";
22
22
  import { siblingsInert } from "./services/siblingsInert.js";
23
23
  import { hash$ } from "./services/hash.js";
24
24
  import { createTransition, noAnimation } from "./services/transitions/baseTransitions.js";
@@ -58,6 +58,7 @@ export {
58
58
  c6 as createProgressbar,
59
59
  c7 as createRating,
60
60
  createResizeObserver,
61
+ createResizeObserverMap,
61
62
  c8 as createSelect,
62
63
  createSimpleClassTransition,
63
64
  c9 as createSlider,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@agnos-ui/core",
3
3
  "description": "Framework-agnostic headless component library.",
4
- "version": "0.9.3",
4
+ "version": "0.9.4",
5
5
  "type": "module",
6
6
  "main": "./index.cjs",
7
7
  "module": "./index.js",
@@ -3,30 +3,50 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const tansu = require("@amadeus-it-group/tansu");
4
4
  const utils_directive = require("../dom-CuBx1JPZ.cjs");
5
5
  const utils_func = require("../utils/func.cjs");
6
- const createResizeObserver = () => {
7
- const { element$, directive } = utils_directive.createBrowserStoreDirective();
8
- const observedElement$ = tansu.derived(
9
- element$,
10
- (element, set) => {
11
- if (element === null) {
6
+ const createResizeObserverMap = () => {
7
+ const { elements$, directive } = utils_directive.createBrowserStoreArrayDirective();
8
+ const dimensionsMap$ = tansu.derived(
9
+ elements$,
10
+ (elements, set) => {
11
+ const dimensionsMap = /* @__PURE__ */ new Map();
12
+ if (elements.length === 0) {
13
+ set(dimensionsMap);
12
14
  return utils_func.noop;
13
15
  }
14
16
  const observer = new ResizeObserver((entries) => {
15
- set(entries[0]);
17
+ entries.forEach((entry) => dimensionsMap.set(entry.target, entry));
18
+ set(dimensionsMap);
16
19
  });
17
- observer.observe(element);
18
- return () => observer == null ? void 0 : observer.disconnect();
20
+ elements.forEach((element) => observer.observe(element));
21
+ return () => observer.disconnect();
19
22
  },
20
- void 0
23
+ /* @__PURE__ */ new Map()
21
24
  );
22
- return {
23
- /**
24
- * Store which contains the dimensions of the observed element (ResizeObserverEntry type)
25
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry | MDN documentation}
26
- */
27
- dimensions$: observedElement$,
28
- /** Directive to be attached to html element in order to listen to resize events */
29
- directive
30
- };
25
+ return { dimensionsMap$, directive };
26
+ };
27
+ const createResizeObserver = () => {
28
+ const { dimensionsMap$, directive: arrayDirective } = createResizeObserverMap();
29
+ let firstElement = null;
30
+ const directive = utils_directive.browserDirective((element) => {
31
+ if (firstElement === null) {
32
+ firstElement = element;
33
+ } else {
34
+ console.error("createResizeObserver directive can only be applied to a single element. Use createResizeObserverMap for multiple elements.");
35
+ return;
36
+ }
37
+ const result = arrayDirective(element);
38
+ if (!result) return;
39
+ const originalDestroy = result.destroy;
40
+ return {
41
+ ...result,
42
+ destroy: () => {
43
+ firstElement = null;
44
+ originalDestroy == null ? void 0 : originalDestroy();
45
+ }
46
+ };
47
+ });
48
+ const dimensions$ = tansu.derived(dimensionsMap$, (map) => firstElement ? map.get(firstElement) : void 0, void 0);
49
+ return { dimensions$, directive };
31
50
  };
32
51
  exports.createResizeObserver = createResizeObserver;
52
+ exports.createResizeObserverMap = createResizeObserverMap;
@@ -1,8 +1,16 @@
1
1
  import type { ReadableSignal } from '@amadeus-it-group/tansu';
2
2
  import type { Directive, SSRHTMLElement } from '../types';
3
3
  /**
4
- * Create a resize observer object
5
- * @returns An object containing the store with the dimentions of observed element (ResizeObserverEntry), the directive to be applied to the html element to be observed
4
+ * Create a resize observer that can be applied to multiple elements
5
+ * @returns An object containing the store with the dimensions map of observed elements (ResizeObserverEntry), the directive to be applied to the html element to be observed
6
+ */
7
+ export declare const createResizeObserverMap: () => {
8
+ dimensionsMap$: ReadableSignal<Map<HTMLElement, ResizeObserverEntry>>;
9
+ directive: Directive<void, SSRHTMLElement>;
10
+ };
11
+ /**
12
+ * Create a resize observer object for a single element
13
+ * @returns An object containing the store with the dimensions of observed element (ResizeObserverEntry), the directive to be applied to the html element to be observed
6
14
  */
7
15
  export declare const createResizeObserver: () => {
8
16
  dimensions$: ReadableSignal<ResizeObserverEntry | undefined>;
@@ -1,32 +1,52 @@
1
1
  import { derived } from "@amadeus-it-group/tansu";
2
- import { j as createBrowserStoreDirective } from "../dom-gfxqXJpK.js";
2
+ import { g as createBrowserStoreArrayDirective, b as browserDirective } from "../dom-gfxqXJpK.js";
3
3
  import { noop } from "../utils/func.js";
4
- const createResizeObserver = () => {
5
- const { element$, directive } = createBrowserStoreDirective();
6
- const observedElement$ = derived(
7
- element$,
8
- (element, set) => {
9
- if (element === null) {
4
+ const createResizeObserverMap = () => {
5
+ const { elements$, directive } = createBrowserStoreArrayDirective();
6
+ const dimensionsMap$ = derived(
7
+ elements$,
8
+ (elements, set) => {
9
+ const dimensionsMap = /* @__PURE__ */ new Map();
10
+ if (elements.length === 0) {
11
+ set(dimensionsMap);
10
12
  return noop;
11
13
  }
12
14
  const observer = new ResizeObserver((entries) => {
13
- set(entries[0]);
15
+ entries.forEach((entry) => dimensionsMap.set(entry.target, entry));
16
+ set(dimensionsMap);
14
17
  });
15
- observer.observe(element);
16
- return () => observer == null ? void 0 : observer.disconnect();
18
+ elements.forEach((element) => observer.observe(element));
19
+ return () => observer.disconnect();
17
20
  },
18
- void 0
21
+ /* @__PURE__ */ new Map()
19
22
  );
20
- return {
21
- /**
22
- * Store which contains the dimensions of the observed element (ResizeObserverEntry type)
23
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry | MDN documentation}
24
- */
25
- dimensions$: observedElement$,
26
- /** Directive to be attached to html element in order to listen to resize events */
27
- directive
28
- };
23
+ return { dimensionsMap$, directive };
24
+ };
25
+ const createResizeObserver = () => {
26
+ const { dimensionsMap$, directive: arrayDirective } = createResizeObserverMap();
27
+ let firstElement = null;
28
+ const directive = browserDirective((element) => {
29
+ if (firstElement === null) {
30
+ firstElement = element;
31
+ } else {
32
+ console.error("createResizeObserver directive can only be applied to a single element. Use createResizeObserverMap for multiple elements.");
33
+ return;
34
+ }
35
+ const result = arrayDirective(element);
36
+ if (!result) return;
37
+ const originalDestroy = result.destroy;
38
+ return {
39
+ ...result,
40
+ destroy: () => {
41
+ firstElement = null;
42
+ originalDestroy == null ? void 0 : originalDestroy();
43
+ }
44
+ };
45
+ });
46
+ const dimensions$ = derived(dimensionsMap$, (map) => firstElement ? map.get(firstElement) : void 0, void 0);
47
+ return { dimensions$, directive };
29
48
  };
30
49
  export {
31
- createResizeObserver
50
+ createResizeObserver,
51
+ createResizeObserverMap
32
52
  };
@@ -2,8 +2,8 @@ import { computed, writable, readable } from "@amadeus-it-group/tansu";
2
2
  import { j as createBrowserStoreDirective, g as createBrowserStoreArrayDirective, k as mergeDirectives, n as createAttributesDirective, b as browserDirective } from "./dom-gfxqXJpK.js";
3
3
  import { noop } from "./utils/func.js";
4
4
  import { writablesForProps, bindableProp, stateStores, true$ } from "./utils/stores.js";
5
- import { i as typeArray, c as typeBoolean, b as typeNumberInRangeFactory, e as typeString, g as typeFunction, a as typeNumber } from "./writables-CgpOQ4hA.js";
6
- import { createResizeObserver } from "./services/resizeObserver.js";
5
+ import { i as typeArray, k as clamp, c as typeBoolean, b as typeNumberInRangeFactory, e as typeString, g as typeFunction, a as typeNumber } from "./writables-CgpOQ4hA.js";
6
+ import { createResizeObserver, createResizeObserverMap } from "./services/resizeObserver.js";
7
7
  import { createWidgetFactory } from "./utils/widget.js";
8
8
  const decimalRegExp = /(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/;
9
9
  function getDecimalPrecision(number) {
@@ -239,20 +239,11 @@ const createSlider = createWidgetFactory("slider", (config) => {
239
239
  const { directive: sliderDirective, element$: sliderDom$ } = createBrowserStoreDirective();
240
240
  const { directive: minLabelDomDirective, element$: minLabelDom$ } = createBrowserStoreDirective();
241
241
  const { directive: maxLabelDomDirective, element$: maxLabelDom$ } = createBrowserStoreDirective();
242
- const { directive: combinedLabelDomDirective, element$: combinedLabelDom$ } = createBrowserStoreDirective();
243
242
  const { directive: handleLabelDirective, elements$: currentLabelDoms$ } = createBrowserStoreArrayDirective();
244
243
  const { directive: resizeDirective, dimensions$ } = createResizeObserver();
244
+ const { directive: resizeLabelsDirective, dimensionsMap$: handleDimensions$ } = createResizeObserverMap();
245
+ const { directive: resizeCombineLabelDirective, dimensions$: combinedDimensions$ } = createResizeObserver();
245
246
  const updateSliderSize$ = writable({});
246
- const currentLabelDomsRect$ = computed(
247
- () => {
248
- dimensions$();
249
- updateSliderSize$();
250
- return currentLabelDoms$().map((element) => element.getBoundingClientRect());
251
- },
252
- {
253
- equal: Object.is
254
- }
255
- );
256
247
  const sliderDomRect$ = computed(
257
248
  () => {
258
249
  var _a;
@@ -286,8 +277,8 @@ const createSlider = createWidgetFactory("slider", (config) => {
286
277
  equal: (a, b) => Object.is(a, b)
287
278
  }
288
279
  );
289
- const sliderDomRectOffset$ = computed(() => vertical$() ? sliderDomRect$().top : sliderDomRect$().left);
290
- const sliderDomRectSize$ = computed(() => vertical$() ? sliderDomRect$().height : sliderDomRect$().width);
280
+ const sliderDomRectOffset$ = computed(() => sliderDomRect$()[vertical$() ? "top" : "left"]);
281
+ const sliderDomRectSize$ = computed(() => sliderDomRect$()[vertical$() ? "height" : "width"]);
291
282
  const sortedValues$ = computed(() => [...values$()].sort((a, b) => a - b));
292
283
  const _sortedHandlesValues$ = computed(() => {
293
284
  return values$().map((val, index) => {
@@ -307,26 +298,20 @@ const createSlider = createWidgetFactory("slider", (config) => {
307
298
  });
308
299
  const valuesPercent$ = computed(() => values$().map((val) => percentCompute(val)));
309
300
  const sortedValuesPercent$ = computed(() => [...valuesPercent$()].sort((a, b) => a - b));
310
- const minLabelSize$ = computed(() => {
311
- const minLabelDomRect = minLabelDomRect$();
312
- return pixelToPercent(vertical$() ? minLabelDomRect.height : minLabelDomRect.width);
313
- });
314
- const maxLabelSize$ = computed(() => {
315
- const maxLabelDomRect = maxLabelDomRect$();
316
- return pixelToPercent(vertical$() ? maxLabelDomRect.height : maxLabelDomRect.width);
317
- });
301
+ const activeDimension$ = computed(() => vertical$() ? "height" : "width");
302
+ const activePosition$ = computed(() => vertical$() ? "top" : "left");
303
+ const minLabelSize$ = computed(() => pixelToPercent(minLabelDomRect$()[activeDimension$()]));
304
+ const maxLabelSize$ = computed(() => pixelToPercent(maxLabelDomRect$()[activeDimension$()]));
318
305
  const adjustedShowValueLabels$ = computed(() => showValueLabels$() && (!showTicks$() || !showTickValues$()));
319
306
  const pixelToPercent = (pixels) => pixels ? pixels / sliderDomRectSize$() * 100 : 0;
320
- const combinedLabelSize$ = computed(
321
- () => {
322
- var _a, _b;
323
- return pixelToPercent(vertical$() ? (_a = combinedLabelDom$()) == null ? void 0 : _a.getBoundingClientRect().height : (_b = combinedLabelDom$()) == null ? void 0 : _b.getBoundingClientRect().width);
324
- }
325
- );
307
+ const combinedLabelSize$ = computed(() => {
308
+ var _a;
309
+ return pixelToPercent((_a = combinedDimensions$()) == null ? void 0 : _a.contentRect[activeDimension$()]);
310
+ });
326
311
  const combinedLabelPosition$ = computed(() => vertical$() ? combinedLabelPositionTop$() : combinedLabelPositionLeft$());
327
312
  const currentLabelSizeByIndex = (index) => {
328
- var _a, _b;
329
- return pixelToPercent(vertical$() ? (_a = currentLabelDomsRect$()[index]) == null ? void 0 : _a.height : (_b = currentLabelDomsRect$()[index]) == null ? void 0 : _b.width);
313
+ var _a;
314
+ return pixelToPercent((_a = handleDimensions$().get(currentLabelDoms$()[index])) == null ? void 0 : _a.contentRect[activeDimension$()]);
330
315
  };
331
316
  const minValueLabelDisplay$ = computed(() => {
332
317
  if (!showMinMaxLabels$() || showTicks$() && showTickValues$()) {
@@ -362,23 +347,34 @@ const createSlider = createWidgetFactory("slider", (config) => {
362
347
  const sortedValuesPercent = sortedValuesPercent$();
363
348
  return rtl ? 100 - sortedValuesPercent[sortedValuesPercent.length - 1] - currentLabelSizeByIndex(0) / 2 > maxLabelSize + 1 : sortedValuesPercent[sortedValuesPercent.length - 1] + currentLabelSizeByIndex(sortedValuesPercent.length - 1) / 2 < 100 - maxLabelSize - 1;
364
349
  });
365
- const storedLabelSize$ = writable([]);
366
350
  const combinedLabelDisplay$ = computed(() => {
367
- const values = sortedValuesPercent$();
368
- if (currentLabelDomsRect$().length === values.length) {
369
- storedLabelSize$.set(values.map((_, index) => currentLabelSizeByIndex(index) / 2));
351
+ if (currentLabelDoms$().length == 2) {
352
+ return doLabelsIntersect();
370
353
  }
371
- const storedLabelSize = storedLabelSize$();
372
- const firstLabelSize = (storedLabelSize == null ? void 0 : storedLabelSize[0]) ?? 0;
373
- const secondLabelSize = (storedLabelSize == null ? void 0 : storedLabelSize[1]) ?? 0;
374
- const biggestLabelSize = Math.max(firstLabelSize, secondLabelSize);
375
- const intersectionLimit = biggestLabelSize !== 50 ? biggestLabelSize * 2 + 2 : 15;
376
- return values.length == 2 && values[1] - secondLabelSize - values[0] + firstLabelSize < intersectionLimit;
354
+ return false;
377
355
  });
356
+ function doLabelsIntersect() {
357
+ const handleOptions = handleDisplayOptions$();
358
+ const activePosition = activePosition$();
359
+ const labelPosition1 = labelPosition(handleOptions[0][activePosition], currentLabelSizeByIndex(0));
360
+ const labelPosition2 = labelPosition(handleOptions[1][activePosition], currentLabelSizeByIndex(1));
361
+ const labelSize1 = currentLabelSizeByIndex(0);
362
+ const labelSize2 = currentLabelSizeByIndex(1);
363
+ if (labelSize1 === 100 || labelSize2 === 100) {
364
+ return false;
365
+ }
366
+ const labelStart1 = labelPosition1 - labelSize1;
367
+ const labelEnd1 = labelPosition1 + labelSize1;
368
+ const labelStart2 = labelPosition2 - labelSize2;
369
+ const labelEnd2 = labelPosition2 + labelSize2;
370
+ return !(labelEnd1 < labelStart2 || labelStart1 > labelEnd2);
371
+ }
378
372
  const interactive$ = computed(() => !disabled$() && !readonly$());
379
373
  const combinedLabelPositionLeft$ = computed(() => {
380
374
  const sortedValuesPercent = sortedValuesPercent$();
381
- const combinedPosition = (sortedValuesPercent[0] + sortedValuesPercent[1]) / 2;
375
+ const combinedLabelSize = combinedLabelSize$();
376
+ let combinedPosition = (sortedValuesPercent[0] + sortedValuesPercent[1]) / 2;
377
+ combinedPosition = labelPosition(combinedPosition, combinedLabelSize);
382
378
  return vertical$() || sortedValuesPercent.length != 2 ? 0 : rtl$() ? 100 - combinedPosition : combinedPosition;
383
379
  });
384
380
  const combinedLabelPositionTop$ = computed(() => {
@@ -395,6 +391,7 @@ const createSlider = createWidgetFactory("slider", (config) => {
395
391
  };
396
392
  });
397
393
  });
394
+ const labelPosition = (initialPosition, labelSize) => clamp(initialPosition, 100 - labelSize / 2, labelSize / 2);
398
395
  const progressDisplayOptions$ = computed(() => {
399
396
  const vertical = vertical$(), sortedValuesPercent = sortedValuesPercent$(), rtl = rtl$();
400
397
  if (sortedValuesPercent.length === 1) {
@@ -771,7 +768,7 @@ const createSlider = createWidgetFactory("slider", (config) => {
771
768
  minLabelDirective: mergeDirectives(minLabelDomDirective, minLabelDirective),
772
769
  maxLabelDirective: mergeDirectives(maxLabelDomDirective, maxLabelDirective),
773
770
  combinedHandleLabelDisplayDirective: mergeDirectives(
774
- combinedLabelDomDirective,
771
+ resizeCombineLabelDirective,
775
772
  createAttributesDirective(() => ({
776
773
  classNames: {
777
774
  "au-slider-label-vertical": vertical$,
@@ -790,6 +787,7 @@ const createSlider = createWidgetFactory("slider", (config) => {
790
787
  ),
791
788
  handleLabelDisplayDirective: mergeDirectives(
792
789
  handleLabelDirective,
790
+ resizeLabelsDirective,
793
791
  createAttributesDirective((labelDisplayContext$) => ({
794
792
  classNames: {
795
793
  "au-slider-label-vertical": vertical$,
@@ -798,8 +796,13 @@ const createSlider = createWidgetFactory("slider", (config) => {
798
796
  "au-slider-label-now": horizontal$
799
797
  },
800
798
  styles: {
801
- left: computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].left)),
802
- top: computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].top))
799
+ left: computed(() => {
800
+ const handleIndex = labelDisplayContext$().index;
801
+ const leftPosition = handleDisplayOptions$()[handleIndex].left;
802
+ return leftPosition === null ? "" : percent(labelPosition(leftPosition, currentLabelSizeByIndex(handleIndex)));
803
+ }),
804
+ top: computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].top)),
805
+ opacity: computed(() => combinedLabelDisplay$() ? "0" : "1")
803
806
  },
804
807
  attributes: {
805
808
  "aria-hidden": readable("true")
@@ -240,20 +240,11 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
240
240
  const { directive: sliderDirective, element$: sliderDom$ } = utils_directive.createBrowserStoreDirective();
241
241
  const { directive: minLabelDomDirective, element$: minLabelDom$ } = utils_directive.createBrowserStoreDirective();
242
242
  const { directive: maxLabelDomDirective, element$: maxLabelDom$ } = utils_directive.createBrowserStoreDirective();
243
- const { directive: combinedLabelDomDirective, element$: combinedLabelDom$ } = utils_directive.createBrowserStoreDirective();
244
243
  const { directive: handleLabelDirective, elements$: currentLabelDoms$ } = utils_directive.createBrowserStoreArrayDirective();
245
244
  const { directive: resizeDirective, dimensions$ } = services_resizeObserver.createResizeObserver();
245
+ const { directive: resizeLabelsDirective, dimensionsMap$: handleDimensions$ } = services_resizeObserver.createResizeObserverMap();
246
+ const { directive: resizeCombineLabelDirective, dimensions$: combinedDimensions$ } = services_resizeObserver.createResizeObserver();
246
247
  const updateSliderSize$ = tansu.writable({});
247
- const currentLabelDomsRect$ = tansu.computed(
248
- () => {
249
- dimensions$();
250
- updateSliderSize$();
251
- return currentLabelDoms$().map((element) => element.getBoundingClientRect());
252
- },
253
- {
254
- equal: Object.is
255
- }
256
- );
257
248
  const sliderDomRect$ = tansu.computed(
258
249
  () => {
259
250
  var _a;
@@ -287,8 +278,8 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
287
278
  equal: (a, b) => Object.is(a, b)
288
279
  }
289
280
  );
290
- const sliderDomRectOffset$ = tansu.computed(() => vertical$() ? sliderDomRect$().top : sliderDomRect$().left);
291
- const sliderDomRectSize$ = tansu.computed(() => vertical$() ? sliderDomRect$().height : sliderDomRect$().width);
281
+ const sliderDomRectOffset$ = tansu.computed(() => sliderDomRect$()[vertical$() ? "top" : "left"]);
282
+ const sliderDomRectSize$ = tansu.computed(() => sliderDomRect$()[vertical$() ? "height" : "width"]);
292
283
  const sortedValues$ = tansu.computed(() => [...values$()].sort((a, b) => a - b));
293
284
  const _sortedHandlesValues$ = tansu.computed(() => {
294
285
  return values$().map((val, index) => {
@@ -308,26 +299,20 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
308
299
  });
309
300
  const valuesPercent$ = tansu.computed(() => values$().map((val) => percentCompute(val)));
310
301
  const sortedValuesPercent$ = tansu.computed(() => [...valuesPercent$()].sort((a, b) => a - b));
311
- const minLabelSize$ = tansu.computed(() => {
312
- const minLabelDomRect = minLabelDomRect$();
313
- return pixelToPercent(vertical$() ? minLabelDomRect.height : minLabelDomRect.width);
314
- });
315
- const maxLabelSize$ = tansu.computed(() => {
316
- const maxLabelDomRect = maxLabelDomRect$();
317
- return pixelToPercent(vertical$() ? maxLabelDomRect.height : maxLabelDomRect.width);
318
- });
302
+ const activeDimension$ = tansu.computed(() => vertical$() ? "height" : "width");
303
+ const activePosition$ = tansu.computed(() => vertical$() ? "top" : "left");
304
+ const minLabelSize$ = tansu.computed(() => pixelToPercent(minLabelDomRect$()[activeDimension$()]));
305
+ const maxLabelSize$ = tansu.computed(() => pixelToPercent(maxLabelDomRect$()[activeDimension$()]));
319
306
  const adjustedShowValueLabels$ = tansu.computed(() => showValueLabels$() && (!showTicks$() || !showTickValues$()));
320
307
  const pixelToPercent = (pixels) => pixels ? pixels / sliderDomRectSize$() * 100 : 0;
321
- const combinedLabelSize$ = tansu.computed(
322
- () => {
323
- var _a, _b;
324
- return pixelToPercent(vertical$() ? (_a = combinedLabelDom$()) == null ? void 0 : _a.getBoundingClientRect().height : (_b = combinedLabelDom$()) == null ? void 0 : _b.getBoundingClientRect().width);
325
- }
326
- );
308
+ const combinedLabelSize$ = tansu.computed(() => {
309
+ var _a;
310
+ return pixelToPercent((_a = combinedDimensions$()) == null ? void 0 : _a.contentRect[activeDimension$()]);
311
+ });
327
312
  const combinedLabelPosition$ = tansu.computed(() => vertical$() ? combinedLabelPositionTop$() : combinedLabelPositionLeft$());
328
313
  const currentLabelSizeByIndex = (index) => {
329
- var _a, _b;
330
- return pixelToPercent(vertical$() ? (_a = currentLabelDomsRect$()[index]) == null ? void 0 : _a.height : (_b = currentLabelDomsRect$()[index]) == null ? void 0 : _b.width);
314
+ var _a;
315
+ return pixelToPercent((_a = handleDimensions$().get(currentLabelDoms$()[index])) == null ? void 0 : _a.contentRect[activeDimension$()]);
331
316
  };
332
317
  const minValueLabelDisplay$ = tansu.computed(() => {
333
318
  if (!showMinMaxLabels$() || showTicks$() && showTickValues$()) {
@@ -363,23 +348,34 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
363
348
  const sortedValuesPercent = sortedValuesPercent$();
364
349
  return rtl ? 100 - sortedValuesPercent[sortedValuesPercent.length - 1] - currentLabelSizeByIndex(0) / 2 > maxLabelSize + 1 : sortedValuesPercent[sortedValuesPercent.length - 1] + currentLabelSizeByIndex(sortedValuesPercent.length - 1) / 2 < 100 - maxLabelSize - 1;
365
350
  });
366
- const storedLabelSize$ = tansu.writable([]);
367
351
  const combinedLabelDisplay$ = tansu.computed(() => {
368
- const values = sortedValuesPercent$();
369
- if (currentLabelDomsRect$().length === values.length) {
370
- storedLabelSize$.set(values.map((_, index) => currentLabelSizeByIndex(index) / 2));
352
+ if (currentLabelDoms$().length == 2) {
353
+ return doLabelsIntersect();
371
354
  }
372
- const storedLabelSize = storedLabelSize$();
373
- const firstLabelSize = (storedLabelSize == null ? void 0 : storedLabelSize[0]) ?? 0;
374
- const secondLabelSize = (storedLabelSize == null ? void 0 : storedLabelSize[1]) ?? 0;
375
- const biggestLabelSize = Math.max(firstLabelSize, secondLabelSize);
376
- const intersectionLimit = biggestLabelSize !== 50 ? biggestLabelSize * 2 + 2 : 15;
377
- return values.length == 2 && values[1] - secondLabelSize - values[0] + firstLabelSize < intersectionLimit;
355
+ return false;
378
356
  });
357
+ function doLabelsIntersect() {
358
+ const handleOptions = handleDisplayOptions$();
359
+ const activePosition = activePosition$();
360
+ const labelPosition1 = labelPosition(handleOptions[0][activePosition], currentLabelSizeByIndex(0));
361
+ const labelPosition2 = labelPosition(handleOptions[1][activePosition], currentLabelSizeByIndex(1));
362
+ const labelSize1 = currentLabelSizeByIndex(0);
363
+ const labelSize2 = currentLabelSizeByIndex(1);
364
+ if (labelSize1 === 100 || labelSize2 === 100) {
365
+ return false;
366
+ }
367
+ const labelStart1 = labelPosition1 - labelSize1;
368
+ const labelEnd1 = labelPosition1 + labelSize1;
369
+ const labelStart2 = labelPosition2 - labelSize2;
370
+ const labelEnd2 = labelPosition2 + labelSize2;
371
+ return !(labelEnd1 < labelStart2 || labelStart1 > labelEnd2);
372
+ }
379
373
  const interactive$ = tansu.computed(() => !disabled$() && !readonly$());
380
374
  const combinedLabelPositionLeft$ = tansu.computed(() => {
381
375
  const sortedValuesPercent = sortedValuesPercent$();
382
- const combinedPosition = (sortedValuesPercent[0] + sortedValuesPercent[1]) / 2;
376
+ const combinedLabelSize = combinedLabelSize$();
377
+ let combinedPosition = (sortedValuesPercent[0] + sortedValuesPercent[1]) / 2;
378
+ combinedPosition = labelPosition(combinedPosition, combinedLabelSize);
383
379
  return vertical$() || sortedValuesPercent.length != 2 ? 0 : rtl$() ? 100 - combinedPosition : combinedPosition;
384
380
  });
385
381
  const combinedLabelPositionTop$ = tansu.computed(() => {
@@ -396,6 +392,7 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
396
392
  };
397
393
  });
398
394
  });
395
+ const labelPosition = (initialPosition, labelSize) => utils_writables.clamp(initialPosition, 100 - labelSize / 2, labelSize / 2);
399
396
  const progressDisplayOptions$ = tansu.computed(() => {
400
397
  const vertical = vertical$(), sortedValuesPercent = sortedValuesPercent$(), rtl = rtl$();
401
398
  if (sortedValuesPercent.length === 1) {
@@ -772,7 +769,7 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
772
769
  minLabelDirective: utils_directive.mergeDirectives(minLabelDomDirective, minLabelDirective),
773
770
  maxLabelDirective: utils_directive.mergeDirectives(maxLabelDomDirective, maxLabelDirective),
774
771
  combinedHandleLabelDisplayDirective: utils_directive.mergeDirectives(
775
- combinedLabelDomDirective,
772
+ resizeCombineLabelDirective,
776
773
  utils_directive.createAttributesDirective(() => ({
777
774
  classNames: {
778
775
  "au-slider-label-vertical": vertical$,
@@ -791,6 +788,7 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
791
788
  ),
792
789
  handleLabelDisplayDirective: utils_directive.mergeDirectives(
793
790
  handleLabelDirective,
791
+ resizeLabelsDirective,
794
792
  utils_directive.createAttributesDirective((labelDisplayContext$) => ({
795
793
  classNames: {
796
794
  "au-slider-label-vertical": vertical$,
@@ -799,8 +797,13 @@ const createSlider = utils_widget.createWidgetFactory("slider", (config) => {
799
797
  "au-slider-label-now": horizontal$
800
798
  },
801
799
  styles: {
802
- left: tansu.computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].left)),
803
- top: tansu.computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].top))
800
+ left: tansu.computed(() => {
801
+ const handleIndex = labelDisplayContext$().index;
802
+ const leftPosition = handleDisplayOptions$()[handleIndex].left;
803
+ return leftPosition === null ? "" : percent(labelPosition(leftPosition, currentLabelSizeByIndex(handleIndex)));
804
+ }),
805
+ top: tansu.computed(() => percent(handleDisplayOptions$()[labelDisplayContext$().index].top)),
806
+ opacity: tansu.computed(() => combinedLabelDisplay$() ? "0" : "1")
804
807
  },
805
808
  attributes: {
806
809
  "aria-hidden": tansu.readable("true")