igniteui-webcomponents 7.3.0-beta.0 → 7.3.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 (375) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/animations/player.d.ts +7 -2
  3. package/animations/player.js +1 -2
  4. package/animations/player.js.map +1 -1
  5. package/components/accordion/accordion.js +4 -16
  6. package/components/accordion/accordion.js.map +1 -1
  7. package/components/avatar/avatar.d.ts +0 -1
  8. package/components/avatar/avatar.js +5 -9
  9. package/components/avatar/avatar.js.map +1 -1
  10. package/components/badge/badge.d.ts +1 -3
  11. package/components/badge/badge.js +4 -8
  12. package/components/badge/badge.js.map +1 -1
  13. package/components/banner/banner.d.ts +6 -5
  14. package/components/banner/banner.js +19 -17
  15. package/components/banner/banner.js.map +1 -1
  16. package/components/button/button-base.d.ts +1 -1
  17. package/components/button/button-base.js.map +1 -1
  18. package/components/button-group/button-group.d.ts +0 -1
  19. package/components/button-group/button-group.js +12 -17
  20. package/components/button-group/button-group.js.map +1 -1
  21. package/components/calendar/base.d.ts +3 -13
  22. package/components/calendar/base.js +10 -31
  23. package/components/calendar/base.js.map +1 -1
  24. package/components/calendar/calendar.d.ts +2 -2
  25. package/components/calendar/months-view/months-view.d.ts +1 -1
  26. package/components/calendar/months-view/months-view.js.map +1 -1
  27. package/components/carousel/carousel-indicator.d.ts +1 -1
  28. package/components/carousel/carousel-indicator.js +13 -13
  29. package/components/carousel/carousel-indicator.js.map +1 -1
  30. package/components/carousel/carousel-slide.d.ts +0 -2
  31. package/components/carousel/carousel-slide.js +7 -9
  32. package/components/carousel/carousel-slide.js.map +1 -1
  33. package/components/carousel/carousel.d.ts +52 -35
  34. package/components/carousel/carousel.js +136 -122
  35. package/components/carousel/carousel.js.map +1 -1
  36. package/components/carousel/themes/carousel.base.css.js +1 -1
  37. package/components/carousel/themes/carousel.base.css.js.map +1 -1
  38. package/components/chat/chat-input.d.ts +1 -1
  39. package/components/chat/chat-input.js +21 -21
  40. package/components/chat/chat-input.js.map +1 -1
  41. package/components/chat/chat.d.ts +0 -2
  42. package/components/chat/chat.js +6 -12
  43. package/components/chat/chat.js.map +1 -1
  44. package/components/checkbox/checkbox-base.d.ts +1 -1
  45. package/components/checkbox/checkbox.d.ts +3 -5
  46. package/components/checkbox/checkbox.js +33 -44
  47. package/components/checkbox/checkbox.js.map +1 -1
  48. package/components/checkbox/switch.d.ts +1 -1
  49. package/components/checkbox/switch.js +23 -34
  50. package/components/checkbox/switch.js.map +1 -1
  51. package/components/chip/chip.d.ts +1 -14
  52. package/components/chip/chip.js +12 -33
  53. package/components/chip/chip.js.map +1 -1
  54. package/components/color-picker/color-picker.d.ts +261 -0
  55. package/components/color-picker/color-picker.js +620 -0
  56. package/components/color-picker/color-picker.js.map +1 -0
  57. package/components/color-picker/common.d.ts +37 -0
  58. package/components/color-picker/common.js +55 -0
  59. package/components/color-picker/common.js.map +1 -0
  60. package/components/color-picker/converters.d.ts +18 -0
  61. package/components/color-picker/converters.js +173 -0
  62. package/components/color-picker/converters.js.map +1 -0
  63. package/components/color-picker/model.d.ts +120 -0
  64. package/components/color-picker/model.js +174 -0
  65. package/components/color-picker/model.js.map +1 -0
  66. package/components/color-picker/picker-canvas.d.ts +95 -0
  67. package/components/color-picker/picker-canvas.js +154 -0
  68. package/components/color-picker/picker-canvas.js.map +1 -0
  69. package/components/color-picker/themes/color-picker.base.css.d.ts +1 -0
  70. package/components/color-picker/themes/color-picker.base.css.js +3 -0
  71. package/components/color-picker/themes/color-picker.base.css.js.map +1 -0
  72. package/components/color-picker/themes/dark/color-picker.bootstrap.css.d.ts +1 -0
  73. package/components/color-picker/themes/dark/color-picker.bootstrap.css.js +3 -0
  74. package/components/color-picker/themes/dark/color-picker.bootstrap.css.js.map +1 -0
  75. package/components/color-picker/themes/dark/color-picker.fluent.css.d.ts +1 -0
  76. package/components/color-picker/themes/dark/color-picker.fluent.css.js +3 -0
  77. package/components/color-picker/themes/dark/color-picker.fluent.css.js.map +1 -0
  78. package/components/color-picker/themes/dark/color-picker.indigo.css.d.ts +1 -0
  79. package/components/color-picker/themes/dark/color-picker.indigo.css.js +3 -0
  80. package/components/color-picker/themes/dark/color-picker.indigo.css.js.map +1 -0
  81. package/components/color-picker/themes/dark/color-picker.material.css.d.ts +1 -0
  82. package/components/color-picker/themes/dark/color-picker.material.css.js +3 -0
  83. package/components/color-picker/themes/dark/color-picker.material.css.js.map +1 -0
  84. package/components/color-picker/themes/light/color-picker.bootstrap.css.d.ts +1 -0
  85. package/components/color-picker/themes/light/color-picker.bootstrap.css.js +3 -0
  86. package/components/color-picker/themes/light/color-picker.bootstrap.css.js.map +1 -0
  87. package/components/color-picker/themes/light/color-picker.fluent.css.d.ts +1 -0
  88. package/components/color-picker/themes/light/color-picker.fluent.css.js +3 -0
  89. package/components/color-picker/themes/light/color-picker.fluent.css.js.map +1 -0
  90. package/components/color-picker/themes/light/color-picker.indigo.css.d.ts +1 -0
  91. package/components/color-picker/themes/light/color-picker.indigo.css.js +3 -0
  92. package/components/color-picker/themes/light/color-picker.indigo.css.js.map +1 -0
  93. package/components/color-picker/themes/light/color-picker.material.css.d.ts +1 -0
  94. package/components/color-picker/themes/light/color-picker.material.css.js +3 -0
  95. package/components/color-picker/themes/light/color-picker.material.css.js.map +1 -0
  96. package/components/color-picker/themes/light/color-picker.shared.css.d.ts +1 -0
  97. package/components/color-picker/themes/light/color-picker.shared.css.js +3 -0
  98. package/components/color-picker/themes/light/color-picker.shared.css.js.map +1 -0
  99. package/components/color-picker/themes/picker-canvas.base.css.d.ts +1 -0
  100. package/components/color-picker/themes/picker-canvas.base.css.js +3 -0
  101. package/components/color-picker/themes/picker-canvas.base.css.js.map +1 -0
  102. package/components/color-picker/themes/shared/color-picker.bootstrap.css.d.ts +1 -0
  103. package/components/color-picker/themes/shared/color-picker.bootstrap.css.js +3 -0
  104. package/components/color-picker/themes/shared/color-picker.bootstrap.css.js.map +1 -0
  105. package/components/color-picker/themes/shared/color-picker.common.css.d.ts +1 -0
  106. package/components/color-picker/themes/shared/color-picker.common.css.js +3 -0
  107. package/components/color-picker/themes/shared/color-picker.common.css.js.map +1 -0
  108. package/components/color-picker/themes/shared/color-picker.fluent.css.d.ts +1 -0
  109. package/components/color-picker/themes/shared/color-picker.fluent.css.js +3 -0
  110. package/components/color-picker/themes/shared/color-picker.fluent.css.js.map +1 -0
  111. package/components/color-picker/themes/shared/color-picker.indigo.css.d.ts +1 -0
  112. package/components/color-picker/themes/shared/color-picker.indigo.css.js +3 -0
  113. package/components/color-picker/themes/shared/color-picker.indigo.css.js.map +1 -0
  114. package/components/color-picker/themes/shared/color-picker.material.css.d.ts +1 -0
  115. package/components/color-picker/themes/shared/color-picker.material.css.js +3 -0
  116. package/components/color-picker/themes/shared/color-picker.material.css.js.map +1 -0
  117. package/components/color-picker/themes/themes.d.ts +2 -0
  118. package/components/color-picker/themes/themes.js +50 -0
  119. package/components/color-picker/themes/themes.js.map +1 -0
  120. package/components/color-picker/validators.d.ts +3 -0
  121. package/components/color-picker/validators.js +5 -0
  122. package/components/color-picker/validators.js.map +1 -0
  123. package/components/combo/combo-item.d.ts +1 -3
  124. package/components/combo/combo-item.js +5 -12
  125. package/components/combo/combo-item.js.map +1 -1
  126. package/components/combo/combo.d.ts +7 -20
  127. package/components/combo/combo.js +59 -81
  128. package/components/combo/combo.js.map +1 -1
  129. package/components/date-picker/date-picker.base.d.ts +12 -9
  130. package/components/date-picker/date-picker.base.js +24 -31
  131. package/components/date-picker/date-picker.base.js.map +1 -1
  132. package/components/date-picker/date-picker.d.ts +1 -1
  133. package/components/date-picker/date-picker.js +3 -5
  134. package/components/date-picker/date-picker.js.map +1 -1
  135. package/components/date-range-picker/date-range-input.d.ts +2 -4
  136. package/components/date-range-picker/date-range-input.js +6 -37
  137. package/components/date-range-picker/date-range-input.js.map +1 -1
  138. package/components/date-range-picker/date-range-picker.d.ts +2 -5
  139. package/components/date-range-picker/date-range-picker.js +15 -28
  140. package/components/date-range-picker/date-range-picker.js.map +1 -1
  141. package/components/date-range-picker/predefined-ranges-area.d.ts +2 -2
  142. package/components/date-range-picker/predefined-ranges-area.js +4 -6
  143. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  144. package/components/date-range-picker/validators.d.ts +1 -1
  145. package/components/date-range-picker/validators.js +5 -18
  146. package/components/date-range-picker/validators.js.map +1 -1
  147. package/components/date-time-input/date-part.d.ts +2 -1
  148. package/components/date-time-input/date-part.js +38 -75
  149. package/components/date-time-input/date-part.js.map +1 -1
  150. package/components/date-time-input/date-time-input.base.d.ts +31 -12
  151. package/components/date-time-input/date-time-input.base.js +43 -11
  152. package/components/date-time-input/date-time-input.base.js.map +1 -1
  153. package/components/date-time-input/date-time-input.d.ts +1 -3
  154. package/components/date-time-input/date-time-input.js +7 -40
  155. package/components/date-time-input/date-time-input.js.map +1 -1
  156. package/components/date-time-input/datetime-mask-parser.d.ts +8 -0
  157. package/components/date-time-input/datetime-mask-parser.js +8 -8
  158. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  159. package/components/date-time-input/validators.js +3 -14
  160. package/components/date-time-input/validators.js.map +1 -1
  161. package/components/dialog/dialog.d.ts +6 -7
  162. package/components/dialog/dialog.js +21 -26
  163. package/components/dialog/dialog.js.map +1 -1
  164. package/components/divider/divider.d.ts +1 -4
  165. package/components/divider/divider.js +8 -17
  166. package/components/divider/divider.js.map +1 -1
  167. package/components/dropdown/dropdown-group.js +1 -6
  168. package/components/dropdown/dropdown-group.js.map +1 -1
  169. package/components/expansion-panel/expansion-panel.d.ts +15 -5
  170. package/components/expansion-panel/expansion-panel.js +23 -34
  171. package/components/expansion-panel/expansion-panel.js.map +1 -1
  172. package/components/file-input/file-input.d.ts +2 -14
  173. package/components/file-input/file-input.js +5 -23
  174. package/components/file-input/file-input.js.map +1 -1
  175. package/components/highlight/highlight.d.ts +6 -8
  176. package/components/highlight/highlight.js +12 -20
  177. package/components/highlight/highlight.js.map +1 -1
  178. package/components/icon/icon-references.js +1 -0
  179. package/components/icon/icon-references.js.map +1 -1
  180. package/components/icon/icon.d.ts +1 -1
  181. package/components/icon/internal-icons-lib.js +3 -0
  182. package/components/icon/internal-icons-lib.js.map +1 -1
  183. package/components/icon/registry/types.d.ts +1 -1
  184. package/components/icon/registry/types.js.map +1 -1
  185. package/components/input/input.d.ts +9 -19
  186. package/components/input/input.js +30 -60
  187. package/components/input/input.js.map +1 -1
  188. package/components/input/themes/shared/input.material.css.js +1 -1
  189. package/components/input/themes/shared/input.material.css.js.map +1 -1
  190. package/components/mask-input/mask-input.d.ts +1 -1
  191. package/components/mask-input/mask-input.js +2 -4
  192. package/components/mask-input/mask-input.js.map +1 -1
  193. package/components/nav-drawer/nav-drawer.d.ts +7 -7
  194. package/components/nav-drawer/nav-drawer.js +12 -23
  195. package/components/nav-drawer/nav-drawer.js.map +1 -1
  196. package/components/progress/base.d.ts +4 -7
  197. package/components/progress/base.js +21 -45
  198. package/components/progress/base.js.map +1 -1
  199. package/components/qr-code/qr-code.d.ts +1 -1
  200. package/components/qr-code/qr-code.js +3 -2
  201. package/components/qr-code/qr-code.js.map +1 -1
  202. package/components/qr-code/types.d.ts +1 -1
  203. package/components/qr-code/types.js.map +1 -1
  204. package/components/radio/controller.d.ts +2 -30
  205. package/components/radio/controller.js +8 -94
  206. package/components/radio/controller.js.map +1 -1
  207. package/components/radio/radio.d.ts +5 -5
  208. package/components/radio/radio.js +48 -58
  209. package/components/radio/radio.js.map +1 -1
  210. package/components/radio-group/radio-group.d.ts +1 -2
  211. package/components/radio-group/radio-group.js +2 -9
  212. package/components/radio-group/radio-group.js.map +1 -1
  213. package/components/rating/rating.d.ts +24 -12
  214. package/components/rating/rating.js +79 -73
  215. package/components/rating/rating.js.map +1 -1
  216. package/components/resize-container/default-ghost.js +4 -3
  217. package/components/resize-container/default-ghost.js.map +1 -1
  218. package/components/resize-container/resize-container.d.ts +1 -1
  219. package/components/resize-container/resize-container.js +5 -3
  220. package/components/resize-container/resize-container.js.map +1 -1
  221. package/components/resize-container/resize-controller.js +4 -3
  222. package/components/resize-container/resize-controller.js.map +1 -1
  223. package/components/select/select-group.d.ts +2 -1
  224. package/components/select/select-group.js +7 -11
  225. package/components/select/select-group.js.map +1 -1
  226. package/components/select/select.d.ts +3 -4
  227. package/components/select/select.js +23 -28
  228. package/components/select/select.js.map +1 -1
  229. package/components/slider/range-slider.d.ts +3 -2
  230. package/components/slider/range-slider.js +22 -70
  231. package/components/slider/range-slider.js.map +1 -1
  232. package/components/slider/slider-base.d.ts +9 -6
  233. package/components/slider/slider-base.js +27 -28
  234. package/components/slider/slider-base.js.map +1 -1
  235. package/components/slider/slider.js +9 -5
  236. package/components/slider/slider.js.map +1 -1
  237. package/components/splitter/splitter.d.ts +1 -1
  238. package/components/splitter/splitter.js.map +1 -1
  239. package/components/stepper/step.d.ts +3 -0
  240. package/components/stepper/step.js +9 -5
  241. package/components/stepper/step.js.map +1 -1
  242. package/components/stepper/stepper.d.ts +0 -11
  243. package/components/stepper/stepper.js +21 -86
  244. package/components/stepper/stepper.js.map +1 -1
  245. package/components/tabs/tab.d.ts +1 -1
  246. package/components/tabs/tab.js +6 -5
  247. package/components/tabs/tab.js.map +1 -1
  248. package/components/tabs/tabs.d.ts +1 -5
  249. package/components/tabs/tabs.js +12 -34
  250. package/components/tabs/tabs.js.map +1 -1
  251. package/components/textarea/textarea.d.ts +6 -7
  252. package/components/textarea/textarea.js +3 -10
  253. package/components/textarea/textarea.js.map +1 -1
  254. package/components/theme-provider/theme-provider.d.ts +2 -4
  255. package/components/theme-provider/theme-provider.js +11 -21
  256. package/components/theme-provider/theme-provider.js.map +1 -1
  257. package/components/tile-manager/tile-manager.d.ts +10 -21
  258. package/components/tile-manager/tile-manager.js +43 -74
  259. package/components/tile-manager/tile-manager.js.map +1 -1
  260. package/components/tile-manager/tile.d.ts +10 -18
  261. package/components/tile-manager/tile.js +50 -67
  262. package/components/tile-manager/tile.js.map +1 -1
  263. package/components/tooltip/tooltip.d.ts +4 -7
  264. package/components/tooltip/tooltip.js +20 -28
  265. package/components/tooltip/tooltip.js.map +1 -1
  266. package/components/tree/tree.d.ts +1 -14
  267. package/components/tree/tree.js +5 -23
  268. package/components/tree/tree.js.map +1 -1
  269. package/components/tree/tree.navigation.d.ts +1 -1
  270. package/components/tree/tree.navigation.js.map +1 -1
  271. package/components/types.d.ts +2 -0
  272. package/components/types.js.map +1 -1
  273. package/components/validation-container/validation-container.d.ts +1 -2
  274. package/components/validation-container/validation-container.js.map +1 -1
  275. package/components/virtualization/engine.d.ts +40 -38
  276. package/components/virtualization/engine.js.map +1 -1
  277. package/components/virtualization/types.d.ts +6 -5
  278. package/components/virtualization/types.js.map +1 -1
  279. package/components/virtualization/virtualization.d.ts +94 -80
  280. package/components/virtualization/virtualization.js +10 -2
  281. package/components/virtualization/virtualization.js.map +1 -1
  282. package/custom-elements.json +31948 -26708
  283. package/igniteui-webcomponents.css-data.json +1 -1
  284. package/igniteui-webcomponents.html-data.json +1 -1
  285. package/index.d.ts +1 -0
  286. package/index.js +1 -0
  287. package/index.js.map +1 -1
  288. package/internals/controllers/aria-projection.d.ts +6 -6
  289. package/internals/controllers/aria-projection.js.map +1 -1
  290. package/internals/controllers/context-provider.d.ts +48 -0
  291. package/internals/controllers/context-provider.js +29 -0
  292. package/internals/controllers/context-provider.js.map +1 -0
  293. package/internals/controllers/drag.js +6 -6
  294. package/internals/controllers/drag.js.map +1 -1
  295. package/internals/controllers/gestures.js +3 -0
  296. package/internals/controllers/gestures.js.map +1 -1
  297. package/internals/controllers/group.d.ts +64 -0
  298. package/internals/controllers/group.js +104 -0
  299. package/internals/controllers/group.js.map +1 -0
  300. package/internals/controllers/internals.d.ts +16 -3
  301. package/internals/controllers/internals.js +10 -3
  302. package/internals/controllers/internals.js.map +1 -1
  303. package/internals/controllers/key-bindings.d.ts +6 -0
  304. package/internals/controllers/key-bindings.js +3 -0
  305. package/internals/controllers/key-bindings.js.map +1 -1
  306. package/internals/controllers/roving-focus.d.ts +72 -0
  307. package/internals/controllers/roving-focus.js +61 -0
  308. package/internals/controllers/roving-focus.js.map +1 -0
  309. package/internals/controllers/slot.d.ts +8 -0
  310. package/internals/controllers/slot.js +4 -0
  311. package/internals/controllers/slot.js.map +1 -1
  312. package/internals/controllers/toggle.d.ts +96 -0
  313. package/internals/controllers/toggle.js +65 -0
  314. package/internals/controllers/toggle.js.map +1 -0
  315. package/internals/date/converters.js +2 -5
  316. package/internals/date/converters.js.map +1 -1
  317. package/internals/date/model.d.ts +4 -0
  318. package/internals/date/model.js +6 -0
  319. package/internals/date/model.js.map +1 -1
  320. package/internals/decorators/coerced-property.d.ts +47 -0
  321. package/internals/decorators/coerced-property.js +36 -0
  322. package/internals/decorators/coerced-property.js.map +1 -0
  323. package/internals/definitions/defineAllComponents.js +2 -0
  324. package/internals/definitions/defineAllComponents.js.map +1 -1
  325. package/internals/i18n/i18n-controller.d.ts +22 -3
  326. package/internals/i18n/i18n-controller.js +28 -6
  327. package/internals/i18n/i18n-controller.js.map +1 -1
  328. package/internals/mixins/alert.d.ts +1 -1
  329. package/internals/mixins/alert.js +5 -3
  330. package/internals/mixins/alert.js.map +1 -1
  331. package/internals/mixins/combo-box.d.ts +3 -12
  332. package/internals/mixins/combo-box.js +6 -32
  333. package/internals/mixins/combo-box.js.map +1 -1
  334. package/internals/mixins/forms/associated.js +18 -0
  335. package/internals/mixins/forms/associated.js.map +1 -1
  336. package/internals/mixins/forms/types.d.ts +20 -1
  337. package/internals/mixins/forms/types.js.map +1 -1
  338. package/internals/mixins/i18n.d.ts +31 -0
  339. package/internals/mixins/i18n.js +36 -0
  340. package/internals/mixins/i18n.js.map +1 -0
  341. package/internals/mixins/mask-behavior.d.ts +6 -5
  342. package/internals/mixins/mask-behavior.js +1 -2
  343. package/internals/mixins/mask-behavior.js.map +1 -1
  344. package/internals/mixins/option.js +4 -2
  345. package/internals/mixins/option.js.map +1 -1
  346. package/internals/templates/masked-input.d.ts +1 -1
  347. package/internals/templates/masked-input.js.map +1 -1
  348. package/internals/templates/slotted-icon.d.ts +32 -0
  349. package/internals/templates/slotted-icon.js +19 -0
  350. package/internals/templates/slotted-icon.js.map +1 -0
  351. package/internals/templates/toggle-shell.d.ts +46 -0
  352. package/internals/templates/toggle-shell.js +38 -0
  353. package/internals/templates/toggle-shell.js.map +1 -0
  354. package/internals/timing.d.ts +32 -0
  355. package/internals/timing.js +20 -0
  356. package/internals/timing.js.map +1 -0
  357. package/internals/utils/arrays.d.ts +2 -2
  358. package/internals/utils/arrays.js.map +1 -1
  359. package/internals/utils/dom.d.ts +22 -0
  360. package/internals/utils/dom.js +15 -1
  361. package/internals/utils/dom.js.map +1 -1
  362. package/internals/utils/math.d.ts +1 -1
  363. package/internals/utils/math.js.map +1 -1
  364. package/internals/utils/types.d.ts +1 -1
  365. package/internals/utils/types.js.map +1 -1
  366. package/internals/validators.d.ts +23 -0
  367. package/internals/validators.js +21 -0
  368. package/internals/validators.js.map +1 -1
  369. package/package.json +3 -1
  370. package/theming/theming-controller.d.ts +3 -3
  371. package/theming/theming-controller.js.map +1 -1
  372. package/web-types.json +2 -2
  373. package/internals/decorators/watch.d.ts +0 -5
  374. package/internals/decorators/watch.js +0 -19
  375. package/internals/decorators/watch.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/components/radio/controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { getRoot } from '#internals/utils/dom.js';\nimport type IgcRadioComponent from './radio.js';\n\ntype RadioGroupRoot = Document | ShadowRoot;\ntype RadioGroup = Set<RadioGroupController>;\n\n/**\n * All connected radios that have a name, keyed by root node and name - the identity\n * of a radio group.\n *\n * Each radio keeps its own entry through its life-cycle. A group read is then the size\n * of the group and not of the root node. It also lets the radios that stay behind update\n * their state when a member leaves - a change that a radio cannot see on its own.\n */\nconst registry = new WeakMap<RadioGroupRoot, Map<string, RadioGroup>>();\nconst controllers = new WeakMap<IgcRadioComponent, RadioGroupController>();\n\nfunction byDocumentOrder(a: Node, b: Node): number {\n if (a === b) {\n return 0;\n }\n\n return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING\n ? -1\n : 1;\n}\n\n/** Returns the group of the given root node and name, and creates it if necessary. */\nfunction groupOf(root: RadioGroupRoot, name: string): RadioGroup {\n const names = registry.get(root) ?? new Map<string, RadioGroup>();\n const group = names.get(name) ?? new Set<RadioGroupController>();\n\n names.set(name, group);\n registry.set(root, names);\n\n return group;\n}\n\n/** Keeps a radio in the group of its current root node and name. */\nclass RadioGroupController implements ReactiveController {\n /** Gives each radio of the group the state that the group derives. */\n private static _sync(group: Iterable<RadioGroupController>): void {\n const members = Array.from(group);\n\n // A disabled radio is out of the tab order. A selection that it holds must not\n // take the tab stop from the radios that the user can still reach.\n const hasCheckedRadio = members.some(\n (member) => member._host.checked && !member._host.disabled\n );\n\n for (const member of members) {\n member._onSync(hasCheckedRadio);\n }\n }\n\n private readonly _host: IgcRadioComponent;\n private readonly _onSync: (hasCheckedRadio: boolean) => void;\n\n /** The root node the host is registered under, or null while it is not registered. */\n private _root: RadioGroupRoot | null = null;\n private _name = '';\n\n /** Whether the host still belongs to the group that holds its entry. */\n private get _isCurrent(): boolean {\n return this._host.name === this._name && getRoot(this._host) === this._root;\n }\n\n private get _group(): RadioGroupController[] {\n const entries = this._root\n ? Array.from(registry.get(this._root)?.get(this._name) ?? [])\n : [];\n\n // A radio moves to its new group on its next update, so an entry can be one\n // that has a different name or root node by now.\n const members = entries.filter((member) => member._isCurrent);\n\n return isEmpty(members)\n ? [this]\n : members.sort((a, b) => byDocumentOrder(a._host, b._host));\n }\n\n /** The radios of the host group, in DOM order. A radio with no group is on its own. */\n public get members(): IgcRadioComponent[] {\n return this._group.map((member) => member._host);\n }\n\n constructor(\n host: IgcRadioComponent,\n onSync: (hasCheckedRadio: boolean) => void\n ) {\n this._host = host;\n this._onSync = onSync;\n\n controllers.set(host, this);\n host.addController(this);\n }\n\n /** @internal */\n public hostConnected(): void {\n this.updateMembership();\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._unregister();\n }\n\n /**\n * Moves the host to the group of its current root node and name. Does nothing while\n * both stay the same. If not, the group that the host joins and the group that it\n * leaves both update their state.\n */\n public updateMembership(): void {\n const host = this._host;\n const root = host.isConnected ? getRoot(host) : null;\n const name = host.name || '';\n\n if (root === this._root && name === this._name) {\n return;\n }\n\n this._unregister();\n\n if (root && name) {\n this._root = root;\n this._name = name;\n groupOf(root, name).add(this);\n }\n\n this.sync();\n }\n\n /** Updates the state of the host group. */\n public sync(): void {\n RadioGroupController._sync(this._group);\n }\n\n private _unregister(): void {\n const { _root: root, _name: name } = this;\n const names = root ? registry.get(root) : undefined;\n const group = names?.get(name);\n\n this._root = null;\n this._name = '';\n\n if (!group?.delete(this)) {\n return;\n }\n\n if (isEmpty(group)) {\n names?.delete(name);\n } else {\n // The host is gone, and any selection that it held goes with it. What is left\n // of the group derives its state again and takes back the tab stop.\n RadioGroupController._sync(group);\n }\n }\n}\n\nexport type { RadioGroupController };\n\nexport function addRadioGroupController(\n host: IgcRadioComponent,\n onSync: (hasCheckedRadio: boolean) => void\n): RadioGroupController {\n return new RadioGroupController(host, onSync);\n}\n\n/** Returns the radios of the group of `member`, in DOM order. */\nexport function getGroupMembers(\n member: IgcRadioComponent\n): IgcRadioComponent[] {\n const controller = controllers.get(member);\n\n // Move the member first, so that a read that comes right after a change of its\n // name or root node resolves against the correct group.\n controller?.updateMembership();\n\n return controller?.members ?? [member];\n}\n"]}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/components/radio/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAEpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,MAAM,WAAW,GAAG,mBAAmB,CAA6B;IAClE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;IAChD,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;CAC3D,CAAC,CAAC;AAMH,MAAM,UAAU,uBAAuB,CACrC,IAAuB,EACvB,MAA0C;IAE1C,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAGD,MAAM,UAAU,eAAe,CAC7B,MAAyB;IAEzB,OAAO,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC","sourcesContent":["import {\n createGroupRegistry,\n type GroupMemberController,\n} from '#internals/controllers/group.js';\nimport { getRoot } from '#internals/utils/dom.js';\nimport type IgcRadioComponent from './radio.js';\n\n/**\n * All connected radios that have a name, grouped by form owner and name - the\n * identity of a radio group. Radios without a form owner group by root node,\n * the way the native ones do.\n *\n * The group-wide state is whether the group holds a reachable selection:\n * a disabled radio is out of the tab order, so a selection that it holds must\n * not take the tab stop from the radios that the user can still reach.\n */\nconst radioGroups = createGroupRegistry<IgcRadioComponent, boolean>({\n keyOf: (radio) => radio.name || '',\n scopeOf: (radio) => radio.form ?? getRoot(radio),\n deriveState: (radios) =>\n radios.some((radio) => radio.checked && !radio.disabled),\n});\n\ntype RadioGroupController = GroupMemberController<IgcRadioComponent>;\n\nexport type { RadioGroupController };\n\nexport function addRadioGroupController(\n host: IgcRadioComponent,\n onSync: (hasCheckedRadio: boolean) => void\n): RadioGroupController {\n return radioGroups.attach(host, onSync);\n}\n\n/** Returns the radios of the group of `member`, in DOM order. */\nexport function getGroupMembers(\n member: IgcRadioComponent\n): IgcRadioComponent[] {\n return radioGroups.membersOf(member);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
1
+ import { LitElement, type PropertyValues } from 'lit';
2
2
  import type { Constructor } from '#internals/mixins/constructor.js';
3
3
  import type { ToggleLabelPosition } from '../types.js';
4
4
  export interface IgcRadioChangeEventArgs {
@@ -52,7 +52,7 @@ export default class IgcRadioComponent extends IgcRadioComponent_base {
52
52
  /** All radios of the group except the one that invokes the getter. */
53
53
  private get _siblings();
54
54
  /** All radios of the group that are not disabled. */
55
- private get _active();
55
+ private get _activeRadios();
56
56
  /** All radios of the group that are checked. */
57
57
  private get _checkedRadios();
58
58
  set required(value: boolean);
@@ -104,10 +104,10 @@ export default class IgcRadioComponent extends IgcRadioComponent_base {
104
104
  setCustomValidity(message: string): void;
105
105
  private _updateCheckedState;
106
106
  protected formResetCallback(): void;
107
+ protected formAssociatedCallback(form: HTMLFormElement): void;
107
108
  protected _handleClick(event: PointerEvent): void;
108
- protected _navigate(idx: number): void;
109
- protected _renderValidatorContainer(): TemplateResult;
110
- protected render(): TemplateResult<1>;
109
+ protected _navigate(radio: IgcRadioComponent): void;
110
+ protected render(): import("lit-html").TemplateResult<1>;
111
111
  }
112
112
  declare global {
113
113
  interface HTMLElementTagNameMap {
@@ -4,12 +4,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { html, LitElement, nothing, } from 'lit';
7
+ import { html, LitElement } from 'lit';
8
8
  import { property, query, state } from 'lit/decorators.js';
9
- import { ifDefined } from 'lit/directives/if-defined.js';
10
- import { live } from 'lit/directives/live.js';
11
9
  import { addKeyboardFocusRing } from '#internals/controllers/focus-ring.js';
12
- import { addKeybindings, arrowDown, arrowLeft, arrowRight, arrowUp, } from '#internals/controllers/key-bindings.js';
10
+ import { addRovingFocusController } from '#internals/controllers/roving-focus.js';
13
11
  import { addSlotController, setSlots } from '#internals/controllers/slot.js';
14
12
  import { registerComponent } from '#internals/definitions/register.js';
15
13
  import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
@@ -17,9 +15,8 @@ import { FormAssociatedCheckboxRequiredMixin } from '#internals/mixins/forms/ass
17
15
  import { FormValueBooleanTransformers } from '#internals/mixins/forms/form-transformers.js';
18
16
  import { createFormValueState } from '#internals/mixins/forms/form-value.js';
19
17
  import { partMap } from '#internals/part-map.js';
18
+ import { renderToggleShell } from '#internals/templates/toggle-shell.js';
20
19
  import { lastOf } from '#internals/utils/arrays.js';
21
- import { isLTR } from '#internals/utils/dom.js';
22
- import { wrap } from '#internals/utils/math.js';
23
20
  import { createIdGenerator } from '#internals/utils/strings.js';
24
21
  import { isString } from '#internals/utils/types.js';
25
22
  import { addThemingController } from '#theming/theming-controller.js';
@@ -45,7 +42,7 @@ export default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMix
45
42
  get _siblings() {
46
43
  return this._radios.filter((radio) => radio !== this);
47
44
  }
48
- get _active() {
45
+ get _activeRadios() {
49
46
  return this._radios.filter((radio) => !radio.disabled);
50
47
  }
51
48
  get _checkedRadios() {
@@ -104,14 +101,17 @@ export default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMix
104
101
  this._tabIndex = 0;
105
102
  this.labelPosition = 'after';
106
103
  addThemingController(this, all);
107
- addKeybindings(this, {
108
- skip: () => this.disabled,
109
- bindingDefaults: { preventDefault: true, repeat: true },
110
- })
111
- .set(arrowLeft, () => this._navigate(isLTR(this) ? -1 : 1))
112
- .set(arrowRight, () => this._navigate(isLTR(this) ? 1 : -1))
113
- .set(arrowUp, () => this._navigate(-1))
114
- .set(arrowDown, () => this._navigate(1));
104
+ addRovingFocusController(this, {
105
+ keybindings: {
106
+ skip: () => this.disabled,
107
+ bindingDefaults: { preventDefault: true, repeat: true },
108
+ },
109
+ vertical: true,
110
+ homeEnd: false,
111
+ items: () => this._activeRadios,
112
+ current: () => this,
113
+ focusItem: (radio) => this._navigate(radio),
114
+ });
115
115
  }
116
116
  willUpdate(properties) {
117
117
  if (properties.has('name')) {
@@ -190,6 +190,10 @@ export default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMix
190
190
  this._group.sync();
191
191
  this.updateComplete.then(() => this._validate());
192
192
  }
193
+ formAssociatedCallback(form) {
194
+ super.formAssociatedCallback(form);
195
+ this._group.updateMembership();
196
+ }
193
197
  _handleClick(event) {
194
198
  event.stopPropagation();
195
199
  this._setTouchedState();
@@ -205,10 +209,7 @@ export default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMix
205
209
  },
206
210
  });
207
211
  }
208
- _navigate(idx) {
209
- const active = this._active;
210
- const next = wrap(0, active.length - 1, active.indexOf(this) + idx);
211
- const radio = active[next];
212
+ _navigate(radio) {
212
213
  this._setTouchedState();
213
214
  radio.focus();
214
215
  radio.checked = true;
@@ -216,53 +217,42 @@ export default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMix
216
217
  detail: { checked: radio.checked, value: radio.value },
217
218
  });
218
219
  }
219
- _renderValidatorContainer() {
220
- return IgcValidationContainerComponent.create(this);
221
- }
222
220
  render() {
223
221
  const labelledBy = this.getAttribute('aria-labelledby');
224
- const describedBy = this._slots.hasAssignedElements('helper-text')
225
- ? 'helper-text'
226
- : nothing;
227
222
  const checked = this.checked;
228
223
  return html `
229
- <label
230
- part=${partMap({
231
- base: true,
232
- checked,
233
- focused: this._focusRingManager.focused,
234
- })}
235
- for=${this._inputId}
236
- >
237
- <input
238
- id=${this._inputId}
239
- type="radio"
240
- name=${ifDefined(this.name)}
241
- value=${ifDefined(this.value)}
242
- ?required=${this.required}
243
- ?disabled=${this.disabled}
244
- .checked=${live(checked)}
245
- tabindex=${this._tabIndex}
246
- aria-labelledby=${labelledBy ? labelledBy : this._labelId}
247
- aria-describedby=${describedBy}
248
- @click=${this._handleClick}
249
- @keydown=${this._handleEnterKeydown}
250
- />
251
- <span part=${partMap({ control: true, checked })}>
224
+ ${renderToggleShell({
225
+ type: 'radio',
226
+ inputId: this._inputId,
227
+ labelId: this._labelId,
228
+ baseParts: {
229
+ base: true,
230
+ checked,
231
+ focused: this._focusRingManager.focused,
232
+ },
233
+ controlParts: { control: true, checked },
234
+ labelParts: { label: true, checked },
235
+ renderControl: () => html `
252
236
  <span
253
237
  part=${partMap({ ripple: true, checked })}
254
238
  ?hidden=${this.disabled}
255
239
  ></span>
256
- </span>
257
- <span
258
- id=${this._labelId}
259
- part=${partMap({ label: true, checked })}
260
- ?hidden=${this._hideLabel}
261
- >
262
- <slot></slot>
263
- </span>
264
- </label>
265
- ${this._renderValidatorContainer()}
240
+ `,
241
+ checked,
242
+ hideLabel: this._hideLabel,
243
+ name: this.name,
244
+ value: this.value,
245
+ required: this.required,
246
+ disabled: this.disabled,
247
+ tabindex: this._tabIndex,
248
+ ariaLabelledBy: labelledBy ? labelledBy : this._labelId,
249
+ ariaDescribedBy: this._slots.hasAssignedElements('helper-text')
250
+ ? 'helper-text'
251
+ : undefined,
252
+ onClick: this._handleClick,
253
+ onKeyDown: this._handleEnterKeydown,
254
+ })}
255
+ ${this._renderValidationContainer()}
266
256
  `;
267
257
  }
268
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","sourceRoot":"","sources":["../../../src/components/radio/radio.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACL,IAAI,EACJ,UAAU,EACV,OAAO,GAGR,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,GACR,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gDAAgD,CAAC;AACrG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,+BAA+B,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAgBlD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAmB1C,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,mCAAmC,CAChF,iBAAiB,CACf,UAAU,CACX,CACF;aACwB,YAAO,GAAG,WAAW,AAAd,CAAe;aAC5B,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAGpC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;IACxE,CAAC;IAED,IAAuB,YAAY;QACjC,OAAO,eAAe,CAAC;IACzB,CAAC;IAoCD,IAAY,OAAO;QACjB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAGD,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAGD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAGD,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAGD,IAAoB,QAAQ,CAAC,KAAc;QACzC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAOD,IAAW,KAAK,CAAC,KAAa;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAQD,IAAW,OAAO,CAAC,KAAc;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QAID,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IASD;QACE,KAAK,EAAE,CAAC;QArHO,aAAQ,GAAG,MAAM,EAAE,CAAC;QACpB,aAAQ,GAAG,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C,sBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAM/C,WAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE;YAC1E,IAAI,CAAC,SAAS,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEc,WAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,CAAC;YAC1E,QAAQ,EAAE,IAAI,CAAC,iBAAiB;SACjC,CAAC,CAAC;QAEyB,eAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE;YAClE,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,4BAA4B;SAC3C,CAAC,CAAC;QAQO,eAAU,GAAG,IAAI,CAAC;QAGpB,cAAS,GAAG,CAAC,CAAC;QAmFf,kBAAa,GAAwB,OAAO,CAAC;QAKlD,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEhC,cAAc,CAAC,IAAI,EAAE;YACnB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ;YACzB,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;SACxD,CAAC;aACC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEkB,UAAU,CAAC,UAAgC;QAE5D,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;QAGD,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEkB,KAAK,CAAC,YAAY;QACnC,MAAM,IAAI,CAAC,cAAc,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;gBACtB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAES,iBAAiB;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAEkB,gBAAgB,CAAC,OAAsB;QAIxD,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAOkB,oBAAoB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAGe,KAAK;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAIe,KAAK,CAAC,OAAsB;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAIe,IAAI;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAEO,cAAc;QACpB,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAEO,eAAe;QACrB,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IAGe,aAAa;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAGe,cAAc;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAMe,iBAAiB,CAAC,OAAe;QAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzB,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAEkB,iBAAiB;QAClC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IAES,YAAY,CAAC,KAAmB;QACxC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1B,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,SAAS,CAAC,GAAW;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;YAC3B,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IAES,yBAAyB;QACjC,OAAO,+BAA+B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEkB,MAAM;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC;YAChE,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,OAAO,IAAI,CAAA;;eAEA,OAAO,CAAC;YACb,IAAI,EAAE,IAAI;YACV,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO;SACxC,CAAC;cACI,IAAI,CAAC,QAAQ;;;eAGZ,IAAI,CAAC,QAAQ;;iBAEX,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;kBACnB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;sBACjB,IAAI,CAAC,QAAQ;sBACb,IAAI,CAAC,QAAQ;qBACd,IAAI,CAAC,OAAO,CAAC;qBACb,IAAI,CAAC,SAAS;4BACP,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;6BACtC,WAAW;mBACrB,IAAI,CAAC,YAAY;qBACf,IAAI,CAAC,mBAAmB;;qBAExB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;mBAErC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sBAC/B,IAAI,CAAC,QAAQ;;;;eAIpB,IAAI,CAAC,QAAQ;iBACX,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAC9B,IAAI,CAAC,UAAU;;;;;QAK3B,IAAI,CAAC,yBAAyB,EAAE;KACnC,CAAC;IACJ,CAAC;;AA/SkB;IADlB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;iDACwB;AAGnC;IADT,KAAK,EAAE;qDACoB;AAGpB;IADP,KAAK,EAAE;oDACc;AAuBtB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAS1C;AAWD;IADC,QAAQ,EAAE;8CAMV;AAYD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gDAc3B;AAWM;IADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;wDACL","sourcesContent":["import {\n html,\n LitElement,\n nothing,\n type PropertyValues,\n type TemplateResult,\n} from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { addKeyboardFocusRing } from '#internals/controllers/focus-ring.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n} from '#internals/controllers/key-bindings.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormAssociatedCheckboxRequiredMixin } from '#internals/mixins/forms/associated-required.js';\nimport { FormValueBooleanTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { partMap } from '#internals/part-map.js';\nimport { lastOf } from '#internals/utils/arrays.js';\nimport { isLTR } from '#internals/utils/dom.js';\nimport { wrap } from '#internals/utils/math.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { isString } from '#internals/utils/types.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { ToggleLabelPosition } from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { addRadioGroupController, getGroupMembers } from './controller.js';\nimport { styles } from './themes/radio.base.css.js';\nimport { styles as shared } from './themes/shared/radio.common.css.js';\nimport { all } from './themes/themes.js';\nimport { radioValidators } from './validators.js';\n\nexport interface IgcRadioChangeEventArgs {\n checked: boolean;\n value?: string;\n}\n\nexport interface IgcRadioComponentEventMap {\n igcChange: CustomEvent<IgcRadioChangeEventArgs>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\nconst nextId = createIdGenerator('radio');\n\n/**\n * The radio component allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @element igc-radio\n *\n * @slot - The radio label.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart base - The radio control base wrapper.\n * @csspart control - The radio input control.\n * @csspart label - The radio control label.\n */\nexport default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMixin(\n EventEmitterMixin<IgcRadioComponentEventMap, Constructor<LitElement>>(\n LitElement\n )\n) {\n public static readonly tagName = 'igc-radio';\n protected static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcRadioComponent, IgcValidationContainerComponent);\n }\n\n protected override get __validators() {\n return radioValidators;\n }\n\n private readonly _inputId = nextId();\n private readonly _labelId = `radio-label-${this._inputId}`;\n private readonly _focusRingManager = addKeyboardFocusRing(this);\n\n /**\n * Keeps the roving tab index of the group. The checked radio is the only tab\n * stop. If the group has no selection, each radio is a tab stop.\n */\n private readonly _group = addRadioGroupController(this, (hasCheckedRadio) => {\n this._tabIndex = !hasCheckedRadio || this.checked ? 0 : -1;\n });\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('helper-text', 'value-missing', 'custom-error', 'invalid'),\n onChange: this._handleSlotChange,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: false,\n transformers: FormValueBooleanTransformers,\n });\n\n protected _value!: string;\n\n @query('input', true)\n protected readonly _input!: HTMLInputElement;\n\n @state()\n protected _hideLabel = true;\n\n @state()\n private _tabIndex = 0;\n\n /** All radios of the group, that is having the same name property, in DOM order. */\n private get _radios(): IgcRadioComponent[] {\n return getGroupMembers(this);\n }\n\n /** All radios of the group except the one that invokes the getter. */\n private get _siblings(): IgcRadioComponent[] {\n return this._radios.filter((radio) => radio !== this);\n }\n\n /** All radios of the group that are not disabled. */\n private get _active(): IgcRadioComponent[] {\n return this._radios.filter((radio) => !radio.disabled);\n }\n\n /** All radios of the group that are checked. */\n private get _checkedRadios(): IgcRadioComponent[] {\n return this._radios.filter((radio) => radio.checked);\n }\n\n @property({ type: Boolean, reflect: true })\n public override set required(value: boolean) {\n super.required = value;\n\n if (this.hasUpdated) {\n for (const radio of this._siblings) {\n radio._validate();\n }\n }\n }\n\n public override get required(): boolean {\n return this._required;\n }\n\n /**\n * The value of the control.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._value = value;\n if (this.checked) {\n this._formValue.setValueAndFormState(this.checked);\n }\n }\n\n public get value(): string {\n return this._value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail.checked\", false) */\n /**\n * The checked state of the control.\n * @attr\n */\n @property({ type: Boolean })\n public set checked(value: boolean) {\n const previous = this.checked;\n\n this._formValue.setValueAndFormState(value);\n if (this.hasUpdated && this.checked) {\n this._updateCheckedState();\n }\n\n // The tab stop is a state of the group, so a change of the selection derives it\n // again. A write of the same state leaves the group as it is.\n if (this.checked !== previous) {\n this._group.sync();\n }\n }\n\n public get checked(): boolean {\n return this._formValue.value;\n }\n\n /**\n * The label position of the radio control.\n * @attr label-position\n */\n @property({ reflect: true, attribute: 'label-position' })\n public labelPosition: ToggleLabelPosition = 'after';\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addKeybindings(this, {\n skip: () => this.disabled,\n bindingDefaults: { preventDefault: true, repeat: true },\n })\n .set(arrowLeft, () => this._navigate(isLTR(this) ? -1 : 1))\n .set(arrowRight, () => this._navigate(isLTR(this) ? 1 : -1))\n .set(arrowUp, () => this._navigate(-1))\n .set(arrowDown, () => this._navigate(1));\n }\n\n protected override willUpdate(properties: PropertyValues<this>): void {\n // The name is the identity of a group, so a new name moves this radio to another one.\n if (properties.has('name')) {\n this._group.updateMembership();\n }\n\n // The tab stop of the group depends on which of its radios are disabled.\n if (properties.has('disabled')) {\n this._group.sync();\n }\n }\n\n protected override async firstUpdated(): Promise<void> {\n await this.updateComplete;\n\n if (this.checked && this === lastOf(this._checkedRadios)) {\n for (const radio of this._siblings) {\n radio.checked = false;\n radio.defaultChecked = false;\n }\n } else {\n this._validate();\n }\n }\n\n protected _handleSlotChange(): void {\n this._hideLabel = !this._slots.hasAssignedNodes('[default]', true);\n }\n\n protected override _setDefaultValue(current: string | null): void {\n // The base mixin passes 'true' if the `checked` attribute is present, and null\n // if it is removed. `isDefined` would accept null as present and check the radio\n // again on a form reset.\n this._formValue.defaultValue = isString(current);\n for (const radio of this._siblings) {\n radio.defaultChecked = false;\n }\n }\n\n /**\n * Restores the default state without the `checked` setter. That setter unchecks all\n * siblings, which damages the state of the radios that the browser already reset in\n * the same `form.reset()` pass.\n */\n protected override _restoreDefaultValue(): void {\n const checked = this.checked;\n this._formValue.setValueAndFormState(this.defaultChecked);\n this.requestUpdate('checked', checked);\n }\n\n /** Simulates a click on the radio control. */\n public override click(): void {\n this._input.click();\n }\n\n /* alternateName: focusComponent */\n /** Sets focus on the radio control. */\n public override focus(options?: FocusOptions): void {\n this._input.focus(options);\n }\n\n /* alternateName: blurComponent */\n /** Removes focus from the radio control. */\n public override blur(): void {\n this._input.blur();\n }\n\n private _checkValidity(): boolean {\n return super.checkValidity();\n }\n\n private _reportValidity(): boolean {\n return super.reportValidity();\n }\n\n /** Checks for validity of the control and emits the invalid event if it's invalid. */\n public override checkValidity(): boolean {\n for (const radio of this._siblings) {\n radio._checkValidity();\n }\n\n return this._checkValidity();\n }\n\n /** Checks for validity of the control and shows the browser message if it's invalid. */\n public override reportValidity(): boolean {\n for (const radio of this._siblings) {\n radio._reportValidity();\n }\n\n return this._reportValidity();\n }\n\n /**\n * Sets a custom validation message for the control.\n * As long as `message` is not empty, the control is considered invalid.\n */\n public override setCustomValidity(message: string): void {\n for (const radio of this._radios) {\n radio._validate(message);\n radio.requestUpdate();\n }\n }\n\n private _updateCheckedState(): void {\n for (const radio of this._siblings) {\n radio.checked = false;\n }\n }\n\n protected override formResetCallback(): void {\n super.formResetCallback();\n this._group.sync();\n this.updateComplete.then(() => this._validate());\n }\n\n protected _handleClick(event: PointerEvent) {\n event.stopPropagation();\n this._setTouchedState();\n\n if (this.checked) {\n return;\n }\n\n this.checked = true;\n this._input.focus();\n this.emitEvent('igcChange', {\n detail: {\n checked: this.checked,\n value: this.value,\n },\n });\n }\n\n protected _navigate(idx: number): void {\n const active = this._active;\n const next = wrap(0, active.length - 1, active.indexOf(this) + idx);\n const radio = active[next];\n\n this._setTouchedState();\n radio.focus();\n radio.checked = true;\n radio.emitEvent('igcChange', {\n detail: { checked: radio.checked, value: radio.value },\n });\n }\n\n protected _renderValidatorContainer(): TemplateResult {\n return IgcValidationContainerComponent.create(this);\n }\n\n protected override render() {\n const labelledBy = this.getAttribute('aria-labelledby');\n const describedBy = this._slots.hasAssignedElements('helper-text')\n ? 'helper-text'\n : nothing;\n const checked = this.checked;\n\n return html`\n <label\n part=${partMap({\n base: true,\n checked,\n focused: this._focusRingManager.focused,\n })}\n for=${this._inputId}\n >\n <input\n id=${this._inputId}\n type=\"radio\"\n name=${ifDefined(this.name)}\n value=${ifDefined(this.value)}\n ?required=${this.required}\n ?disabled=${this.disabled}\n .checked=${live(checked)}\n tabindex=${this._tabIndex}\n aria-labelledby=${labelledBy ? labelledBy : this._labelId}\n aria-describedby=${describedBy}\n @click=${this._handleClick}\n @keydown=${this._handleEnterKeydown}\n />\n <span part=${partMap({ control: true, checked })}>\n <span\n part=${partMap({ ripple: true, checked })}\n ?hidden=${this.disabled}\n ></span>\n </span>\n <span\n id=${this._labelId}\n part=${partMap({ label: true, checked })}\n ?hidden=${this._hideLabel}\n >\n <slot></slot>\n </span>\n </label>\n ${this._renderValidatorContainer()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-radio': IgcRadioComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["../../../src/components/radio/radio.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { addKeyboardFocusRing } from '#internals/controllers/focus-ring.js';\nimport { addRovingFocusController } from '#internals/controllers/roving-focus.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormAssociatedCheckboxRequiredMixin } from '#internals/mixins/forms/associated-required.js';\nimport { FormValueBooleanTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { partMap } from '#internals/part-map.js';\nimport { renderToggleShell } from '#internals/templates/toggle-shell.js';\nimport { lastOf } from '#internals/utils/arrays.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { isString } from '#internals/utils/types.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { ToggleLabelPosition } from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { addRadioGroupController, getGroupMembers } from './controller.js';\nimport { styles } from './themes/radio.base.css.js';\nimport { styles as shared } from './themes/shared/radio.common.css.js';\nimport { all } from './themes/themes.js';\nimport { radioValidators } from './validators.js';\n\nexport interface IgcRadioChangeEventArgs {\n checked: boolean;\n value?: string;\n}\n\nexport interface IgcRadioComponentEventMap {\n igcChange: CustomEvent<IgcRadioChangeEventArgs>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\nconst nextId = createIdGenerator('radio');\n\n/**\n * The radio component allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @element igc-radio\n *\n * @slot - The radio label.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart base - The radio control base wrapper.\n * @csspart control - The radio input control.\n * @csspart label - The radio control label.\n */\nexport default class IgcRadioComponent extends FormAssociatedCheckboxRequiredMixin(\n EventEmitterMixin<IgcRadioComponentEventMap, Constructor<LitElement>>(\n LitElement\n )\n) {\n public static readonly tagName = 'igc-radio';\n protected static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcRadioComponent, IgcValidationContainerComponent);\n }\n\n protected override get __validators() {\n return radioValidators;\n }\n\n private readonly _inputId = nextId();\n private readonly _labelId = `radio-label-${this._inputId}`;\n private readonly _focusRingManager = addKeyboardFocusRing(this);\n\n /**\n * Keeps the roving tab index of the group. The checked radio is the only tab\n * stop. If the group has no selection, each radio is a tab stop.\n */\n private readonly _group = addRadioGroupController(this, (hasCheckedRadio) => {\n this._tabIndex = !hasCheckedRadio || this.checked ? 0 : -1;\n });\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('helper-text', 'value-missing', 'custom-error', 'invalid'),\n onChange: this._handleSlotChange,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: false,\n transformers: FormValueBooleanTransformers,\n });\n\n protected _value!: string;\n\n @query('input', true)\n protected readonly _input!: HTMLInputElement;\n\n @state()\n protected _hideLabel = true;\n\n @state()\n private _tabIndex = 0;\n\n /** All radios of the group, that is having the same name property, in DOM order. */\n private get _radios(): IgcRadioComponent[] {\n return getGroupMembers(this);\n }\n\n /** All radios of the group except the one that invokes the getter. */\n private get _siblings(): IgcRadioComponent[] {\n return this._radios.filter((radio) => radio !== this);\n }\n\n /** All radios of the group that are not disabled. */\n private get _activeRadios(): IgcRadioComponent[] {\n return this._radios.filter((radio) => !radio.disabled);\n }\n\n /** All radios of the group that are checked. */\n private get _checkedRadios(): IgcRadioComponent[] {\n return this._radios.filter((radio) => radio.checked);\n }\n\n @property({ type: Boolean, reflect: true })\n public override set required(value: boolean) {\n super.required = value;\n\n if (this.hasUpdated) {\n for (const radio of this._siblings) {\n radio._validate();\n }\n }\n }\n\n public override get required(): boolean {\n return this._required;\n }\n\n /**\n * The value of the control.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._value = value;\n if (this.checked) {\n this._formValue.setValueAndFormState(this.checked);\n }\n }\n\n public get value(): string {\n return this._value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail.checked\", false) */\n /**\n * The checked state of the control.\n * @attr\n */\n @property({ type: Boolean })\n public set checked(value: boolean) {\n const previous = this.checked;\n\n this._formValue.setValueAndFormState(value);\n if (this.hasUpdated && this.checked) {\n this._updateCheckedState();\n }\n\n // The tab stop is a state of the group, so a change of the selection derives it\n // again. A write of the same state leaves the group as it is.\n if (this.checked !== previous) {\n this._group.sync();\n }\n }\n\n public get checked(): boolean {\n return this._formValue.value;\n }\n\n /**\n * The label position of the radio control.\n * @attr label-position\n */\n @property({ reflect: true, attribute: 'label-position' })\n public labelPosition: ToggleLabelPosition = 'after';\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addRovingFocusController(this, {\n keybindings: {\n skip: () => this.disabled,\n bindingDefaults: { preventDefault: true, repeat: true },\n },\n vertical: true,\n homeEnd: false,\n items: () => this._activeRadios,\n current: () => this,\n focusItem: (radio) => this._navigate(radio),\n });\n }\n\n protected override willUpdate(properties: PropertyValues<this>): void {\n // The name is half of the identity of a group, so a new name moves this radio to another one.\n if (properties.has('name')) {\n this._group.updateMembership();\n }\n\n // The tab stop of the group depends on which of its radios are disabled.\n if (properties.has('disabled')) {\n this._group.sync();\n }\n }\n\n protected override async firstUpdated(): Promise<void> {\n await this.updateComplete;\n\n if (this.checked && this === lastOf(this._checkedRadios)) {\n for (const radio of this._siblings) {\n radio.checked = false;\n radio.defaultChecked = false;\n }\n } else {\n this._validate();\n }\n }\n\n protected _handleSlotChange(): void {\n this._hideLabel = !this._slots.hasAssignedNodes('[default]', true);\n }\n\n protected override _setDefaultValue(current: string | null): void {\n // The base mixin passes 'true' if the `checked` attribute is present, and null\n // if it is removed. `isDefined` would accept null as present and check the radio\n // again on a form reset.\n this._formValue.defaultValue = isString(current);\n for (const radio of this._siblings) {\n radio.defaultChecked = false;\n }\n }\n\n /**\n * Restores the default state without the `checked` setter. That setter unchecks all\n * siblings, which damages the state of the radios that the browser already reset in\n * the same `form.reset()` pass.\n */\n protected override _restoreDefaultValue(): void {\n const checked = this.checked;\n this._formValue.setValueAndFormState(this.defaultChecked);\n this.requestUpdate('checked', checked);\n }\n\n /** Simulates a click on the radio control. */\n public override click(): void {\n this._input.click();\n }\n\n /* alternateName: focusComponent */\n /** Sets focus on the radio control. */\n public override focus(options?: FocusOptions): void {\n this._input.focus(options);\n }\n\n /* alternateName: blurComponent */\n /** Removes focus from the radio control. */\n public override blur(): void {\n this._input.blur();\n }\n\n private _checkValidity(): boolean {\n return super.checkValidity();\n }\n\n private _reportValidity(): boolean {\n return super.reportValidity();\n }\n\n /** Checks for validity of the control and emits the invalid event if it's invalid. */\n public override checkValidity(): boolean {\n for (const radio of this._siblings) {\n radio._checkValidity();\n }\n\n return this._checkValidity();\n }\n\n /** Checks for validity of the control and shows the browser message if it's invalid. */\n public override reportValidity(): boolean {\n for (const radio of this._siblings) {\n radio._reportValidity();\n }\n\n return this._reportValidity();\n }\n\n /**\n * Sets a custom validation message for the control.\n * As long as `message` is not empty, the control is considered invalid.\n */\n public override setCustomValidity(message: string): void {\n for (const radio of this._radios) {\n radio._validate(message);\n radio.requestUpdate();\n }\n }\n\n private _updateCheckedState(): void {\n for (const radio of this._siblings) {\n radio.checked = false;\n }\n }\n\n protected override formResetCallback(): void {\n super.formResetCallback();\n this._group.sync();\n this.updateComplete.then(() => this._validate());\n }\n\n protected override formAssociatedCallback(form: HTMLFormElement): void {\n super.formAssociatedCallback(form);\n\n // The form owner is the other half, so a new one moves this radio as well.\n this._group.updateMembership();\n }\n\n protected _handleClick(event: PointerEvent) {\n event.stopPropagation();\n this._setTouchedState();\n\n if (this.checked) {\n return;\n }\n\n this.checked = true;\n this._input.focus();\n this.emitEvent('igcChange', {\n detail: {\n checked: this.checked,\n value: this.value,\n },\n });\n }\n\n protected _navigate(radio: IgcRadioComponent): void {\n this._setTouchedState();\n radio.focus();\n radio.checked = true;\n radio.emitEvent('igcChange', {\n detail: { checked: radio.checked, value: radio.value },\n });\n }\n\n protected override render() {\n const labelledBy = this.getAttribute('aria-labelledby');\n const checked = this.checked;\n\n return html`\n ${renderToggleShell({\n type: 'radio',\n inputId: this._inputId,\n labelId: this._labelId,\n baseParts: {\n base: true,\n checked,\n focused: this._focusRingManager.focused,\n },\n controlParts: { control: true, checked },\n labelParts: { label: true, checked },\n renderControl: () => html`\n <span\n part=${partMap({ ripple: true, checked })}\n ?hidden=${this.disabled}\n ></span>\n `,\n checked,\n hideLabel: this._hideLabel,\n name: this.name,\n value: this.value,\n required: this.required,\n disabled: this.disabled,\n tabindex: this._tabIndex,\n ariaLabelledBy: labelledBy ? labelledBy : this._labelId,\n ariaDescribedBy: this._slots.hasAssignedElements('helper-text')\n ? 'helper-text'\n : undefined,\n onClick: this._handleClick,\n onKeyDown: this._handleEnterKeydown,\n })}\n ${this._renderValidationContainer()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-radio': IgcRadioComponent;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { LitElement, type PropertyValues } from 'lit';
1
+ import { LitElement } from 'lit';
2
2
  import type { ContentOrientation } from '../types.js';
3
3
  /**
4
4
  * Unifies one or more radio components into a single group.
@@ -40,7 +40,6 @@ export default class IgcRadioGroupComponent extends LitElement {
40
40
  set value(value: string);
41
41
  get value(): string;
42
42
  constructor();
43
- protected willUpdate(properties: PropertyValues<this>): void;
44
43
  protected firstUpdated(): void;
45
44
  /**
46
45
  * Brings the group in sync with its radios. Runs after the first render and after each
@@ -56,11 +56,9 @@ export default class IgcRadioGroupComponent extends LitElement {
56
56
  constructor() {
57
57
  super();
58
58
  this._internals = addInternalsController(this, {
59
- initialARIA: {
60
- role: 'radiogroup',
61
- ariaOrientation: 'vertical',
62
- },
59
+ initialARIA: { role: 'radiogroup' },
63
60
  reflectRole: true,
61
+ aria: () => ({ ariaOrientation: this.alignment }),
64
62
  });
65
63
  this._slots = addSlotController(this, {
66
64
  slots: setSlots(),
@@ -78,11 +76,6 @@ export default class IgcRadioGroupComponent extends LitElement {
78
76
  },
79
77
  });
80
78
  }
81
- willUpdate(properties) {
82
- if (properties.has('alignment')) {
83
- this._internals.setARIA({ ariaOrientation: this.alignment });
84
- }
85
- }
86
79
  firstUpdated() {
87
80
  this._syncRadios();
88
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../../src/components/radio-group/radio-group.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { createMutationController } from '#internals/controllers/mutation-observer.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { isDefined } from '#internals/utils/types.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcRadioComponent from '../radio/radio.js';\nimport type { ContentOrientation } from '../types.js';\nimport { styles } from './themes/radio-group.base.css.js';\nimport { styles as shared } from './themes/shared/radio-group.common.css.js';\nimport { all } from './themes/themes.js';\n\n/**\n * Unifies one or more radio components into a single group.\n *\n * @element igc-radio-group\n *\n * @slot - The radio controls of the group. They must be direct children of the group -\n * radios nested in a wrapper element are neither part of it, nor laid out by it.\n */\nexport default class IgcRadioGroupComponent extends LitElement {\n public static readonly tagName = 'igc-radio-group';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcRadioGroupComponent, IgcRadioComponent);\n }\n\n private readonly _internals = addInternalsController(this, {\n initialARIA: {\n role: 'radiogroup',\n ariaOrientation: 'vertical',\n },\n reflectRole: true,\n });\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots(),\n onChange: this._syncRadios,\n });\n\n private _defaultValue!: string;\n private _name!: string;\n /** The value that no radio holds yet. Empty as soon as a radio takes it. */\n private _pendingValue = '';\n\n private get _radios(): IgcRadioComponent[] {\n return this._slots.getAssignedElements<IgcRadioComponent>('[default]', {\n selector: IgcRadioComponent.tagName,\n flatten: true,\n });\n }\n\n /**\n * Alignment of the radio controls inside this group.\n * @attr\n */\n @property({ reflect: true })\n public alignment: ContentOrientation = 'vertical';\n\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultValue(value: string) {\n this._defaultValue = value;\n this._setRadiosDefaultChecked();\n }\n\n public get defaultValue(): string {\n return this._defaultValue;\n }\n\n /**\n * The name applied to all radio buttons in the group.\n * @attr\n */\n @property({ reflect: true })\n public set name(value: string) {\n this._name = value;\n this._setRadiosName();\n }\n\n public get name(): string {\n return this._name;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail.value\", false) */\n /**\n * The value of the group, reflecting the value of the currently checked radio button.\n * Setting it checks the radio button in the group with a matching value.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._pendingValue = value;\n this._setSelectedRadio();\n }\n\n public get value(): string {\n const radios = this._radios;\n\n // The checked radio holds the value of the group. Without radios to apply it to,\n // the group reports the value that is still pending.\n return isEmpty(radios)\n ? this._pendingValue\n : (radios.find((radio) => radio.checked)?.value ?? '');\n }\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n createMutationController(this, {\n callback: this._syncStates,\n filter: [IgcRadioComponent.tagName],\n config: {\n attributeFilter: ['disabled', 'label-position'],\n subtree: true,\n },\n });\n }\n\n protected override willUpdate(properties: PropertyValues<this>): void {\n if (properties.has('alignment')) {\n this._internals.setARIA({ ariaOrientation: this.alignment });\n }\n }\n\n protected override firstUpdated(): void {\n this._syncRadios();\n }\n\n /**\n * Brings the group in sync with its radios. Runs after the first render and after each\n * change of the slotted content, to adopt the radios that come in at run time. Without\n * the name of the group, such a radio makes a group of its own, outside of the keyboard\n * navigation and the single selection of this one.\n */\n private _syncRadios(): void {\n const radios = this._radios;\n\n this._setRadiosName();\n this._setRadiosDefaultChecked();\n\n // The value of the group applies while no radio holds a selection of its own. This\n // is the first render, or the moment a radio with a value that had no match comes in.\n // The `checked` attribute then makes that selection the default state.\n if (this._pendingValue && !radios.some((radio) => radio.checked)) {\n this._setSelectedRadio();\n\n for (const radio of radios) {\n radio.toggleAttribute('checked', radio.checked);\n }\n }\n\n this._syncStates();\n this.style.setProperty('--layout-count', `${radios.length}`);\n }\n\n private _syncStates(): void {\n const radios = this._radios;\n\n this._internals.setState(\n 'disabled',\n !isEmpty(radios) && radios.every((radio) => radio.disabled)\n );\n this._internals.setState(\n 'label-before',\n radios.some((radio) => radio.labelPosition === 'before')\n );\n }\n\n private _setRadiosDefaultChecked(): void {\n if (isDefined(this._defaultValue)) {\n for (const radio of this._radios) {\n radio.defaultChecked = radio.value === this._defaultValue;\n }\n }\n }\n\n private _setRadiosName(): void {\n if (isDefined(this._name)) {\n for (const radio of this._radios) {\n radio.name = this._name;\n }\n }\n }\n\n private _setSelectedRadio(): void {\n let applied = false;\n\n for (const radio of this._radios) {\n radio.checked = radio.value === this._pendingValue;\n applied ||= radio.checked;\n }\n\n // A radio holds the value now, so the group reads it from that radio. A value that\n // stays pending applies again each time the group loses its selection.\n if (applied) {\n this._pendingValue = '';\n }\n }\n\n protected override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-radio-group': IgcRadioGroupComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../../src/components/radio-group/radio-group.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { createMutationController } from '#internals/controllers/mutation-observer.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { isDefined } from '#internals/utils/types.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcRadioComponent from '../radio/radio.js';\nimport type { ContentOrientation } from '../types.js';\nimport { styles } from './themes/radio-group.base.css.js';\nimport { styles as shared } from './themes/shared/radio-group.common.css.js';\nimport { all } from './themes/themes.js';\n\n/**\n * Unifies one or more radio components into a single group.\n *\n * @element igc-radio-group\n *\n * @slot - The radio controls of the group. They must be direct children of the group -\n * radios nested in a wrapper element are neither part of it, nor laid out by it.\n */\nexport default class IgcRadioGroupComponent extends LitElement {\n public static readonly tagName = 'igc-radio-group';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcRadioGroupComponent, IgcRadioComponent);\n }\n\n private readonly _internals = addInternalsController(this, {\n initialARIA: { role: 'radiogroup' },\n reflectRole: true,\n aria: () => ({ ariaOrientation: this.alignment }),\n });\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots(),\n onChange: this._syncRadios,\n });\n\n private _defaultValue!: string;\n private _name!: string;\n /** The value that no radio holds yet. Empty as soon as a radio takes it. */\n private _pendingValue = '';\n\n private get _radios(): IgcRadioComponent[] {\n return this._slots.getAssignedElements<IgcRadioComponent>('[default]', {\n selector: IgcRadioComponent.tagName,\n flatten: true,\n });\n }\n\n /**\n * Alignment of the radio controls inside this group.\n * @attr\n */\n @property({ reflect: true })\n public alignment: ContentOrientation = 'vertical';\n\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultValue(value: string) {\n this._defaultValue = value;\n this._setRadiosDefaultChecked();\n }\n\n public get defaultValue(): string {\n return this._defaultValue;\n }\n\n /**\n * The name applied to all radio buttons in the group.\n * @attr\n */\n @property({ reflect: true })\n public set name(value: string) {\n this._name = value;\n this._setRadiosName();\n }\n\n public get name(): string {\n return this._name;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail.value\", false) */\n /**\n * The value of the group, reflecting the value of the currently checked radio button.\n * Setting it checks the radio button in the group with a matching value.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._pendingValue = value;\n this._setSelectedRadio();\n }\n\n public get value(): string {\n const radios = this._radios;\n\n // The checked radio holds the value of the group. Without radios to apply it to,\n // the group reports the value that is still pending.\n return isEmpty(radios)\n ? this._pendingValue\n : (radios.find((radio) => radio.checked)?.value ?? '');\n }\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n createMutationController(this, {\n callback: this._syncStates,\n filter: [IgcRadioComponent.tagName],\n config: {\n attributeFilter: ['disabled', 'label-position'],\n subtree: true,\n },\n });\n }\n\n protected override firstUpdated(): void {\n this._syncRadios();\n }\n\n /**\n * Brings the group in sync with its radios. Runs after the first render and after each\n * change of the slotted content, to adopt the radios that come in at run time. Without\n * the name of the group, such a radio makes a group of its own, outside of the keyboard\n * navigation and the single selection of this one.\n */\n private _syncRadios(): void {\n const radios = this._radios;\n\n this._setRadiosName();\n this._setRadiosDefaultChecked();\n\n // The value of the group applies while no radio holds a selection of its own. This\n // is the first render, or the moment a radio with a value that had no match comes in.\n // The `checked` attribute then makes that selection the default state.\n if (this._pendingValue && !radios.some((radio) => radio.checked)) {\n this._setSelectedRadio();\n\n for (const radio of radios) {\n radio.toggleAttribute('checked', radio.checked);\n }\n }\n\n this._syncStates();\n this.style.setProperty('--layout-count', `${radios.length}`);\n }\n\n private _syncStates(): void {\n const radios = this._radios;\n\n this._internals.setState(\n 'disabled',\n !isEmpty(radios) && radios.every((radio) => radio.disabled)\n );\n this._internals.setState(\n 'label-before',\n radios.some((radio) => radio.labelPosition === 'before')\n );\n }\n\n private _setRadiosDefaultChecked(): void {\n if (isDefined(this._defaultValue)) {\n for (const radio of this._radios) {\n radio.defaultChecked = radio.value === this._defaultValue;\n }\n }\n }\n\n private _setRadiosName(): void {\n if (isDefined(this._name)) {\n for (const radio of this._radios) {\n radio.name = this._name;\n }\n }\n }\n\n private _setSelectedRadio(): void {\n let applied = false;\n\n for (const radio of this._radios) {\n radio.checked = radio.value === this._pendingValue;\n applied ||= radio.checked;\n }\n\n // A radio holds the value now, so the group reads it from that radio. A value that\n // stays pending applies again each time the group loses its selection.\n if (applied) {\n this._pendingValue = '';\n }\n }\n\n protected override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-radio-group': IgcRadioGroupComponent;\n }\n}\n"]}
@@ -65,9 +65,6 @@ export default class IgcRatingComponent extends IgcRatingComponent_base {
65
65
  static register(): void;
66
66
  protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"symbol" | "[default]" | "value-label">;
67
67
  protected readonly _formValue: import("#internals/mixins/forms/form-value.js").FormValue<number>;
68
- private _max;
69
- private _step;
70
- private _single;
71
68
  private _symbols;
72
69
  private _container?;
73
70
  private _hoverValue;
@@ -80,20 +77,21 @@ export default class IgcRatingComponent extends IgcRatingComponent_base {
80
77
  *
81
78
  * If there are projected symbols, the maximum value will be resolved
82
79
  * based on the number of symbols.
80
+ *
83
81
  * @attr max
84
82
  * @default 5
85
83
  */
86
- set max(value: number);
87
- get max(): number;
84
+ max: number;
88
85
  /**
89
86
  * The minimum value change allowed.
90
87
  *
91
- * Valid values are in the interval between 0 and 1 inclusive.
88
+ * Valid values are in the interval between 0.001 and 1 inclusive.
89
+ * The component clamps a value outside of the interval to the closest bound.
90
+ *
92
91
  * @attr step
93
92
  * @default 1
94
93
  */
95
- set step(value: number);
96
- get step(): number;
94
+ step: number;
97
95
  /**
98
96
  * The label of the control.
99
97
  * @attr label
@@ -109,30 +107,36 @@ export default class IgcRatingComponent extends IgcRatingComponent_base {
109
107
  valueFormat?: string;
110
108
  /**
111
109
  * The value of the component
110
+ *
112
111
  * @attr value
113
112
  * @default 0
114
113
  */
115
114
  set value(number: number);
116
115
  get value(): number;
117
116
  /**
118
- * Sets hover preview behavior for the component
117
+ * Whether to show a preview of the value when hovering over the symbols.
118
+ *
119
119
  * @attr hover-preview
120
+ * @default false
120
121
  */
121
122
  hoverPreview: boolean;
122
123
  /**
123
124
  * Makes the control a readonly field.
125
+ *
124
126
  * @attr readonly
127
+ * @default false
125
128
  */
126
129
  readOnly: boolean;
127
130
  /**
128
131
  * Toggles single selection visual mode.
132
+ *
129
133
  * @attr single
130
134
  * @default false
131
135
  */
132
- set single(value: boolean);
133
- get single(): boolean;
136
+ single: boolean;
134
137
  /**
135
138
  * Whether to reset the rating when the user selects the same value.
139
+ *
136
140
  * @attr allow-reset
137
141
  * @default false
138
142
  */
@@ -147,7 +151,15 @@ export default class IgcRatingComponent extends IgcRatingComponent_base {
147
151
  private _handleHoverDisabled;
148
152
  private _emitValueUpdate;
149
153
  private _calcNewValue;
150
- private _round;
154
+ /** Rounds a value up to the next multiple of the step. */
155
+ private _ceilToStep;
156
+ /**
157
+ * Removes the floating point noise that the step arithmetic introduces. The
158
+ * decimals of the current value and of the step stay, thus a value that the
159
+ * consumer sets keeps its precision, and the value, the event payload and
160
+ * `aria-valuenow` stay readable.
161
+ */
162
+ private _normalize;
151
163
  private _updateProjectedSymbols;
152
164
  private _clipSymbol;
153
165
  /**