@vonage/vivid 4.3.0 → 4.4.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.
Files changed (44) hide show
  1. package/custom-elements.json +392 -41
  2. package/index.cjs +1 -0
  3. package/index.js +1 -1
  4. package/lib/dialog/dialog.d.ts +1 -0
  5. package/lib/empty-state/definition.d.ts +1 -0
  6. package/lib/empty-state/empty-state.d.ts +5 -0
  7. package/lib/enums.d.ts +4 -0
  8. package/lib/popup/popup.d.ts +5 -0
  9. package/lib/range-slider/range-slider.d.ts +2 -0
  10. package/lib/slider/slider.d.ts +5 -0
  11. package/lib/slider/slider.template.d.ts +2 -2
  12. package/package.json +1 -1
  13. package/shared/definition.cjs +1 -1
  14. package/shared/definition.js +1 -1
  15. package/shared/definition21.cjs +67 -30
  16. package/shared/definition21.js +67 -30
  17. package/shared/definition23.cjs +18 -3
  18. package/shared/definition23.js +19 -4
  19. package/shared/definition25.cjs +1 -1
  20. package/shared/definition25.js +1 -1
  21. package/shared/definition30.cjs +1 -1
  22. package/shared/definition30.js +1 -1
  23. package/shared/definition42.cjs +123 -18
  24. package/shared/definition42.js +123 -18
  25. package/shared/definition46.cjs +96 -11
  26. package/shared/definition46.js +97 -12
  27. package/shared/definition56.cjs +1 -1
  28. package/shared/definition56.js +1 -1
  29. package/shared/definition63.cjs +155 -2
  30. package/shared/definition63.js +156 -4
  31. package/shared/enums.cjs +6 -0
  32. package/shared/enums.js +6 -1
  33. package/shared/patterns/anchored.d.ts +4 -4
  34. package/shared/presentationDate.cjs +1 -1
  35. package/shared/presentationDate.js +1 -1
  36. package/shared/slider.template.cjs +27 -4
  37. package/shared/slider.template.js +27 -4
  38. package/styles/core/all.css +1 -1
  39. package/styles/core/theme.css +1 -1
  40. package/styles/core/typography.css +1 -1
  41. package/styles/tokens/theme-dark.css +4 -4
  42. package/styles/tokens/theme-light.css +4 -4
  43. package/styles/tokens/vivid-2-compat.css +1 -1
  44. package/vivid.api.json +211 -0
@@ -1,4 +1,5 @@
1
1
  import { F as FoundationElement, a as attr, o as observable, n as nullableNumberConverter, h as html, r as registerFactory } from './index.js';
2
+ import { P as Popup, a as PlacementStrategy, p as popupRegistries } from './definition63.js';
2
3
  import { e as keyHome, f as keyEnd, d as keyArrowUp, k as keyArrowLeft, c as keyArrowDown, a as keyArrowRight } from './key-codes2.js';
3
4
  import './affix.js';
4
5
  import { f as formElements } from './index2.js';
@@ -11,7 +12,7 @@ import { r as ref } from './ref.js';
11
12
  import { w as when } from './when.js';
12
13
  import { c as classNames } from './class-names.js';
13
14
 
14
- const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline-color:transparent;touch-action:none}:focus-visible .thumb-container,.thumb-container:focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}.control{--_track-start-inset-inline-start: auto;--_track-start-inset-block-start: auto}:host([markers]) .control.horizontal .track-start,:host([markers]) .control.vertical .track-start{--_track-start-inset-inline-start: auto;--_track-start-inset-block-start: auto}";
15
+ const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline:none;touch-action:none}.thumb-container.focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}.popup{pointer-events:none}.tooltip{width:auto;padding:8px 12px;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold)}.control{--_track-start-inset-inline-start: auto;--_track-start-inset-block-start: auto}:host([markers]) .control.horizontal .track-start,:host([markers]) .control.vertical .track-start{--_track-start-inset-inline-start: auto;--_track-start-inset-block-start: auto}";
15
16
 
16
17
  class _RangeSlider extends FoundationElement {
17
18
  }
@@ -59,7 +60,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
59
60
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
60
61
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
61
62
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
62
- var _isInternalValueUpdate, _RangeSlider_instances, updateValues_fn, applyStep_fn, updateFormValue_fn, thumbs_get, thumbConstraints_get, _draggingThumb, updateThumbPositions_fn, thumbTrackEndOffset_fn, calculateValueFromMouseEvent_fn, roundToNearestStep_fn, registerThumbListeners_fn, unregisterThumbListeners_fn, _onThumbMousedown, _onThumbKeydown, registerDragHandlers_fn, unregisterDragListeners_fn, _onDragMove, _onDragEnd;
63
+ var _isInternalValueUpdate, _RangeSlider_instances, updateValues_fn, applyStep_fn, updateFormValue_fn, thumbs_get, thumbConstraints_get, getThumbId_fn, getThumbIdFromEvent_fn, updateThumbPositions_fn, thumbTrackEndOffset_fn, calculateValueFromMouseEvent_fn, roundToNearestStep_fn, _isNonVisibleFocus, focusThumbNonVisibly_fn, registerThumbListeners_fn, unregisterThumbListeners_fn, _onThumbFocus, _onThumbBlur, _onMouseOver, _onMouseOut, _onThumbMousedown, _onThumbKeydown, registerDragHandlers_fn, unregisterDragListeners_fn, _onDragMove, _onDragEnd;
63
64
  const Direction = {
64
65
  Increment: 1,
65
66
  Decrement: -1
@@ -79,6 +80,7 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
79
80
  this.ariaStartLabel = null;
80
81
  this.ariaEndLabel = null;
81
82
  this.markers = false;
83
+ this.pin = false;
82
84
  this.valueTextFormatter = (value) => parseFloat(value).toLocaleString(this.locale.lang);
83
85
  // --- Thumbs ---
84
86
  /**
@@ -93,10 +95,27 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
93
95
  * @internal
94
96
  */
95
97
  this._endThumbEl = null;
96
- __privateAdd(this, _draggingThumb, false);
98
+ this._draggingThumb = false;
99
+ this._visiblyFocusedThumb = null;
100
+ this._hoveredThumb = null;
97
101
  this._startThumbCss = "";
98
102
  this._endThumbCss = "";
99
103
  this._selectedRangeCss = "";
104
+ __privateAdd(this, _isNonVisibleFocus, false);
105
+ __privateAdd(this, _onThumbFocus, (e) => {
106
+ if (!__privateGet(this, _isNonVisibleFocus)) {
107
+ this._visiblyFocusedThumb = __privateMethod(this, _RangeSlider_instances, getThumbIdFromEvent_fn).call(this, e);
108
+ }
109
+ });
110
+ __privateAdd(this, _onThumbBlur, () => {
111
+ this._visiblyFocusedThumb = null;
112
+ });
113
+ __privateAdd(this, _onMouseOver, (e) => {
114
+ this._hoveredThumb = __privateMethod(this, _RangeSlider_instances, getThumbIdFromEvent_fn).call(this, e);
115
+ });
116
+ __privateAdd(this, _onMouseOut, () => {
117
+ this._hoveredThumb = null;
118
+ });
100
119
  __privateAdd(this, _onThumbMousedown, (event) => {
101
120
  if (this.disabled || event.defaultPrevented) {
102
121
  return;
@@ -105,12 +124,13 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
105
124
  if (target === this._endThumbEl && this.startAsNumber === this.max && this.endAsNumber === this.max) {
106
125
  target = this._startThumbEl;
107
126
  }
108
- target.focus();
109
- __privateSet(this, _draggingThumb, target === this._startThumbEl ? "start" : "end");
127
+ __privateMethod(this, _RangeSlider_instances, focusThumbNonVisibly_fn).call(this, target);
128
+ this._draggingThumb = __privateMethod(this, _RangeSlider_instances, getThumbId_fn).call(this, target);
110
129
  __privateMethod(this, _RangeSlider_instances, registerDragHandlers_fn).call(this);
111
130
  });
112
131
  __privateAdd(this, _onThumbKeydown, (e) => {
113
- const thumb = e.target === this._startThumbEl ? "start" : "end";
132
+ const thumb = __privateMethod(this, _RangeSlider_instances, getThumbIdFromEvent_fn).call(this, e);
133
+ this._visiblyFocusedThumb = thumb;
114
134
  if (e.key === keyHome) {
115
135
  e.preventDefault();
116
136
  __privateMethod(this, _RangeSlider_instances, updateValues_fn).call(this, { [thumb]: `${__privateGet(this, _RangeSlider_instances, thumbConstraints_get)[thumb].min}` });
@@ -133,17 +153,17 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
133
153
  }
134
154
  });
135
155
  __privateAdd(this, _onDragMove, (e) => {
136
- if (this.disabled || e.defaultPrevented || !__privateGet(this, _draggingThumb)) {
156
+ if (this.disabled || e.defaultPrevented || !this._draggingThumb) {
137
157
  return;
138
158
  }
139
159
  const sourceEvent = "TouchEvent" in window && e instanceof TouchEvent ? e.touches[0] : e;
140
160
  const value = __privateMethod(this, _RangeSlider_instances, calculateValueFromMouseEvent_fn).call(this, sourceEvent);
141
161
  __privateMethod(this, _RangeSlider_instances, updateValues_fn).call(this, {
142
- [__privateGet(this, _draggingThumb)]: `${__privateMethod(this, _RangeSlider_instances, roundToNearestStep_fn).call(this, __privateGet(this, _draggingThumb), value)}`
162
+ [this._draggingThumb]: `${__privateMethod(this, _RangeSlider_instances, roundToNearestStep_fn).call(this, this._draggingThumb, value)}`
143
163
  });
144
164
  });
145
165
  __privateAdd(this, _onDragEnd, () => {
146
- __privateSet(this, _draggingThumb, false);
166
+ this._draggingThumb = false;
147
167
  __privateMethod(this, _RangeSlider_instances, unregisterDragListeners_fn).call(this);
148
168
  });
149
169
  }
@@ -248,6 +268,12 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
248
268
  });
249
269
  super.formResetCallback();
250
270
  }
271
+ /**
272
+ * @internal
273
+ */
274
+ _isThumbPopupOpen(thumb) {
275
+ return this._visiblyFocusedThumb === thumb || this._hoveredThumb === thumb || this._draggingThumb === thumb;
276
+ }
251
277
  // --- Lifecycle ---
252
278
  connectedCallback() {
253
279
  super.connectedCallback();
@@ -267,7 +293,7 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
267
293
  * @internal
268
294
  */
269
295
  _onMouseDown(e) {
270
- if (this.disabled || __privateGet(this, _draggingThumb)) {
296
+ if (this.disabled || this._draggingThumb) {
271
297
  return;
272
298
  }
273
299
  const value = __privateMethod(this, _RangeSlider_instances, calculateValueFromMouseEvent_fn).call(this, e);
@@ -277,8 +303,8 @@ let RangeSlider = class extends FormAssociatedRangeSlider {
277
303
  __privateMethod(this, _RangeSlider_instances, updateValues_fn).call(this, {
278
304
  [thumb]: `${__privateMethod(this, _RangeSlider_instances, roundToNearestStep_fn).call(this, thumb, value)}`
279
305
  });
280
- __privateSet(this, _draggingThumb, thumb);
281
- __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].focus();
306
+ this._draggingThumb = thumb;
307
+ __privateMethod(this, _RangeSlider_instances, focusThumbNonVisibly_fn).call(this, __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb]);
282
308
  __privateMethod(this, _RangeSlider_instances, registerDragHandlers_fn).call(this);
283
309
  }
284
310
  };
@@ -342,12 +368,17 @@ thumbConstraints_get = function() {
342
368
  end: { min: this.startAsNumber, max: this.max }
343
369
  };
344
370
  };
345
- _draggingThumb = new WeakMap();
371
+ getThumbId_fn = function(thumb) {
372
+ return thumb === this._startThumbEl ? "start" : "end";
373
+ };
374
+ getThumbIdFromEvent_fn = function(e) {
375
+ return __privateMethod(this, _RangeSlider_instances, getThumbId_fn).call(this, e.target);
376
+ };
346
377
  updateThumbPositions_fn = function() {
347
378
  const startOffsetPct = __privateMethod(this, _RangeSlider_instances, thumbTrackEndOffset_fn).call(this, this.startAsNumber);
348
379
  const endOffsetPct = __privateMethod(this, _RangeSlider_instances, thumbTrackEndOffset_fn).call(this, this.endAsNumber);
349
380
  const [dirProp, dimProp] = this.orientation === Orientation.horizontal ? ["right", "width"] : ["bottom", "height"];
350
- const transition = `transition: ${__privateGet(this, _draggingThumb) ? "none" : "all 0.2s ease"};`;
381
+ const transition = `transition: ${this._draggingThumb ? "none" : "all 0.2s ease"};`;
351
382
  this._startThumbCss = `${dirProp}: ${startOffsetPct}%; ${transition}`;
352
383
  this._endThumbCss = `${dirProp}: ${endOffsetPct}%; ${transition}`;
353
384
  this._selectedRangeCss = `${dirProp}: ${endOffsetPct}%; ${dimProp}: ${startOffsetPct - endOffsetPct}%; ${transition}`;
@@ -375,6 +406,12 @@ roundToNearestStep_fn = function(thumb, value) {
375
406
  roundToStepValue(value - this.min, this.step) + this.min
376
407
  );
377
408
  };
409
+ _isNonVisibleFocus = new WeakMap();
410
+ focusThumbNonVisibly_fn = function(thumb) {
411
+ __privateSet(this, _isNonVisibleFocus, true);
412
+ thumb.focus();
413
+ __privateSet(this, _isNonVisibleFocus, false);
414
+ };
378
415
  // --- Event handling ---
379
416
  registerThumbListeners_fn = function() {
380
417
  for (const thumb of ["start", "end"]) {
@@ -389,6 +426,14 @@ registerThumbListeners_fn = function() {
389
426
  __privateGet(this, _onThumbMousedown),
390
427
  { passive: true }
391
428
  );
429
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].addEventListener("mouseover", __privateGet(this, _onMouseOver), {
430
+ passive: true
431
+ });
432
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].addEventListener("mouseout", __privateGet(this, _onMouseOut), {
433
+ passive: true
434
+ });
435
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].addEventListener("focus", __privateGet(this, _onThumbFocus));
436
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].addEventListener("blur", __privateGet(this, _onThumbBlur));
392
437
  }
393
438
  };
394
439
  unregisterThumbListeners_fn = function() {
@@ -402,8 +447,16 @@ unregisterThumbListeners_fn = function() {
402
447
  "touchstart",
403
448
  __privateGet(this, _onThumbMousedown)
404
449
  );
450
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].removeEventListener("mouseover", __privateGet(this, _onMouseOver));
451
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].removeEventListener("mouseout", __privateGet(this, _onMouseOut));
452
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].removeEventListener("focus", __privateGet(this, _onThumbFocus));
453
+ __privateGet(this, _RangeSlider_instances, thumbs_get)[thumb].removeEventListener("blur", __privateGet(this, _onThumbBlur));
405
454
  }
406
455
  };
456
+ _onThumbFocus = new WeakMap();
457
+ _onThumbBlur = new WeakMap();
458
+ _onMouseOver = new WeakMap();
459
+ _onMouseOut = new WeakMap();
407
460
  _onThumbMousedown = new WeakMap();
408
461
  _onThumbKeydown = new WeakMap();
409
462
  registerDragHandlers_fn = function() {
@@ -464,9 +517,21 @@ __decorateClass([
464
517
  __decorateClass([
465
518
  attr
466
519
  ], RangeSlider.prototype, "connotation", 2);
520
+ __decorateClass([
521
+ attr({ mode: "boolean" })
522
+ ], RangeSlider.prototype, "pin", 2);
467
523
  __decorateClass([
468
524
  observable
469
525
  ], RangeSlider.prototype, "valueTextFormatter", 2);
526
+ __decorateClass([
527
+ observable
528
+ ], RangeSlider.prototype, "_draggingThumb", 2);
529
+ __decorateClass([
530
+ observable
531
+ ], RangeSlider.prototype, "_visiblyFocusedThumb", 2);
532
+ __decorateClass([
533
+ observable
534
+ ], RangeSlider.prototype, "_hoveredThumb", 2);
470
535
  __decorateClass([
471
536
  observable
472
537
  ], RangeSlider.prototype, "_startThumbCss", 2);
@@ -486,7 +551,12 @@ const getClasses = ({ disabled, connotation }) => classNames(
486
551
  ["disabled", Boolean(disabled)],
487
552
  [`connotation-${connotation}`, Boolean(connotation)]
488
553
  );
489
- const RangeSliderTemplate = () => {
554
+ const getThumbClassesFor = (thumb) => ({ _visiblyFocusedThumb }) => classNames("thumb-container", [
555
+ "focus-visible",
556
+ _visiblyFocusedThumb === thumb
557
+ ]);
558
+ const RangeSliderTemplate = (context) => {
559
+ const popupTag = context.tagFor(Popup);
490
560
  return html` <template
491
561
  @mousedown="${(x, c) => x._onMouseDown(c.event)}"
492
562
  >
@@ -504,7 +574,7 @@ const RangeSliderTemplate = () => {
504
574
  </div>
505
575
  <div
506
576
  ${ref("_startThumbEl")}
507
- class="thumb-container"
577
+ class="${getThumbClassesFor("start")}"
508
578
  style="${(x) => x._startThumbCss}"
509
579
  role="slider"
510
580
  tabindex="${(x) => x.disabled ? null : 0}"
@@ -516,9 +586,25 @@ const RangeSliderTemplate = () => {
516
586
  aria-disabled="${(x) => x.disabled}"
517
587
  aria-orientation="${(x) => x.orientation}"
518
588
  ></div>
589
+ ${when(
590
+ (x) => x.pin,
591
+ html`<${popupTag}
592
+ class="popup"
593
+ arrow
594
+ alternate
595
+ :anchor="${(x) => x._startThumbEl}"
596
+ :open=${(x) => x._isThumbPopupOpen("start")}
597
+ :placementStrategy=${(x) => x.orientation === Orientation.horizontal ? PlacementStrategy.AutoPlacementHorizontal : PlacementStrategy.AutoPlacementVertical}
598
+ animation-frame
599
+ exportparts="vvd-theme-alternate"
600
+ aria-hidden="true"
601
+ >
602
+ <div class="tooltip">${(x) => x.valueTextFormatter(x.start)}</div>
603
+ </${popupTag}>`
604
+ )}
519
605
  <div
520
606
  ${ref("_endThumbEl")}
521
- class="thumb-container"
607
+ class="${getThumbClassesFor("end")}"
522
608
  style="${(x) => x._endThumbCss}"
523
609
  role="slider"
524
610
  tabindex="${(x) => x.disabled ? null : 0}"
@@ -530,6 +616,22 @@ const RangeSliderTemplate = () => {
530
616
  aria-disabled="${(x) => x.disabled}"
531
617
  aria-orientation="${(x) => x.orientation}"
532
618
  ></div>
619
+ ${when(
620
+ (x) => x.pin,
621
+ html`<${popupTag}
622
+ class="popup"
623
+ arrow
624
+ alternate
625
+ :anchor="${(x) => x._endThumbEl}"
626
+ :open=${(x) => x._isThumbPopupOpen("end")}
627
+ :placementStrategy=${(x) => x.orientation === Orientation.horizontal ? PlacementStrategy.AutoPlacementHorizontal : PlacementStrategy.AutoPlacementVertical}
628
+ animation-frame
629
+ exportparts="vvd-theme-alternate"
630
+ aria-hidden="true"
631
+ >
632
+ <div class="tooltip">${(x) => x.valueTextFormatter(x.end)}</div>
633
+ </${popupTag}>`
634
+ )}
533
635
  </div>
534
636
  </div>
535
637
  </template>`;
@@ -543,7 +645,10 @@ const rangeSliderDefinition = RangeSlider.compose({
543
645
  delegatesFocus: true
544
646
  }
545
647
  });
546
- const rangeSliderRegistries = [rangeSliderDefinition()];
648
+ const rangeSliderRegistries = [
649
+ ...popupRegistries,
650
+ rangeSliderDefinition()
651
+ ];
547
652
  const registerRangeSlider = registerFactory(rangeSliderRegistries);
548
653
 
549
654
  export { rangeSliderRegistries as a, registerRangeSlider as b, rangeSliderDefinition as r };
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const index = require('./index.cjs');
4
+ const definition = require('./definition63.cjs');
4
5
  require('./affix.cjs');
5
6
  require('./index2.cjs');
6
7
  const localized = require('./localized.cjs');
@@ -484,24 +485,70 @@ index.__decorate([
484
485
  index.attr
485
486
  ], Slider$1.prototype, "mode", void 0);
486
487
 
487
- const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline-color:transparent;touch-action:none}:focus-visible .thumb-container,.thumb-container:focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}";
488
+ const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline:none;touch-action:none}.thumb-container.focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}.popup{pointer-events:none}.tooltip{width:auto;padding:8px 12px;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold)}";
488
489
 
489
490
  var __defProp = Object.defineProperty;
491
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
490
492
  var __decorateClass = (decorators, target, key, kind) => {
491
- var result = void 0 ;
493
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
492
494
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
493
495
  if (decorator = decorators[i])
494
- result = (decorator(target, key, result) ) || result;
495
- if (result) __defProp(target, key, result);
496
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
497
+ if (kind && result) __defProp(target, key, result);
496
498
  return result;
497
499
  };
498
500
  class Slider extends Slider$1 {
499
501
  constructor() {
500
- super(...arguments);
502
+ super();
501
503
  this.ariaLabel = null;
502
504
  this.ariaValuetext = null;
503
505
  this.markers = false;
506
+ this.pin = false;
504
507
  this.valueTextFormatter = (value) => parseFloat(value).toLocaleString(this.locale.lang);
508
+ this._focusVisible = false;
509
+ this._hoveringOnThumb = false;
510
+ this.#isNonVisibleFocus = false;
511
+ /**
512
+ * @internal
513
+ */
514
+ this._onFocusIn = () => {
515
+ if (!this.#isNonVisibleFocus) {
516
+ this._focusVisible = true;
517
+ }
518
+ };
519
+ /**
520
+ * @internal
521
+ */
522
+ this._onFocusOut = () => {
523
+ this._focusVisible = false;
524
+ };
525
+ this.#onMouseOver = () => {
526
+ this._hoveringOnThumb = true;
527
+ };
528
+ this.#onMouseOut = () => {
529
+ this._hoveringOnThumb = false;
530
+ };
531
+ const fastSliderInternals = this;
532
+ const originalHandleMouseDown = fastSliderInternals.handleMouseDown;
533
+ fastSliderInternals.handleMouseDown = (e) => {
534
+ this.#isNonVisibleFocus = true;
535
+ originalHandleMouseDown(e);
536
+ this.#isNonVisibleFocus = false;
537
+ if (e && !this.disabled && !this.readOnly) {
538
+ this.isDragging = true;
539
+ }
540
+ };
541
+ const originalHandleThumbMouseDown = fastSliderInternals.handleThumbMouseDown;
542
+ fastSliderInternals.handleThumbMouseDown = (e) => {
543
+ this.#isNonVisibleFocus = true;
544
+ originalHandleThumbMouseDown(e);
545
+ this.#isNonVisibleFocus = false;
546
+ };
547
+ const originalKeypressHandler = fastSliderInternals.keypressHandler;
548
+ fastSliderInternals.keypressHandler = (e) => {
549
+ this._focusVisible = true;
550
+ originalKeypressHandler(e);
551
+ };
505
552
  }
506
553
  /**
507
554
  * TO BE REMOVED WHEN UPGRADING TO FAST-FOUNDATION 3
@@ -523,24 +570,62 @@ class Slider extends Slider$1 {
523
570
  super.valueChanged(previous, value);
524
571
  }
525
572
  }
573
+ get _isThumbPopupOpen() {
574
+ return this._focusVisible || this._hoveringOnThumb || this.isDragging;
575
+ }
576
+ #isNonVisibleFocus;
577
+ connectedCallback() {
578
+ super.connectedCallback();
579
+ this.#registerThumbListeners();
580
+ }
581
+ disconnectedCallback() {
582
+ super.disconnectedCallback();
583
+ this.#unregisterThumbListeners();
584
+ }
585
+ #registerThumbListeners() {
586
+ this.thumb.addEventListener("mouseover", this.#onMouseOver, {
587
+ passive: true
588
+ });
589
+ this.thumb.addEventListener("mouseout", this.#onMouseOut, {
590
+ passive: true
591
+ });
592
+ }
593
+ #unregisterThumbListeners() {
594
+ this.thumb.removeEventListener("mouseover", this.#onMouseOver);
595
+ this.thumb.removeEventListener("mouseout", this.#onMouseOut);
596
+ }
597
+ #onMouseOver;
598
+ #onMouseOut;
526
599
  }
527
600
  __decorateClass([
528
601
  index.attr({ attribute: "aria-label" })
529
- ], Slider.prototype, "ariaLabel");
602
+ ], Slider.prototype, "ariaLabel", 2);
530
603
  __decorateClass([
531
604
  index.attr({ attribute: "aria-valuetext" })
532
- ], Slider.prototype, "ariaValuetext");
605
+ ], Slider.prototype, "ariaValuetext", 2);
533
606
  __decorateClass([
534
607
  index.attr({
535
608
  mode: "boolean"
536
609
  })
537
- ], Slider.prototype, "markers");
610
+ ], Slider.prototype, "markers", 2);
611
+ __decorateClass([
612
+ index.attr({ mode: "boolean" })
613
+ ], Slider.prototype, "pin", 2);
538
614
  __decorateClass([
539
615
  index.attr
540
- ], Slider.prototype, "connotation");
616
+ ], Slider.prototype, "connotation", 2);
541
617
  __decorateClass([
542
618
  index.observable
543
- ], Slider.prototype, "valueTextFormatter");
619
+ ], Slider.prototype, "valueTextFormatter", 2);
620
+ __decorateClass([
621
+ index.observable
622
+ ], Slider.prototype, "_focusVisible", 2);
623
+ __decorateClass([
624
+ index.observable
625
+ ], Slider.prototype, "_hoveringOnThumb", 2);
626
+ __decorateClass([
627
+ index.volatile
628
+ ], Slider.prototype, "_isThumbPopupOpen", 1);
544
629
  applyMixins.applyMixins(Slider, localized.Localized);
545
630
 
546
631
  const sliderDefinition = Slider.compose({
@@ -551,7 +636,7 @@ const sliderDefinition = Slider.compose({
551
636
  delegatesFocus: true
552
637
  }
553
638
  });
554
- const sliderRegistries = [sliderDefinition()];
639
+ const sliderRegistries = [...definition.popupRegistries, sliderDefinition()];
555
640
  const registerSlider = index.registerFactory(sliderRegistries);
556
641
 
557
642
  exports.Slider = Slider;