@vonage/vivid 3.39.0 → 3.41.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 (182) hide show
  1. package/accordion/index.js +2 -2
  2. package/accordion-item/index.js +2 -2
  3. package/alert/index.js +7 -5
  4. package/audio-player/index.js +33 -0
  5. package/avatar/index.js +2 -2
  6. package/badge/index.js +2 -2
  7. package/banner/index.js +9 -5
  8. package/breadcrumb/index.js +1 -1
  9. package/breadcrumb-item/index.js +3 -3
  10. package/button/index.js +5 -4
  11. package/calendar/index.js +1 -1
  12. package/calendar-event/index.js +1 -1
  13. package/card/index.js +4 -3
  14. package/checkbox/index.js +3 -3
  15. package/combobox/index.js +9 -7
  16. package/custom-elements.json +809 -5
  17. package/data-grid/index.js +3 -2
  18. package/date-picker/index.js +11 -9
  19. package/date-range-picker/index.js +11 -9
  20. package/dialog/index.js +10 -6
  21. package/divider/index.js +1 -1
  22. package/elevation/index.js +1 -1
  23. package/empty-state/index.js +2 -2
  24. package/fab/index.js +3 -3
  25. package/file-picker/index.js +6 -5
  26. package/focus/index.js +1 -1
  27. package/header/index.js +2 -2
  28. package/icon/index.js +1 -1
  29. package/index.js +60 -55
  30. package/layout/index.js +1 -1
  31. package/lib/alert/alert.d.ts +3 -1
  32. package/lib/alert/locale.d.ts +3 -0
  33. package/lib/audio-player/audio-player.d.ts +17 -0
  34. package/lib/audio-player/audio-player.template.d.ts +4 -0
  35. package/lib/audio-player/definition.d.ts +4 -0
  36. package/lib/audio-player/locale.d.ts +5 -0
  37. package/lib/banner/banner.d.ts +3 -1
  38. package/lib/banner/locale.d.ts +3 -0
  39. package/lib/card/card.d.ts +3 -0
  40. package/lib/card/card.template.d.ts +1 -1
  41. package/lib/card/definition.d.ts +1 -0
  42. package/lib/checkbox/checkbox.d.ts +2 -0
  43. package/lib/components.d.ts +2 -0
  44. package/lib/dialog/dialog.d.ts +4 -0
  45. package/lib/dialog/locale.d.ts +3 -0
  46. package/lib/enums.d.ts +2 -1
  47. package/lib/menu/menu.d.ts +1 -0
  48. package/lib/number-field/locale.d.ts +4 -0
  49. package/lib/number-field/number-field.d.ts +4 -2
  50. package/lib/progress/progress.d.ts +1 -0
  51. package/lib/progress-ring/progress-ring.d.ts +1 -0
  52. package/lib/radio/radio.d.ts +1 -0
  53. package/lib/selectable-box/definition.d.ts +3 -0
  54. package/lib/selectable-box/selectable-box.d.ts +12 -0
  55. package/lib/selectable-box/selectable-box.template.d.ts +4 -0
  56. package/lib/slider/definition.d.ts +1 -0
  57. package/lib/slider/slider.d.ts +5 -0
  58. package/lib/split-button/locale.d.ts +3 -0
  59. package/lib/split-button/split-button.d.ts +3 -1
  60. package/lib/text-area/text-area.d.ts +3 -0
  61. package/lib/text-field/text-field.d.ts +5 -2
  62. package/listbox/index.js +5 -4
  63. package/locales/en-GB.js +21 -0
  64. package/locales/en-US.js +21 -0
  65. package/locales/ja-JP.js +21 -0
  66. package/locales/zh-CN.js +21 -0
  67. package/menu/index.js +9 -8
  68. package/menu-item/index.js +3 -3
  69. package/nav/index.js +1 -1
  70. package/nav-disclosure/index.js +3 -3
  71. package/nav-item/index.js +3 -3
  72. package/note/index.js +2 -2
  73. package/number-field/index.js +8 -6
  74. package/option/index.js +3 -3
  75. package/package.json +1 -1
  76. package/pagination/index.js +6 -5
  77. package/popup/index.js +7 -6
  78. package/progress/index.js +1 -1
  79. package/progress-ring/index.js +1 -1
  80. package/radio/index.js +2 -2
  81. package/radio-group/index.js +2 -2
  82. package/select/index.js +10 -8
  83. package/selectable-box/index.js +23 -0
  84. package/shared/Reflector.js +65 -0
  85. package/shared/date-picker/calendar/segment.d.ts +21 -0
  86. package/shared/date-picker/date-picker-base.d.ts +1 -0
  87. package/shared/definition.js +3 -3
  88. package/shared/definition10.js +89 -227
  89. package/shared/definition11.js +151 -29
  90. package/shared/definition12.js +37 -766
  91. package/shared/definition13.js +747 -106
  92. package/shared/definition14.js +122 -192
  93. package/shared/definition15.js +156 -664
  94. package/shared/definition16.js +576 -1123
  95. package/shared/definition17.js +1278 -143
  96. package/shared/definition18.js +64 -298
  97. package/shared/definition19.js +358 -211
  98. package/shared/definition2.js +2 -2
  99. package/shared/definition20.js +259 -67
  100. package/shared/definition21.js +66 -58
  101. package/shared/definition22.js +43 -84
  102. package/shared/definition23.js +76 -2352
  103. package/shared/definition24.js +2362 -45
  104. package/shared/definition25.js +63 -27
  105. package/shared/definition26.js +24 -51
  106. package/shared/definition27.js +36 -813
  107. package/shared/definition28.js +837 -49
  108. package/shared/definition29.js +52 -89
  109. package/shared/definition3.js +1 -1
  110. package/shared/definition30.js +88 -24
  111. package/shared/definition31.js +25 -12
  112. package/shared/definition32.js +12 -52
  113. package/shared/definition33.js +28 -487
  114. package/shared/definition34.js +442 -197
  115. package/shared/definition35.js +260 -185
  116. package/shared/definition36.js +188 -69
  117. package/shared/definition37.js +72 -52
  118. package/shared/definition38.js +65 -421
  119. package/shared/definition39.js +435 -35
  120. package/shared/definition4.js +44 -16
  121. package/shared/definition40.js +32 -680
  122. package/shared/definition41.js +661 -77
  123. package/shared/definition42.js +103 -555
  124. package/shared/definition43.js +76 -103
  125. package/shared/definition44.js +522 -87
  126. package/shared/definition45.js +133 -22
  127. package/shared/definition46.js +131 -58
  128. package/shared/definition47.js +16 -501
  129. package/shared/definition48.js +69 -23
  130. package/shared/definition49.js +477 -108
  131. package/shared/definition5.js +160 -44
  132. package/shared/definition50.js +25 -271
  133. package/shared/definition51.js +103 -122
  134. package/shared/definition52.js +277 -122
  135. package/shared/definition53.js +274 -103
  136. package/shared/definition54.js +126 -71
  137. package/shared/definition55.js +128 -294
  138. package/shared/definition56.js +91 -13
  139. package/shared/definition57.js +298 -39
  140. package/shared/definition58.js +11 -175
  141. package/shared/definition59.js +47 -0
  142. package/shared/definition6.js +43 -33
  143. package/shared/definition60.js +181 -0
  144. package/shared/definition7.js +39 -105
  145. package/shared/definition8.js +122 -38
  146. package/shared/definition9.js +56 -89
  147. package/shared/enums.js +72 -0
  148. package/shared/icon.js +2 -2
  149. package/shared/index2.js +28 -1
  150. package/shared/key-codes.js +1 -1
  151. package/shared/key-codes2.js +9 -0
  152. package/shared/listbox.js +3 -8
  153. package/shared/localization/Locale.d.ts +12 -0
  154. package/shared/patterns/form-elements/form-elements.d.ts +6 -6
  155. package/shared/presentationDate.js +196 -143
  156. package/shared/radio.js +7 -0
  157. package/shared/text-field.js +1 -1
  158. package/shared/utils/Reflector.d.ts +8 -0
  159. package/shared/utils/randomId.d.ts +1 -0
  160. package/side-drawer/index.js +1 -1
  161. package/slider/index.js +3 -3
  162. package/split-button/index.js +6 -3
  163. package/style.css +889 -722
  164. package/styles/core/all.css +1 -1
  165. package/styles/core/theme.css +1 -1
  166. package/styles/core/typography.css +1 -1
  167. package/styles/tokens/theme-dark.css +4 -4
  168. package/styles/tokens/theme-light.css +4 -4
  169. package/styles/tokens/vivid-2-compat.css +1 -1
  170. package/switch/index.js +3 -3
  171. package/tab/index.js +3 -3
  172. package/tab-panel/index.js +1 -1
  173. package/tabs/index.js +5 -5
  174. package/tag/index.js +3 -3
  175. package/tag-group/index.js +1 -1
  176. package/text-area/index.js +4 -3
  177. package/text-field/index.js +4 -3
  178. package/toggletip/index.js +8 -7
  179. package/tooltip/index.js +8 -7
  180. package/tree-item/index.js +3 -3
  181. package/tree-view/index.js +1 -1
  182. package/vivid.api.json +392 -0
@@ -1,20 +1,20 @@
1
- import { B as Button } from './definition10.js';
2
- import { P as Popup } from './definition58.js';
3
- import { T as TextField } from './definition51.js';
1
+ import { B as Button } from './definition11.js';
2
+ import { P as Popup } from './definition60.js';
3
+ import { T as TextField } from './definition53.js';
4
4
  import './affix.js';
5
5
  import { f as focusTemplateFactory } from './focus2.js';
6
6
  import { a as FormElementHelperText } from './index2.js';
7
- import { D as Divider } from './definition20.js';
7
+ import { D as Divider } from './definition21.js';
8
8
  import { h as html, F as FoundationElement, a as attr, o as observable, v as volatile, D as DOM } from './index.js';
9
9
  import { r as ref } from './ref.js';
10
- import { w as when } from './when.js';
11
10
  import { r as repeat } from './repeat.js';
11
+ import { w as when } from './when.js';
12
12
  import { c as classNames } from './class-names.js';
13
13
  import { L as Localized } from './localized.js';
14
14
  import { F as FormAssociated } from './form-associated.js';
15
15
  import { a as applyMixins } from './apply-mixins.js';
16
16
 
17
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n display: inline-block;\n inline-size: 100%;\n}\n\n.control {\n inline-size: 100%;\n}\n\n.dialog {\n display: inline-flex;\n flex-direction: column;\n padding: 12px;\n gap: 12px;\n}\n.dialog .header {\n display: flex;\n align-items: center;\n padding-block: 8px;\n}\n.dialog .title {\n display: flex;\n flex-grow: 1;\n justify-content: center;\n}\n.dialog .title-action {\n block-size: 24px;\n border-radius: 6px;\n font: var(--vvd-typography-base-extended);\n padding-inline: 6px;\n}\n.dialog .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 8px;\n gap: 8px;\n}\n\n.calendar {\n display: flex;\n flex-direction: column;\n margin-top: 8px;\n gap: 4px;\n}\n.calendar .calendar-separator {\n margin-inline: 10px;\n}\n.calendar .calendar-weekdays {\n display: flex;\n justify-content: center;\n}\n.calendar .calendar-weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n block-size: 16px;\n font: var(--vvd-typography-base-condensed);\n inline-size: 40px;\n}\n.calendar .calendar-week {\n display: flex;\n justify-content: center;\n}\n.calendar .calendar-day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1/1;\n block-size: 28px;\n border-radius: 50%;\n font: var(--vvd-typography-base);\n margin-inline: 6px;\n --focus-inset: -2px;\n}\n.calendar .calendar-day.start, .calendar .calendar-day.end {\n border: 2px solid var(--vvd-color-cta-50);\n background-color: var(--vvd-color-cta-200);\n}\n.calendar .calendar-day::before, .calendar .calendar-day::after {\n position: absolute;\n z-index: -1;\n display: block;\n width: 20px;\n height: 28px;\n}\n.calendar .calendar-day::before {\n right: 50%;\n}\n.calendar .calendar-day::after {\n left: 50%;\n}\n.calendar .calendar-day.range::before, .calendar .calendar-day.range::after {\n background-color: var(--vvd-color-cta-50);\n}\n.calendar .calendar-day.range:not(.start)::before, .calendar .calendar-day.range:not(.end)::after {\n content: \"\";\n}\n.calendar .calendar-day.outside-month, .calendar .calendar-day:disabled {\n color: var(--vvd-color-neutral-400);\n}\n\n.months-separator {\n margin-inline: -12px;\n}\n\n.month-grid {\n display: flex;\n flex-direction: column;\n gap: 34px;\n}\n.month-grid .months-row {\n display: flex;\n justify-content: center;\n gap: 29px;\n}\n.month-grid .month {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1/1;\n block-size: 48px;\n border-radius: 50%;\n font: var(--vvd-typography-base-extended);\n text-transform: uppercase;\n}\n.month-grid .month:disabled {\n color: var(--vvd-color-neutral-400);\n}\n\n.button {\n position: relative;\n padding: 0;\n border: none;\n background-color: var(--_appearance-color-fill);\n color: var(--_appearance-color-text);\n cursor: pointer;\n}\n.button {\n /* @cssprop [--vvd-date-picker-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-date-picker-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-date-picker-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));\n /* @cssprop [--vvd-date-picker-accent-dim=var(--vvd-color-neutral-200)] */\n --_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));\n /* @cssprop [--vvd-date-picker-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300));\n}\n.button {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.button:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.button:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-pale);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:disabled, .disabled) {\n --_appearance-color-text: var(--_connotation-color-pale);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.button .focus-indicator {\n color: var(--vvd-color-canvas-text);\n --focus-stroke-gap-color: transparent;\n}\n.button:focus-visible {\n outline: none;\n}\n.button:not(:focus-visible) .focus-indicator {\n display: none;\n}\n.button.current {\n border: 1px solid var(--vvd-color-neutral-200);\n}\n.button:disabled {\n cursor: not-allowed;\n}";
17
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 22 Nov 2023 16:09:43 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n display: inline-block;\n inline-size: 100%;\n}\n\n.control {\n inline-size: 100%;\n}\n\n.dialog {\n display: inline-flex;\n flex-direction: column;\n padding: 12px;\n gap: 12px;\n}\n.dialog .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 8px;\n gap: 8px;\n}\n\n.segments {\n display: flex;\n gap: 24px;\n}\n\n.segment {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.segment .header {\n display: flex;\n align-items: center;\n padding-block: 8px;\n}\n.segment .title {\n display: flex;\n flex-grow: 1;\n justify-content: center;\n}\n.segment .title-action {\n block-size: 24px;\n border-radius: 6px;\n font: var(--vvd-typography-base-extended);\n padding-inline: 6px;\n}\n\n.calendar {\n display: flex;\n flex-direction: column;\n margin-top: 8px;\n gap: 4px;\n}\n.calendar .calendar-separator {\n margin-inline: 10px;\n}\n.calendar .calendar-weekdays {\n display: flex;\n justify-content: center;\n}\n.calendar .calendar-weekday {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n block-size: 16px;\n font: var(--vvd-typography-base-condensed);\n inline-size: 40px;\n}\n.calendar .calendar-week {\n display: flex;\n justify-content: center;\n}\n.calendar .calendar-day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1/1;\n block-size: 28px;\n border-radius: 50%;\n font: var(--vvd-typography-base);\n margin-inline: 6px;\n --focus-inset: -2px;\n}\n.calendar .calendar-day.start, .calendar .calendar-day.end {\n border: 2px solid var(--vvd-color-cta-50);\n background-color: var(--vvd-color-cta-200);\n}\n.calendar .calendar-day::before, .calendar .calendar-day::after {\n position: absolute;\n z-index: -1;\n display: block;\n width: 20px;\n height: 28px;\n}\n.calendar .calendar-day::before {\n right: 50%;\n}\n.calendar .calendar-day::after {\n left: 50%;\n}\n.calendar .calendar-day.range::before, .calendar .calendar-day.range::after {\n background-color: var(--vvd-color-cta-50);\n}\n.calendar .calendar-day.range:not(.start)::before, .calendar .calendar-day.range:not(.end)::after {\n content: \"\";\n}\n.calendar .calendar-day.outside-month, .calendar .calendar-day:disabled {\n color: var(--vvd-color-neutral-400);\n}\n\n.months-separator {\n margin-inline: -12px;\n}\n\n.month-grid {\n display: flex;\n flex-direction: column;\n gap: 34px;\n}\n.month-grid .months-row {\n display: flex;\n justify-content: center;\n gap: 29px;\n}\n.month-grid .month {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1/1;\n block-size: 48px;\n border-radius: 50%;\n font: var(--vvd-typography-base-extended);\n text-transform: uppercase;\n}\n.month-grid .month:disabled {\n color: var(--vvd-color-neutral-400);\n}\n\n.button {\n position: relative;\n padding: 0;\n border: none;\n background-color: var(--_appearance-color-fill);\n color: var(--_appearance-color-text);\n cursor: pointer;\n}\n.button {\n /* @cssprop [--vvd-date-picker-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-date-picker-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-date-picker-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));\n /* @cssprop [--vvd-date-picker-accent-dim=var(--vvd-color-neutral-200)] */\n --_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));\n /* @cssprop [--vvd-date-picker-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300));\n}\n.button {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.button:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.button:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-pale);\n --_appearance-color-outline: transparent;\n}\n.button:where(.selected, [aria-current]):where(:disabled, .disabled) {\n --_appearance-color-text: var(--_connotation-color-pale);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.button .focus-indicator {\n color: var(--vvd-color-canvas-text);\n --focus-stroke-gap-color: transparent;\n}\n.button:focus-visible {\n outline: none;\n}\n.button:not(:focus-visible) .focus-indicator {\n display: none;\n}\n.button.current {\n border: 1px solid var(--vvd-color-neutral-200);\n}\n.button:disabled {\n cursor: not-allowed;\n}";
18
18
 
19
19
  function _typeof(obj) {
20
20
  "@babel/helpers - typeof";
@@ -5250,94 +5250,84 @@ function renderDialogHeader(context) {
5250
5250
  const focusTemplate = focusTemplateFactory(context);
5251
5251
  return html`<div class="header">
5252
5252
  ${when(
5253
- (x) => x._inMonthPicker,
5254
- html`
5255
- <${buttonTag}
5256
- class="vwc-button"
5257
- size="super-condensed"
5258
- icon="chevron-left-line"
5259
- aria-label="${(x) => x.locale.datePicker.prevYearLabel}"
5260
- ?disabled="${(x) => x._isPrevYearDisabled}"
5261
- @click="${(x) => x._onPrevYearClick()}"
5262
- ></${buttonTag}>
5263
- `
5264
- )}
5265
- ${when(
5266
- (x) => !x._inMonthPicker,
5253
+ (x) => x.prevYearButton,
5267
5254
  html`
5268
5255
  <${buttonTag}
5256
+ tabindex="1"
5269
5257
  class="vwc-button"
5270
5258
  size="super-condensed"
5271
- icon="double-chevron-left-line"
5272
- aria-label="${(x) => x.locale.datePicker.prevYearLabel}"
5273
- ?disabled="${(x) => x._isPrevYearDisabled}"
5274
- @click="${(x) => x._onPrevYearClick()}"
5259
+ icon="${(_, c) => c.parent._inMonthPicker ? "chevron-left-line" : "double-chevron-left-line"}"
5260
+ aria-label="${(_, c) => c.parent.locale.datePicker.prevYearLabel}"
5261
+ ?disabled="${(_, c) => c.parent._isPrevYearDisabled}"
5262
+ @click="${(_, c) => c.parent._onPrevYearClick()}"
5275
5263
  ></${buttonTag}>
5264
+ `
5265
+ )}
5266
+ ${when(
5267
+ (x) => x.prevMonthButton,
5268
+ html`
5276
5269
  <${buttonTag}
5270
+ tabindex="1"
5277
5271
  class="vwc-button"
5278
5272
  size="super-condensed"
5279
5273
  icon="chevron-left-line"
5280
- aria-label="${(x) => x.locale.datePicker.prevMonthLabel}"
5281
- ?disabled="${(x) => x._isPrevMonthDisabled}"
5282
- @click="${(x) => x._onPrevMonthClick()}"
5274
+ aria-label="${(_, c) => c.parent.locale.datePicker.prevMonthLabel}"
5275
+ ?disabled="${(_, c) => c.parent._isPrevMonthDisabled}"
5276
+ @click="${(_, c) => c.parent._onPrevMonthClick()}"
5283
5277
  ></${buttonTag}>
5284
5278
  `
5285
5279
  )}
5286
-
5287
5280
  <div class="title">
5281
+ ${when((x) => x.titleClickable, html`
5288
5282
  <button
5289
- id="grid-label"
5283
+ tabindex="1"
5284
+ id="${(x) => `grid-label-${x.id}`}"
5290
5285
  class="title-action button"
5291
5286
  aria-live="polite"
5292
- @click="${(x) => x._onTitleActionClick()}"
5287
+ @click="${(_, c) => c.parent._onTitleActionClick()}"
5293
5288
  >
5294
5289
  ${() => focusTemplate}
5295
- ${when(
5296
- (x) => x._inMonthPicker,
5297
- html` ${(x) => x._monthPickerYear} `
5298
- )}
5299
- ${when(
5300
- (x) => !x._inMonthPicker,
5301
- html`
5302
- ${(x) => `${x.locale.datePicker.months.name[x._selectedMonth.month]} ${x._selectedMonth.year}`}
5303
- `
5304
- )}
5290
+ ${(x) => x.title}
5305
5291
  </button>
5292
+ `)}
5293
+ ${when((x) => !x.titleClickable, html`
5294
+ <div
5295
+ id="${(x) => `grid-label-${x.id}`}"
5296
+ class="title-action"
5297
+ aria-live="polite"
5298
+ >
5299
+ ${(x) => x.title}
5300
+ </div>
5301
+ `)}
5306
5302
  </div>
5307
5303
 
5308
5304
  ${when(
5309
- (x) => x._inMonthPicker,
5305
+ (x) => x.nextMonthButton,
5310
5306
  html`
5311
- <${buttonTag}
5312
- class="vwc-button"
5313
- size="super-condensed"
5314
- icon="chevron-right-line"
5315
- aria-label="${(x) => x.locale.datePicker.nextYearLabel}"
5316
- ?disabled="${(x) => x._isNextYearDisabled}"
5317
- @click="${(x) => x._onNextYearClick()}"
5318
- ></${buttonTag}>
5319
- `
5307
+ <${buttonTag}
5308
+ tabindex="1"
5309
+ class="vwc-button"
5310
+ size="super-condensed"
5311
+ icon="chevron-right-line"
5312
+ aria-label="${(_, c) => c.parent.locale.datePicker.nextMonthLabel}"
5313
+ ?disabled="${(_, c) => c.parent._isNextMonthDisabled}"
5314
+ @click="${(_, c) => c.parent._onNextMonthClick()}"
5315
+ ></${buttonTag}>
5316
+ `
5320
5317
  )}
5321
5318
  ${when(
5322
- (x) => !x._inMonthPicker,
5319
+ (x) => x.nextYearButton,
5323
5320
  html`
5324
- <${buttonTag}
5325
- class="vwc-button"
5326
- size="super-condensed"
5327
- icon="chevron-right-line"
5328
- aria-label="${(x) => x.locale.datePicker.nextMonthLabel}"
5329
- ?disabled="${(x) => x._isNextMonthDisabled}"
5330
- @click="${(x) => x._onNextMonthClick()}"
5331
- ></${buttonTag}>
5332
- <${buttonTag}
5333
- class="vwc-button"
5334
- size="super-condensed"
5335
- icon="double-chevron-right-line"
5336
- aria-label="${(x) => x.locale.datePicker.nextYearLabel}"
5337
- ?disabled="${(x) => x._isNextYearDisabled}"
5338
- @click="${(x) => x._onNextYearClick()}"
5339
- ></${buttonTag}>
5340
- `
5321
+ <${buttonTag}
5322
+ tabindex="1"
5323
+ class="vwc-button"
5324
+ size="super-condensed"
5325
+ icon="${(_, c) => c.parent._inMonthPicker ? "chevron-right-line" : "double-chevron-right-line"}"
5326
+ aria-label="${(_, c) => c.parent.locale.datePicker.nextYearLabel}"
5327
+ ?disabled="${(_, c) => c.parent._isNextYearDisabled}"
5328
+ @click="${(_, c) => c.parent._onNextYearClick()}"
5329
+ ></${buttonTag}>
5330
+ `
5341
5331
  )}
5342
5332
  </div>`;
5343
5333
  }
@@ -5347,11 +5337,11 @@ function renderCalendarGrid(context) {
5347
5337
  return html`<div
5348
5338
  class="calendar"
5349
5339
  role="grid"
5350
- aria-labelledby="grid-label"
5340
+ aria-labelledby="${(x) => `grid-label-${x.id}`}"
5351
5341
  >
5352
5342
  <div class="calendar-weekdays" role="row">
5353
5343
  ${repeat(
5354
- (x) => x._calendarGrid.weekdays,
5344
+ (x) => x.calendar.weekdays,
5355
5345
  html`
5356
5346
  <div
5357
5347
  class="calendar-weekday"
@@ -5365,53 +5355,68 @@ function renderCalendarGrid(context) {
5365
5355
  </div>
5366
5356
  <${dividerTag} class="calendar-separator" role="presentation"></${dividerTag}>
5367
5357
  ${repeat(
5368
- (x) => x._calendarGrid.grid,
5358
+ (x) => x.calendar.grid,
5369
5359
  html`
5370
5360
  <div class="calendar-week" role="row">
5371
5361
  ${repeat(
5372
5362
  (x) => x,
5373
- html`<button
5363
+ html`
5364
+ ${when(
5365
+ (x, c) => c.parentContext.parentContext.parent._hideDatesOutsideMonth && x.isOutsideMonth,
5366
+ html`<div class="calendar-day"></div>`
5367
+ )}
5368
+ ${when(
5369
+ (x, c) => !c.parentContext.parentContext.parent._hideDatesOutsideMonth || !x.isOutsideMonth,
5370
+ html`
5371
+ <button
5374
5372
  class="${(x, c) => classNames(
5375
- "calendar-day",
5376
- "button",
5377
- ["current", x.date === c.parentContext.parent._currentDate],
5378
- ["selected", c.parentContext.parent._isDateSelected(x.date)],
5379
- ["range", c.parentContext.parent._isDateInSelectedRange(x.date)],
5380
- ["start", c.parentContext.parent._isDateRangeStart(x.date)],
5381
- ["end", c.parentContext.parent._isDateRangeEnd(x.date)],
5382
- ["outside-month", x.isOutsideMonth]
5383
- )}"
5373
+ "calendar-day",
5374
+ "button",
5375
+ ["current", x.date === c.parentContext.parentContext.parent._currentDate],
5376
+ ["selected", c.parentContext.parentContext.parent._isDateSelected(x.date)],
5377
+ ["range", c.parentContext.parentContext.parent._isDateInSelectedRange(x.date)],
5378
+ ["start", c.parentContext.parentContext.parent._isDateRangeStart(x.date)],
5379
+ ["end", c.parentContext.parentContext.parent._isDateRangeEnd(x.date)],
5380
+ ["outside-month", x.isOutsideMonth]
5381
+ )}"
5384
5382
  role="gridcell"
5385
- ?disabled="${(x, c) => !c.parentContext.parent._isDateInValidRange(x.date)}"
5386
- tabindex="${(x, c) => x.date === c.parentContext.parent._tabbableDate ? 0 : -1}"
5387
- aria-selected="${(x, c) => c.parentContext.parent._isDateAriaSelected(x.date)}"
5383
+ ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isDateInValidRange(x.date)}"
5384
+ tabindex="${(x, c) => x.date === c.parentContext.parentContext.parent._tabbableDate ? 2 : -1}"
5385
+ aria-selected="${(x, c) => c.parentContext.parentContext.parent._isDateAriaSelected(x.date)}"
5388
5386
  data-date="${(x) => x.date}"
5389
- @click="${(x, c) => c.parentContext.parent._onDateClick(x.date)}"
5390
- @focus="${(x, c) => c.parentContext.parent._onDateFocus(x.date)}"
5391
- @mouseenter="${(x, c) => c.parentContext.parent._onDateMouseEnter(x.date)}"
5392
- @mouseleave="${(x, c) => c.parentContext.parent._onDateMouseLeave(x.date)}"
5393
- @keydown="${(x, c) => c.parentContext.parent._onDateKeydown(
5394
- x.date,
5395
- c.event
5396
- )}"
5387
+ @click="${(x, c) => c.parentContext.parentContext.parent._onDateClick(x.date)}"
5388
+ @focus="${(x, c) => c.parentContext.parentContext.parent._onDateFocus(x.date)}"
5389
+ @mouseenter="${(x, c) => c.parentContext.parentContext.parent._onDateMouseEnter(x.date)}"
5390
+ @mouseleave="${(x, c) => c.parentContext.parentContext.parent._onDateMouseLeave(x.date)}"
5391
+ @keydown="${(x, c) => c.parentContext.parentContext.parent._onDateKeydown(
5392
+ x.date,
5393
+ c.event
5394
+ )}"
5397
5395
  >
5398
5396
  ${() => focusTemplate} ${(x) => x.label}
5399
5397
  </button>`
5400
- )}
5398
+ )}
5401
5399
  </div>
5402
5400
  `
5403
- )}
5404
- </div>`;
5401
+ )}
5402
+ </div>`
5403
+ )}`;
5405
5404
  }
5406
5405
  function renderMonthPickerGrid(context) {
5406
+ const dividerTag = context.tagFor(Divider);
5407
5407
  const focusTemplate = focusTemplateFactory(context);
5408
- return html`<div
5408
+ return html`
5409
+ <${dividerTag}
5410
+ class="months-separator"
5411
+ role="presentation"
5412
+ ></${dividerTag}>
5413
+ <div
5409
5414
  class="month-grid"
5410
5415
  role="grid"
5411
5416
  aria-labelledby="grid-label"
5412
5417
  >
5413
5418
  ${repeat(
5414
- (x) => x._monthPickerGrid,
5419
+ (x) => x.months,
5415
5420
  html`
5416
5421
  <div class="months-row" role="row">
5417
5422
  ${repeat(
@@ -5425,29 +5430,29 @@ function renderMonthPickerGrid(context) {
5425
5430
  "current",
5426
5431
  areMonthsEqual(
5427
5432
  x.month,
5428
- c.parentContext.parent._currentMonth
5433
+ c.parentContext.parentContext.parent._currentMonth
5429
5434
  )
5430
5435
  ],
5431
5436
  [
5432
5437
  "selected",
5433
5438
  areMonthsEqual(
5434
5439
  x.month,
5435
- c.parentContext.parent._selectedMonth
5440
+ c.parentContext.parentContext.parent._selectedMonth
5436
5441
  )
5437
5442
  ]
5438
5443
  )}"
5439
5444
  role="gridcell"
5440
- tabindex="${(x, c) => c.parentContext.parent._tabbableMonth && areMonthsEqual(x.month, c.parentContext.parent._tabbableMonth) ? 0 : -1}"
5445
+ tabindex="${(x, c) => c.parentContext.parentContext.parent._tabbableMonth && areMonthsEqual(x.month, c.parentContext.parentContext.parent._tabbableMonth) ? 2 : -1}"
5441
5446
  aria-label="${(x) => x.monthName}"
5442
5447
  aria-selected="${(x, c) => areMonthsEqual(
5443
5448
  x.month,
5444
- c.parentContext.parent._selectedMonth
5449
+ c.parentContext.parentContext.parent._selectedMonth
5445
5450
  )}"
5446
5451
  data-month="${(x) => monthToStr(x.month)}"
5447
- ?disabled="${(x, c) => !c.parentContext.parent._isMonthInValidRange(x.month)}"
5448
- @click="${(x, c) => c.parentContext.parent._onMonthClick(x.month)}"
5449
- @focus="${(x, c) => c.parentContext.parent._onMonthFocus(x.month)}"
5450
- @keydown="${(x, c) => c.parentContext.parent._onMonthKeydown(
5452
+ ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isMonthInValidRange(x.month)}"
5453
+ @click="${(x, c) => c.parentContext.parentContext.parent._onMonthClick(x.month)}"
5454
+ @focus="${(x, c) => c.parentContext.parentContext.parent._onMonthFocus(x.month)}"
5455
+ @keydown="${(x, c) => c.parentContext.parentContext.parent._onMonthKeydown(
5451
5456
  x.month,
5452
5457
  c.event
5453
5458
  )}"
@@ -5465,7 +5470,6 @@ const DatePickerBaseTemplate = (context, _) => {
5465
5470
  const popupTag = context.tagFor(Popup);
5466
5471
  const textFieldTag = context.tagFor(TextField);
5467
5472
  const buttonTag = context.tagFor(Button);
5468
- const dividerTag = context.tagFor(Divider);
5469
5473
  return html`<div class="base" @keydown="${(x, { event }) => x._onBaseKeyDown(event)}">
5470
5474
  <${textFieldTag} id="text-field"
5471
5475
  ${ref("_textFieldEl")}
@@ -5501,29 +5505,33 @@ const DatePickerBaseTemplate = (context, _) => {
5501
5505
  <div class="dialog" role="dialog" ${ref(
5502
5506
  "_dialogEl"
5503
5507
  )} aria-modal="true" aria-label="${(x) => x.locale.datePicker.chooseDateLabel}">
5508
+ <div class="segments">
5509
+ ${repeat(
5510
+ (x) => x._segments,
5511
+ html`
5512
+ <div class="segment">
5504
5513
  ${renderDialogHeader(context)}
5505
5514
  ${when(
5506
- (x) => x._inMonthPicker,
5507
- html`
5508
- <${dividerTag}
5509
- class="months-separator"
5510
- role="presentation"
5511
- ></${dividerTag}>
5512
- ${renderMonthPickerGrid(context)}
5513
- `
5514
- )}
5515
+ (x) => x.type === "month-picker",
5516
+ html`${renderMonthPickerGrid(context)}`
5517
+ )}
5515
5518
  ${when(
5516
- (x) => !x._inMonthPicker,
5517
- html` ${renderCalendarGrid(context)} `
5519
+ (x) => x.type === "calendar",
5520
+ html`${renderCalendarGrid(context)}`
5521
+ )}
5522
+ </div>`
5518
5523
  )}
5524
+ </div>
5519
5525
  <div class="footer">
5520
5526
  <${buttonTag}
5527
+ tabindex="3"
5521
5528
  class="vwc-button"
5522
5529
  size="condensed"
5523
5530
  label="${(x) => x.locale.datePicker.clearLabel}"
5524
5531
  @click="${(x) => x._onClearClick()}"
5525
5532
  ></${buttonTag}>
5526
5533
  <${buttonTag}
5534
+ tabindex="3"
5527
5535
  class="vwc-button"
5528
5536
  size="condensed"
5529
5537
  appearance="filled"
@@ -5675,6 +5683,11 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5675
5683
  /// Used to stop the popup from immediately opening when closing popup and returning focus to text field
5676
5684
  this.#isClosingPopup = false;
5677
5685
  this._presentationValue = "";
5686
+ this._numCalendars = 1;
5687
+ /**
5688
+ * @internal
5689
+ */
5690
+ this._hideDatesOutsideMonth = false;
5678
5691
  this._lastFocussedDate = null;
5679
5692
  this._monthPickerYear = null;
5680
5693
  this._lastFocussedMonth = null;
@@ -5719,6 +5732,19 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5719
5732
  lastFocusableEl: focusableEls[focusableEls.length - 1]
5720
5733
  };
5721
5734
  }
5735
+ _adjustSelectedMonthToEnsureVisibilityOf(date) {
5736
+ const month = monthOfDate(date);
5737
+ const firstDisplayedMonth = this._selectedMonth;
5738
+ const lastDisplayedMonth = addMonths(this._selectedMonth, this._numCalendars - 1);
5739
+ if (compareMonths(month, firstDisplayedMonth) < 0) {
5740
+ this._selectedMonth = month;
5741
+ return true;
5742
+ } else if (compareMonths(month, lastDisplayedMonth) > 0) {
5743
+ this._selectedMonth = addMonths(month, 1 - this._numCalendars);
5744
+ return true;
5745
+ }
5746
+ return false;
5747
+ }
5722
5748
  /**
5723
5749
  * @internal
5724
5750
  */
@@ -5758,7 +5784,7 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5758
5784
  if (this.proxy) {
5759
5785
  this.proxy.setCustomValidity(this._getCustomValidationError() ?? "");
5760
5786
  }
5761
- super.validate(this._textFieldEl?.shadowRoot?.querySelector("input") ?? void 0);
5787
+ super.validate(this._textFieldEl?.querySelector("input") ?? void 0);
5762
5788
  }
5763
5789
  #dismissOnClickOutside;
5764
5790
  #isClosingPopup;
@@ -5902,13 +5928,44 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5902
5928
  _onNextMonthClick() {
5903
5929
  this._selectedMonth = addMonths(this._selectedMonth, 1);
5904
5930
  }
5905
- // --- Calendar ---
5906
5931
  /**
5907
- * The calendar grid used to render the calendar.
5908
5932
  * @internal
5909
5933
  */
5910
- get _calendarGrid() {
5911
- return buildCalendarGrid(this._selectedMonth, this.locale.datePicker);
5934
+ get _segments() {
5935
+ const segments = [];
5936
+ if (this._inMonthPicker) {
5937
+ segments.push({
5938
+ id: 0,
5939
+ type: "month-picker",
5940
+ title: `${this._monthPickerYear}`,
5941
+ titleClickable: true,
5942
+ prevYearButton: true,
5943
+ nextYearButton: true,
5944
+ months: buildMonthPickerGrid(
5945
+ this._monthPickerYear,
5946
+ this.locale.datePicker
5947
+ )
5948
+ });
5949
+ } else {
5950
+ for (let i = 0; i < this._numCalendars; i++) {
5951
+ const month = addMonths(this._selectedMonth, i);
5952
+ const isSingle = this._numCalendars === 1;
5953
+ const isFirst = i === 0;
5954
+ const isLast = i === this._numCalendars - 1;
5955
+ segments.push({
5956
+ id: i,
5957
+ type: "calendar",
5958
+ title: `${this.locale.datePicker.months.name[month.month]} ${month.year}`,
5959
+ titleClickable: isSingle,
5960
+ prevYearButton: isFirst && isSingle,
5961
+ prevMonthButton: isFirst,
5962
+ nextMonthButton: isLast,
5963
+ nextYearButton: isLast && isSingle,
5964
+ calendar: buildCalendarGrid(month, this.locale.datePicker)
5965
+ });
5966
+ }
5967
+ }
5968
+ return segments;
5912
5969
  }
5913
5970
  /**
5914
5971
  * @internal
@@ -5960,9 +6017,7 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5960
6017
  newDate = addDays(date, 1);
5961
6018
  }
5962
6019
  if (newDate && this._isDateInValidRange(newDate)) {
5963
- const newMonth = monthOfDate(newDate);
5964
- if (!areMonthsEqual(newMonth, this._selectedMonth)) {
5965
- this._selectedMonth = newMonth;
6020
+ if (this._adjustSelectedMonthToEnsureVisibilityOf(newDate)) {
5966
6021
  DOM.processUpdates();
5967
6022
  }
5968
6023
  this._dialogEl.querySelector(
@@ -5979,15 +6034,19 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5979
6034
  this._lastFocussedDate = date;
5980
6035
  }
5981
6036
  get _tabbableDate() {
5982
- const datesInGrid = this._calendarGrid.grid.flat().map((date) => date.date);
6037
+ const datesInSegments = this._segments.filter((segment) => segment.type === "calendar").flatMap(
6038
+ (segment) => segment.calendar.grid.flat().map((d) => d.date)
6039
+ );
5983
6040
  const candidates = [
5984
6041
  this._lastFocussedDate,
5985
6042
  ...this._getSelectedDates(),
5986
6043
  currentDateStr(),
5987
- ...datesInGrid
6044
+ ...datesInSegments
5988
6045
  ];
6046
+ const firstVisibleMonth = this._selectedMonth;
6047
+ const lastVisibleMonth = addMonths(this._selectedMonth, this._numCalendars - 1);
5989
6048
  return candidates.find(
5990
- (date) => date && areMonthsEqual(monthOfDate(date), this._selectedMonth) && this._isDateInValidRange(date)
6049
+ (date) => date && compareMonths(monthOfDate(date), firstVisibleMonth) >= 0 && compareMonths(monthOfDate(date), lastVisibleMonth) <= 0 && this._isDateInValidRange(date)
5991
6050
  ) ?? null;
5992
6051
  }
5993
6052
  /**
@@ -5996,16 +6055,6 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
5996
6055
  get _inMonthPicker() {
5997
6056
  return this._monthPickerYear !== null;
5998
6057
  }
5999
- /**
6000
- * The months grid used to render the month picker.
6001
- * @internal
6002
- */
6003
- get _monthPickerGrid() {
6004
- return buildMonthPickerGrid(
6005
- this._monthPickerYear ?? this._currentMonth.year,
6006
- this.locale.datePicker
6007
- );
6008
- }
6009
6058
  /**
6010
6059
  * Handle month selected in the month picker.
6011
6060
  * @internal
@@ -6048,16 +6097,17 @@ class DatePickerBase extends FormAssociatedDatePickerBase {
6048
6097
  this._lastFocussedMonth = month;
6049
6098
  }
6050
6099
  get _tabbableMonth() {
6051
- const year = this._monthPickerYear ?? this._selectedMonth.year;
6052
- const monthsInGrid = this._monthPickerGrid.flat().map((cell) => cell.month);
6100
+ const monthsInSegments = this._segments.filter(
6101
+ (segments) => segments.type === "month-picker"
6102
+ ).flatMap((segment) => segment.months.flat().map((c) => c.month));
6053
6103
  const candidates = [
6054
6104
  this._lastFocussedMonth,
6055
6105
  this._selectedMonth,
6056
6106
  getCurrentMonth(),
6057
- ...monthsInGrid
6107
+ ...monthsInSegments
6058
6108
  ];
6059
6109
  return candidates.find(
6060
- (month) => month && month.year === year && this._isMonthInValidRange(month)
6110
+ (month) => month && month.year === this._monthPickerYear && this._isMonthInValidRange(month)
6061
6111
  ) ?? null;
6062
6112
  }
6063
6113
  // --- Dialog footer ---
@@ -6104,6 +6154,9 @@ __decorateClass([
6104
6154
  __decorateClass([
6105
6155
  volatile
6106
6156
  ], DatePickerBase.prototype, "_isNextYearDisabled", 1);
6157
+ __decorateClass([
6158
+ observable
6159
+ ], DatePickerBase.prototype, "_numCalendars", 2);
6107
6160
  __decorateClass([
6108
6161
  observable
6109
6162
  ], DatePickerBase.prototype, "_lastFocussedDate", 2);
@@ -6130,4 +6183,4 @@ const parsePresentationDate = (presentationDate, locale) => {
6130
6183
  return formatDateStr(date);
6131
6184
  };
6132
6185
 
6133
- export { DatePickerBase as D, DatePickerBaseTemplate as a, compareDateStr as c, formatPresentationDate as f, isValidDateStr as i, monthOfDate as m, parsePresentationDate as p, styles as s };
6186
+ export { DatePickerBase as D, DatePickerBaseTemplate as a, compareDateStr as c, formatPresentationDate as f, isValidDateStr as i, parsePresentationDate as p, styles as s };
package/shared/radio.js CHANGED
@@ -133,7 +133,14 @@ var __decorateClass = (decorators, target, key, kind) => {
133
133
  return result;
134
134
  };
135
135
  class Radio extends Radio$1 {
136
+ constructor() {
137
+ super(...arguments);
138
+ this.ariaLabel = null;
139
+ }
136
140
  }
141
+ __decorateClass([
142
+ attr({ attribute: "aria-label" })
143
+ ], Radio.prototype, "ariaLabel", 2);
137
144
  __decorateClass([
138
145
  attr
139
146
  ], Radio.prototype, "label", 2);
@@ -1,3 +1,3 @@
1
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n --_text-field-gutter: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2.5);\n --_text-field-icon-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n display: inline-grid;\n width: 100%;\n gap: 4px;\n grid-template-columns: min-content 1fr max-content;\n}\n.base {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-600);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.connotation-success {\n /* @cssprop [--vvd-text-field-success-primary=var(--vvd-color-success-500)] */\n --_connotation-color-primary: var(--vvd-text-field-success-primary, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-field-success-backdrop=var(--vvd-color-success-50)] */\n --_connotation-color-backdrop: var(--vvd-text-field-success-backdrop, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-field-success-intermediate=var(--vvd-color-success-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-success-intermediate, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-field-success-firm=var(--vvd-color-success-600)] */\n --_connotation-color-firm: var(--vvd-text-field-success-firm, var(--vvd-color-success-600));\n /* @cssprop [--vvd-text-field-success-faint=var(--vvd-color-success-50)] */\n --_connotation-color-faint: var(--vvd-text-field-success-faint, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-field-success-soft=var(--vvd-color-success-100)] */\n --_connotation-color-soft: var(--vvd-text-field-success-soft, var(--vvd-color-success-100));\n}\n.base.connotation-alert {\n /* @cssprop [--vvd-text-field-alert-primary=var(--vvd-color-alert-500)] */\n --_connotation-color-primary: var(--vvd-text-field-alert-primary, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-field-alert-backdrop=var(--vvd-color-alert-50)] */\n --_connotation-color-backdrop: var(--vvd-text-field-alert-backdrop, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-field-alert-intermediate=var(--vvd-color-alert-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-alert-intermediate, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-field-alert-firm=var(--vvd-color-alert-600)] */\n --_connotation-color-firm: var(--vvd-text-field-alert-firm, var(--vvd-color-alert-600));\n /* @cssprop [--vvd-text-field-alert-faint=var(--vvd-color-alert-50)] */\n --_connotation-color-faint: var(--vvd-text-field-alert-faint, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-field-alert-soft=var(--vvd-color-alert-100)] */\n --_connotation-color-soft: var(--vvd-text-field-alert-soft, var(--vvd-color-alert-100));\n}\n.base:not(.connotation-success, .connotation-alert) {\n /* @cssprop [--vvd-text-field-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-text-field-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-field-accent-backdrop=var(--vvd-color-canvas)] */\n --_connotation-color-backdrop: var(--vvd-text-field-accent-backdrop, var(--vvd-color-canvas));\n /* @cssprop [--vvd-text-field-accent-intermediate=var(--vvd-color-neutral-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-accent-intermediate, var(--vvd-color-neutral-500));\n /* @cssprop [--vvd-text-field-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-text-field-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-field-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-text-field-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-text-field-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-text-field-accent-soft, var(--vvd-color-neutral-100));\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n --_low-ink-color: var(--vvd-color-neutral-600);\n}\n.base.disabled {\n --_low-ink-color: var(--_appearance-color-text);\n}\n\n.label {\n color: var(--vvd-color-canvas-text);\n contain: inline-size;\n font: var(--vvd-typography-base);\n grid-column: 1/4;\n grid-row: 1;\n}\n.char-count + .label {\n grid-column: 1/3;\n}\n\n.char-count {\n color: var(--_low-ink-color);\n font: var(--vvd-typography-base);\n grid-column: 3/4;\n}\n\n.fieldset {\n position: relative;\n display: flex;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n font: var(--vvd-typography-base);\n grid-column: 1/4;\n padding-block: 0;\n transition: color 0.2s, background-color 0.2s;\n /* Shape */\n}\n.fieldset::after {\n position: absolute;\n display: block;\n block-size: 100%;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n content: \"\";\n inline-size: 100%;\n pointer-events: none;\n transition: box-shadow 0.2s;\n}\n.fieldset:focus-visible {\n outline: none;\n}\n.base > .fieldset {\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.base:not(.shape-pill) .fieldset {\n border-radius: 6px;\n}\n.base.shape-pill .fieldset {\n border-radius: 24px;\n}\n\n.wrapper {\n block-size: 100%;\n border-radius: inherit;\n inline-size: 100%;\n}\n.wrapper:focus-visible {\n outline: none;\n}\n\n.control {\n width: 100%;\n box-sizing: border-box;\n border: 0 none;\n appearance: none; /* for box-shadow visibility on IOS */\n background-color: transparent;\n block-size: 100%;\n border-radius: inherit;\n color: inherit;\n font: inherit;\n padding-block: 0;\n padding-inline-end: var(--_text-field-gutter);\n padding-inline-start: var(--_text-field-gutter);\n}\n.control:disabled {\n cursor: not-allowed;\n opacity: 1; /* 2. correct opacity on iOS */\n -webkit-text-fill-color: var(--_appearance-color-text); /* 1. sets text fill to current `color` for safari */\n}\n.control::placeholder, .control:disabled::placeholder {\n opacity: 1; /* 2. correct opacity on iOS */\n -webkit-text-fill-color: var(--_low-ink-color); /* 1. sets text fill to current `color` for safari */\n}\n.control:focus-visible {\n outline: none;\n}\n.has-icon .control {\n padding-inline-start: calc(var(--_text-field-icon-size) + var(--_text-field-gutter) * 2);\n}\n\n.icon {\n position: absolute;\n z-index: 1;\n color: var(--_low-ink-color);\n font-size: var(--_text-field-icon-size);\n inset-block-start: 50%;\n inset-inline-start: calc(100% + var(--_text-field-gutter));\n line-height: 1;\n transform: translateY(-50%);\n}\n\n.leading-items-wrapper {\n position: relative;\n}\n.base.no-leading .leading-items-wrapper {\n display: none;\n}\n\n.action-items-wrapper {\n margin-inline-end: 4px;\n}\n.base:not(.action-items) .action-items-wrapper {\n display: none;\n}\n\n.focus-indicator {\n --focus-stroke-gap-color: transparent;\n pointer-events: none;\n}\n.wrapper:not(:focus-visible, :focus-within) > .focus-indicator, .fieldset:not(:focus-visible, :focus-within) > .focus-indicator {\n display: none;\n}";
1
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 22 Nov 2023 16:09:43 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n --_text-field-gutter: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2.5);\n --_text-field-icon-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n display: inline-grid;\n width: 100%;\n gap: 4px;\n grid-template-columns: min-content 1fr max-content;\n}\n.base {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-600);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.connotation-success {\n /* @cssprop [--vvd-text-field-success-primary=var(--vvd-color-success-500)] */\n --_connotation-color-primary: var(--vvd-text-field-success-primary, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-field-success-backdrop=var(--vvd-color-success-50)] */\n --_connotation-color-backdrop: var(--vvd-text-field-success-backdrop, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-field-success-intermediate=var(--vvd-color-success-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-success-intermediate, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-field-success-firm=var(--vvd-color-success-600)] */\n --_connotation-color-firm: var(--vvd-text-field-success-firm, var(--vvd-color-success-600));\n /* @cssprop [--vvd-text-field-success-faint=var(--vvd-color-success-50)] */\n --_connotation-color-faint: var(--vvd-text-field-success-faint, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-field-success-soft=var(--vvd-color-success-100)] */\n --_connotation-color-soft: var(--vvd-text-field-success-soft, var(--vvd-color-success-100));\n}\n.base.connotation-alert {\n /* @cssprop [--vvd-text-field-alert-primary=var(--vvd-color-alert-500)] */\n --_connotation-color-primary: var(--vvd-text-field-alert-primary, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-field-alert-backdrop=var(--vvd-color-alert-50)] */\n --_connotation-color-backdrop: var(--vvd-text-field-alert-backdrop, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-field-alert-intermediate=var(--vvd-color-alert-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-alert-intermediate, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-field-alert-firm=var(--vvd-color-alert-600)] */\n --_connotation-color-firm: var(--vvd-text-field-alert-firm, var(--vvd-color-alert-600));\n /* @cssprop [--vvd-text-field-alert-faint=var(--vvd-color-alert-50)] */\n --_connotation-color-faint: var(--vvd-text-field-alert-faint, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-field-alert-soft=var(--vvd-color-alert-100)] */\n --_connotation-color-soft: var(--vvd-text-field-alert-soft, var(--vvd-color-alert-100));\n}\n.base:not(.connotation-success, .connotation-alert) {\n /* @cssprop [--vvd-text-field-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-text-field-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-field-accent-backdrop=var(--vvd-color-canvas)] */\n --_connotation-color-backdrop: var(--vvd-text-field-accent-backdrop, var(--vvd-color-canvas));\n /* @cssprop [--vvd-text-field-accent-intermediate=var(--vvd-color-neutral-500)] */\n --_connotation-color-intermediate: var(--vvd-text-field-accent-intermediate, var(--vvd-color-neutral-500));\n /* @cssprop [--vvd-text-field-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-text-field-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-field-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-text-field-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-text-field-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-text-field-accent-soft, var(--vvd-color-neutral-100));\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n --_low-ink-color: var(--vvd-color-neutral-600);\n}\n.base.disabled {\n --_low-ink-color: var(--_appearance-color-text);\n}\n\n.label:not(slot),\n.label::slotted(label) {\n color: var(--vvd-color-canvas-text);\n contain: inline-size;\n font: var(--vvd-typography-base);\n grid-column: 1/4;\n grid-row: 1;\n}\n.char-count + .label:not(slot),\n.char-count + .label::slotted(label) {\n grid-column: 1/3;\n}\n\n.char-count {\n color: var(--_low-ink-color);\n font: var(--vvd-typography-base);\n grid-column: 3/4;\n}\n\n.fieldset {\n position: relative;\n display: flex;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n font: var(--vvd-typography-base);\n grid-column: 1/4;\n padding-block: 0;\n transition: color 0.2s, background-color 0.2s;\n /* Shape */\n}\n.fieldset::after {\n position: absolute;\n display: block;\n block-size: 100%;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n content: \"\";\n inline-size: 100%;\n pointer-events: none;\n transition: box-shadow 0.2s;\n}\n.fieldset:focus-visible {\n outline: none;\n}\n.base > .fieldset {\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.base:not(.shape-pill) .fieldset {\n border-radius: 6px;\n}\n.base.shape-pill .fieldset {\n border-radius: 24px;\n}\n\n.wrapper {\n block-size: 100%;\n border-radius: inherit;\n inline-size: 100%;\n}\n.wrapper:focus-visible {\n outline: none;\n}\n\n.control:not(slot), .control::slotted(input) {\n width: 100%;\n box-sizing: border-box;\n border: 0 none;\n appearance: none; /* for box-shadow visibility on IOS */\n background-color: transparent;\n block-size: 100%;\n border-radius: inherit;\n color: inherit;\n font: inherit;\n padding-block: 0;\n padding-inline-end: var(--_text-field-gutter);\n padding-inline-start: var(--_text-field-gutter);\n}\n.control:not(slot):disabled, .control::slotted(input:disabled) {\n cursor: not-allowed;\n opacity: 1; /* 2. correct opacity on iOS */\n -webkit-text-fill-color: var(--_appearance-color-text); /* 1. sets text fill to current `color` for safari */\n}\n.control:not(slot)::placeholder {\n opacity: 1 !important; /* 2. correct opacity on iOS */\n -webkit-text-fill-color: var(--_low-ink-color) !important; /* 1. sets text fill to current `color` for safari */\n}\n.control:not(slot):focus-visible, .control::slotted(input:focus-visible) {\n outline: none;\n}\n.has-icon .control:not(slot), .has-icon .control::slotted(input) {\n padding-inline-start: calc(var(--_text-field-icon-size) + var(--_text-field-gutter) * 2);\n}\n\n.icon {\n position: absolute;\n z-index: 1;\n color: var(--_low-ink-color);\n font-size: var(--_text-field-icon-size);\n inset-block-start: 50%;\n inset-inline-start: calc(100% + var(--_text-field-gutter));\n line-height: 1;\n transform: translateY(-50%);\n}\n\n.leading-items-wrapper {\n position: relative;\n}\n.base.no-leading .leading-items-wrapper {\n display: none;\n}\n\n.action-items-wrapper {\n margin-inline-end: 4px;\n}\n.base:not(.action-items) .action-items-wrapper {\n display: none;\n}\n\n.focus-indicator {\n --focus-stroke-gap-color: transparent;\n pointer-events: none;\n}\n.wrapper:not(:focus-visible, :focus-within) > .focus-indicator, .fieldset:not(:focus-visible, :focus-within) > .focus-indicator {\n display: none;\n}";
2
2
 
3
3
  export { styles as s };
@@ -0,0 +1,8 @@
1
+ export declare class Reflector<S, T extends HTMLElement> {
2
+ #private;
3
+ constructor(source: S, target: T);
4
+ attribute(propertyName: keyof S, attributeName: string): void;
5
+ booleanAttribute(propertyName: keyof S, attributeName: string): void;
6
+ property(propertyName: keyof S, targetProperty: keyof T, skipIfEqual?: boolean): void;
7
+ destroy(): void;
8
+ }
@@ -0,0 +1 @@
1
+ export declare const generateRandomId: () => string;
@@ -1,4 +1,4 @@
1
- import { r as registerSideDrawer } from '../shared/definition41.js';
1
+ import { r as registerSideDrawer } from '../shared/definition43.js';
2
2
  import '../shared/index.js';
3
3
  import '../shared/when.js';
4
4
  import '../shared/class-names.js';