@vonage/vivid 4.29.0 → 4.30.1

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/custom-elements.json +366 -6
  2. package/lib/accordion-item/accordion-item.d.ts +3 -1
  3. package/lib/badge/badge.d.ts +1 -1
  4. package/lib/date-picker/date-picker.d.ts +2 -2
  5. package/lib/date-time-picker/date-time-picker.d.ts +3 -3
  6. package/lib/selectable-box/selectable-box.d.ts +2 -0
  7. package/lib/split-button/split-button.d.ts +1 -1
  8. package/lib/tag/tag.d.ts +1 -1
  9. package/lib/time-picker/time-picker.d.ts +2 -2
  10. package/package.json +1 -1
  11. package/shared/calendar-picker.template.cjs +6 -5
  12. package/shared/calendar-picker.template.js +6 -5
  13. package/shared/definition.cjs +11 -2
  14. package/shared/definition.js +11 -2
  15. package/shared/definition23.cjs +1 -1
  16. package/shared/definition23.js +1 -1
  17. package/shared/definition28.cjs +1 -2
  18. package/shared/definition28.js +2 -2
  19. package/shared/definition44.cjs +10 -22
  20. package/shared/definition44.js +10 -22
  21. package/shared/definition47.cjs +11 -5
  22. package/shared/definition47.js +11 -5
  23. package/shared/definition50.cjs +1 -1
  24. package/shared/definition50.js +1 -1
  25. package/shared/definition56.cjs +5 -4
  26. package/shared/definition56.js +5 -4
  27. package/shared/definition58.cjs +10 -29
  28. package/shared/definition58.js +12 -31
  29. package/shared/definition67.cjs +27 -16
  30. package/shared/definition67.js +27 -16
  31. package/shared/picker-field/mixins/single-date-picker.d.ts +2 -2
  32. package/shared/picker-field/mixins/single-value-picker.d.ts +1 -1
  33. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  34. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +2 -2
  35. package/shared/single-date-picker.cjs +1 -1
  36. package/shared/single-date-picker.js +1 -1
  37. package/shared/single-value-picker.cjs +22 -21
  38. package/shared/single-value-picker.js +22 -21
  39. package/shared/time-selection-picker.template.cjs +4 -3
  40. package/shared/time-selection-picker.template.js +4 -3
  41. package/shared/vivid-element.cjs +2 -1
  42. package/shared/vivid-element.js +2 -2
  43. package/styles/core/all.css +1 -1
  44. package/styles/core/theme.css +1 -1
  45. package/styles/core/typography.css +1 -1
  46. package/styles/tokens/theme-dark.css +4 -4
  47. package/styles/tokens/theme-light.css +4 -4
  48. package/styles/tokens/vivid-2-compat.css +1 -1
  49. package/vivid.api.json +93 -4
@@ -49,8 +49,9 @@ function getOppositeAxis(axis) {
49
49
  function getAxisLength(axis) {
50
50
  return axis === 'y' ? 'height' : 'width';
51
51
  }
52
+ const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
52
53
  function getSideAxis(placement) {
53
- return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';
54
+ return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
54
55
  }
55
56
  function getAlignmentAxis(placement) {
56
57
  return getOppositeAxis(getSideAxis(placement));
@@ -75,19 +76,19 @@ function getExpandedPlacements(placement) {
75
76
  function getOppositeAlignmentPlacement(placement) {
76
77
  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
77
78
  }
79
+ const lrPlacement = ['left', 'right'];
80
+ const rlPlacement = ['right', 'left'];
81
+ const tbPlacement = ['top', 'bottom'];
82
+ const btPlacement = ['bottom', 'top'];
78
83
  function getSideList(side, isStart, rtl) {
79
- const lr = ['left', 'right'];
80
- const rl = ['right', 'left'];
81
- const tb = ['top', 'bottom'];
82
- const bt = ['bottom', 'top'];
83
84
  switch (side) {
84
85
  case 'top':
85
86
  case 'bottom':
86
- if (rtl) return isStart ? rl : lr;
87
- return isStart ? lr : rl;
87
+ if (rtl) return isStart ? rlPlacement : lrPlacement;
88
+ return isStart ? lrPlacement : rlPlacement;
88
89
  case 'left':
89
90
  case 'right':
90
- return isStart ? tb : bt;
91
+ return isStart ? tbPlacement : btPlacement;
91
92
  default:
92
93
  return [];
93
94
  }
@@ -871,6 +872,8 @@ const inline$1 = function (options) {
871
872
  };
872
873
  };
873
874
 
875
+ const originSides = /*#__PURE__*/new Set(['left', 'top']);
876
+
874
877
  // For type backwards-compatibility, the `OffsetOptions` type was also
875
878
  // Derivable.
876
879
 
@@ -884,7 +887,7 @@ async function convertValueToCoords(state, options) {
884
887
  const side = getSide(placement);
885
888
  const alignment = getAlignment(placement);
886
889
  const isVertical = getSideAxis(placement) === 'y';
887
- const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
890
+ const mainAxisMulti = originSides.has(side) ? -1 : 1;
888
891
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
889
892
  const rawValue = evaluate(options, state);
890
893
 
@@ -1083,6 +1086,7 @@ function isShadowRoot(value) {
1083
1086
  }
1084
1087
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1085
1088
  }
1089
+ const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
1086
1090
  function isOverflowElement(element) {
1087
1091
  const {
1088
1092
  overflow,
@@ -1090,27 +1094,32 @@ function isOverflowElement(element) {
1090
1094
  overflowY,
1091
1095
  display
1092
1096
  } = getComputedStyle(element);
1093
- return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
1097
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
1094
1098
  }
1099
+ const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
1095
1100
  function isTableElement(element) {
1096
- return ['table', 'td', 'th'].includes(getNodeName(element));
1101
+ return tableElements.has(getNodeName(element));
1097
1102
  }
1103
+ const topLayerSelectors = [':popover-open', ':modal'];
1098
1104
  function isTopLayer(element) {
1099
- return [':popover-open', ':modal'].some(selector => {
1105
+ return topLayerSelectors.some(selector => {
1100
1106
  try {
1101
1107
  return element.matches(selector);
1102
- } catch (e) {
1108
+ } catch (_e) {
1103
1109
  return false;
1104
1110
  }
1105
1111
  });
1106
1112
  }
1113
+ const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
1114
+ const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
1115
+ const containValues = ['paint', 'layout', 'strict', 'content'];
1107
1116
  function isContainingBlock(elementOrCss) {
1108
1117
  const webkit = isWebKit();
1109
1118
  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;
1110
1119
 
1111
1120
  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
1112
1121
  // https://drafts.csswg.org/css-transforms-2/#individual-transforms
1113
- return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));
1122
+ return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
1114
1123
  }
1115
1124
  function getContainingBlock(element) {
1116
1125
  let currentNode = getParentNode(element);
@@ -1128,8 +1137,9 @@ function isWebKit() {
1128
1137
  if (typeof CSS === 'undefined' || !CSS.supports) return false;
1129
1138
  return CSS.supports('-webkit-backdrop-filter', 'none');
1130
1139
  }
1140
+ const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
1131
1141
  function isLastTraversableNode(node) {
1132
- return ['html', 'body', '#document'].includes(getNodeName(node));
1142
+ return lastTraversableNodeNames.has(getNodeName(node));
1133
1143
  }
1134
1144
  function getComputedStyle(element) {
1135
1145
  return getWindow(element).getComputedStyle(element);
@@ -1434,6 +1444,7 @@ function getViewportRect(element, strategy) {
1434
1444
  };
1435
1445
  }
1436
1446
 
1447
+ const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
1437
1448
  // Returns the inner client rect, subtracting scrollbars if present.
1438
1449
  function getInnerBoundingClientRect(element, strategy) {
1439
1450
  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
@@ -1498,7 +1509,7 @@ function getClippingElementAncestors(element, cache) {
1498
1509
  if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
1499
1510
  currentContainingBlockComputedStyle = null;
1500
1511
  }
1501
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1512
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1502
1513
  if (shouldDropCurrentNode) {
1503
1514
  // Drop non-containing blocks.
1504
1515
  result = result.filter(ancestor => ancestor !== currentNode);
@@ -814,7 +814,7 @@ export declare const SingleDatePickerMixin: <T_6 extends AbstractConstructor<{
814
814
  _isInternalValueUpdate: boolean;
815
815
  valueChanged(previous: string, next: string): void;
816
816
  _updatePresentationValue(): void;
817
- _updateValueDueToUserInteraction(newValue: string): void;
817
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
818
818
  _onTextFieldChange(): void;
819
819
  _onTextFieldInput(event: Event): void;
820
820
  _isPresentationValueInvalid(): boolean;
@@ -2391,6 +2391,6 @@ export declare const SingleDatePickerMixin: <T_6 extends AbstractConstructor<{
2391
2391
  _toPresentationValue(value: string): string;
2392
2392
  _parsePresentationValue(presentationValue: string): string;
2393
2393
  _isInternalValueUpdate: boolean;
2394
- _updateValueDueToUserInteraction(newValue: string): void;
2394
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
2395
2395
  _isPresentationValueInvalid(): boolean;
2396
2396
  }) & T_6;
@@ -7,7 +7,7 @@ export declare const SingleValuePicker: <T extends AbstractConstructor<PickerFie
7
7
  _isInternalValueUpdate: boolean;
8
8
  valueChanged(previous: string, next: string): void;
9
9
  _updatePresentationValue(): void;
10
- _updateValueDueToUserInteraction(newValue: string): void;
10
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
11
11
  _onTextFieldChange(): void;
12
12
  _onTextFieldInput(event: Event): void;
13
13
  _isPresentationValueInvalid(): boolean;
@@ -9,7 +9,7 @@ export declare const TimeSelectionPicker: <T_5 extends AbstractConstructor<{
9
9
  _isInternalValueUpdate: boolean;
10
10
  valueChanged(previous: string, next: string): void;
11
11
  _updatePresentationValue(): void;
12
- _updateValueDueToUserInteraction(newValue: string): void;
12
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
13
13
  _onTextFieldChange(): void;
14
14
  _onTextFieldInput(event: Event): void;
15
15
  _isPresentationValueInvalid(): boolean;
@@ -802,7 +802,7 @@ export declare const TimeSelectionPicker: <T_5 extends AbstractConstructor<{
802
802
  _isInternalValueUpdate: boolean;
803
803
  valueChanged: ((previous: string, next: string) => void) & ((_previous: string, _next: string) => void) & ((_previous: string, _next: string) => void);
804
804
  _updatePresentationValue: (() => void) & (() => void);
805
- _updateValueDueToUserInteraction(newValue: string): void;
805
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
806
806
  _onTextFieldChange: (() => void) & (() => void);
807
807
  _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
808
808
  _isPresentationValueInvalid(): boolean;
@@ -29,7 +29,7 @@ export declare const TimeSelectionPickerTemplate: (context: VividElementDefiniti
29
29
  _isInternalValueUpdate: boolean;
30
30
  valueChanged: ((previous: string, next: string) => void) & ((_previous: string, _next: string) => void) & ((_previous: string, _next: string) => void);
31
31
  _updatePresentationValue: (() => void) & (() => void);
32
- _updateValueDueToUserInteraction(newValue: string): void;
32
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
33
33
  _onTextFieldChange: (() => void) & (() => void);
34
34
  _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
35
35
  _isPresentationValueInvalid(): boolean;
@@ -797,7 +797,7 @@ export declare const TimeSelectionPickerTemplate: (context: VividElementDefiniti
797
797
  _isInternalValueUpdate: boolean;
798
798
  valueChanged(previous: string, next: string): void;
799
799
  _updatePresentationValue(): void;
800
- _updateValueDueToUserInteraction(newValue: string): void;
800
+ _updateValueDueToUserInteraction(newValue: string, isIntermediateUpdate: boolean): void;
801
801
  _onTextFieldChange(): void;
802
802
  _onTextFieldInput(event: Event): void;
803
803
  _isPresentationValueInvalid(): boolean;
@@ -15,7 +15,7 @@ const SingleDatePickerMixin = (Base) => {
15
15
  * @internal
16
16
  */
17
17
  _onDateClick(date) {
18
- this._updateValueDueToUserInteraction(this._withUpdatedDate(date));
18
+ this._updateValueDueToUserInteraction(this._withUpdatedDate(date), false);
19
19
  }
20
20
  /**
21
21
  * @internal
@@ -13,7 +13,7 @@ const SingleDatePickerMixin = (Base) => {
13
13
  * @internal
14
14
  */
15
15
  _onDateClick(date) {
16
- this._updateValueDueToUserInteraction(this._withUpdatedDate(date));
16
+ this._updateValueDueToUserInteraction(this._withUpdatedDate(date), false);
17
17
  }
18
18
  /**
19
19
  * @internal
@@ -37,27 +37,34 @@ const SingleValuePicker = (Base) => {
37
37
  /**
38
38
  * @internal
39
39
  */
40
- _updateValueDueToUserInteraction(newValue) {
41
- this.value = newValue;
42
- this.$emit("change");
43
- this.$emit("input");
40
+ _updateValueDueToUserInteraction(newValue, isIntermediateUpdate) {
41
+ if (this.value !== newValue) {
42
+ this._isInternalValueUpdate = true;
43
+ this.value = newValue;
44
+ this._isInternalValueUpdate = false;
45
+ this.$emit("input");
46
+ }
47
+ if (!isIntermediateUpdate) {
48
+ this._updatePresentationValue();
49
+ this.$emit("change");
50
+ }
44
51
  }
45
52
  /**
46
53
  * @internal
47
54
  */
48
55
  _onTextFieldChange() {
49
56
  if (this._presentationValue === "") {
50
- this.value = "";
51
- this.$emit("change");
57
+ this._updateValueDueToUserInteraction("", false);
52
58
  return;
53
59
  }
54
60
  try {
55
- this.value = this._parsePresentationValue(this._presentationValue);
56
- this.$emit("change");
61
+ this._updateValueDueToUserInteraction(
62
+ this._parsePresentationValue(this._presentationValue),
63
+ false
64
+ );
57
65
  } catch (_) {
58
66
  const invalidPresentationValue = this._presentationValue;
59
- this.value = "";
60
- this.$emit("change");
67
+ this._updateValueDueToUserInteraction("", false);
61
68
  this._presentationValue = invalidPresentationValue;
62
69
  return;
63
70
  }
@@ -67,24 +74,18 @@ const SingleValuePicker = (Base) => {
67
74
  */
68
75
  _onTextFieldInput(event) {
69
76
  super._onTextFieldInput(event);
70
- this._isInternalValueUpdate = true;
71
77
  if (this._presentationValue === "") {
72
- this.value = "";
73
- this.$emit("input");
78
+ this._updateValueDueToUserInteraction("", true);
74
79
  return;
75
80
  }
76
81
  try {
77
- const parsedValue = this._parsePresentationValue(
78
- this._presentationValue
82
+ this._updateValueDueToUserInteraction(
83
+ this._parsePresentationValue(this._presentationValue),
84
+ true
79
85
  );
80
- if (this.value !== parsedValue) {
81
- this.value = parsedValue;
82
- this.$emit("input");
83
- }
84
86
  } catch (_) {
85
87
  return;
86
88
  }
87
- this._isInternalValueUpdate = false;
88
89
  }
89
90
  /**
90
91
  * @internal
@@ -104,7 +105,7 @@ const SingleValuePicker = (Base) => {
104
105
  * @internal
105
106
  */
106
107
  _onClearClick() {
107
- this._updateValueDueToUserInteraction("");
108
+ this._updateValueDueToUserInteraction("", false);
108
109
  super._onClearClick();
109
110
  }
110
111
  }
@@ -35,27 +35,34 @@ const SingleValuePicker = (Base) => {
35
35
  /**
36
36
  * @internal
37
37
  */
38
- _updateValueDueToUserInteraction(newValue) {
39
- this.value = newValue;
40
- this.$emit("change");
41
- this.$emit("input");
38
+ _updateValueDueToUserInteraction(newValue, isIntermediateUpdate) {
39
+ if (this.value !== newValue) {
40
+ this._isInternalValueUpdate = true;
41
+ this.value = newValue;
42
+ this._isInternalValueUpdate = false;
43
+ this.$emit("input");
44
+ }
45
+ if (!isIntermediateUpdate) {
46
+ this._updatePresentationValue();
47
+ this.$emit("change");
48
+ }
42
49
  }
43
50
  /**
44
51
  * @internal
45
52
  */
46
53
  _onTextFieldChange() {
47
54
  if (this._presentationValue === "") {
48
- this.value = "";
49
- this.$emit("change");
55
+ this._updateValueDueToUserInteraction("", false);
50
56
  return;
51
57
  }
52
58
  try {
53
- this.value = this._parsePresentationValue(this._presentationValue);
54
- this.$emit("change");
59
+ this._updateValueDueToUserInteraction(
60
+ this._parsePresentationValue(this._presentationValue),
61
+ false
62
+ );
55
63
  } catch (_) {
56
64
  const invalidPresentationValue = this._presentationValue;
57
- this.value = "";
58
- this.$emit("change");
65
+ this._updateValueDueToUserInteraction("", false);
59
66
  this._presentationValue = invalidPresentationValue;
60
67
  return;
61
68
  }
@@ -65,24 +72,18 @@ const SingleValuePicker = (Base) => {
65
72
  */
66
73
  _onTextFieldInput(event) {
67
74
  super._onTextFieldInput(event);
68
- this._isInternalValueUpdate = true;
69
75
  if (this._presentationValue === "") {
70
- this.value = "";
71
- this.$emit("input");
76
+ this._updateValueDueToUserInteraction("", true);
72
77
  return;
73
78
  }
74
79
  try {
75
- const parsedValue = this._parsePresentationValue(
76
- this._presentationValue
80
+ this._updateValueDueToUserInteraction(
81
+ this._parsePresentationValue(this._presentationValue),
82
+ true
77
83
  );
78
- if (this.value !== parsedValue) {
79
- this.value = parsedValue;
80
- this.$emit("input");
81
- }
82
84
  } catch (_) {
83
85
  return;
84
86
  }
85
- this._isInternalValueUpdate = false;
86
87
  }
87
88
  /**
88
89
  * @internal
@@ -102,7 +103,7 @@ const SingleValuePicker = (Base) => {
102
103
  * @internal
103
104
  */
104
105
  _onClearClick() {
105
- this._updateValueDueToUserInteraction("");
106
+ this._updateValueDueToUserInteraction("", false);
106
107
  super._onClearClick();
107
108
  }
108
109
  }
@@ -435,7 +435,7 @@ __decorateClass$2([
435
435
  vividElement.observable
436
436
  ], InlineTimePicker.prototype, "max");
437
437
 
438
- const styles = ":host{display:inline-block}.time-pickers{display:flex;overflow:hidden;justify-content:center;padding:4px;block-size:calc(28px * var(--_inline-time-picker-num-options-visible) + 4px * (var(--_inline-time-picker-num-options-visible) - 1));gap:4px}.time-pickers .picker-wrapper{position:relative;display:flex;flex-direction:column;border-radius:4px}.time-pickers .picker-wrapper.focused{--focus-stroke-gap-color: transparent;--focus-inset: -2px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.time-pickers .picker{position:relative;display:flex;overflow:hidden scroll;flex-direction:column;padding:0 4px;border-radius:4px;margin:0 -4px;gap:4px;inline-size:50px;list-style:none;scrollbar-width:none}.time-pickers .picker:hover{scrollbar-width:auto}.time-pickers .picker:after{display:block;flex-shrink:0;block-size:calc(28px * (var(--_inline-time-picker-num-options-visible) - 1) + 4px * (var(--_inline-time-picker-num-options-visible) - 1 - 1));content:\"\"}.time-pickers .picker:focus-visible{outline:none}.time-pickers .option{--_connotation-color-primary: var(--vvd-time-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-time-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-time-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-time-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-time-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-time-picker-accent-pale, var(--vvd-color-neutral-300))}.time-pickers .option{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.time-pickers .option:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.time-pickers .option:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.time-pickers .option{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:4px;background-color:var(--_appearance-color-fill);block-size:28px;color:var(--_appearance-color-text);cursor:pointer;font:var(--vvd-typography-base);inline-size:50px}.time-pickers .picker-wrapper:not(.focused) .picker:focus-visible .option.selected{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}";
438
+ const styles = ":host{display:inline-block}.time-pickers{display:flex;overflow:hidden;justify-content:center;padding:4px;block-size:calc(28px * var(--_inline-time-picker-num-options-visible) + 4px * (var(--_inline-time-picker-num-options-visible) - 1));gap:4px}.time-pickers .picker-wrapper{position:relative;display:flex;flex-direction:column;border-radius:4px}.time-pickers .picker-wrapper.focused:has(.picker:focus-visible){--focus-stroke-gap-color: transparent;--focus-inset: -2px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.time-pickers .picker{position:relative;display:flex;overflow:hidden scroll;flex-direction:column;padding:0 4px;border-radius:4px;margin:0 -4px;gap:4px;inline-size:50px;list-style:none;scrollbar-width:none}.time-pickers .picker:hover{scrollbar-width:auto}.time-pickers .picker:after{display:block;flex-shrink:0;block-size:calc(28px * (var(--_inline-time-picker-num-options-visible) - 1) + 4px * (var(--_inline-time-picker-num-options-visible) - 1 - 1));content:\"\"}.time-pickers .picker:focus-visible{outline:none}.time-pickers .option{--_connotation-color-primary: var(--vvd-time-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-time-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-time-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-time-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-time-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-time-picker-accent-pale, var(--vvd-color-neutral-300))}.time-pickers .option{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.time-pickers .option:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.time-pickers .option:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.time-pickers .option{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:4px;background-color:var(--_appearance-color-fill);block-size:28px;color:var(--_appearance-color-text);cursor:pointer;font:var(--vvd-typography-base);inline-size:50px}.time-pickers .picker-wrapper:not(.focused) .picker:focus-visible .option.selected{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}";
439
439
 
440
440
  const inlineTimePickerDefinition = vividElement.defineVividComponent(
441
441
  "inline-time-picker",
@@ -600,7 +600,8 @@ const TimeSelectionPicker = (Base) => {
600
600
  */
601
601
  _onInlineTimePickerChange(event) {
602
602
  this._updateValueDueToUserInteraction(
603
- this._withUpdatedTime(event.detail)
603
+ this._withUpdatedTime(event.detail),
604
+ false
604
605
  );
605
606
  }
606
607
  /**
@@ -750,7 +751,7 @@ class TimePicker extends TimeSelectionPicker(
750
751
  super._onPickerButtonClick();
751
752
  if (this._popupOpen) {
752
753
  vividElement.DOM.processUpdates();
753
- this._focusableElsWithinDialog()[0].focus();
754
+ this._focusableElsWithinDialog()[0]?.focus();
754
755
  }
755
756
  }
756
757
  // --- Dialog ---
@@ -433,7 +433,7 @@ __decorateClass$2([
433
433
  observable
434
434
  ], InlineTimePicker.prototype, "max");
435
435
 
436
- const styles = ":host{display:inline-block}.time-pickers{display:flex;overflow:hidden;justify-content:center;padding:4px;block-size:calc(28px * var(--_inline-time-picker-num-options-visible) + 4px * (var(--_inline-time-picker-num-options-visible) - 1));gap:4px}.time-pickers .picker-wrapper{position:relative;display:flex;flex-direction:column;border-radius:4px}.time-pickers .picker-wrapper.focused{--focus-stroke-gap-color: transparent;--focus-inset: -2px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.time-pickers .picker{position:relative;display:flex;overflow:hidden scroll;flex-direction:column;padding:0 4px;border-radius:4px;margin:0 -4px;gap:4px;inline-size:50px;list-style:none;scrollbar-width:none}.time-pickers .picker:hover{scrollbar-width:auto}.time-pickers .picker:after{display:block;flex-shrink:0;block-size:calc(28px * (var(--_inline-time-picker-num-options-visible) - 1) + 4px * (var(--_inline-time-picker-num-options-visible) - 1 - 1));content:\"\"}.time-pickers .picker:focus-visible{outline:none}.time-pickers .option{--_connotation-color-primary: var(--vvd-time-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-time-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-time-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-time-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-time-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-time-picker-accent-pale, var(--vvd-color-neutral-300))}.time-pickers .option{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.time-pickers .option:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.time-pickers .option:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.time-pickers .option{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:4px;background-color:var(--_appearance-color-fill);block-size:28px;color:var(--_appearance-color-text);cursor:pointer;font:var(--vvd-typography-base);inline-size:50px}.time-pickers .picker-wrapper:not(.focused) .picker:focus-visible .option.selected{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}";
436
+ const styles = ":host{display:inline-block}.time-pickers{display:flex;overflow:hidden;justify-content:center;padding:4px;block-size:calc(28px * var(--_inline-time-picker-num-options-visible) + 4px * (var(--_inline-time-picker-num-options-visible) - 1));gap:4px}.time-pickers .picker-wrapper{position:relative;display:flex;flex-direction:column;border-radius:4px}.time-pickers .picker-wrapper.focused:has(.picker:focus-visible){--focus-stroke-gap-color: transparent;--focus-inset: -2px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.time-pickers .picker{position:relative;display:flex;overflow:hidden scroll;flex-direction:column;padding:0 4px;border-radius:4px;margin:0 -4px;gap:4px;inline-size:50px;list-style:none;scrollbar-width:none}.time-pickers .picker:hover{scrollbar-width:auto}.time-pickers .picker:after{display:block;flex-shrink:0;block-size:calc(28px * (var(--_inline-time-picker-num-options-visible) - 1) + 4px * (var(--_inline-time-picker-num-options-visible) - 1 - 1));content:\"\"}.time-pickers .picker:focus-visible{outline:none}.time-pickers .option{--_connotation-color-primary: var(--vvd-time-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-time-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-time-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-time-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-time-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-time-picker-accent-pale, var(--vvd-color-neutral-300))}.time-pickers .option{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.time-pickers .option:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.time-pickers .option:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.time-pickers .option{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:4px;background-color:var(--_appearance-color-fill);block-size:28px;color:var(--_appearance-color-text);cursor:pointer;font:var(--vvd-typography-base);inline-size:50px}.time-pickers .picker-wrapper:not(.focused) .picker:focus-visible .option.selected{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}";
437
437
 
438
438
  const inlineTimePickerDefinition = defineVividComponent(
439
439
  "inline-time-picker",
@@ -598,7 +598,8 @@ const TimeSelectionPicker = (Base) => {
598
598
  */
599
599
  _onInlineTimePickerChange(event) {
600
600
  this._updateValueDueToUserInteraction(
601
- this._withUpdatedTime(event.detail)
601
+ this._withUpdatedTime(event.detail),
602
+ false
602
603
  );
603
604
  }
604
605
  /**
@@ -748,7 +749,7 @@ class TimePicker extends TimeSelectionPicker(
748
749
  super._onPickerButtonClick();
749
750
  if (this._popupOpen) {
750
751
  DOM.processUpdates();
751
- this._focusableElsWithinDialog()[0].focus();
752
+ this._focusableElsWithinDialog()[0]?.focus();
752
753
  }
753
754
  }
754
755
  // --- Dialog ---
@@ -2734,7 +2734,7 @@ const ReplacedPropHandling = (Base) => {
2734
2734
 
2735
2735
  class VividElement extends AriaMixin(ReplacedPropHandling(FASTElement)) {
2736
2736
  static {
2737
- this.VIVID_VERSION = "4.29.0";
2737
+ this.VIVID_VERSION = "4.30.1";
2738
2738
  }
2739
2739
  /**
2740
2740
  * Add data-vvd-component attribute with component name globally,
@@ -2749,6 +2749,7 @@ class VividElement extends AriaMixin(ReplacedPropHandling(FASTElement)) {
2749
2749
 
2750
2750
  exports.AttachedBehaviorHTMLDirective = AttachedBehaviorHTMLDirective;
2751
2751
  exports.DOM = DOM;
2752
+ exports.ElementStyles = ElementStyles;
2752
2753
  exports.HTMLDirective = HTMLDirective;
2753
2754
  exports.HTMLView = HTMLView;
2754
2755
  exports.Observable = Observable;
@@ -2732,7 +2732,7 @@ const ReplacedPropHandling = (Base) => {
2732
2732
 
2733
2733
  class VividElement extends AriaMixin(ReplacedPropHandling(FASTElement)) {
2734
2734
  static {
2735
- this.VIVID_VERSION = "4.29.0";
2735
+ this.VIVID_VERSION = "4.30.1";
2736
2736
  }
2737
2737
  /**
2738
2738
  * Add data-vvd-component attribute with component name globally,
@@ -2745,4 +2745,4 @@ class VividElement extends AriaMixin(ReplacedPropHandling(FASTElement)) {
2745
2745
  }
2746
2746
  }
2747
2747
 
2748
- export { AttachedBehaviorHTMLDirective as A, DOM as D, HTMLDirective as H, Observable as O, SubscriberSet as S, VividElement as V, attr as a, ariaAttributeName as b, ariaMixinProperties as c, createRegisterFunction as d, emptyArray as e, defineVividComponent as f, HTMLView as g, html as h, defaultExecutionContext as i, nullableNumberConverter as n, observable as o, replaces as r, subscribeToAriaPropertyChanges as s, unsubscribeFromAriaPropertyChanges as u, volatile as v };
2748
+ export { AttachedBehaviorHTMLDirective as A, DOM as D, ElementStyles as E, HTMLDirective as H, Observable as O, SubscriberSet as S, VividElement as V, attr as a, ariaAttributeName as b, ariaMixinProperties as c, createRegisterFunction as d, emptyArray as e, defineVividComponent as f, HTMLView as g, html as h, defaultExecutionContext as i, nullableNumberConverter as n, observable as o, replaces as r, subscribeToAriaPropertyChanges as s, unsubscribeFromAriaPropertyChanges as u, volatile as v };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  .vvd-root {
6
6
  background-color: var(--vvd-color-canvas);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  .vvd-root {
6
6
  background-color: var(--vvd-color-canvas);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  .vvd-root:root {
6
6
  --vvd-size-font-scale-base: 1rem;
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  /**
6
6
  * Do not edit directly
7
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
7
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
8
8
  */
9
9
  /**
10
10
  * Do not edit directly
11
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
11
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
12
12
  */
13
13
  /**
14
14
  * Do not edit directly
15
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
15
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
16
16
  */
17
17
  @property --vvd-size-density {
18
18
  syntax: "<integer>";
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  /**
6
6
  * Do not edit directly
7
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
7
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
8
8
  */
9
9
  /**
10
10
  * Do not edit directly
11
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
11
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
12
12
  */
13
13
  /**
14
14
  * Do not edit directly
15
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
15
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
16
16
  */
17
17
  @property --vvd-size-density {
18
18
  syntax: "<integer>";
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Fri, 25 Jul 2025 10:55:57 GMT
3
+ * Generated on Thu, 14 Aug 2025 08:21:43 GMT
4
4
  */
5
5
  .vvd-root, ::part(vvd-root),
6
6
  .vvd-theme-alternate, ::part(vvd-theme-alternate) {