@vonage/vivid 3.8.0 → 3.10.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 (124) hide show
  1. package/alert/index.js +28 -0
  2. package/avatar/index.js +1 -1
  3. package/badge/index.js +1 -1
  4. package/banner/index.js +3 -3
  5. package/breadcrumb/index.js +1 -1
  6. package/breadcrumb-item/index.js +1 -1
  7. package/button/index.js +2 -2
  8. package/calendar/index.js +1 -1
  9. package/calendar-event/index.js +1 -1
  10. package/card/index.js +2 -2
  11. package/checkbox/index.js +1 -1
  12. package/combobox/index.js +6 -6
  13. package/custom-elements.json +269 -27
  14. package/data-grid/index.js +1 -1
  15. package/dialog/index.js +4 -4
  16. package/divider/index.js +1 -1
  17. package/elevation/index.js +1 -1
  18. package/fab/index.js +1 -1
  19. package/header/index.js +2 -2
  20. package/index.js +51 -50
  21. package/layout/index.js +1 -1
  22. package/lib/alert/alert.d.ts +24 -0
  23. package/lib/alert/alert.template.d.ts +4 -0
  24. package/lib/alert/definition.d.ts +2 -0
  25. package/lib/alert/index.d.ts +1 -0
  26. package/lib/components.d.ts +1 -0
  27. package/lib/text-area/text-area.d.ts +2 -1
  28. package/lib/text-field/text-field.d.ts +2 -1
  29. package/lib/tooltip/tooltip.d.ts +1 -0
  30. package/listbox/index.js +2 -2
  31. package/menu/index.js +6 -6
  32. package/menu-item/index.js +1 -1
  33. package/nav/index.js +1 -1
  34. package/nav-disclosure/index.js +1 -1
  35. package/nav-item/index.js +1 -1
  36. package/note/index.js +1 -1
  37. package/number-field/index.js +4 -4
  38. package/option/index.js +1 -1
  39. package/package.json +1 -1
  40. package/popup/index.js +4 -4
  41. package/progress/index.js +1 -1
  42. package/progress-ring/index.js +1 -1
  43. package/radio/index.js +1 -1
  44. package/radio-group/index.js +1 -1
  45. package/select/index.js +6 -6
  46. package/shared/definition.js +1 -1
  47. package/shared/definition10.js +46 -63
  48. package/shared/definition11.js +38 -92
  49. package/shared/definition12.js +96 -31
  50. package/shared/definition13.js +84 -757
  51. package/shared/definition14.js +32 -95
  52. package/shared/definition15.js +758 -100
  53. package/shared/definition16.js +103 -24
  54. package/shared/definition17.js +96 -154
  55. package/shared/definition18.js +108 -663
  56. package/shared/definition19.js +667 -1532
  57. package/shared/definition2.js +1 -1
  58. package/shared/definition20.js +1544 -223
  59. package/shared/definition21.js +183 -964
  60. package/shared/definition22.js +1037 -222
  61. package/shared/definition23.js +226 -67
  62. package/shared/definition24.js +68 -77
  63. package/shared/definition25.js +76 -47
  64. package/shared/definition26.js +46 -32
  65. package/shared/definition27.js +35 -49
  66. package/shared/definition28.js +48 -344
  67. package/shared/definition29.js +273 -282
  68. package/shared/definition30.js +356 -14
  69. package/shared/definition31.js +13 -67
  70. package/shared/definition32.js +65 -21
  71. package/shared/definition33.js +21 -39
  72. package/shared/definition34.js +31 -432
  73. package/shared/definition35.js +432 -76
  74. package/shared/definition36.js +82 -33
  75. package/shared/definition37.js +31 -422
  76. package/shared/definition38.js +357 -568
  77. package/shared/definition39.js +628 -75
  78. package/shared/definition4.js +1 -1
  79. package/shared/definition40.js +70 -573
  80. package/shared/definition41.js +538 -81
  81. package/shared/definition42.js +127 -47
  82. package/shared/definition43.js +51 -16
  83. package/shared/definition44.js +17 -425
  84. package/shared/definition45.js +421 -103
  85. package/shared/definition46.js +114 -19
  86. package/shared/definition47.js +19 -269
  87. package/shared/definition48.js +245 -87
  88. package/shared/definition49.js +110 -68
  89. package/shared/definition5.js +1 -1
  90. package/shared/definition50.js +80 -67
  91. package/shared/definition51.js +69 -295
  92. package/shared/definition52.js +305 -0
  93. package/shared/definition6.js +142 -45
  94. package/shared/definition7.js +95 -23
  95. package/shared/definition8.js +22 -103
  96. package/shared/definition9.js +62 -102
  97. package/shared/es.object.assign.js +1 -1
  98. package/shared/form-associated.js +1 -1
  99. package/shared/form-elements.js +46 -7
  100. package/shared/index.js +1 -1
  101. package/shared/listbox.js +2 -2
  102. package/shared/patterns/form-elements/form-elements.d.ts +16 -2
  103. package/shared/repeat.js +1 -1
  104. package/shared/text-field.js +1 -1
  105. package/shared/text-field2.js +1 -1
  106. package/side-drawer/index.js +1 -1
  107. package/slider/index.js +1 -1
  108. package/styles/core/all.css +1 -1
  109. package/styles/core/theme.css +1 -1
  110. package/styles/core/typography.css +1 -1
  111. package/styles/tokens/theme-dark.css +4 -4
  112. package/styles/tokens/theme-light.css +4 -4
  113. package/switch/index.js +1 -1
  114. package/tab/index.js +1 -1
  115. package/tab-panel/index.js +1 -1
  116. package/tabs/index.js +3 -3
  117. package/tag/index.js +1 -1
  118. package/tag-group/index.js +1 -1
  119. package/text-area/index.js +1 -1
  120. package/text-field/index.js +1 -1
  121. package/tooltip/index.js +5 -5
  122. package/tree-item/index.js +1 -1
  123. package/tree-view/index.js +1 -1
  124. package/vivid.api.json +91 -0
@@ -1,45 +1,94 @@
1
- import { h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.js';
3
- import { R as Radio } from './radio.js';
4
- import { f as focusTemplateFactory } from './focus2.js';
1
+ import { c as classofRaw, G as _export, k as functionUncurryThis, _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { B as BaseProgress } from './base-progress.js';
5
3
  import { w as when } from './when.js';
6
4
  import { c as classNames } from './class-names.js';
7
5
 
8
- var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 18 Apr 2023 16:20:35 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus) {\n outline: none;\n }\n}\n.base {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n gap: 8px;\n}\n.base {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:checked, .checked):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:checked, .checked):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.control {\n position: relative;\n flex-shrink: 0;\n background-color: var(--_appearance-color-fill);\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n border-radius: 50%;\n box-shadow: inset 0 0 0 2px var(--_appearance-color-outline);\n inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n}\n.control::after {\n position: absolute;\n background-color: var(--_appearance-color-text);\n border-radius: inherit;\n content: \"\";\n inset: 5px;\n}\n.base:not(.checked) .control::after {\n display: none;\n}\n\nlabel {\n color: var(--vvd-color-canvas-text);\n cursor: pointer;\n font: var(--vvd-typography-base);\n}\n\n.focus-indicator {\n --focus-inset: -3px;\n --focus-stroke-gap-color: transparent;\n border-radius: 50%;\n}\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}";
6
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 27 Apr 2023 09:20:45 GMT\n */\n.base {\n height: 6px;\n align-items: center;\n margin: 0;\n outline: none;\n}\n.base:not(.connotation-pacific).connotation-cta {\n --_connotation-color-primary: var(--vvd-color-cta-500);\n}\n.base:not(.connotation-pacific).connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert-500);\n}\n.base:not(.connotation-pacific).connotation-success {\n --_connotation-color-primary: var(--vvd-color-success-500);\n}\n.base:not(.connotation-pacific):not(.connotation-cta, .connotation-alert, .connotation-success) {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n}\n.base.connotation-pacific {\n --_connotation-color-primary: linear-gradient(to right, var(--vvd-color-information-200), var(--vvd-color-cta-600));\n}\n\n.progress {\n position: relative;\n display: flex;\n overflow: hidden;\n align-items: center;\n background-color: var(--vvd-color-neutral-100);\n block-size: 100%;\n inline-size: 100%;\n /* Shape */\n}\n.base:not(.shape-sharp) .progress {\n border-radius: 3px;\n}\n\n.indeterminate {\n display: flex;\n background-color: var(--_connotation-color-primary);\n block-size: 100%;\n border-radius: inherit;\n inline-size: 100%;\n}\n\n.determinate {\n background-color: var(--_connotation-color-primary);\n block-size: 100%;\n border-radius: inherit;\n transition: all 0.2s ease-in-out;\n}\n.connotation-pacific .determinate {\n background-image: var(--_connotation-color-primary);\n}\n.reverse .determinate {\n position: absolute;\n right: 0;\n}\n.paused .determinate {\n background: var(--vvd-color-neutral-300);\n}\n\n.indicator-1 {\n animation: indeterminate-1 2s infinite;\n inline-size: 30%;\n}\n\n.indicator-2 {\n animation: indeterminate-2 2s infinite;\n inline-size: 60%;\n}\n\n.indicator-1,\n.indicator-2 {\n position: absolute;\n animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);\n background-color: var(--vvd-color-neutral-100);\n block-size: 100%;\n opacity: 0;\n}\n.connotation-pacific .indicator-1,\n.connotation-pacific .indicator-2 {\n background-image: var(--_connotation-color-primary);\n}\n.paused .indicator-1,\n.paused .indicator-2 {\n animation-play-state: paused;\n background-color: var(--_connotation-color-primary);\n}\n.reverse .indicator-1,\n.reverse .indicator-2 {\n animation-direction: reverse;\n}\n\n@keyframes indeterminate-1 {\n 0% {\n opacity: 1;\n transform: translateX(-100%);\n }\n 70% {\n opacity: 1;\n transform: translateX(300%);\n }\n 70.01% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n transform: translateX(300%);\n }\n}\n@keyframes indeterminate-2 {\n 0% {\n opacity: 0;\n transform: translateX(-150%);\n }\n 29.99% {\n opacity: 0;\n }\n 30% {\n opacity: 1;\n transform: translateX(-150%);\n }\n 100% {\n opacity: 1;\n transform: translateX(166.66%);\n }\n}";
9
7
 
10
- let _ = t => t,
8
+ var classof = classofRaw;
9
+
10
+ // `IsArray` abstract operation
11
+ // https://tc39.es/ecma262/#sec-isarray
12
+ // eslint-disable-next-line es/no-array-isarray -- safe
13
+ var isArray$1 = Array.isArray || function isArray(argument) {
14
+ return classof(argument) == 'Array';
15
+ };
16
+
17
+ var $ = _export;
18
+ var uncurryThis = functionUncurryThis;
19
+ var isArray = isArray$1;
20
+
21
+ var nativeReverse = uncurryThis([].reverse);
22
+ var test = [1, 2];
23
+
24
+ // `Array.prototype.reverse` method
25
+ // https://tc39.es/ecma262/#sec-array.prototype.reverse
26
+ // fix for Safari 12.0 bug
27
+ // https://bugs.webkit.org/show_bug.cgi?id=188794
28
+ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
29
+ reverse: function reverse() {
30
+ // eslint-disable-next-line no-self-assign -- dirty hack
31
+ if (isArray(this)) this.length = this.length;
32
+ return nativeReverse(this);
33
+ }
34
+ });
35
+
36
+ class Progress extends BaseProgress {
37
+ constructor() {
38
+ super(...arguments);
39
+ this.reverse = false;
40
+ }
41
+ }
42
+ __decorate([attr(), __metadata("design:type", String)], Progress.prototype, "shape", void 0);
43
+ __decorate([attr(), __metadata("design:type", String)], Progress.prototype, "connotation", void 0);
44
+ __decorate([attr({
45
+ mode: 'boolean'
46
+ }), __metadata("design:type", Object)], Progress.prototype, "reverse", void 0);
47
+
48
+ let _2 = t => t,
11
49
  _t,
12
- _t2;
50
+ _t2,
51
+ _t3;
13
52
  const getClasses = ({
14
- checked,
15
- readOnly,
16
- disabled
17
- }) => classNames('base', ['checked', Boolean(checked)], ['readonly', Boolean(readOnly)], ['disabled', Boolean(disabled)]);
18
- const RadioTemplate = context => {
19
- const focusTemplate = focusTemplateFactory(context);
20
- return html(_t || (_t = _`
21
- <div class="${0}"
22
- role="radio"
23
- aria-checked="${0}"
24
- aria-required="${0}"
25
- aria-disabled="${0}"
26
- @keypress="${0}"
27
- @click="${0}"
28
- >
29
- <div class="control">
30
- ${0}
31
- </div>
32
- ${0}
53
+ connotation,
54
+ shape,
55
+ reverse,
56
+ paused
57
+ }) => classNames('base', [`connotation-${connotation}`, Boolean(connotation)], [`shape-${shape}`, Boolean(shape)], ['reverse', Boolean(reverse)], ['paused', Boolean(paused)]);
58
+ function determinate() {
59
+ return html(_t || (_t = _2`
60
+ <span class="determinate" style="width: ${0}%"></span>`), x => x.percentComplete);
61
+ }
62
+ function indeterminate() {
63
+ return html(_t2 || (_t2 = _2`
64
+ <span class="indeterminate" name="indeterminate">
65
+ <span class="indicator-1"></span>
66
+ <span class="indicator-2"></span>
67
+ </span>`));
68
+ }
69
+ const ProgressTemplate = _ => {
70
+ return html(_t3 || (_t3 = _2`
71
+ <div
72
+ role="progressbar"
73
+ aria-valuenow="${0}"
74
+ aria-valuemin="${0}"
75
+ aria-valuemax="${0}"
76
+ class="${0}"
77
+ >
78
+ <div class="progress">
79
+ ${0}
80
+ ${0}
81
+ </div>
33
82
  </div>
34
- `), getClasses, x => x.checked, x => x.required, x => x.disabled, (x, c) => x.keypressHandler(c.event), (x, c) => x.clickHandler(c.event), () => focusTemplate, when(x => x.label, html(_t2 || (_t2 = _`<label class="label">${0}</label>`), x => x.label)));
83
+ `), x => x.value, x => x.min, x => x.max, getClasses, when(x => typeof x.value === 'number', determinate()), when(x => typeof x.value !== 'number', indeterminate()));
35
84
  };
36
85
 
37
- const radioDefinition = Radio.compose({
38
- baseName: 'radio',
39
- template: RadioTemplate,
86
+ const progressDefinition = Progress.compose({
87
+ baseName: 'progress',
88
+ template: ProgressTemplate,
40
89
  styles: css_248z
41
90
  });
42
- const radioRegistries = [radioDefinition(), ...focusRegistries];
43
- const registerRadio = registerFactory(radioRegistries);
91
+ const progressRegistries = [progressDefinition()];
92
+ const registerProgress = registerFactory(progressRegistries);
44
93
 
45
- export { radioDefinition as a, radioRegistries as b, registerRadio as r };
94
+ export { progressRegistries as a, progressDefinition as p, registerProgress as r };
@@ -1,436 +1,45 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { D as Direction, g as getDirection } from './direction.js';
3
- import { h as keyArrowRight, i as keyArrowLeft, A as ArrowKeys, c as keyArrowUp, b as keyArrowDown, d as keyEnter } from './key-codes.js';
4
- import { O as Orientation } from './aria.js';
1
+ import { h as html, r as registerFactory } from './index.js';
2
+ import { f as focusRegistries } from './definition4.js';
5
3
  import { R as Radio } from './radio.js';
6
- import { s as slotted, e as elements } from './slotted.js';
7
- import { O as Orientation$1 } from './aria2.js';
4
+ import { f as focusTemplateFactory } from './focus2.js';
8
5
  import { w as when } from './when.js';
6
+ import { c as classNames } from './class-names.js';
9
7
 
10
- /**
11
- * An Radio Group Custom HTML Element.
12
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#radiogroup | ARIA radiogroup }.
13
- *
14
- * @slot label - The slot for the label
15
- * @slot - The default slot for radio buttons
16
- * @csspart positioning-region - The positioning region for laying out the radios
17
- * @fires change - Fires a custom 'change' event when the value changes
18
- *
19
- * @public
20
- */
21
- class RadioGroup$1 extends FoundationElement {
22
- constructor() {
23
- super(...arguments);
24
- /**
25
- * The orientation of the group
26
- *
27
- * @public
28
- * @remarks
29
- * HTML Attribute: orientation
30
- */
31
- this.orientation = Orientation.horizontal;
32
- this.radioChangeHandler = (e) => {
33
- const changedRadio = e.target;
34
- if (changedRadio.checked) {
35
- this.slottedRadioButtons.forEach((radio) => {
36
- if (radio !== changedRadio) {
37
- radio.checked = false;
38
- if (!this.isInsideFoundationToolbar) {
39
- radio.setAttribute("tabindex", "-1");
40
- }
41
- }
42
- });
43
- this.selectedRadio = changedRadio;
44
- this.value = changedRadio.value;
45
- changedRadio.setAttribute("tabindex", "0");
46
- this.focusedRadio = changedRadio;
47
- }
48
- e.stopPropagation();
49
- };
50
- this.moveToRadioByIndex = (group, index) => {
51
- const radio = group[index];
52
- if (!this.isInsideToolbar) {
53
- radio.setAttribute("tabindex", "0");
54
- if (radio.readOnly) {
55
- this.slottedRadioButtons.forEach((nextRadio) => {
56
- if (nextRadio !== radio) {
57
- nextRadio.setAttribute("tabindex", "-1");
58
- }
59
- });
60
- }
61
- else {
62
- radio.checked = true;
63
- this.selectedRadio = radio;
64
- }
65
- }
66
- this.focusedRadio = radio;
67
- radio.focus();
68
- };
69
- this.moveRightOffGroup = () => {
70
- var _a;
71
- (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
72
- };
73
- this.moveLeftOffGroup = () => {
74
- var _a;
75
- (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
76
- };
77
- /**
78
- * @internal
79
- */
80
- this.focusOutHandler = (e) => {
81
- const group = this.slottedRadioButtons;
82
- const radio = e.target;
83
- const index = radio !== null ? group.indexOf(radio) : 0;
84
- const focusedIndex = this.focusedRadio
85
- ? group.indexOf(this.focusedRadio)
86
- : -1;
87
- if ((focusedIndex === 0 && index === focusedIndex) ||
88
- (focusedIndex === group.length - 1 && focusedIndex === index)) {
89
- if (!this.selectedRadio) {
90
- this.focusedRadio = group[0];
91
- this.focusedRadio.setAttribute("tabindex", "0");
92
- group.forEach((nextRadio) => {
93
- if (nextRadio !== this.focusedRadio) {
94
- nextRadio.setAttribute("tabindex", "-1");
95
- }
96
- });
97
- }
98
- else {
99
- this.focusedRadio = this.selectedRadio;
100
- if (!this.isInsideFoundationToolbar) {
101
- this.selectedRadio.setAttribute("tabindex", "0");
102
- group.forEach((nextRadio) => {
103
- if (nextRadio !== this.selectedRadio) {
104
- nextRadio.setAttribute("tabindex", "-1");
105
- }
106
- });
107
- }
108
- }
109
- }
110
- return true;
111
- };
112
- /**
113
- * @internal
114
- */
115
- this.clickHandler = (e) => {
116
- const radio = e.target;
117
- if (radio) {
118
- const group = this.slottedRadioButtons;
119
- if (radio.checked || group.indexOf(radio) === 0) {
120
- radio.setAttribute("tabindex", "0");
121
- this.selectedRadio = radio;
122
- }
123
- else {
124
- radio.setAttribute("tabindex", "-1");
125
- this.selectedRadio = null;
126
- }
127
- this.focusedRadio = radio;
128
- }
129
- e.preventDefault();
130
- };
131
- this.shouldMoveOffGroupToTheRight = (index, group, key) => {
132
- return index === group.length && this.isInsideToolbar && key === keyArrowRight;
133
- };
134
- this.shouldMoveOffGroupToTheLeft = (group, key) => {
135
- const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
136
- return index < 0 && this.isInsideToolbar && key === keyArrowLeft;
137
- };
138
- this.checkFocusedRadio = () => {
139
- if (this.focusedRadio !== null &&
140
- !this.focusedRadio.readOnly &&
141
- !this.focusedRadio.checked) {
142
- this.focusedRadio.checked = true;
143
- this.focusedRadio.setAttribute("tabindex", "0");
144
- this.focusedRadio.focus();
145
- this.selectedRadio = this.focusedRadio;
146
- }
147
- };
148
- this.moveRight = (e) => {
149
- const group = this.slottedRadioButtons;
150
- let index = 0;
151
- index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1;
152
- if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) {
153
- this.moveRightOffGroup();
154
- return;
155
- }
156
- else if (index === group.length) {
157
- index = 0;
158
- }
159
- /* looping to get to next radio that is not disabled */
160
- /* matching native radio/radiogroup which does not select an item if there is only 1 in the group */
161
- while (index < group.length && group.length > 1) {
162
- if (!group[index].disabled) {
163
- this.moveToRadioByIndex(group, index);
164
- break;
165
- }
166
- else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
167
- break;
168
- }
169
- else if (index + 1 >= group.length) {
170
- if (this.isInsideToolbar) {
171
- break;
172
- }
173
- else {
174
- index = 0;
175
- }
176
- }
177
- else {
178
- index += 1;
179
- }
180
- }
181
- };
182
- this.moveLeft = (e) => {
183
- const group = this.slottedRadioButtons;
184
- let index = 0;
185
- index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
186
- index = index < 0 ? group.length - 1 : index;
187
- if (this.shouldMoveOffGroupToTheLeft(group, e.key)) {
188
- this.moveLeftOffGroup();
189
- return;
190
- }
191
- /* looping to get to next radio that is not disabled */
192
- while (index >= 0 && group.length > 1) {
193
- if (!group[index].disabled) {
194
- this.moveToRadioByIndex(group, index);
195
- break;
196
- }
197
- else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
198
- break;
199
- }
200
- else if (index - 1 < 0) {
201
- index = group.length - 1;
202
- }
203
- else {
204
- index -= 1;
205
- }
206
- }
207
- };
208
- /**
209
- * keyboard handling per https://w3c.github.io/aria-practices/#for-radio-groups-not-contained-in-a-toolbar
210
- * navigation is different when there is an ancestor with role='toolbar'
211
- *
212
- * @internal
213
- */
214
- this.keydownHandler = (e) => {
215
- const key = e.key;
216
- if (key in ArrowKeys && this.isInsideFoundationToolbar) {
217
- return true;
218
- }
219
- switch (key) {
220
- case keyEnter: {
221
- this.checkFocusedRadio();
222
- break;
223
- }
224
- case keyArrowRight:
225
- case keyArrowDown: {
226
- if (this.direction === Direction.ltr) {
227
- this.moveRight(e);
228
- }
229
- else {
230
- this.moveLeft(e);
231
- }
232
- break;
233
- }
234
- case keyArrowLeft:
235
- case keyArrowUp: {
236
- if (this.direction === Direction.ltr) {
237
- this.moveLeft(e);
238
- }
239
- else {
240
- this.moveRight(e);
241
- }
242
- break;
243
- }
244
- default: {
245
- return true;
246
- }
247
- }
248
- };
249
- }
250
- readOnlyChanged() {
251
- if (this.slottedRadioButtons !== undefined) {
252
- this.slottedRadioButtons.forEach((radio) => {
253
- if (this.readOnly) {
254
- radio.readOnly = true;
255
- }
256
- else {
257
- radio.readOnly = false;
258
- }
259
- });
260
- }
261
- }
262
- disabledChanged() {
263
- if (this.slottedRadioButtons !== undefined) {
264
- this.slottedRadioButtons.forEach((radio) => {
265
- if (this.disabled) {
266
- radio.disabled = true;
267
- }
268
- else {
269
- radio.disabled = false;
270
- }
271
- });
272
- }
273
- }
274
- nameChanged() {
275
- if (this.slottedRadioButtons) {
276
- this.slottedRadioButtons.forEach((radio) => {
277
- radio.setAttribute("name", this.name);
278
- });
279
- }
280
- }
281
- valueChanged() {
282
- if (this.slottedRadioButtons) {
283
- this.slottedRadioButtons.forEach((radio) => {
284
- if (radio.value === this.value) {
285
- radio.checked = true;
286
- this.selectedRadio = radio;
287
- }
288
- });
289
- }
290
- this.$emit("change");
291
- }
292
- slottedRadioButtonsChanged(oldValue, newValue) {
293
- if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) {
294
- this.setupRadioButtons();
295
- }
296
- }
297
- get parentToolbar() {
298
- return this.closest('[role="toolbar"]');
299
- }
300
- get isInsideToolbar() {
301
- var _a;
302
- return ((_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false);
303
- }
304
- get isInsideFoundationToolbar() {
305
- var _a;
306
- return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]);
307
- }
308
- /**
309
- * @internal
310
- */
311
- connectedCallback() {
312
- super.connectedCallback();
313
- this.direction = getDirection(this);
314
- this.setupRadioButtons();
315
- }
316
- disconnectedCallback() {
317
- this.slottedRadioButtons.forEach((radio) => {
318
- radio.removeEventListener("change", this.radioChangeHandler);
319
- });
320
- }
321
- setupRadioButtons() {
322
- const checkedRadios = this.slottedRadioButtons.filter((radio) => {
323
- return radio.hasAttribute("checked");
324
- });
325
- const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0;
326
- if (numberOfCheckedRadios > 1) {
327
- const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
328
- lastCheckedRadio.checked = true;
329
- }
330
- let foundMatchingVal = false;
331
- this.slottedRadioButtons.forEach((radio) => {
332
- if (this.name !== undefined) {
333
- radio.setAttribute("name", this.name);
334
- }
335
- if (this.disabled) {
336
- radio.disabled = true;
337
- }
338
- if (this.readOnly) {
339
- radio.readOnly = true;
340
- }
341
- if (this.value && this.value === radio.value) {
342
- this.selectedRadio = radio;
343
- this.focusedRadio = radio;
344
- radio.checked = true;
345
- radio.setAttribute("tabindex", "0");
346
- foundMatchingVal = true;
347
- }
348
- else {
349
- if (!this.isInsideFoundationToolbar) {
350
- radio.setAttribute("tabindex", "-1");
351
- }
352
- radio.checked = false;
353
- }
354
- radio.addEventListener("change", this.radioChangeHandler);
355
- });
356
- if (this.value === undefined && this.slottedRadioButtons.length > 0) {
357
- const checkedRadios = this.slottedRadioButtons.filter((radio) => {
358
- return radio.hasAttribute("checked");
359
- });
360
- const numberOfCheckedRadios = checkedRadios !== null ? checkedRadios.length : 0;
361
- if (numberOfCheckedRadios > 0 && !foundMatchingVal) {
362
- const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
363
- lastCheckedRadio.checked = true;
364
- this.focusedRadio = lastCheckedRadio;
365
- lastCheckedRadio.setAttribute("tabindex", "0");
366
- }
367
- else {
368
- this.slottedRadioButtons[0].setAttribute("tabindex", "0");
369
- this.focusedRadio = this.slottedRadioButtons[0];
370
- }
371
- }
372
- }
373
- }
374
- __decorate([
375
- attr({ attribute: "readonly", mode: "boolean" })
376
- ], RadioGroup$1.prototype, "readOnly", void 0);
377
- __decorate([
378
- attr({ attribute: "disabled", mode: "boolean" })
379
- ], RadioGroup$1.prototype, "disabled", void 0);
380
- __decorate([
381
- attr
382
- ], RadioGroup$1.prototype, "name", void 0);
383
- __decorate([
384
- attr
385
- ], RadioGroup$1.prototype, "value", void 0);
386
- __decorate([
387
- attr
388
- ], RadioGroup$1.prototype, "orientation", void 0);
389
- __decorate([
390
- observable
391
- ], RadioGroup$1.prototype, "childItems", void 0);
392
- __decorate([
393
- observable
394
- ], RadioGroup$1.prototype, "slottedRadioButtons", void 0);
395
-
396
- var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 18 Apr 2023 16:20:35 GMT\n */\n.positioning-region {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.positioning-region.vertical {\n flex-direction: column;\n}\nlabel + .positioning-region {\n margin-block-start: 8px;\n}\n\nlabel {\n color: var(--vvd-color-canvas-text);\n font: var(--vvd-typography-base);\n}";
397
-
398
- class RadioGroup extends RadioGroup$1 {}
399
- __decorate([attr, __metadata("design:type", String)], RadioGroup.prototype, "label", void 0);
8
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 27 Apr 2023 09:20:45 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus) {\n outline: none;\n }\n}\n.base {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n gap: 8px;\n}\n.base {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:checked, .checked):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:checked, .checked):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.control {\n position: relative;\n flex-shrink: 0;\n background-color: var(--_appearance-color-fill);\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n border-radius: 50%;\n box-shadow: inset 0 0 0 2px var(--_appearance-color-outline);\n inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n}\n.control::after {\n position: absolute;\n background-color: var(--_appearance-color-text);\n border-radius: inherit;\n content: \"\";\n inset: 5px;\n}\n.base:not(.checked) .control::after {\n display: none;\n}\n\nlabel {\n color: var(--vvd-color-canvas-text);\n cursor: pointer;\n font: var(--vvd-typography-base);\n}\n\n.focus-indicator {\n --focus-inset: -3px;\n --focus-stroke-gap-color: transparent;\n border-radius: 50%;\n}\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}";
400
9
 
401
10
  let _ = t => t,
402
11
  _t,
403
12
  _t2;
404
- const RadioGroupTemplate = context => {
13
+ const getClasses = ({
14
+ checked,
15
+ readOnly,
16
+ disabled
17
+ }) => classNames('base', ['checked', Boolean(checked)], ['readonly', Boolean(readOnly)], ['disabled', Boolean(disabled)]);
18
+ const RadioTemplate = context => {
19
+ const focusTemplate = focusTemplateFactory(context);
405
20
  return html(_t || (_t = _`
406
- <template
407
- role="radiogroup"
408
- aria-disabled="${0}"
409
- aria-readonly="${0}"
410
- aria-orientation="${0}"
411
- @click="${0}"
412
- @keydown="${0}"
413
- @focusout="${0}"
414
- >
415
-
21
+ <div class="${0}"
22
+ role="radio"
23
+ aria-checked="${0}"
24
+ aria-required="${0}"
25
+ aria-disabled="${0}"
26
+ @keypress="${0}"
27
+ @click="${0}"
28
+ >
29
+ <div class="control">
416
30
  ${0}
417
-
418
- <div class="positioning-region ${0}">
419
- <slot ${0}></slot>
420
- </div>
421
- </template>
422
- `), x => x.disabled, x => x.readOnly, x => x.orientation, (x, c) => x.clickHandler(c.event), (x, c) => x.keydownHandler(c.event), (x, c) => x.focusOutHandler(c.event), when(x => x.label, html(_t2 || (_t2 = _`<label>${0}</label>`), x => x.label)), x => x.orientation === Orientation$1.horizontal ? 'horizontal' : 'vertical', slotted({
423
- property: 'slottedRadioButtons',
424
- filter: elements(context.tagFor(Radio))
425
- }));
31
+ </div>
32
+ ${0}
33
+ </div>
34
+ `), getClasses, x => x.checked, x => x.required, x => x.disabled, (x, c) => x.keypressHandler(c.event), (x, c) => x.clickHandler(c.event), () => focusTemplate, when(x => x.label, html(_t2 || (_t2 = _`<label class="label">${0}</label>`), x => x.label)));
426
35
  };
427
36
 
428
- const radioGroupDefinition = RadioGroup.compose({
429
- baseName: 'radio-group',
430
- template: RadioGroupTemplate,
37
+ const radioDefinition = Radio.compose({
38
+ baseName: 'radio',
39
+ template: RadioTemplate,
431
40
  styles: css_248z
432
41
  });
433
- const radioGroupRegistries = [radioGroupDefinition()];
434
- const registerRadioGroup = registerFactory(radioGroupRegistries);
42
+ const radioRegistries = [radioDefinition(), ...focusRegistries];
43
+ const registerRadio = registerFactory(radioRegistries);
435
44
 
436
- export { radioGroupDefinition as a, radioGroupRegistries as b, registerRadioGroup as r };
45
+ export { radioDefinition as a, radioRegistries as b, registerRadio as r };