@koobiq/components 21.0.0 → 21.1.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 (378) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +106 -394
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +38 -17
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +24 -9
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +288 -109
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/collection.json +94 -89
  124. package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
  125. package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
  126. package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
  127. package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
  128. package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
  129. package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
  130. package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
  131. package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
  132. package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
  133. package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
  134. package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
  135. package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
  136. package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
  137. package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
  138. package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
  139. package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
  140. package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
  141. package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
  142. package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
  143. package/schematics/migrations/color-signals/index.cjs +20 -0
  144. package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
  145. package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
  146. package/schematics/migrations/datepicker-signals/index.cjs +18 -0
  147. package/schematics/migrations/deprecated-icons/README.md +21 -5
  148. package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
  149. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  150. package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
  151. package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
  152. package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
  153. package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
  154. package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
  155. package/schematics/migrations/dropdown-signals/index.cjs +20 -0
  156. package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
  157. package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
  158. package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
  159. package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
  160. package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
  161. package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
  162. package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
  163. package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
  164. package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
  165. package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
  166. package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
  167. package/schematics/migrations/icons-replacement/README.md +16 -2
  168. package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
  169. package/schematics/migrations/icons-replacement/schema.json +12 -3
  170. package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
  171. package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
  172. package/schematics/migrations/input-signals/index.cjs +18 -0
  173. package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
  174. package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
  175. package/schematics/migrations/list-signals/index.cjs +18 -0
  176. package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
  177. package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
  178. package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
  179. package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
  180. package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
  181. package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
  182. package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
  183. package/schematics/migrations/modal-signals/index.cjs +20 -0
  184. package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
  185. package/schematics/migrations/new-icons-pack/README.md +37 -25
  186. package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
  187. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  188. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  189. package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
  190. package/schematics/migrations/option-signals/index.cjs +20 -0
  191. package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
  192. package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
  193. package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
  194. package/schematics/migrations/query-list-signals/index.cjs +18 -0
  195. package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
  196. package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
  197. package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
  198. package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
  199. package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
  200. package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
  201. package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
  202. package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
  203. package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
  204. package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
  205. package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
  206. package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
  207. package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
  208. package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
  209. package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
  210. package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
  211. package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
  212. package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
  213. package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
  214. package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
  215. package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
  216. package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
  217. package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
  218. package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
  219. package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
  220. package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
  221. package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
  222. package/schematics/migrations/v20-upgrade/index.cjs +19 -0
  223. package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
  224. package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
  225. package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
  226. package/schematics/migrations.json +87 -82
  227. package/schematics/ng-add/{index.js → index.cjs} +15 -289
  228. package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
  229. package/schematics/utils/custom-data.cjs +64 -0
  230. package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
  231. package/schematics/utils/html-config.cjs +148 -0
  232. package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
  233. package/schematics/utils/list-item-pattern.cjs +16 -0
  234. package/schematics/utils/{messages.js → messages.cjs} +4 -0
  235. package/schematics/utils/package-config.cjs +99 -0
  236. package/schematics/utils/project-files.cjs +25 -0
  237. package/schematics/utils/replacement-driver.cjs +337 -0
  238. package/schematics/utils/safe-rule.cjs +23 -0
  239. package/schematics/utils/signal-members-migration.cjs +779 -0
  240. package/schematics/utils/tag-patterns.cjs +21 -0
  241. package/schematics/utils/template-ref-access.cjs +155 -0
  242. package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
  243. package/schematics/utils/warn-only-migration.cjs +52 -0
  244. package/schematics/utils/workspace-styles.cjs +123 -0
  245. package/select/select.scss +7 -0
  246. package/tabs/_tabs-common.scss +23 -0
  247. package/textarea/textarea-tokens.scss +4 -1
  248. package/toast/toast.component.scss +1 -0
  249. package/toggle/_toggle-theme.scss +0 -17
  250. package/tooltip/tooltip.scss +1 -1
  251. package/top-bar/top-bar-tokens.scss +1 -0
  252. package/top-bar/top-bar.scss +10 -0
  253. package/types/koobiq-components-accordion.d.ts +25 -0
  254. package/types/koobiq-components-button-toggle.d.ts +6 -0
  255. package/types/koobiq-components-checkbox.d.ts +30 -0
  256. package/types/koobiq-components-clamped-text.d.ts +16 -3
  257. package/types/koobiq-components-code-block.d.ts +55 -14
  258. package/types/koobiq-components-core.d.ts +226 -13
  259. package/types/koobiq-components-datepicker.d.ts +28 -1
  260. package/types/koobiq-components-divider.d.ts +28 -10
  261. package/types/koobiq-components-dropdown.d.ts +19 -0
  262. package/types/koobiq-components-filter-bar.d.ts +79 -6
  263. package/types/koobiq-components-flag.d.ts +18 -0
  264. package/types/koobiq-components-form-field.d.ts +87 -6
  265. package/types/koobiq-components-icon.d.ts +15 -0
  266. package/types/koobiq-components-inline-edit.d.ts +8 -1
  267. package/types/koobiq-components-input.d.ts +22 -3
  268. package/types/koobiq-components-list.d.ts +6 -0
  269. package/types/koobiq-components-modal.d.ts +7 -0
  270. package/types/koobiq-components-navbar.d.ts +71 -7
  271. package/types/koobiq-components-notification-center.d.ts +13 -0
  272. package/types/koobiq-components-overflow-items.d.ts +26 -2
  273. package/types/koobiq-components-popover.d.ts +38 -3
  274. package/types/koobiq-components-radio.d.ts +30 -0
  275. package/types/koobiq-components-search-expandable.d.ts +10 -0
  276. package/types/koobiq-components-select.d.ts +36 -4
  277. package/types/koobiq-components-sidepanel.d.ts +52 -1
  278. package/types/koobiq-components-splitter.d.ts +13 -4
  279. package/types/koobiq-components-tabs.d.ts +4 -0
  280. package/types/koobiq-components-tags.d.ts +6 -0
  281. package/types/koobiq-components-textarea.d.ts +9 -2
  282. package/types/koobiq-components-timepicker.d.ts +15 -0
  283. package/types/koobiq-components-toggle.d.ts +30 -0
  284. package/types/koobiq-components-tooltip.d.ts +55 -10
  285. package/types/koobiq-components-top-bar.d.ts +11 -3
  286. package/types/koobiq-components-tree-select.d.ts +23 -8
  287. package/types/koobiq-components-tree.d.ts +144 -60
  288. package/schematics/migrations/angular-animations-removal/index.js +0 -20
  289. package/schematics/migrations/color-signals/index.js +0 -19
  290. package/schematics/migrations/core-mixins-removal/index.js +0 -17
  291. package/schematics/migrations/datepicker-signals/index.js +0 -17
  292. package/schematics/migrations/dropdown-signals/index.js +0 -19
  293. package/schematics/migrations/input-signals/index.js +0 -17
  294. package/schematics/migrations/list-signals/index.js +0 -17
  295. package/schematics/migrations/modal-signals/index.js +0 -19
  296. package/schematics/migrations/option-signals/index.js +0 -19
  297. package/schematics/migrations/query-list-signals/index.js +0 -17
  298. package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
  299. package/schematics/migrations/v20-upgrade/index.js +0 -18
  300. package/schematics/migrations/zoneless-change-detection/index.js +0 -20
  301. package/schematics/utils/package-config.js +0 -13
  302. /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
  303. /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
  304. /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
  305. /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
  306. /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
  307. /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
  308. /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
  309. /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
  310. /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
  311. /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
  312. /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
  313. /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
  314. /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
  315. /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
  316. /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
  317. /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
  318. /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
  319. /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
  320. /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
  321. /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
  322. /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
  323. /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
  324. /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
  325. /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
  326. /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
  327. /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
  328. /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
  329. /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
  330. /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
  331. /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
  332. /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
  333. /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
  334. /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
  335. /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
  336. /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
  337. /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
  338. /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
  339. /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
  340. /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
  341. /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
  342. /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
  343. /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
  344. /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
  345. /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
  346. /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
  347. /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
  348. /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
  349. /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
  350. /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
  351. /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
  352. /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
  353. /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
  354. /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
  355. /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
  356. /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
  357. /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
  358. /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
  359. /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
  360. /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
  361. /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
  362. /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
  363. /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
  364. /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
  365. /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
  366. /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
  367. /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
  368. /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
  369. /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
  370. /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
  371. /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
  372. /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
  373. /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
  374. /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
  375. /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
  376. /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
  377. /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
  378. /package/schematics/utils/{ast.js → ast.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-radio.mjs","sources":["../../../packages/components/radio/radio.component.ts","../../../packages/components/radio/radio.component.html","../../../packages/components/radio/radio.module.ts","../../../packages/components/radio/koobiq-components-radio.ts"],"sourcesContent":["import { _IdGenerator, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n DoCheck,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n Provider,\n QueryList,\n Renderer2,\n signal,\n SimpleChanges,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR, NgControl, NgForm } from '@angular/forms';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n KbqColorDirective,\n KbqErrorStateTracker,\n kbqOptionalNumberAttribute,\n kbqQueryListFrom\n} from '@koobiq/components/core';\nimport { KbqError, KbqHint } from '@koobiq/components/form-field';\n\n/** Change event object emitted by KbqRadio. */\nexport class KbqRadioChange {\n constructor(\n /** The KbqRadioButton that emits the change event. */\n public source: KbqRadioButton,\n /** The value of the KbqRadioButton. */\n public value: any\n ) {}\n}\n\n/**\n * Provider Expression that allows kbq-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n *\n * @docs-private\n */\nexport const KBQ_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqRadioGroup),\n multi: true\n};\n\n/**\n * Selection group for `KbqRadioButton`.\n *\n * The host is a `radiogroup`, which is not a name-from-content role, so it reaches assistive\n * technology unnamed unless the consumer names it. Name it with a plain `aria-label` /\n * `aria-labelledby` attribute pointing at the visible group label: the host is the very element the\n * consumer writes, so an input aliased to the same name would only write back what is already there —\n * and would wipe an `[attr.aria-label]` binding, which never reaches the input.\n *\n * To show a validation error, bind the group to a form control and put the error text in a `kbq-error` inside the\n * group. A `kbq-hint` put inside the group is shown under the options, below the error.\n */\n@Component({\n selector: 'kbq-radio-group',\n // Styled by `radio.scss`, which the buttons carry: the error and the hints of a group stand under its buttons.\n template: `\n <ng-content />\n\n <!--\n Under the options, as in a form field: the error first, rendered only in the error state so that\n assistive technology announces the alert as it appears, then the hints of the group.\n -->\n @if (showError() || hints().length) {\n <div class=\"kbq-radio-group__subscript\">\n @if (showError()) {\n <div class=\"kbq-radio-group__error\" [id]=\"errorId\">\n <ng-content select=\"kbq-error\" />\n </div>\n }\n\n <ng-content select=\"kbq-hint\" />\n </div>\n }\n `,\n providers: [KBQ_RADIO_GROUP_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'radiogroup',\n class: 'kbq-radio-group',\n '[class.kbq-radio-group_normal]': '!big()',\n '[class.kbq-radio-group_big]': 'big()',\n '[class.kbq-radio-group_label-before]': \"labelPosition() === 'before'\",\n '[class.kbq-invalid]': 'errorState()',\n '[attr.aria-required]': \"required() ? 'true' : null\",\n // A signal of its own: the color class binding reads `color` first, and the host bindings of every group in a\n // view run in that view's reactive consumer, where a signal read again after others costs a scan of all it has\n // read so far.\n '[attr.aria-invalid]': 'ariaInvalid()'\n },\n exportAs: 'kbqRadioGroup'\n})\nexport class KbqRadioGroup\n extends KbqColorDirective\n implements\n AfterContentChecked,\n OnChanges,\n OnInit,\n DoCheck,\n AfterContentInit,\n ControlValueAccessor,\n CanUpdateErrorState\n{\n private readonly injector = inject(Injector);\n\n // The control is resolved in `ngOnInit`: `NgControl` injects the group as its value accessor, so injecting it\n // back from the constructor is a cyclic dependency.\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n null,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** Whether the radio group is in an error state. */\n readonly errorState = this.errorStateTracker.errorState;\n\n /** An object used to control when the error state is shown. */\n readonly errorStateMatcher = input<ErrorStateMatcher>();\n\n readonly big = input<boolean>(false);\n\n /**\n * Name of the radio button group. All radio buttons inside this group will use this name,\n * unless they were given one of their own.\n */\n readonly name = input<string>(inject(_IdGenerator).getId('kbq-radio-group-'));\n\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n readonly labelPosition = input<'before' | 'after', 'before' | 'after'>('after', {\n transform: (value) => (value === 'before' ? 'before' : 'after')\n });\n\n /** Value of the radio button. */\n // `value`, `selected` and `disabled` are accessors over signals, fed by aliased inputs, because code outside the\n // template writes them too: `writeValue` and `setDisabledState` the first and last, the buttons their selection\n // back into `selected`. `disabled` is no `model()` because it coerces with `booleanAttribute`, which a `model()`\n // cannot carry; `value` is none because `writeValue` has to resolve the checked button synchronously before the\n // first render, and a `model()` would also publish a `valueChange` output that duplicates `change`.\n get value(): any {\n return this._value();\n }\n\n set value(newValue: any) {\n // Untracked, as the other setters and methods that select: called from a consumer's `effect()`, the selection\n // read on the way — the group's and its buttons' — would make the effect run again whenever the user picks\n // another button.\n untracked(() => {\n if (this._value() !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value.set(newValue);\n\n this.updateSelectedRadioFromValue();\n this.checkSelectedRadioButton();\n }\n });\n }\n\n /** Whether the radio button is selected. */\n get selected() {\n return this._selected();\n }\n\n set selected(selected: KbqRadioButton | null) {\n untracked(() => {\n this._selected.set(selected);\n this.value = selected ? selected.value : null;\n this.checkSelectedRadioButton();\n });\n }\n\n /** Whether the radio group is disabled */\n get disabled(): boolean {\n return this._disabled();\n }\n\n set disabled(value: boolean) {\n this._disabled.set(value);\n }\n\n private readonly _disabled = signal(false);\n\n /** @docs-private */\n readonly valueInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'value' });\n\n /** @docs-private */\n readonly selectedInput = input<KbqRadioButton | null | undefined>(undefined, { alias: 'selected' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` included;\n // unbound, it leaves what code wrote.\n if (changes['valueInput']) {\n this.value = this.valueInput();\n }\n\n if (changes['selectedInput']) {\n this.selected = this.selectedInput() ?? null;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n /** Whether the radio group is required */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Value of `aria-invalid`: set whenever the group is painted as invalid.\n *\n * @internal\n */\n protected readonly ariaInvalid = computed(() => (this.errorState() || this.color() === 'error' ? 'true' : null));\n\n /** Error text projected into the group. */\n private readonly error = contentChild(KbqError, { descendants: false });\n\n /**\n * Whether the projected `kbq-error` is shown. Without one, nothing is rendered under the options.\n *\n * @internal\n */\n protected readonly showError = computed(() => this.errorState() && !!this.error());\n\n /**\n * Id of the element wrapping the projected `kbq-error`.\n *\n * @internal\n */\n protected readonly errorId = inject(_IdGenerator).getId('kbq-radio-group-error-');\n\n /**\n * Hints of the group itself, shown under the options. The hints of the buttons are their own.\n *\n * @internal\n */\n protected readonly hints = contentChildren(KbqHint, { descendants: false });\n\n /** Ids the group last added to `aria-describedby` of the host, so the consumer's own survive an update. */\n private ownDescribedByIds: string[] = [];\n\n private readonly renderer = inject(Renderer2);\n private readonly isBrowser = inject(Platform).isBrowser;\n\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\n readonly change = output<KbqRadioChange>();\n\n private readonly radiosQuery = contentChildren<KbqRadioButton>(\n forwardRef(() => KbqRadioButton),\n { descendants: true }\n );\n private readonly radiosList = kbqQueryListFrom(this.radiosQuery);\n\n /** Child radio buttons. */\n get radios(): QueryList<KbqRadioButton> {\n return this.radiosList();\n }\n\n /**\n * Selected value for group. Should equal the value of the selected radio button if there *is*\n * a corresponding radio button with a matching value. If there is *not* such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n private readonly _value = signal<any>(null);\n\n /** The currently selected radio button. Should match value. */\n private readonly _selected = signal<KbqRadioButton | null>(null);\n\n /** Whether the `value` has been set to its initial value. */\n private isInitialized: boolean = false;\n\n /**\n * Called when the value changes. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n *\n * @docs-private\n */\n onTouched: () => any = () => {};\n\n checkSelectedRadioButton() {\n untracked(() => {\n const selected = this._selected();\n\n if (selected && !selected.checked) {\n selected.checked = true;\n }\n });\n }\n\n constructor() {\n super();\n\n // Written by hand rather than bound: the host is the element the consumer writes, and a host binding would\n // overwrite an `[attr.aria-describedby]` the consumer binds on it. Not on the server: after hydration the ids\n // it wrote would be read back as the consumer's own.\n effect(() => {\n if (!this.isBrowser) return;\n\n const ids = [...(this.showError() ? [this.errorId] : []), ...this.hints().map((hint) => hint.id())];\n\n untracked(() => this.setDescribedByIds(ids));\n });\n }\n\n ngOnInit(): void {\n this.errorStateTracker.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n }\n\n ngDoCheck(): void {\n // Re-evaluated on every check: a submit of the parent form notifies nothing a signal could follow.\n if (this.errorStateTracker.ngControl) this.updateErrorState();\n }\n\n /** Updates the error state based on the error state matcher. */\n updateErrorState(): void {\n this.errorStateTracker.errorStateMatcher = this.errorStateMatcher();\n this.errorStateTracker.updateErrorState();\n }\n\n /** Writes the error and the hints of the group to `aria-describedby` of the host, after the consumer's own ids. */\n private setDescribedByIds(ids: string[]): void {\n const element = this.elementRef.nativeElement;\n const consumerIds = (element.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter((id) => id && !this.ownDescribedByIds.includes(id));\n const next = [...consumerIds, ...ids];\n\n this.ownDescribedByIds = ids;\n\n if (next.length) {\n this.renderer.setAttribute(element, 'aria-describedby', next.join(' '));\n } else {\n this.renderer.removeAttribute(element, 'aria-describedby');\n }\n }\n\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on KbqRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the KbqRadioGroup.\n this.isInitialized = true;\n }\n\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentChecked(): void {\n // Syncs the list here so `changes` emits after the projected items are bound and before the host bindings.\n this.radiosList();\n }\n\n /**\n * Moves focus to the checked radio button, or to the first enabled one when nothing is checked —\n * the same rule the browser follows when the group is reached with <kbd>Tab</kbd>.\n */\n focus(origin: FocusOrigin = 'program'): void {\n untracked(() => {\n const target = this._selected() ?? this.radios?.find((radio) => !radio.disabled);\n\n target?.focus(origin);\n });\n }\n\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /** Dispatch change event with current selection and group value. */\n emitChangeEvent(): void {\n if (this.isInitialized) {\n this.change.emit(new KbqRadioChange(untracked(this._selected)!, untracked(this._value)));\n }\n }\n\n /**\n * Marks every radio button of the group for a change-detection check.\n *\n * Kept for back-compatibility. A button derives `checked` and `disabled` from signals, its own and its\n * group's, so it re-renders on its own and nothing in the library calls this any more.\n */\n markRadiosForCheck() {\n // Kept at the DS-2196 review, like `KbqButtonToggle.markForCheck()`, which the migration guide promises stays.\n if (this.radios) {\n this.radios.forEach((radio) => radio.markForCheck());\n }\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n */\n writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void) {\n this.controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n *\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Updates the `selected` radio button from the internal _value state. */\n private updateSelectedRadioFromValue(): void {\n // If the value already matches the selected radio, do nothing.\n const selected = this._selected();\n const isAlreadySelected = selected !== null && selected.value === this._value();\n\n // Before the content is initialized the buttons are not bound yet; each one reads the group value itself.\n if (this.isInitialized && !isAlreadySelected) {\n this._selected.set(null);\n\n this.radios.forEach((radio) => {\n radio.checked = this.value === radio.value;\n\n if (radio.checked) {\n this._selected.set(radio);\n }\n });\n }\n }\n}\n\n@Component({\n selector: 'kbq-radio-button',\n templateUrl: 'radio.component.html',\n styleUrls: ['radio.scss', 'radio-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-radio-button',\n '[attr.id]': 'id()',\n // The group's `big` through a signal of the button's own: the group's host bindings read `big`, and they run in\n // the same reactive consumer, where a signal read again after others costs a scan of all it has read so far.\n '[class.kbq-radio-button_big]': 'big()',\n '[class.kbq-selected]': 'checked',\n '[class.kbq-disabled]': 'disabled'\n },\n exportAs: 'kbqRadioButton'\n})\nexport class KbqRadioButton extends KbqColorDirective implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly radioDispatcher = inject(UniqueSelectionDispatcher);\n\n /** Whether this radio button is checked. */\n get checked(): boolean {\n return this._checked();\n }\n\n set checked(value: boolean) {\n // Untracked, as the `value` setter: called from a consumer's `effect()`, the selection read on the way — the\n // button's, its group's and its siblings' — would make the effect run again whenever the user picks another\n // button.\n untracked(() => {\n if (this._checked() !== value) {\n this._checked.set(value);\n\n if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n } else if (!value && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n\n if (value) {\n // Notify all radio buttons with the same name to un-check.\n this.radioDispatcher.notify(this.id(), this.name);\n }\n }\n });\n }\n\n /** The value of this radio button. */\n get value(): any {\n return this._value();\n }\n\n set value(value: any) {\n untracked(() => {\n if (this._value() !== value) {\n this._value.set(value);\n\n if (this.radioGroup) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n });\n }\n\n /** Whether the radio button is disabled. A button inside a disabled group is disabled as well. */\n get disabled(): boolean {\n return this._disabled() || !!this.radioGroup?.disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled.set(value);\n }\n\n private readonly _disabled = signal(false);\n\n /** Tabindex of the native input. A disabled button is taken out of the tab order. */\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex();\n }\n\n set tabIndex(value: number) {\n this._tabIndex.set(value);\n }\n\n private readonly _tabIndex = signal(0);\n\n /** Whether the radio button is required. A button inside a required group is required as well. */\n get required(): boolean {\n return this._required() || !!this.radioGroup?.required();\n }\n\n set required(value: boolean) {\n this._required.set(value);\n }\n\n /** Whether this radio is required. */\n private readonly _required = signal(false);\n\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition(): 'before' | 'after' {\n return this._labelPosition() || this.radioGroup?.labelPosition() || 'after';\n }\n /** @docs-private */\n set labelPosition(value: 'before' | 'after' | undefined) {\n this._labelPosition.set(value);\n }\n\n /**\n * Analog to HTML 'name' attribute used to group radios for unique selection. Defaults to the\n * parent group's name, or — outside a group — to an id unique to this button.\n */\n // An accessor rather than a plain field: the app-global UniqueSelectionDispatcher isolates its\n // listeners by name alone, so a button that resolved to `undefined` would share one selection\n // group with every other unnamed radio button in the application. Resolving the group's name here\n // rather than copying it in `ngOnInit` is also what keeps an explicitly bound `[name]` alive.\n get name(): string {\n return this._name() ?? this.radioGroup?.name() ?? this.uniqueId;\n }\n\n set name(value: string | undefined) {\n this._name.set(value);\n }\n\n /** The native `<input type=radio>` element */\n readonly inputElement = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\n\n readonly change = output<KbqRadioChange>();\n\n /** The parent radio group. `null` when the button is used outside one. */\n radioGroup: KbqRadioGroup | null = inject(KbqRadioGroup, { optional: true });\n\n /**\n * Whether the button takes the big size of its group.\n *\n * @internal\n */\n protected readonly big = computed(() => !!this.radioGroup?.big());\n\n private readonly uniqueId: string = inject(_IdGenerator).getId('kbq-radio-');\n\n /**\n * A unique id for the radio button. If none is supplied — or `null` is bound explicitly — it is\n * auto-generated, so a read always yields the id the element actually carries.\n */\n readonly id = input(this.uniqueId, {\n transform: (value: string | null | undefined) => value || this.uniqueId\n });\n\n /** ID of the native input element inside `<kbq-radio-button>` */\n readonly inputId = computed(() => `${this.id()}-input`);\n\n /**\n * ID of the element holding the option text. The native input points its `aria-labelledby` at it,\n * so the accessible name is the option text alone rather than everything the wrapping `<label>`\n * contains — the projected hint included.\n */\n protected readonly labelId = computed(() => `${this.id()}-label`);\n\n /**\n * The `value` attribute of the native input. An `<input type=\"radio\">` with no `value` submits the\n * literal string `\"on\"`, so only string-like values round-trip through native form submission.\n */\n protected get nativeValue(): string | null {\n const value = this._value();\n\n return value == null ? null : String(value);\n }\n\n /** Hint projected into the button, referenced by the native input's `aria-describedby`. */\n protected readonly hint = contentChild(KbqHint);\n\n private readonly _labelPosition = signal<'before' | 'after' | undefined>(undefined);\n\n private readonly _name = signal<string | undefined>(undefined);\n\n /** @docs-private */\n readonly valueInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'value' });\n\n /** @docs-private */\n readonly checkedInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'checked',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly tabIndexInput = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: 'tabIndex',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly requiredInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'required',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly labelPositionInput = input<'before' | 'after' | undefined>(undefined, { alias: 'labelPosition' });\n\n /** @docs-private */\n readonly nameInput = input<string | undefined>(undefined, { alias: 'name' });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` included;\n // unbound, it leaves what code wrote.\n if (changes['valueInput']) {\n this.value = this.valueInput();\n }\n\n if (changes['checkedInput']) {\n const checked = this.checkedInput();\n\n if (checked !== undefined) this.checked = checked;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n\n if (changes['tabIndexInput']) this.tabIndex = this.tabIndexInput() ?? 0;\n\n if (changes['requiredInput']) {\n const required = this.requiredInput();\n\n if (required !== undefined) this.required = required;\n }\n\n if (changes['labelPositionInput']) {\n this.labelPosition = this.labelPositionInput();\n }\n\n if (changes['nameInput']) {\n this.name = this.nameInput();\n }\n }\n\n /** Whether this radio is checked. */\n private readonly _checked = signal(false);\n\n /** Value assigned to this radio. */\n private readonly _value = signal<any>(null);\n\n constructor() {\n super();\n\n this.removeUniqueSelectionListener = this.radioDispatcher.listen((id: string, name: string) => {\n if (id !== this.id() && name === this.name) {\n this.checked = false;\n }\n });\n }\n\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value();\n }\n }\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((focusOrigin) => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup.touch();\n }\n });\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.removeUniqueSelectionListener();\n }\n\n /**\n * Focuses the radio button.\n *\n * Routed through the `FocusMonitor` so the origin is recorded: the focus ring is keyed off\n * `.cdk-keyboard-focused`, which a bare `element.focus()` never produces.\n */\n focus(origin: FocusOrigin = 'program'): void {\n this.focusMonitor.focusVia(this.inputElement(), origin);\n }\n\n /**\n * Marks the radio button as needing checking for change detection.\n *\n * Kept for back-compatibility. A button derives its state from signals, its own and its group's, so it\n * re-renders on its own and nothing in the library calls this any more.\n */\n markForCheck() {\n // Kept at the DS-2196 review, like `KbqButtonToggle.markForCheck()`, which the migration guide promises stays.\n this.changeDetector.markForCheck();\n }\n\n onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling & forcing skip event from closing actions for the second event will solve that issue.\n event.stopPropagation();\n (event as Event & { kbqPopoverPreventHide: boolean }).kbqPopoverPreventHide = true;\n }\n\n onInputChange(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n\n this.checked = true;\n this.emitChangeEvent();\n\n if (this.radioGroup) {\n this.radioGroup.controlValueAccessorChangeFn(this.value);\n this.radioGroup.touch();\n\n if (groupValueChanged) {\n this.radioGroup.emitChangeEvent();\n }\n }\n }\n\n /** Unregister function for _radioDispatcher */\n private readonly removeUniqueSelectionListener: () => void = () => {};\n\n /** Dispatch change event with current value. */\n private emitChangeEvent(): void {\n this.change.emit(new KbqRadioChange(this, this._value()));\n }\n}\n","<label #label class=\"kbq-radio-label\" [attr.for]=\"inputId()\">\n <!--\n The wrapping label would fold everything it contains — the projected hint included — into the\n accessible name, so the name is overridden with an explicit `aria-labelledby` pointing at the\n option text alone, and the hint arrives as a description instead.\n -->\n <input\n #input\n type=\"radio\"\n class=\"kbq-radio-input cdk-visually-hidden\"\n [attr.aria-describedby]=\"hint()?.id() ?? null\"\n [attr.aria-labelledby]=\"labelId()\"\n [attr.name]=\"name\"\n [attr.value]=\"nativeValue\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [id]=\"inputId()\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex\"\n (change)=\"onInputChange($event)\"\n (click)=\"onInputClick($event)\"\n />\n\n <div class=\"kbq-radio-label-content\" [class.kbq-radio-label-before]=\"labelPosition === 'before'\">\n <div class=\"kbq-radio-button__outer-circle\">\n <div class=\"kbq-radio-button__inner-circle\"></div>\n </div>\n\n <div class=\"kbq-radio__text-container\">\n <span class=\"kbq-radio__text\" [id]=\"labelId()\">\n <ng-content />\n </span>\n\n <ng-content select=\"kbq-hint\" />\n </div>\n </div>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { KbqRadioButton, KbqRadioGroup } from './radio.component';\n\n@NgModule({\n imports: [A11yModule, KbqRadioGroup, KbqRadioButton],\n exports: [KbqRadioGroup, KbqRadioButton]\n})\nexport class KbqRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-radio.mjs","sources":["../../../packages/components/radio/radio.component.ts","../../../packages/components/radio/radio.component.html","../../../packages/components/radio/radio.module.ts","../../../packages/components/radio/koobiq-components-radio.ts"],"sourcesContent":["import { _IdGenerator, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n DoCheck,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n Provider,\n QueryList,\n Renderer2,\n signal,\n SimpleChanges,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR, NgControl, NgForm } from '@angular/forms';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n KbqColorDirective,\n KbqErrorStateTracker,\n kbqOptionalNumberAttribute,\n kbqQueryListFrom\n} from '@koobiq/components/core';\nimport { KbqError, KbqHint, kbqHintParentFactoryProvider } from '@koobiq/components/form-field';\n\n/** Change event object emitted by KbqRadio. */\nexport class KbqRadioChange {\n constructor(\n /** The KbqRadioButton that emits the change event. */\n public source: KbqRadioButton,\n /** The value of the KbqRadioButton. */\n public value: any\n ) {}\n}\n\n/**\n * Provider Expression that allows kbq-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n *\n * @docs-private\n */\nexport const KBQ_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqRadioGroup),\n multi: true\n};\n\n/**\n * Selection group for `KbqRadioButton`.\n *\n * The host is a `radiogroup`, which is not a name-from-content role, so it reaches assistive\n * technology unnamed unless the consumer names it. Name it with a plain `aria-label` /\n * `aria-labelledby` attribute pointing at the visible group label: the host is the very element the\n * consumer writes, so an input aliased to the same name would only write back what is already there —\n * and would wipe an `[attr.aria-label]` binding, which never reaches the input.\n *\n * To show a validation error, bind the group to a form control and put the error text in a `kbq-error` inside the\n * group. A `kbq-hint` put inside the group is shown under the options, below the error.\n */\n@Component({\n selector: 'kbq-radio-group',\n // Styled by `radio.scss`, which the buttons carry: the error and the hints of a group stand under its buttons.\n template: `\n <ng-content />\n\n <!--\n Under the options, as in a form field: the error first, rendered only in the error state so that\n assistive technology announces the alert as it appears, then the hints of the group.\n -->\n @if (showError() || hints().length) {\n <span class=\"kbq-radio-group__subscript\">\n @if (showError()) {\n <span class=\"kbq-radio-group__error\" [id]=\"errorId\">\n <ng-content select=\"kbq-error\" />\n </span>\n }\n\n <ng-content select=\"kbq-hint\" />\n </span>\n }\n `,\n providers: [\n KBQ_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n kbqHintParentFactoryProvider(() => {\n const group = inject(KbqRadioGroup);\n\n return { compact: computed(() => !group.big()), disabled: computed(() => group.disabled) };\n })\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'radiogroup',\n class: 'kbq-radio-group',\n '[class.kbq-radio-group_normal]': '!big()',\n '[class.kbq-radio-group_big]': 'big()',\n '[class.kbq-radio-group_label-before]': \"labelPosition() === 'before'\",\n '[class.kbq-invalid]': 'errorState()',\n '[attr.aria-required]': \"required() ? 'true' : null\",\n // A signal of its own: the color class binding reads `color` first, and the host bindings of every group in a\n // view run in that view's reactive consumer, where a signal read again after others costs a scan of all it has\n // read so far.\n '[attr.aria-invalid]': 'ariaInvalid()'\n },\n exportAs: 'kbqRadioGroup'\n})\nexport class KbqRadioGroup\n extends KbqColorDirective\n implements\n AfterContentChecked,\n OnChanges,\n OnInit,\n DoCheck,\n AfterContentInit,\n ControlValueAccessor,\n CanUpdateErrorState\n{\n private readonly injector = inject(Injector);\n\n // The control is resolved in `ngOnInit`: `NgControl` injects the group as its value accessor, so injecting it\n // back from the constructor is a cyclic dependency.\n private readonly errorStateTracker = new KbqErrorStateTracker(\n inject(ErrorStateMatcher),\n null,\n inject(FormGroupDirective, { optional: true }),\n inject(NgForm, { optional: true })\n );\n\n /** Whether the radio group is in an error state. */\n readonly errorState = this.errorStateTracker.errorState;\n\n /** An object used to control when the error state is shown. */\n readonly errorStateMatcher = input<ErrorStateMatcher>();\n\n readonly big = input<boolean>(false);\n\n /**\n * Name of the radio button group. All radio buttons inside this group will use this name,\n * unless they were given one of their own.\n */\n readonly name = input<string>(inject(_IdGenerator).getId('kbq-radio-group-'));\n\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n readonly labelPosition = input<'before' | 'after', 'before' | 'after'>('after', {\n transform: (value) => (value === 'before' ? 'before' : 'after')\n });\n\n /** Value of the radio button. */\n // `value`, `selected` and `disabled` are accessors over signals, fed by aliased inputs, because code outside the\n // template writes them too: `writeValue` and `setDisabledState` the first and last, the buttons their selection\n // back into `selected`. `disabled` is no `model()` because it coerces with `booleanAttribute`, which a `model()`\n // cannot carry; `value` is none because `writeValue` has to resolve the checked button synchronously before the\n // first render, and a `model()` would also publish a `valueChange` output that duplicates `change`.\n get value(): any {\n return this._value();\n }\n\n set value(newValue: any) {\n // Untracked, as the other setters and methods that select: called from a consumer's `effect()`, the selection\n // read on the way — the group's and its buttons' — would make the effect run again whenever the user picks\n // another button.\n untracked(() => {\n if (this._value() !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value.set(newValue);\n\n this.updateSelectedRadioFromValue();\n this.checkSelectedRadioButton();\n }\n });\n }\n\n /** Whether the radio button is selected. */\n get selected() {\n return this._selected();\n }\n\n set selected(selected: KbqRadioButton | null) {\n untracked(() => {\n this._selected.set(selected);\n this.value = selected ? selected.value : null;\n this.checkSelectedRadioButton();\n });\n }\n\n /** Whether the radio group is disabled */\n get disabled(): boolean {\n return this._disabled();\n }\n\n set disabled(value: boolean) {\n this._disabled.set(value);\n }\n\n private readonly _disabled = signal(false);\n\n /** @docs-private */\n readonly valueInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'value' });\n\n /** @docs-private */\n readonly selectedInput = input<KbqRadioButton | null | undefined>(undefined, { alias: 'selected' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` included;\n // unbound, it leaves what code wrote.\n if (changes['valueInput']) {\n this.value = this.valueInput();\n }\n\n if (changes['selectedInput']) {\n this.selected = this.selectedInput() ?? null;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n /** Whether the radio group is required */\n readonly required = input(false, { transform: booleanAttribute });\n\n /**\n * Value of `aria-invalid`: set whenever the group is painted as invalid.\n *\n * @docs-private\n */\n protected readonly ariaInvalid = computed(() => (this.errorState() || this.color() === 'error' ? 'true' : null));\n\n /** Error text projected into the group. */\n private readonly error = contentChild(KbqError, { descendants: false });\n\n /**\n * Whether the projected `kbq-error` is shown. Without one, nothing is rendered under the options.\n *\n * @docs-private\n */\n protected readonly showError = computed(() => this.errorState() && !!this.error());\n\n /**\n * Id of the element wrapping the projected `kbq-error`.\n *\n * @docs-private\n */\n protected readonly errorId = inject(_IdGenerator).getId('kbq-radio-group-error-');\n\n /**\n * Hints of the group itself, shown under the options. The hints of the buttons are their own.\n *\n * @docs-private\n */\n protected readonly hints = contentChildren(KbqHint, { descendants: false });\n\n /** Ids the group last added to `aria-describedby` of the host, so the consumer's own survive an update. */\n private ownDescribedByIds: string[] = [];\n\n private readonly renderer = inject(Renderer2);\n private readonly isBrowser = inject(Platform).isBrowser;\n\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\n readonly change = output<KbqRadioChange>();\n\n private readonly radiosQuery = contentChildren<KbqRadioButton>(\n forwardRef(() => KbqRadioButton),\n { descendants: true }\n );\n private readonly radiosList = kbqQueryListFrom(this.radiosQuery);\n\n /** Child radio buttons. */\n get radios(): QueryList<KbqRadioButton> {\n return this.radiosList();\n }\n\n /**\n * Selected value for group. Should equal the value of the selected radio button if there *is*\n * a corresponding radio button with a matching value. If there is *not* such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n private readonly _value = signal<any>(null);\n\n /** The currently selected radio button. Should match value. */\n private readonly _selected = signal<KbqRadioButton | null>(null);\n\n /** Whether the `value` has been set to its initial value. */\n private isInitialized: boolean = false;\n\n /**\n * Called when the value changes. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n *\n * @docs-private\n */\n onTouched: () => any = () => {};\n\n checkSelectedRadioButton() {\n untracked(() => {\n const selected = this._selected();\n\n if (selected && !selected.checked) {\n selected.checked = true;\n }\n });\n }\n\n constructor() {\n super();\n\n // Written by hand rather than bound: the host is the element the consumer writes, and a host binding would\n // overwrite an `[attr.aria-describedby]` the consumer binds on it. Not on the server: after hydration the ids\n // it wrote would be read back as the consumer's own.\n effect(() => {\n if (!this.isBrowser) return;\n\n const ids = [...(this.showError() ? [this.errorId] : []), ...this.hints().map((hint) => hint.id())];\n\n untracked(() => this.setDescribedByIds(ids));\n });\n }\n\n ngOnInit(): void {\n this.errorStateTracker.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n }\n\n ngDoCheck(): void {\n // Re-evaluated on every check: a submit of the parent form notifies nothing a signal could follow.\n if (this.errorStateTracker.ngControl) this.updateErrorState();\n }\n\n /** Updates the error state based on the error state matcher. */\n updateErrorState(): void {\n this.errorStateTracker.errorStateMatcher = this.errorStateMatcher();\n this.errorStateTracker.updateErrorState();\n }\n\n /** Writes the error and the hints of the group to `aria-describedby` of the host, after the consumer's own ids. */\n private setDescribedByIds(ids: string[]): void {\n const element = this.elementRef.nativeElement;\n const consumerIds = (element.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter((id) => id && !this.ownDescribedByIds.includes(id));\n const next = [...consumerIds, ...ids];\n\n this.ownDescribedByIds = ids;\n\n if (next.length) {\n this.renderer.setAttribute(element, 'aria-describedby', next.join(' '));\n } else {\n this.renderer.removeAttribute(element, 'aria-describedby');\n }\n }\n\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on KbqRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the KbqRadioGroup.\n this.isInitialized = true;\n }\n\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentChecked(): void {\n // Syncs the list here so `changes` emits after the projected items are bound and before the host bindings.\n this.radiosList();\n }\n\n /**\n * Moves focus to the checked radio button, or to the first enabled one when nothing is checked —\n * the same rule the browser follows when the group is reached with <kbd>Tab</kbd>.\n */\n focus(origin: FocusOrigin = 'program'): void {\n untracked(() => {\n const target = this._selected() ?? this.radios?.find((radio) => !radio.disabled);\n\n target?.focus(origin);\n });\n }\n\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /** Dispatch change event with current selection and group value. */\n emitChangeEvent(): void {\n if (this.isInitialized) {\n this.change.emit(new KbqRadioChange(untracked(this._selected)!, untracked(this._value)));\n }\n }\n\n /**\n * Marks every radio button of the group for a change-detection check.\n *\n * Kept for back-compatibility. A button derives `checked` and `disabled` from signals, its own and its\n * group's, so it re-renders on its own and nothing in the library calls this any more.\n */\n markRadiosForCheck() {\n // Kept at the DS-2196 review, like `KbqButtonToggle.markForCheck()`, which the migration guide promises stays.\n if (this.radios) {\n this.radios.forEach((radio) => radio.markForCheck());\n }\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n */\n writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void) {\n this.controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n *\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Updates the `selected` radio button from the internal _value state. */\n private updateSelectedRadioFromValue(): void {\n // If the value already matches the selected radio, do nothing.\n const selected = this._selected();\n const isAlreadySelected = selected !== null && selected.value === this._value();\n\n // Before the content is initialized the buttons are not bound yet; each one reads the group value itself.\n if (this.isInitialized && !isAlreadySelected) {\n this._selected.set(null);\n\n this.radios.forEach((radio) => {\n radio.checked = this.value === radio.value;\n\n if (radio.checked) {\n this._selected.set(radio);\n }\n });\n }\n }\n}\n\n@Component({\n selector: 'kbq-radio-button',\n templateUrl: 'radio.component.html',\n styleUrls: ['radio.scss', 'radio-tokens.scss'],\n providers: [\n kbqHintParentFactoryProvider(() => {\n const button = inject(KbqRadioButton);\n\n return { compact: computed(() => !button.radioGroup?.big()), disabled: computed(() => button.disabled) };\n })\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-radio-button',\n '[attr.id]': 'id()',\n // The group's `big` through a signal of the button's own: the group's host bindings read `big`, and they run in\n // the same reactive consumer, where a signal read again after others costs a scan of all it has read so far.\n '[class.kbq-radio-button_big]': 'big()',\n '[class.kbq-selected]': 'checked',\n '[class.kbq-disabled]': 'disabled'\n },\n exportAs: 'kbqRadioButton'\n})\nexport class KbqRadioButton extends KbqColorDirective implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly radioDispatcher = inject(UniqueSelectionDispatcher);\n\n /** Whether this radio button is checked. */\n get checked(): boolean {\n return this._checked();\n }\n\n set checked(value: boolean) {\n // Untracked, as the `value` setter: called from a consumer's `effect()`, the selection read on the way — the\n // button's, its group's and its siblings' — would make the effect run again whenever the user picks another\n // button.\n untracked(() => {\n if (this._checked() !== value) {\n this._checked.set(value);\n\n if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n } else if (!value && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n\n if (value) {\n // Notify all radio buttons with the same name to un-check.\n this.radioDispatcher.notify(this.id(), this.name);\n }\n }\n });\n }\n\n /** The value of this radio button. */\n get value(): any {\n return this._value();\n }\n\n set value(value: any) {\n untracked(() => {\n if (this._value() !== value) {\n this._value.set(value);\n\n if (this.radioGroup) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n });\n }\n\n /** Whether the radio button is disabled. A button inside a disabled group is disabled as well. */\n get disabled(): boolean {\n return this._disabled() || !!this.radioGroup?.disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled.set(value);\n }\n\n private readonly _disabled = signal(false);\n\n /** Tabindex of the native input. A disabled button is taken out of the tab order. */\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex();\n }\n\n set tabIndex(value: number) {\n this._tabIndex.set(value);\n }\n\n private readonly _tabIndex = signal(0);\n\n /** Whether the radio button is required. A button inside a required group is required as well. */\n get required(): boolean {\n return this._required() || !!this.radioGroup?.required();\n }\n\n set required(value: boolean) {\n this._required.set(value);\n }\n\n /** Whether this radio is required. */\n private readonly _required = signal(false);\n\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition(): 'before' | 'after' {\n return this._labelPosition() || this.radioGroup?.labelPosition() || 'after';\n }\n /** @docs-private */\n set labelPosition(value: 'before' | 'after' | undefined) {\n this._labelPosition.set(value);\n }\n\n /**\n * Analog to HTML 'name' attribute used to group radios for unique selection. Defaults to the\n * parent group's name, or — outside a group — to an id unique to this button.\n */\n // An accessor rather than a plain field: the app-global UniqueSelectionDispatcher isolates its\n // listeners by name alone, so a button that resolved to `undefined` would share one selection\n // group with every other unnamed radio button in the application. Resolving the group's name here\n // rather than copying it in `ngOnInit` is also what keeps an explicitly bound `[name]` alive.\n get name(): string {\n return this._name() ?? this.radioGroup?.name() ?? this.uniqueId;\n }\n\n set name(value: string | undefined) {\n this._name.set(value);\n }\n\n /** The native `<input type=radio>` element */\n readonly inputElement = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\n\n readonly change = output<KbqRadioChange>();\n\n /** The parent radio group. `null` when the button is used outside one. */\n radioGroup: KbqRadioGroup | null = inject(KbqRadioGroup, { optional: true });\n\n /**\n * Whether the button takes the big size of its group.\n *\n * @docs-private\n */\n protected readonly big = computed(() => !!this.radioGroup?.big());\n\n private readonly uniqueId: string = inject(_IdGenerator).getId('kbq-radio-');\n\n /**\n * A unique id for the radio button. If none is supplied — or `null` is bound explicitly — it is\n * auto-generated, so a read always yields the id the element actually carries.\n */\n readonly id = input(this.uniqueId, {\n transform: (value: string | null | undefined) => value || this.uniqueId\n });\n\n /** ID of the native input element inside `<kbq-radio-button>` */\n readonly inputId = computed(() => `${this.id()}-input`);\n\n /**\n * ID of the element holding the option text. The native input points its `aria-labelledby` at it,\n * so the accessible name is the option text alone rather than everything the wrapping `<label>`\n * contains — the projected hint included.\n */\n protected readonly labelId = computed(() => `${this.id()}-label`);\n\n /**\n * The `value` attribute of the native input. An `<input type=\"radio\">` with no `value` submits the\n * literal string `\"on\"`, so only string-like values round-trip through native form submission.\n */\n protected get nativeValue(): string | null {\n const value = this._value();\n\n return value == null ? null : String(value);\n }\n\n /** Hint projected into the button, referenced by the native input's `aria-describedby`. */\n protected readonly hint = contentChild(KbqHint);\n\n private readonly _labelPosition = signal<'before' | 'after' | undefined>(undefined);\n\n private readonly _name = signal<string | undefined>(undefined);\n\n /** @docs-private */\n readonly valueInput = input<NonNullable<unknown> | null | undefined>(undefined, { alias: 'value' });\n\n /** @docs-private */\n readonly checkedInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'checked',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly tabIndexInput = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: 'tabIndex',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly requiredInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'required',\n transform: booleanAttribute\n });\n\n /** @docs-private */\n readonly labelPositionInput = input<'before' | 'after' | undefined>(undefined, { alias: 'labelPosition' });\n\n /** @docs-private */\n readonly nameInput = input<string | undefined>(undefined, { alias: 'name' });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` included;\n // unbound, it leaves what code wrote.\n if (changes['valueInput']) {\n this.value = this.valueInput();\n }\n\n if (changes['checkedInput']) {\n const checked = this.checkedInput();\n\n if (checked !== undefined) this.checked = checked;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n\n if (changes['tabIndexInput']) this.tabIndex = this.tabIndexInput() ?? 0;\n\n if (changes['requiredInput']) {\n const required = this.requiredInput();\n\n if (required !== undefined) this.required = required;\n }\n\n if (changes['labelPositionInput']) {\n this.labelPosition = this.labelPositionInput();\n }\n\n if (changes['nameInput']) {\n this.name = this.nameInput();\n }\n }\n\n /** Whether this radio is checked. */\n private readonly _checked = signal(false);\n\n /** Value assigned to this radio. */\n private readonly _value = signal<any>(null);\n\n constructor() {\n super();\n\n this.removeUniqueSelectionListener = this.radioDispatcher.listen((id: string, name: string) => {\n if (id !== this.id() && name === this.name) {\n this.checked = false;\n }\n });\n }\n\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value();\n }\n }\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((focusOrigin) => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup.touch();\n }\n });\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.removeUniqueSelectionListener();\n }\n\n /**\n * Focuses the radio button.\n *\n * Routed through the `FocusMonitor` so the origin is recorded: the focus ring is keyed off\n * `.cdk-keyboard-focused`, which a bare `element.focus()` never produces.\n */\n focus(origin: FocusOrigin = 'program'): void {\n this.focusMonitor.focusVia(this.inputElement(), origin);\n }\n\n /**\n * Marks the radio button as needing checking for change detection.\n *\n * Kept for back-compatibility. A button derives its state from signals, its own and its group's, so it\n * re-renders on its own and nothing in the library calls this any more.\n */\n markForCheck() {\n // Kept at the DS-2196 review, like `KbqButtonToggle.markForCheck()`, which the migration guide promises stays.\n this.changeDetector.markForCheck();\n }\n\n onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling & forcing skip event from closing actions for the second event will solve that issue.\n event.stopPropagation();\n (event as Event & { kbqPopoverPreventHide: boolean }).kbqPopoverPreventHide = true;\n }\n\n onInputChange(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n\n this.checked = true;\n this.emitChangeEvent();\n\n if (this.radioGroup) {\n this.radioGroup.controlValueAccessorChangeFn(this.value);\n this.radioGroup.touch();\n\n if (groupValueChanged) {\n this.radioGroup.emitChangeEvent();\n }\n }\n }\n\n /** Unregister function for _radioDispatcher */\n private readonly removeUniqueSelectionListener: () => void = () => {};\n\n /** Dispatch change event with current value. */\n private emitChangeEvent(): void {\n this.change.emit(new KbqRadioChange(this, this._value()));\n }\n}\n","<label #label class=\"kbq-radio-label\" [attr.for]=\"inputId()\">\n <!--\n The wrapping label would fold everything it contains — the projected hint included — into the\n accessible name, so the name is overridden with an explicit `aria-labelledby` pointing at the\n option text alone, and the hint arrives as a description instead.\n -->\n <input\n #input\n type=\"radio\"\n class=\"kbq-radio-input cdk-visually-hidden\"\n [attr.aria-describedby]=\"hint()?.id() ?? null\"\n [attr.aria-labelledby]=\"labelId()\"\n [attr.name]=\"name\"\n [attr.value]=\"nativeValue\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [id]=\"inputId()\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex\"\n (change)=\"onInputChange($event)\"\n (click)=\"onInputClick($event)\"\n />\n\n <span class=\"kbq-radio-label-content\" [class.kbq-radio-label-before]=\"labelPosition === 'before'\">\n <span class=\"kbq-radio-button__outer-circle\">\n <span class=\"kbq-radio-button__inner-circle\"></span>\n </span>\n\n <span class=\"kbq-radio__text-container\">\n <span class=\"kbq-radio__text\" [id]=\"labelId()\">\n <ng-content />\n </span>\n\n <ng-content select=\"kbq-hint\" />\n </span>\n </span>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { KbqRadioButton, KbqRadioGroup } from './radio.component';\n\n@NgModule({\n imports: [A11yModule, KbqRadioGroup, KbqRadioButton],\n exports: [KbqRadioGroup, KbqRadioButton]\n})\nexport class KbqRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -341,16 +341,26 @@ class KbqSearchExpandable {
341
341
  this.emitValue(this.control.value);
342
342
  }
343
343
  /**
344
- * Collapses the field on `Escape`. On `keydown` and spent, so that a container closing on the key, such as a
345
- * modal, stays open.
344
+ * Clears a non-empty field on `Escape`, or collapses an empty one. On `keydown` and spent, so that a container
345
+ * closing on the key, such as a modal, stays open.
346
346
  *
347
- * @internal
347
+ * @docs-private
348
348
  */
349
349
  onEscape(event) {
350
350
  if (this.disabled || !this.isOpened)
351
351
  return;
352
352
  event.preventDefault();
353
- this.toggle();
353
+ this.onSuffixClick();
354
+ }
355
+ /** @docs-private */
356
+ onSuffixClick() {
357
+ if (this.value()) {
358
+ this.resetValue();
359
+ this.input()?.focus();
360
+ }
361
+ else {
362
+ this.toggle();
363
+ }
354
364
  }
355
365
  setOpened(open) {
356
366
  if (this.disabled || this.isOpened === open)
@@ -359,20 +369,22 @@ class KbqSearchExpandable {
359
369
  if (!open) {
360
370
  // Never let a stale suppress-flag survive a close.
361
371
  this.suppressInputFocus = false;
362
- // An emission scheduled by the keystrokes that preceded the close would put the discarded
363
- // query back into the bound control right after the reset.
364
- this.cancelPendingEmit.next();
365
- // `emitEvent: false`: the reset reaches the consumer through the forced emit below, so
366
- // routing it through the debounce as well would only schedule a redundant no-op emission.
367
- this.control.setValue(defaultValue, { emitEvent: false });
368
- this.value.set(defaultValue);
369
- // Force the emit — closing must always synchronize the bound control to the reset
370
- // value, rather than relying on the debounce to eventually settle (it can be raced
371
- // by a value pushed just before close, silently leaving the control at a stale value).
372
- this.emitValue(defaultValue, true);
372
+ this.resetValue();
373
373
  }
374
374
  this.isOpenedChange.emit(this.isOpened);
375
375
  }
376
+ resetValue() {
377
+ // An emission scheduled by the keystrokes that preceded the reset would put the discarded
378
+ // query back into the bound control right after it.
379
+ this.cancelPendingEmit.next();
380
+ // `emitEvent: false`: the reset reaches the consumer through the immediate emit below, so
381
+ // routing it through the debounce as well would only schedule a redundant no-op emission.
382
+ this.control.setValue(defaultValue, { emitEvent: false });
383
+ this.value.set(defaultValue);
384
+ // Emit immediately — resetting must synchronize the bound control to the empty value rather
385
+ // than relying on the debounce. `emitValue` skips the call when that value is already there.
386
+ this.emitValue(defaultValue);
387
+ }
376
388
  /** Moves focus back onto the collapsed button, keeping its tooltip from opening on the way. */
377
389
  restoreFocusToButton(button) {
378
390
  const tooltip = this.tooltip();
@@ -400,7 +412,7 @@ class KbqSearchExpandable {
400
412
  this.focusMonitor.stopMonitoring(this.nativeElement);
401
413
  }
402
414
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqSearchExpandable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
403
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqSearchExpandable, isStandalone: true, selector: "kbq-search-expandable", inputs: { isEmitValueByEnterEnabled: { classPropertyName: "isEmitValueByEnterEnabled", publicName: "isEmitValueByEnterEnabled", isSignal: true, isRequired: false, transformFunction: null }, emitValueTimeout: { classPropertyName: "emitValueTimeout", publicName: "emitValueTimeout", isSignal: true, isRequired: false, transformFunction: null }, isOpenedInput: { classPropertyName: "isOpenedInput", publicName: "isOpened", isSignal: true, isRequired: false, transformFunction: null }, tooltipTextInput: { classPropertyName: "tooltipTextInput", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, placeholderInput: { classPropertyName: "placeholderInput", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndexInput: { classPropertyName: "tabIndexInput", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpenedChange: "isOpenedChange" }, host: { properties: { "class.kbq-search-expandable_opened": "isOpened" }, classAttribute: "kbq-search-expandable" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: KbqButton, descendants: true, isSignal: true }, { propertyName: "tooltip", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }], usesOnChanges: true, hostDirectives: [{ directive: i1.KbqLocaleOverridesDirective, inputs: ["kbqLocaleOverrides", "localeOverrides"] }], ngImport: i0, template: "@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [attr.aria-label]=\"tooltipText\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i [kbq-icon]=\"searchIconName\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix [kbq-icon]=\"searchIconName\"></i>\n\n <input\n kbqInput\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"placeholder\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [errorStateMatcher]=\"errorStateMatcher\"\n (blur)=\"onTouch()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n\n <button\n type=\"button\"\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n ></button>\n </kbq-form-field>\n}\n", styles: [".kbq-search-expandable{display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-start;min-width:0;min-height:0}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{display:flex;align-items:center;justify-content:center;border-radius:var(--kbq-search-expandable-close-button-border-radius)}@supports (corner-shape: squircle){.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{corner-shape:squircle;border-radius:clamp(var(--kbq-search-expandable-close-button-border-radius) * 1.85,var(--kbq-search-expandable-close-button-border-radius) * 2.3 - 3.6px,var(--kbq-search-expandable-close-button-border-radius) * 2)}}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{height:var(--kbq-search-expandable-close-button-size)}\n", ":where(.kbq-search-expandable){--kbq-search-expandable-close-button-size: var(--kbq-size-xxl);--kbq-search-expandable-close-button-border-radius: var(--kbq-size-xxs)}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "component", type: i3.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i4.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "component", type: i5.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders", "inOverlay", "horizontal", "labelClass", "contentClass"], outputs: ["inOverlayChange"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i5.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i5.KbqSuffix, selector: "[kbqSuffix]", exportAs: ["kbqSuffix"] }, { kind: "directive", type: i5.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i7.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqTooltipScrollStrategy", "forDisabledComponent", "ignoreTooltipPointerEvents", "kbqTooltipSingleInstance", "kbqTrigger", "hideWithTimeout", "kbqEnterDelay", "kbqLeaveDelay", "kbqRelativeToPointer", "kbqRelativeToCaret", "kbqRelativeToCaretVertical", "kbqTooltip", "kbqTooltipHeader", "kbqTooltipModifier", "kbqTooltipContext", "kbqTooltipClass", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset", "kbqTooltipDisabled", "kbqPlacementPriority", "kbqPlacement", "kbqVisible"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
415
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqSearchExpandable, isStandalone: true, selector: "kbq-search-expandable", inputs: { isEmitValueByEnterEnabled: { classPropertyName: "isEmitValueByEnterEnabled", publicName: "isEmitValueByEnterEnabled", isSignal: true, isRequired: false, transformFunction: null }, emitValueTimeout: { classPropertyName: "emitValueTimeout", publicName: "emitValueTimeout", isSignal: true, isRequired: false, transformFunction: null }, isOpenedInput: { classPropertyName: "isOpenedInput", publicName: "isOpened", isSignal: true, isRequired: false, transformFunction: null }, tooltipTextInput: { classPropertyName: "tooltipTextInput", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, placeholderInput: { classPropertyName: "placeholderInput", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndexInput: { classPropertyName: "tabIndexInput", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpenedChange: "isOpenedChange" }, host: { properties: { "class.kbq-search-expandable_opened": "isOpened" }, classAttribute: "kbq-search-expandable" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: KbqButton, descendants: true, isSignal: true }, { propertyName: "tooltip", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }], usesOnChanges: true, hostDirectives: [{ directive: i1.KbqLocaleOverridesDirective, inputs: ["kbqLocaleOverrides", "localeOverrides"] }], ngImport: i0, template: "@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [attr.aria-label]=\"tooltipText\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i [kbq-icon]=\"searchIconName\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix [kbq-icon]=\"searchIconName\"></i>\n\n <input\n kbqInput\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"placeholder\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [errorStateMatcher]=\"errorStateMatcher\"\n (blur)=\"onTouch()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n\n <button\n type=\"button\"\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [attr.aria-label]=\"value() ? a11yLocaleConfiguration().clear : a11yLocaleConfiguration().close\"\n [disabled]=\"disabled\"\n (click)=\"onSuffixClick()\"\n ></button>\n </kbq-form-field>\n}\n", styles: [".kbq-search-expandable{display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-start;min-width:0;min-height:0}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{display:flex;align-items:center;justify-content:center;border-radius:var(--kbq-search-expandable-close-button-border-radius)}@supports (corner-shape: squircle){.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{corner-shape:squircle;border-radius:clamp(var(--kbq-search-expandable-close-button-border-radius) * 1.85,var(--kbq-search-expandable-close-button-border-radius) * 2.3 - 3.6px,var(--kbq-search-expandable-close-button-border-radius) * 2)}}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{height:var(--kbq-search-expandable-close-button-size)}\n", ":where(.kbq-search-expandable){--kbq-search-expandable-close-button-size: var(--kbq-size-xxl);--kbq-search-expandable-close-button-border-radius: var(--kbq-size-xxs)}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "component", type: i3.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i4.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "readonly", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "component", type: i5.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders", "inOverlay", "horizontal", "labelClass", "contentClass", "showRequiredMarker"], outputs: ["inOverlayChange"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i5.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i5.KbqSuffix, selector: "[kbqSuffix]", exportAs: ["kbqSuffix"] }, { kind: "directive", type: i5.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i7.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqTooltipScrollStrategy", "forDisabledComponent", "ignoreTooltipPointerEvents", "kbqTooltipSingleInstance", "kbqTrigger", "hideWithTimeout", "kbqEnterDelay", "kbqLeaveDelay", "kbqRelativeToPointer", "kbqRelativeToCaret", "kbqRelativeToCaretVertical", "kbqTooltip", "kbqTooltipHeader", "kbqTooltipModifier", "kbqTooltipContext", "kbqTooltipClass", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipArrowCentered", "kbqTooltipOffset", "kbqTooltipDisabled", "kbqPlacementPriority", "kbqPlacement", "kbqVisible"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
404
416
  }
405
417
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqSearchExpandable, decorators: [{
406
418
  type: Component,
@@ -416,7 +428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
416
428
  '[class.kbq-search-expandable_opened]': 'isOpened'
417
429
  }, hostDirectives: [
418
430
  { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }
419
- ], template: "@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [attr.aria-label]=\"tooltipText\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i [kbq-icon]=\"searchIconName\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix [kbq-icon]=\"searchIconName\"></i>\n\n <input\n kbqInput\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"placeholder\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [errorStateMatcher]=\"errorStateMatcher\"\n (blur)=\"onTouch()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n\n <button\n type=\"button\"\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n ></button>\n </kbq-form-field>\n}\n", styles: [".kbq-search-expandable{display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-start;min-width:0;min-height:0}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{display:flex;align-items:center;justify-content:center;border-radius:var(--kbq-search-expandable-close-button-border-radius)}@supports (corner-shape: squircle){.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{corner-shape:squircle;border-radius:clamp(var(--kbq-search-expandable-close-button-border-radius) * 1.85,var(--kbq-search-expandable-close-button-border-radius) * 2.3 - 3.6px,var(--kbq-search-expandable-close-button-border-radius) * 2)}}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{height:var(--kbq-search-expandable-close-button-size)}\n", ":where(.kbq-search-expandable){--kbq-search-expandable-close-button-size: var(--kbq-size-xxl);--kbq-search-expandable-close-button-border-radius: var(--kbq-size-xxs)}\n"] }]
431
+ ], template: "@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [attr.aria-label]=\"tooltipText\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i [kbq-icon]=\"searchIconName\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix [kbq-icon]=\"searchIconName\"></i>\n\n <input\n kbqInput\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"placeholder\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [errorStateMatcher]=\"errorStateMatcher\"\n (blur)=\"onTouch()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n\n <button\n type=\"button\"\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [attr.aria-label]=\"value() ? a11yLocaleConfiguration().clear : a11yLocaleConfiguration().close\"\n [disabled]=\"disabled\"\n (click)=\"onSuffixClick()\"\n ></button>\n </kbq-form-field>\n}\n", styles: [".kbq-search-expandable{display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-start;min-width:0;min-height:0}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{display:flex;align-items:center;justify-content:center;border-radius:var(--kbq-search-expandable-close-button-border-radius)}@supports (corner-shape: squircle){.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{corner-shape:squircle;border-radius:clamp(var(--kbq-search-expandable-close-button-border-radius) * 1.85,var(--kbq-search-expandable-close-button-border-radius) * 2.3 - 3.6px,var(--kbq-search-expandable-close-button-border-radius) * 2)}}.kbq-search-expandable__search .kbq-icon-button.kbq-suffix{height:var(--kbq-search-expandable-close-button-size)}\n", ":where(.kbq-search-expandable){--kbq-search-expandable-close-button-size: var(--kbq-size-xxl);--kbq-search-expandable-close-button-border-radius: var(--kbq-size-xxs)}\n"] }]
420
432
  }], ctorParameters: () => [], propDecorators: { input: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqInput), { isSignal: true }] }], button: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqButton), { isSignal: true }] }], tooltip: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqTooltipTrigger), { isSignal: true }] }], isEmitValueByEnterEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEmitValueByEnterEnabled", required: false }] }], emitValueTimeout: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitValueTimeout", required: false }] }], isOpenedChange: [{ type: i0.Output, args: ["isOpenedChange"] }], isOpenedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpened", required: false }] }], tooltipTextInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipText", required: false }] }], placeholderInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], tabIndexInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }] } });
421
433
 
422
434
  class KbqSearchExpandableModule {