@baloise/ds-core 16.0.3 → 16.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 (473) hide show
  1. package/components/all.d.ts +234 -0
  2. package/components/all.js +350 -0
  3. package/components/aria.js +3 -0
  4. package/components/bal-accordion-details.js +4 -4
  5. package/components/bal-card.js +2 -2
  6. package/components/bal-card2.js +3 -3
  7. package/components/bal-carousel2.js +1 -1
  8. package/components/bal-checkbox-button.js +6 -6
  9. package/components/bal-checkbox-group.js +1 -1
  10. package/components/bal-checkbox2.js +3 -2
  11. package/components/bal-close2.js +1 -1
  12. package/components/bal-content.js +4 -4
  13. package/components/bal-date-calendar-cell.js +2 -2
  14. package/components/bal-date-calendar-cell2.js +3 -3
  15. package/components/bal-date-calendar2.js +3 -3
  16. package/components/bal-datepicker.js +3 -3
  17. package/components/bal-divider.js +4 -4
  18. package/components/bal-dropdown.d.ts +11 -0
  19. package/components/bal-dropdown.js +710 -0
  20. package/components/bal-field.js +12 -2
  21. package/components/bal-file-upload.js +1 -1
  22. package/components/bal-footer.js +4 -4
  23. package/components/bal-input-slider.js +1 -1
  24. package/components/bal-label.js +2 -2
  25. package/components/bal-label2.js +5 -5
  26. package/components/bal-nav-link-grid-col.js +2 -2
  27. package/components/bal-nav-link-grid-col2.js +4 -4
  28. package/components/bal-nav-link-grid.js +2 -2
  29. package/components/bal-nav-link-grid2.js +4 -4
  30. package/components/bal-nav-link-group.js +4 -4
  31. package/components/bal-nav-link.js +2 -2
  32. package/components/bal-nav-link2.js +4 -4
  33. package/components/bal-nav.js +8 -8
  34. package/components/bal-notices.js +3 -3
  35. package/components/bal-number-input.js +31 -13
  36. package/components/bal-option-list.d.ts +11 -0
  37. package/components/bal-option-list.js +459 -0
  38. package/components/bal-option.d.ts +11 -0
  39. package/components/bal-option.js +171 -0
  40. package/components/bal-popup.js +1 -1
  41. package/components/bal-radio-button.js +5 -5
  42. package/components/bal-radio-group.js +1 -1
  43. package/components/bal-radio2.js +1 -1
  44. package/components/bal-select2.js +4 -4
  45. package/components/bal-spinner2.js +54 -6
  46. package/components/bal-stack.js +2 -2
  47. package/components/bal-stack2.js +4 -4
  48. package/components/bal-steps.js +1 -1
  49. package/components/bal-tabs2.js +2 -2
  50. package/components/bal-tag2.js +1 -1
  51. package/components/config.default.js +1 -0
  52. package/components/date.js +5 -1
  53. package/components/index.esm.js +1 -1
  54. package/components/index.js +9 -1
  55. package/components/option.js +46 -0
  56. package/components/tokens.esm.js +1 -1
  57. package/dist/baloise-design-system/baloise-design-system.esm.js +1 -1
  58. package/dist/baloise-design-system/baloise-design-system.js +1 -1
  59. package/dist/baloise-design-system/index.esm.js +1 -1
  60. package/dist/baloise-design-system/p-013b4c72.system.js +1 -0
  61. package/dist/baloise-design-system/p-0639833837.system.entry.js +1 -0
  62. package/dist/baloise-design-system/{p-88852ce68d.system.entry.js → p-06e9a468fc.system.entry.js} +1 -1
  63. package/dist/baloise-design-system/p-0793c0159f.system.entry.js +1 -0
  64. package/dist/baloise-design-system/{p-720c90ea90.system.entry.js → p-0fed7a5f26.system.entry.js} +1 -1
  65. package/dist/baloise-design-system/p-10b8686d91.entry.js +1 -0
  66. package/dist/baloise-design-system/{p-e113196061.system.entry.js → p-126c79c9e9.system.entry.js} +1 -1
  67. package/dist/baloise-design-system/{p-bb2ec275bb.system.entry.js → p-12bb6ea3e7.system.entry.js} +1 -1
  68. package/dist/baloise-design-system/p-12bcc7da.js +1 -0
  69. package/dist/baloise-design-system/{p-762f45ff6f.entry.js → p-135c5759c5.entry.js} +1 -1
  70. package/dist/baloise-design-system/{p-62770d5d.system.js → p-14ae0709.system.js} +1 -1
  71. package/dist/baloise-design-system/{p-3bbf43bb.system.js → p-1509eaa7.system.js} +1 -1
  72. package/dist/baloise-design-system/{p-946e9e784d.system.entry.js → p-1659bb968c.system.entry.js} +1 -1
  73. package/dist/baloise-design-system/p-187f98a1.system.js +1 -0
  74. package/dist/baloise-design-system/p-18e2e391e0.system.entry.js +1 -0
  75. package/dist/baloise-design-system/p-1de6b20b1c.system.entry.js +1 -0
  76. package/dist/baloise-design-system/{p-1c2dee82c4.system.entry.js → p-222bc9b30e.system.entry.js} +1 -1
  77. package/dist/baloise-design-system/p-22b041a511.entry.js +1 -0
  78. package/dist/baloise-design-system/{p-f62222a85d.entry.js → p-25da216e4f.entry.js} +1 -1
  79. package/dist/baloise-design-system/p-25e0d82e89.system.entry.js +1 -0
  80. package/dist/baloise-design-system/p-2d82b78410.entry.js +1 -0
  81. package/dist/baloise-design-system/{p-a0db085f89.entry.js → p-2d8bd11634.entry.js} +1 -1
  82. package/dist/baloise-design-system/p-2db9030ad9.system.entry.js +1 -0
  83. package/dist/baloise-design-system/{p-8444cfcbed.system.entry.js → p-3128128969.system.entry.js} +1 -1
  84. package/dist/baloise-design-system/{p-9a5cb17cb9.entry.js → p-39bc49bc3d.entry.js} +1 -1
  85. package/dist/baloise-design-system/p-3bad0907.system.js +1 -0
  86. package/dist/baloise-design-system/{p-12786937.js → p-3f1c49d0.js} +1 -1
  87. package/dist/baloise-design-system/{p-33fca72859.entry.js → p-4aba4c66ee.entry.js} +1 -1
  88. package/dist/baloise-design-system/{p-9e4fcb76.js → p-54f81c32.js} +1 -1
  89. package/dist/baloise-design-system/{p-922fd809.system.js → p-55faac1d.system.js} +1 -1
  90. package/dist/baloise-design-system/p-5b571a9fb1.entry.js +1 -0
  91. package/dist/baloise-design-system/{p-671a986aff.entry.js → p-60e94f8144.entry.js} +1 -1
  92. package/dist/baloise-design-system/{p-06e959a11a.entry.js → p-6164f99bb8.entry.js} +1 -1
  93. package/dist/baloise-design-system/p-62ab1f0ae2.system.entry.js +1 -0
  94. package/dist/baloise-design-system/{p-6b80dee13f.system.entry.js → p-62b792a34b.system.entry.js} +1 -1
  95. package/dist/baloise-design-system/{p-8998eeb2a7.system.entry.js → p-74f4b9818b.system.entry.js} +1 -1
  96. package/dist/baloise-design-system/p-77f5e777e6.entry.js +1 -0
  97. package/dist/baloise-design-system/p-7c42a363f3.entry.js +1 -0
  98. package/dist/baloise-design-system/p-7cd815d3e8.entry.js +1 -0
  99. package/dist/baloise-design-system/p-80b45dd4d6.system.entry.js +1 -0
  100. package/dist/baloise-design-system/{p-af5b58ab1c.system.entry.js → p-8870e1f3e0.system.entry.js} +1 -1
  101. package/dist/baloise-design-system/{p-3cb83cf9.system.js → p-8a87b9a8.system.js} +1 -1
  102. package/dist/baloise-design-system/{p-a5568e05fb.system.entry.js → p-8c209ac52b.system.entry.js} +1 -1
  103. package/dist/baloise-design-system/p-8f77c423ad.entry.js +1 -0
  104. package/dist/baloise-design-system/{p-32bc2b926a.entry.js → p-8fe94b9e21.entry.js} +1 -1
  105. package/dist/baloise-design-system/{p-1b76afbf.js → p-94efe2aa.js} +1 -1
  106. package/dist/baloise-design-system/{p-0ce86357bd.entry.js → p-9658f4a66f.entry.js} +1 -1
  107. package/dist/baloise-design-system/p-9a0640d065.entry.js +1 -0
  108. package/dist/baloise-design-system/{p-c3bd665a8b.entry.js → p-9e167705ca.entry.js} +1 -1
  109. package/dist/baloise-design-system/p-9ecce014c2.system.entry.js +1 -0
  110. package/dist/baloise-design-system/p-a19d1e1d.js +1 -0
  111. package/dist/baloise-design-system/p-a7e5ee75e2.entry.js +1 -0
  112. package/dist/baloise-design-system/{p-9cc5ae9e5c.entry.js → p-a8022ee701.entry.js} +1 -1
  113. package/dist/baloise-design-system/p-a97cbb7dda.entry.js +1 -0
  114. package/dist/baloise-design-system/p-acb5cea0.system.js +1 -0
  115. package/dist/baloise-design-system/p-ae28b86fe5.entry.js +1 -0
  116. package/dist/baloise-design-system/p-b779742f50.entry.js +1 -0
  117. package/dist/baloise-design-system/{p-cee3cd08.js → p-b8d99064.js} +1 -1
  118. package/dist/baloise-design-system/p-b8f085f7b5.system.entry.js +1 -0
  119. package/dist/baloise-design-system/p-b97d9336a7.system.entry.js +1 -0
  120. package/dist/baloise-design-system/{p-b3a2290c0d.entry.js → p-b9f197815f.entry.js} +1 -1
  121. package/dist/baloise-design-system/{p-9e7610a20f.system.entry.js → p-bb3914c87a.system.entry.js} +1 -1
  122. package/dist/baloise-design-system/p-bb6304d0.system.js +1 -0
  123. package/dist/baloise-design-system/p-bcbb5b59f3.system.entry.js +1 -0
  124. package/dist/baloise-design-system/p-bcca1ed3.system.js +1 -0
  125. package/dist/baloise-design-system/{p-1cdfb98b54.entry.js → p-bcebf41b74.entry.js} +1 -1
  126. package/dist/baloise-design-system/p-bd5de78b2c.entry.js +1 -0
  127. package/dist/baloise-design-system/p-c304d5fa9c.entry.js +1 -0
  128. package/dist/baloise-design-system/{p-8177dec3.system.js → p-cc61fac8.system.js} +1 -1
  129. package/dist/baloise-design-system/{p-ac825842e4.system.entry.js → p-cd8e72d87f.system.entry.js} +1 -1
  130. package/dist/baloise-design-system/{p-a9300668b4.system.entry.js → p-d16557d133.system.entry.js} +1 -1
  131. package/dist/baloise-design-system/p-d7a758b3.js +1 -0
  132. package/dist/baloise-design-system/{p-33cd610840.system.entry.js → p-d919753ed0.system.entry.js} +1 -1
  133. package/dist/baloise-design-system/p-d9b38501.js +1 -0
  134. package/dist/baloise-design-system/p-d9d229a026.entry.js +1 -0
  135. package/dist/baloise-design-system/{p-13227d037a.system.entry.js → p-dbc2d22240.system.entry.js} +1 -1
  136. package/dist/baloise-design-system/{p-aacb0cee66.system.entry.js → p-dce3764ee5.system.entry.js} +1 -1
  137. package/dist/baloise-design-system/p-ddf9b2a289.entry.js +1 -0
  138. package/dist/baloise-design-system/{p-49a8bfb790.system.entry.js → p-e4de708de1.system.entry.js} +1 -1
  139. package/dist/baloise-design-system/p-e60c936359.system.entry.js +1 -0
  140. package/dist/baloise-design-system/p-e78a6409.js +1 -0
  141. package/dist/baloise-design-system/{p-f55c50abfa.system.entry.js → p-f076d1ed4f.system.entry.js} +1 -1
  142. package/dist/baloise-design-system/{p-b34e0daa6e.system.entry.js → p-f0b43f1452.system.entry.js} +1 -1
  143. package/dist/baloise-design-system/p-f12abda2db.entry.js +1 -0
  144. package/dist/baloise-design-system/{p-31d9c875c0.system.entry.js → p-f1b95d78af.system.entry.js} +1 -1
  145. package/dist/baloise-design-system/p-f56fb1a197.entry.js +1 -0
  146. package/dist/baloise-design-system/{p-681d41fc97.entry.js → p-f8974d743d.entry.js} +1 -1
  147. package/dist/baloise-design-system/p-f8a98657a1.entry.js +1 -0
  148. package/dist/cjs/{app-globals-d6bc7866.js → app-globals-ae3a8623.js} +1 -1
  149. package/dist/cjs/aria-c8955a5c.js +5 -0
  150. package/dist/cjs/bal-accordion_4.cjs.entry.js +4 -4
  151. package/dist/cjs/bal-card_6.cjs.entry.js +3 -3
  152. package/dist/cjs/bal-carousel_2.cjs.entry.js +5 -5
  153. package/dist/cjs/bal-checkbox-button.cjs.entry.js +6 -6
  154. package/dist/cjs/bal-checkbox_2.cjs.entry.js +4 -3
  155. package/dist/cjs/bal-close.cjs.entry.js +2 -2
  156. package/dist/cjs/bal-content.cjs.entry.js +4 -4
  157. package/dist/cjs/bal-date-calendar-cell.cjs.entry.js +2 -2
  158. package/dist/cjs/bal-date-calendar_2.cjs.entry.js +5 -5
  159. package/dist/cjs/bal-date.cjs.entry.js +2 -2
  160. package/dist/cjs/bal-datepicker.cjs.entry.js +7 -7
  161. package/dist/cjs/bal-divider.cjs.entry.js +4 -4
  162. package/dist/cjs/bal-dropdown.cjs.entry.js +660 -0
  163. package/dist/cjs/bal-field_5.cjs.entry.js +12 -2
  164. package/dist/cjs/bal-file-upload.cjs.entry.js +1 -1
  165. package/dist/cjs/bal-footer.cjs.entry.js +4 -4
  166. package/dist/cjs/bal-hint_3.cjs.entry.js +3 -3
  167. package/dist/cjs/bal-icon.cjs.entry.js +1 -1
  168. package/dist/cjs/bal-input-slider.cjs.entry.js +1 -1
  169. package/dist/cjs/bal-input-stepper.cjs.entry.js +1 -1
  170. package/dist/cjs/bal-label.cjs.entry.js +6 -6
  171. package/dist/cjs/bal-list_8.cjs.entry.js +3 -3
  172. package/dist/cjs/bal-logo.cjs.entry.js +3 -3
  173. package/dist/cjs/bal-nav_8.cjs.entry.js +28 -28
  174. package/dist/cjs/bal-navbar_5.cjs.entry.js +3 -3
  175. package/dist/cjs/bal-notices.cjs.entry.js +3 -3
  176. package/dist/cjs/bal-number-input.cjs.entry.js +32 -14
  177. package/dist/cjs/bal-option_2.cjs.entry.js +541 -0
  178. package/dist/cjs/bal-pagination.cjs.entry.js +4 -4
  179. package/dist/cjs/bal-popover_2.cjs.entry.js +3 -3
  180. package/dist/cjs/bal-progress-bar.cjs.entry.js +3 -3
  181. package/dist/cjs/bal-radio-button.cjs.entry.js +5 -5
  182. package/dist/cjs/bal-radio_2.cjs.entry.js +2 -2
  183. package/dist/cjs/bal-select_2.cjs.entry.js +3 -3
  184. package/dist/cjs/bal-shape.cjs.entry.js +1 -1
  185. package/dist/cjs/bal-spinner.cjs.entry.js +49 -4
  186. package/dist/cjs/bal-stack.cjs.entry.js +4 -4
  187. package/dist/cjs/bal-steps.cjs.entry.js +4 -4
  188. package/dist/cjs/bal-tab-item_2.cjs.entry.js +5 -5
  189. package/dist/cjs/bal-tag_2.cjs.entry.js +1 -1
  190. package/dist/cjs/bal-time-input.cjs.entry.js +1 -1
  191. package/dist/cjs/baloise-design-system.cjs.js +4 -4
  192. package/dist/cjs/{breakpoints.decorator-7f888011.js → breakpoints.decorator-47fd6060.js} +1 -1
  193. package/dist/cjs/{breakpoints.subject-28c980cd.js → breakpoints.subject-66093c8f.js} +1 -1
  194. package/dist/cjs/{config.default-32725178.js → config.default-5bdd6e3d.js} +1 -0
  195. package/dist/cjs/{date-df1d61a8.js → date-3e33b208.js} +5 -1
  196. package/dist/cjs/index.cjs.js +7 -5
  197. package/dist/cjs/{initialize-e38e7028.js → initialize-2a19d091.js} +9 -2
  198. package/dist/cjs/loader.cjs.js +4 -4
  199. package/dist/cjs/option-c33cf2b8.js +49 -0
  200. package/dist/cjs/{tokens.esm-89d0f18d.js → tokens.esm-bb0ef2db.js} +1 -1
  201. package/dist/collection/collection-manifest.json +14 -0
  202. package/dist/collection/components/bal-accordion/bal-accordion-details/bal-accordion-details.js +2 -2
  203. package/dist/collection/components/bal-card/bal-card.js +1 -1
  204. package/dist/collection/components/bal-carousel/controls/tab-control.js +1 -1
  205. package/dist/collection/components/bal-checkbox/bal-checkbox-button/bal-checkbox-button.css +1 -1
  206. package/dist/collection/components/bal-checkbox/bal-checkbox-button/bal-checkbox-button.js +3 -3
  207. package/dist/collection/components/bal-checkbox/bal-checkbox-group/bal-checkbox-group.js +1 -1
  208. package/dist/collection/components/bal-checkbox/bal-checkbox.js +2 -1
  209. package/dist/collection/components/bal-checkbox/radio-checkbox.css +1 -1
  210. package/dist/collection/components/bal-close/bal-close.js +1 -1
  211. package/dist/collection/components/bal-content/bal-content.js +2 -2
  212. package/dist/collection/components/bal-date/bal-date-calendar/components/bal-date-calendar__gird.js +1 -1
  213. package/dist/collection/components/bal-date/bal-date-calendar/components/bal-date-calendar__list.js +1 -1
  214. package/dist/collection/components/bal-date/bal-date-calendar-cell/bal-date-calendar-cell.js +1 -1
  215. package/dist/collection/components/bal-datepicker/bal-datepicker.js +3 -3
  216. package/dist/collection/components/bal-divider/bal-divider.js +2 -2
  217. package/dist/collection/components/bal-dropdown/bal-dropdown.css +1 -0
  218. package/dist/collection/components/bal-dropdown/bal-dropdown.interfaces.js +4 -0
  219. package/dist/collection/components/bal-dropdown/bal-dropdown.js +882 -0
  220. package/dist/collection/components/bal-field/bal-field.js +12 -2
  221. package/dist/collection/components/bal-file-upload/components/file-list.js +1 -1
  222. package/dist/collection/components/bal-footer/bal-footer.js +3 -3
  223. package/dist/collection/components/bal-input-slider/bal-input-slider.js +1 -1
  224. package/dist/collection/components/bal-label/bal-label.js +3 -3
  225. package/dist/collection/components/bal-nav/bal-nav-link/bal-nav-link.js +2 -2
  226. package/dist/collection/components/bal-nav/bal-nav-link-grid/bal-nav-link-grid.js +2 -2
  227. package/dist/collection/components/bal-nav/bal-nav-link-grid-col/bal-nav-link-grid-col.js +2 -2
  228. package/dist/collection/components/bal-nav/bal-nav-link-group/bal-nav-link-group.js +2 -2
  229. package/dist/collection/components/bal-nav/bal-nav.js +6 -6
  230. package/dist/collection/components/bal-nav/components/section-list.js +2 -2
  231. package/dist/collection/components/bal-nav/components/service-list.js +2 -2
  232. package/dist/collection/components/bal-notices/bal-notices.js +1 -1
  233. package/dist/collection/components/bal-number-input/bal-number-input.js +5 -0
  234. package/dist/collection/components/bal-number-input/bal-number-input.utils.js +27 -14
  235. package/dist/collection/components/bal-number-input/bal-number-input.utils.spec.js +82 -0
  236. package/dist/collection/components/bal-option/bal-option.css +1 -0
  237. package/dist/collection/components/bal-option/bal-option.interfaces.js +4 -0
  238. package/dist/collection/components/bal-option/bal-option.js +360 -0
  239. package/dist/collection/components/bal-option-list/bal-option-list.css +1 -0
  240. package/dist/collection/components/bal-option-list/bal-option-list.interfaces.js +4 -0
  241. package/dist/collection/components/bal-option-list/bal-option-list.js +939 -0
  242. package/dist/collection/components/bal-radio/bal-radio-button/bal-radio-button.js +3 -3
  243. package/dist/collection/components/bal-radio/bal-radio-group/bal-radio-group.js +1 -1
  244. package/dist/collection/components/bal-select/bal-select.js +4 -4
  245. package/dist/collection/components/bal-spinner/bal-spinner.css +1 -1
  246. package/dist/collection/components/bal-spinner/bal-spinner.interfaces.js +4 -0
  247. package/dist/collection/components/bal-spinner/bal-spinner.js +83 -4
  248. package/dist/collection/components/bal-stack/bal-stack.js +2 -2
  249. package/dist/collection/components/bal-steps/bal-steps.js +1 -1
  250. package/dist/collection/components/bal-tabs/components/tab-nav.js +1 -1
  251. package/dist/collection/components/bal-tabs/components/tab-select.js +1 -1
  252. package/dist/collection/components/bal-tag/bal-tag.css +1 -1
  253. package/dist/collection/index.js +1 -0
  254. package/dist/collection/utils/aria.js +1 -0
  255. package/dist/collection/utils/config/config.default.js +1 -0
  256. package/dist/collection/utils/config/config.js +7 -0
  257. package/dist/collection/utils/constants/version.constant.js +1 -1
  258. package/dist/collection/utils/date/date.js +5 -1
  259. package/dist/collection/utils/date/date.spec.js +11 -5
  260. package/dist/collection/utils/dropdown/auto-fill.js +38 -0
  261. package/dist/collection/utils/dropdown/component.js +1 -0
  262. package/dist/collection/utils/dropdown/dropdown.i18n.js +52 -0
  263. package/dist/collection/utils/dropdown/events.js +43 -0
  264. package/dist/collection/utils/dropdown/filters.js +10 -0
  265. package/dist/collection/utils/dropdown/focus.js +19 -0
  266. package/dist/collection/utils/dropdown/form-submit.js +35 -0
  267. package/dist/collection/utils/dropdown/icon.js +15 -0
  268. package/dist/collection/utils/dropdown/index.js +13 -0
  269. package/dist/collection/utils/dropdown/input.js +12 -0
  270. package/dist/collection/utils/dropdown/option-list.js +8 -0
  271. package/dist/collection/utils/dropdown/option.js +44 -0
  272. package/dist/collection/utils/dropdown/popup.js +45 -0
  273. package/dist/collection/utils/dropdown/value.js +103 -0
  274. package/dist/esm/{app-globals-89691d80.js → app-globals-b0dd0fc4.js} +1 -1
  275. package/dist/esm/aria-d5877698.js +3 -0
  276. package/dist/esm/bal-accordion_4.entry.js +4 -4
  277. package/dist/esm/bal-card_6.entry.js +3 -3
  278. package/dist/esm/bal-carousel_2.entry.js +5 -5
  279. package/dist/esm/bal-checkbox-button.entry.js +6 -6
  280. package/dist/esm/bal-checkbox_2.entry.js +5 -4
  281. package/dist/esm/bal-close.entry.js +2 -2
  282. package/dist/esm/bal-content.entry.js +4 -4
  283. package/dist/esm/bal-date-calendar-cell.entry.js +2 -2
  284. package/dist/esm/bal-date-calendar_2.entry.js +6 -6
  285. package/dist/esm/bal-date.entry.js +3 -3
  286. package/dist/esm/bal-datepicker.entry.js +8 -8
  287. package/dist/esm/bal-divider.entry.js +4 -4
  288. package/dist/esm/bal-dropdown.entry.js +656 -0
  289. package/dist/esm/bal-field_5.entry.js +12 -2
  290. package/dist/esm/bal-file-upload.entry.js +2 -2
  291. package/dist/esm/bal-footer.entry.js +5 -5
  292. package/dist/esm/bal-hint_3.entry.js +3 -3
  293. package/dist/esm/bal-icon.entry.js +1 -1
  294. package/dist/esm/bal-input-slider.entry.js +1 -1
  295. package/dist/esm/bal-input-stepper.entry.js +2 -2
  296. package/dist/esm/bal-label.entry.js +6 -6
  297. package/dist/esm/bal-list_8.entry.js +3 -3
  298. package/dist/esm/bal-logo.entry.js +3 -3
  299. package/dist/esm/bal-nav_8.entry.js +24 -24
  300. package/dist/esm/bal-navbar_5.entry.js +3 -3
  301. package/dist/esm/bal-notices.entry.js +3 -3
  302. package/dist/esm/bal-number-input.entry.js +33 -15
  303. package/dist/esm/bal-option_2.entry.js +536 -0
  304. package/dist/esm/bal-pagination.entry.js +4 -4
  305. package/dist/esm/bal-popover_2.entry.js +3 -3
  306. package/dist/esm/bal-popup.entry.js +1 -1
  307. package/dist/esm/bal-progress-bar.entry.js +3 -3
  308. package/dist/esm/bal-radio-button.entry.js +5 -5
  309. package/dist/esm/bal-radio_2.entry.js +3 -3
  310. package/dist/esm/bal-select_2.entry.js +4 -4
  311. package/dist/esm/bal-shape.entry.js +1 -1
  312. package/dist/esm/bal-spinner.entry.js +50 -5
  313. package/dist/esm/bal-stack.entry.js +4 -4
  314. package/dist/esm/bal-steps.entry.js +5 -5
  315. package/dist/esm/bal-tab-item_2.entry.js +6 -6
  316. package/dist/esm/bal-tag_2.entry.js +1 -1
  317. package/dist/esm/bal-time-input.entry.js +1 -1
  318. package/dist/esm/baloise-design-system.js +4 -4
  319. package/dist/esm/{breakpoints.decorator-52979d29.js → breakpoints.decorator-021fbaf0.js} +1 -1
  320. package/dist/esm/{breakpoints.subject-64327a3b.js → breakpoints.subject-ef464f89.js} +1 -1
  321. package/dist/esm/{config.default-79f94bf7.js → config.default-7efdc82d.js} +1 -0
  322. package/dist/esm/{date-db6afc26.js → date-38a0b208.js} +6 -2
  323. package/dist/esm/{index.esm-ec4cba26.js → index.esm-83b1f9c4.js} +1 -1
  324. package/dist/esm/index.js +8 -7
  325. package/dist/esm/{initialize-66615dde.js → initialize-e216cfe4.js} +9 -2
  326. package/dist/esm/loader.js +4 -4
  327. package/dist/esm/option-37cb0282.js +46 -0
  328. package/dist/esm/{tokens.esm-12daa3af.js → tokens.esm-aab9bd61.js} +1 -1
  329. package/dist/esm-es5/app-globals-b0dd0fc4.js +1 -0
  330. package/dist/esm-es5/aria-d5877698.js +1 -0
  331. package/dist/esm-es5/bal-accordion_4.entry.js +1 -1
  332. package/dist/esm-es5/bal-card_6.entry.js +1 -1
  333. package/dist/esm-es5/bal-carousel_2.entry.js +1 -1
  334. package/dist/esm-es5/bal-checkbox-button.entry.js +1 -1
  335. package/dist/esm-es5/bal-checkbox_2.entry.js +1 -1
  336. package/dist/esm-es5/bal-close.entry.js +1 -1
  337. package/dist/esm-es5/bal-content.entry.js +1 -1
  338. package/dist/esm-es5/bal-date-calendar-cell.entry.js +1 -1
  339. package/dist/esm-es5/bal-date-calendar_2.entry.js +1 -1
  340. package/dist/esm-es5/bal-date.entry.js +1 -1
  341. package/dist/esm-es5/bal-datepicker.entry.js +1 -1
  342. package/dist/esm-es5/bal-divider.entry.js +1 -1
  343. package/dist/esm-es5/bal-dropdown.entry.js +1 -0
  344. package/dist/esm-es5/bal-field_5.entry.js +1 -1
  345. package/dist/esm-es5/bal-file-upload.entry.js +1 -1
  346. package/dist/esm-es5/bal-footer.entry.js +1 -1
  347. package/dist/esm-es5/bal-hint_3.entry.js +1 -1
  348. package/dist/esm-es5/bal-icon.entry.js +1 -1
  349. package/dist/esm-es5/bal-input-slider.entry.js +1 -1
  350. package/dist/esm-es5/bal-input-stepper.entry.js +1 -1
  351. package/dist/esm-es5/bal-label.entry.js +1 -1
  352. package/dist/esm-es5/bal-list_8.entry.js +1 -1
  353. package/dist/esm-es5/bal-logo.entry.js +1 -1
  354. package/dist/esm-es5/bal-nav_8.entry.js +1 -1
  355. package/dist/esm-es5/bal-navbar_5.entry.js +1 -1
  356. package/dist/esm-es5/bal-notices.entry.js +1 -1
  357. package/dist/esm-es5/bal-number-input.entry.js +1 -1
  358. package/dist/esm-es5/bal-option_2.entry.js +1 -0
  359. package/dist/esm-es5/bal-pagination.entry.js +1 -1
  360. package/dist/esm-es5/bal-popover_2.entry.js +1 -1
  361. package/dist/esm-es5/bal-popup.entry.js +1 -1
  362. package/dist/esm-es5/bal-progress-bar.entry.js +1 -1
  363. package/dist/esm-es5/bal-radio-button.entry.js +1 -1
  364. package/dist/esm-es5/bal-radio_2.entry.js +1 -1
  365. package/dist/esm-es5/bal-select_2.entry.js +1 -1
  366. package/dist/esm-es5/bal-shape.entry.js +1 -1
  367. package/dist/esm-es5/bal-spinner.entry.js +1 -1
  368. package/dist/esm-es5/bal-stack.entry.js +1 -1
  369. package/dist/esm-es5/bal-steps.entry.js +1 -1
  370. package/dist/esm-es5/bal-tab-item_2.entry.js +1 -1
  371. package/dist/esm-es5/bal-tag_2.entry.js +1 -1
  372. package/dist/esm-es5/bal-time-input.entry.js +1 -1
  373. package/dist/esm-es5/baloise-design-system.js +1 -1
  374. package/dist/esm-es5/breakpoints.decorator-021fbaf0.js +1 -0
  375. package/dist/esm-es5/{breakpoints.subject-64327a3b.js → breakpoints.subject-ef464f89.js} +1 -1
  376. package/dist/esm-es5/{config.default-79f94bf7.js → config.default-7efdc82d.js} +1 -1
  377. package/dist/esm-es5/{date-db6afc26.js → date-38a0b208.js} +1 -1
  378. package/dist/esm-es5/{index.esm-ec4cba26.js → index.esm-83b1f9c4.js} +1 -1
  379. package/dist/esm-es5/index.js +1 -1
  380. package/dist/esm-es5/{initialize-66615dde.js → initialize-e216cfe4.js} +1 -1
  381. package/dist/esm-es5/loader.js +1 -1
  382. package/dist/esm-es5/option-37cb0282.js +1 -0
  383. package/dist/html.html-data.json +357 -0
  384. package/dist/types/components/bal-accordion/bal-accordion-details/bal-accordion-details.d.ts +1 -1
  385. package/dist/types/components/bal-card/bal-card.d.ts +1 -1
  386. package/dist/types/components/bal-checkbox/bal-checkbox-button/bal-checkbox-button.d.ts +1 -1
  387. package/dist/types/components/bal-content/bal-content.d.ts +1 -1
  388. package/dist/types/components/bal-date/bal-date-calendar-cell/bal-date-calendar-cell.d.ts +1 -1
  389. package/dist/types/components/bal-divider/bal-divider.d.ts +1 -1
  390. package/dist/types/components/bal-dropdown/bal-dropdown.d.ts +187 -0
  391. package/dist/types/components/bal-dropdown/bal-dropdown.interfaces.d.ts +14 -0
  392. package/dist/types/components/bal-field/bal-field.d.ts +1 -0
  393. package/dist/types/components/bal-label/bal-label.d.ts +1 -1
  394. package/dist/types/components/bal-nav/bal-nav-link/bal-nav-link.d.ts +1 -1
  395. package/dist/types/components/bal-nav/bal-nav-link-grid/bal-nav-link-grid.d.ts +1 -1
  396. package/dist/types/components/bal-nav/bal-nav-link-grid-col/bal-nav-link-grid-col.d.ts +1 -1
  397. package/dist/types/components/bal-nav/bal-nav-link-group/bal-nav-link-group.d.ts +1 -1
  398. package/dist/types/components/bal-nav/bal-nav.d.ts +1 -1
  399. package/dist/types/components/bal-notices/bal-notices.d.ts +1 -1
  400. package/dist/types/components/bal-number-input/bal-number-input.d.ts +1 -0
  401. package/dist/types/components/bal-number-input/bal-number-input.utils.d.ts +3 -1
  402. package/dist/types/components/bal-option/bal-option.d.ts +91 -0
  403. package/dist/types/components/bal-option/bal-option.interfaces.d.ts +19 -0
  404. package/dist/types/components/bal-option-list/bal-option-list.d.ts +168 -0
  405. package/dist/types/components/bal-option-list/bal-option-list.interfaces.d.ts +5 -0
  406. package/dist/types/components/bal-radio/bal-radio-button/bal-radio-button.d.ts +1 -1
  407. package/dist/types/components/bal-select/bal-select.d.ts +1 -1
  408. package/dist/types/components/bal-spinner/bal-spinner.d.ts +14 -2
  409. package/dist/types/components/bal-spinner/bal-spinner.interfaces.d.ts +6 -0
  410. package/dist/types/components/bal-stack/bal-stack.d.ts +1 -1
  411. package/dist/types/components.d.ts +451 -3
  412. package/dist/types/index.d.ts +1 -0
  413. package/dist/types/interfaces.d.ts +4 -0
  414. package/dist/types/utils/aria.d.ts +1 -0
  415. package/dist/types/utils/config/config.d.ts +2 -0
  416. package/dist/types/utils/config/config.types.d.ts +2 -0
  417. package/dist/types/utils/date/date.d.ts +1 -0
  418. package/dist/types/utils/dropdown/auto-fill.d.ts +8 -0
  419. package/dist/types/utils/dropdown/component.d.ts +34 -0
  420. package/dist/types/utils/dropdown/dropdown.i18n.d.ts +8 -0
  421. package/dist/types/utils/dropdown/events.d.ts +13 -0
  422. package/dist/types/utils/dropdown/filters.d.ts +2 -0
  423. package/dist/types/utils/dropdown/focus.d.ts +13 -0
  424. package/dist/types/utils/dropdown/form-submit.d.ts +22 -0
  425. package/dist/types/utils/dropdown/icon.d.ts +13 -0
  426. package/dist/types/utils/dropdown/index.d.ts +13 -0
  427. package/dist/types/utils/dropdown/input.d.ts +27 -0
  428. package/dist/types/utils/dropdown/option-list.d.ts +17 -0
  429. package/dist/types/utils/dropdown/option.d.ts +25 -0
  430. package/dist/types/utils/dropdown/popup.d.ts +9 -0
  431. package/dist/types/utils/dropdown/value.d.ts +28 -0
  432. package/package.json +8 -7
  433. package/dist/baloise-design-system/p-05b55c958d.system.entry.js +0 -1
  434. package/dist/baloise-design-system/p-0d30cbfab8.entry.js +0 -1
  435. package/dist/baloise-design-system/p-15ca43f2.system.js +0 -1
  436. package/dist/baloise-design-system/p-1e0e5892a3.system.entry.js +0 -1
  437. package/dist/baloise-design-system/p-2c3370fdbe.system.entry.js +0 -1
  438. package/dist/baloise-design-system/p-2d10e25c6b.entry.js +0 -1
  439. package/dist/baloise-design-system/p-2dda46c5f8.entry.js +0 -1
  440. package/dist/baloise-design-system/p-34a9557f.system.js +0 -1
  441. package/dist/baloise-design-system/p-34d1472a.system.js +0 -1
  442. package/dist/baloise-design-system/p-3990d97696.entry.js +0 -1
  443. package/dist/baloise-design-system/p-48a2de5d.js +0 -1
  444. package/dist/baloise-design-system/p-4e218ac923.system.entry.js +0 -1
  445. package/dist/baloise-design-system/p-4f4df156.js +0 -1
  446. package/dist/baloise-design-system/p-5eea406ac6.system.entry.js +0 -1
  447. package/dist/baloise-design-system/p-6496dcd5.js +0 -1
  448. package/dist/baloise-design-system/p-67f25817a6.entry.js +0 -1
  449. package/dist/baloise-design-system/p-6dd26958d2.system.entry.js +0 -1
  450. package/dist/baloise-design-system/p-7e180ac10f.system.entry.js +0 -1
  451. package/dist/baloise-design-system/p-8ea27b553e.system.entry.js +0 -1
  452. package/dist/baloise-design-system/p-90c4c1a5c0.system.entry.js +0 -1
  453. package/dist/baloise-design-system/p-99dcda2fcd.entry.js +0 -1
  454. package/dist/baloise-design-system/p-a9d8b71709.entry.js +0 -1
  455. package/dist/baloise-design-system/p-af8604cef2.entry.js +0 -1
  456. package/dist/baloise-design-system/p-b1c7ddc442.system.entry.js +0 -1
  457. package/dist/baloise-design-system/p-b1e3fc0bc8.entry.js +0 -1
  458. package/dist/baloise-design-system/p-bb291d6067.system.entry.js +0 -1
  459. package/dist/baloise-design-system/p-c0a3d422.system.js +0 -1
  460. package/dist/baloise-design-system/p-c34504aa32.entry.js +0 -1
  461. package/dist/baloise-design-system/p-c6900b09e7.entry.js +0 -1
  462. package/dist/baloise-design-system/p-cf6ccb4dd1.entry.js +0 -1
  463. package/dist/baloise-design-system/p-d4fd428711.entry.js +0 -1
  464. package/dist/baloise-design-system/p-d6fc0dd434.entry.js +0 -1
  465. package/dist/baloise-design-system/p-db3e6b861f.entry.js +0 -1
  466. package/dist/baloise-design-system/p-eba35b2adf.entry.js +0 -1
  467. package/dist/baloise-design-system/p-ec180f9bbf.entry.js +0 -1
  468. package/dist/baloise-design-system/p-f15b12d84f.entry.js +0 -1
  469. package/dist/esm-es5/app-globals-89691d80.js +0 -1
  470. package/dist/esm-es5/breakpoints.decorator-52979d29.js +0 -1
  471. /package/dist/baloise-design-system/{p-61eda028.system.js → p-03c136e2.system.js} +0 -0
  472. /package/dist/baloise-design-system/{p-979368af.js → p-7b9c33ba.js} +0 -0
  473. /package/dist/esm-es5/{tokens.esm-12daa3af.js → tokens.esm-aab9bd61.js} +0 -0
@@ -0,0 +1,939 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { h, Host } from "@stencil/core";
3
+ import isNil from "lodash.isnil";
4
+ import { inheritAttributes } from "../../utils/attributes";
5
+ import { BEM } from "../../utils/bem";
6
+ import { raf, waitAfterFramePaint } from "../../utils/helpers";
7
+ import { Logger } from "../../utils/log";
8
+ import { includes, startsWith } from "../bal-select/utils/utils";
9
+ import { defaultBalAriaForm } from "../../utils/form";
10
+ export class OptionList {
11
+ constructor() {
12
+ this.inputId = `bal-option-list-${balOptionListIds++}`;
13
+ this.inheritAttributes = {};
14
+ this.ariaForm = defaultBalAriaForm;
15
+ this.multiple = false;
16
+ this.disabled = false;
17
+ this.required = false;
18
+ this.focusIndex = -1;
19
+ this.labelledby = undefined;
20
+ this.filter = 'includes';
21
+ this.contentHeight = 262;
22
+ }
23
+ createLogger(log) {
24
+ this.log = log;
25
+ }
26
+ contentHeightChanged(value) {
27
+ if (value === undefined) {
28
+ this.el.style.removeProperty('--bal-option-list-max-height');
29
+ }
30
+ else {
31
+ this.el.style.setProperty('--bal-option-list-max-height', `${value}px`);
32
+ }
33
+ }
34
+ /**
35
+ * LIFECYCLE
36
+ * ------------------------------------------------------
37
+ */
38
+ componentDidLoad() {
39
+ this.contentHeightChanged(this.contentHeight);
40
+ }
41
+ componentWillRender() {
42
+ this.inheritAttributes = inheritAttributes(this.el, ['aria-multiselectable', 'aria-labelledby']);
43
+ }
44
+ /**
45
+ * LISTENERS
46
+ * ------------------------------------------------------
47
+ */
48
+ listenToMouseEnter(ev) {
49
+ const options = this.options;
50
+ const indexToFocus = this.getOptionIndex(options, ev.detail.value);
51
+ if (indexToFocus !== undefined) {
52
+ this.updateFocus(options, indexToFocus);
53
+ }
54
+ }
55
+ listenToOptionChange({ detail }) {
56
+ if (!this.multiple) {
57
+ this.options.filter(option => option.value !== detail.value).forEach(option => (option.selected = false));
58
+ }
59
+ }
60
+ /**
61
+ * PUBLIC METHODS
62
+ * ------------------------------------------------------
63
+ */
64
+ /**
65
+ * Focus the first visible option in the list
66
+ * @returns focusIndex
67
+ */
68
+ async focusFirst() {
69
+ const options = this.options;
70
+ const indexToFocus = this.getFirstOptionIndex(options);
71
+ this.updateFocus(options, indexToFocus);
72
+ const option = options[indexToFocus];
73
+ this.updateScrollTopPosition(option);
74
+ await waitAfterFramePaint();
75
+ return indexToFocus;
76
+ }
77
+ /**
78
+ * Focus the last visible option in the list
79
+ * @returns focusIndex
80
+ */
81
+ async focusLast() {
82
+ const options = this.options;
83
+ const indexToFocus = this.getLastOptionIndex(options);
84
+ this.updateFocus(options, indexToFocus);
85
+ const option = options[indexToFocus];
86
+ this.updateScrollBottomPosition(option);
87
+ await waitAfterFramePaint();
88
+ return indexToFocus;
89
+ }
90
+ /**
91
+ * Focus the next visible option in the list
92
+ * @returns focusIndex
93
+ */
94
+ async focusNext() {
95
+ const options = this.options;
96
+ const indexToFocus = this.getNextOptionIndex(options);
97
+ this.updateFocus(options, indexToFocus);
98
+ const option = options[indexToFocus];
99
+ this.updateScrollBottomPosition(option);
100
+ await waitAfterFramePaint();
101
+ return indexToFocus;
102
+ }
103
+ /**
104
+ * Focus the previous visible option in the list
105
+ * @returns focusIndex
106
+ */
107
+ async focusPrevious() {
108
+ const options = this.options;
109
+ const indexToFocus = this.getPreviousOptionIndex(options);
110
+ this.updateFocus(options, indexToFocus);
111
+ const option = options[indexToFocus];
112
+ this.updateScrollTopPosition(option);
113
+ await waitAfterFramePaint();
114
+ return indexToFocus;
115
+ }
116
+ /**
117
+ * Focus the option with the label that starts with the search property
118
+ * @returns focusIndex
119
+ */
120
+ async focusByLabel(search, config) {
121
+ const options = this.options;
122
+ const indexToFocus = this.getOptionIndexByLabel(options, search);
123
+ this.updateFocus(options, indexToFocus);
124
+ const option = options[indexToFocus];
125
+ this.updateScrollTopPosition(option);
126
+ await waitAfterFramePaint();
127
+ if (config.select) {
128
+ await option.select();
129
+ }
130
+ return indexToFocus;
131
+ }
132
+ /**
133
+ * Filter the options by the given filter property and hides options
134
+ * @returns focusIndex
135
+ */
136
+ async filterByContent(search) {
137
+ const options = this.allOptions;
138
+ this.filterOptions(options, search);
139
+ await waitAfterFramePaint();
140
+ return this.focusFirst();
141
+ }
142
+ /**
143
+ * Shows or hides all options
144
+ */
145
+ async resetHidden(hidden = false) {
146
+ this.options.forEach(option => (option.hidden = hidden));
147
+ await waitAfterFramePaint();
148
+ this.resetFocus();
149
+ }
150
+ /**
151
+ * Selects or deselects all options
152
+ */
153
+ async resetSelected(selected = false) {
154
+ this.options.forEach(option => (option.selected = selected));
155
+ await waitAfterFramePaint();
156
+ }
157
+ /**
158
+ * Updates options
159
+ */
160
+ async updateSelected(values) {
161
+ this.options.forEach(option => (option.selected = values.includes(option.value)));
162
+ await waitAfterFramePaint();
163
+ }
164
+ /**
165
+ * Resets the focus index to pristine and scrolls to the top of the list
166
+ */
167
+ async resetFocus() {
168
+ const options = this.options;
169
+ const indexToFocus = -1;
170
+ this.updateFocus(options, indexToFocus);
171
+ this.scrollTo(0);
172
+ await waitAfterFramePaint();
173
+ return indexToFocus;
174
+ }
175
+ /**
176
+ * Returns a list of option values
177
+ */
178
+ async getSelectedValues() {
179
+ const options = this.options;
180
+ return options.filter(option => option.selected).map(option => option.value);
181
+ }
182
+ /**
183
+ * Returns a list of option labels
184
+ */
185
+ async getSelectedOptions(values) {
186
+ const options = this.options;
187
+ if (values && values.length > 0) {
188
+ return options.filter(option => values.includes(option.value)).map(option => option);
189
+ }
190
+ return options.filter(option => option.selected).map(option => option);
191
+ }
192
+ /**
193
+ * Returns a list of options
194
+ */
195
+ async getValues() {
196
+ return this.options.map(option => option.value);
197
+ }
198
+ /**
199
+ * Returns a list of options
200
+ */
201
+ async getLabels() {
202
+ return this.options.map(option => option.label);
203
+ }
204
+ /**
205
+ * Returns a list of accessible options
206
+ */
207
+ async getOptions() {
208
+ return this.options.filter(o => !o.disabled || !o.hidden);
209
+ }
210
+ /**
211
+ * Selects the option with the current focus
212
+ */
213
+ async selectByFocus() {
214
+ const options = this.options;
215
+ const option = options[this.focusIndex];
216
+ if (option) {
217
+ if (this.multiple) {
218
+ option.select(!option.selected);
219
+ }
220
+ else {
221
+ option.select(true);
222
+ }
223
+ }
224
+ }
225
+ /**
226
+ * @internal
227
+ */
228
+ async setAriaForm(ariaForm) {
229
+ this.ariaForm = Object.assign({}, ariaForm);
230
+ }
231
+ /**
232
+ * GETTERS
233
+ * ------------------------------------------------------
234
+ */
235
+ get options() {
236
+ return Array.from(this.el.querySelectorAll('bal-option')).filter(o => !o.hidden);
237
+ }
238
+ get allOptions() {
239
+ return Array.from(this.el.querySelectorAll('bal-option'));
240
+ }
241
+ /**
242
+ * PRIVATE METHODS
243
+ * ------------------------------------------------------
244
+ */
245
+ filterOptions(options, search) {
246
+ const filteredOptions = [];
247
+ const filter = this.filter === 'includes' ? includes : startsWith;
248
+ for (let index = 0; index < options.length; index++) {
249
+ const option = options[index];
250
+ const content = option.textContent || '';
251
+ if (filter(content, search)) {
252
+ filteredOptions.push(option);
253
+ option.hidden = false;
254
+ }
255
+ else {
256
+ option.hidden = true;
257
+ }
258
+ }
259
+ return filteredOptions;
260
+ }
261
+ isOptionVisible(option) {
262
+ const visibleHeight = this.el.clientHeight;
263
+ const topPosition = this.el.scrollTop;
264
+ const bottomPosition = topPosition + visibleHeight;
265
+ const isVisible = topPosition <= option.offsetTop && option.offsetTop + option.clientHeight <= bottomPosition;
266
+ return isVisible;
267
+ }
268
+ updateScrollTopPosition(option) {
269
+ if (option) {
270
+ const isVisible = this.isOptionVisible(option);
271
+ if (!isVisible) {
272
+ this.scrollTo(this.getScrollTopForTopPosition(option));
273
+ }
274
+ }
275
+ }
276
+ updateScrollBottomPosition(option) {
277
+ if (option) {
278
+ const isVisible = this.isOptionVisible(option);
279
+ if (!isVisible) {
280
+ this.scrollTo(this.getScrollTopForBottomPosition(option));
281
+ }
282
+ }
283
+ }
284
+ getScrollTopForTopPosition(option) {
285
+ const topPosition = option.offsetTop;
286
+ const scrollTop = topPosition;
287
+ if (scrollTop < 0) {
288
+ return 0;
289
+ }
290
+ return scrollTop;
291
+ }
292
+ getScrollTopForBottomPosition(option) {
293
+ const visibleHeight = this.el.clientHeight;
294
+ const bottomPosition = option.offsetTop + option.clientHeight;
295
+ const scrollTop = bottomPosition - visibleHeight;
296
+ if (scrollTop < 0) {
297
+ return 0;
298
+ }
299
+ return scrollTop;
300
+ }
301
+ async scrollTo(scrollTop) {
302
+ if (scrollTop !== undefined && scrollTop !== null) {
303
+ if (this.focusRaf !== undefined) {
304
+ cancelAnimationFrame(this.focusRaf);
305
+ }
306
+ this.focusRaf = raf(async () => {
307
+ this.el.scrollTop = scrollTop;
308
+ });
309
+ }
310
+ }
311
+ updateFocus(options, indexToFocus) {
312
+ this.focusIndex = indexToFocus;
313
+ for (let index = 0; index < options.length; index++) {
314
+ const option = options[index];
315
+ option.focused = index === indexToFocus;
316
+ }
317
+ }
318
+ getOptionIndex(options, value) {
319
+ for (let index = 0; index < options.length; index++) {
320
+ const option = options[index];
321
+ if (option.value === value) {
322
+ return index;
323
+ }
324
+ }
325
+ return undefined;
326
+ }
327
+ getFirstOptionIndex(options) {
328
+ for (let index = 0; index < options.length; index++) {
329
+ const option = options[index];
330
+ if (!option.disabled) {
331
+ return index;
332
+ }
333
+ }
334
+ return this.focusIndex;
335
+ }
336
+ getNextOptionIndex(options, index = this.focusIndex) {
337
+ if (index < 0) {
338
+ return this.getFirstOptionIndex(options);
339
+ }
340
+ const lastIndex = this.getLength(options);
341
+ let newIndex = index;
342
+ if (index < lastIndex) {
343
+ newIndex = index + 1;
344
+ if (options[newIndex].disabled) {
345
+ return this.getNextOptionIndex(options, newIndex);
346
+ }
347
+ }
348
+ return newIndex;
349
+ }
350
+ getPreviousOptionIndex(options, index = this.focusIndex) {
351
+ const firstIndex = this.getFirstOptionIndex(options);
352
+ if (index <= firstIndex) {
353
+ return firstIndex;
354
+ }
355
+ let newIndex = index;
356
+ newIndex = index - 1;
357
+ if (options[newIndex].disabled) {
358
+ return this.getPreviousOptionIndex(options, newIndex);
359
+ }
360
+ return newIndex;
361
+ }
362
+ getLastOptionIndex(options) {
363
+ for (let index = options.length - 1; index >= 0; index--) {
364
+ const option = options[index];
365
+ if (!option.disabled) {
366
+ return index;
367
+ }
368
+ }
369
+ return this.focusIndex;
370
+ }
371
+ getOptionIndexByLabel(options, label) {
372
+ if (label === undefined || label === '') {
373
+ return this.focusIndex;
374
+ }
375
+ const option = options.find(o => startsWith(o.label || '', label));
376
+ if (!isNil(option) && option.id) {
377
+ return options.indexOf(option);
378
+ }
379
+ return this.focusIndex;
380
+ }
381
+ getLength(options) {
382
+ const indexes = options.map((option, index) => (option.disabled ? 0 : index));
383
+ const length = Math.max(...indexes);
384
+ return length;
385
+ }
386
+ /**
387
+ * RENDER
388
+ * ------------------------------------------------------
389
+ */
390
+ render() {
391
+ const block = BEM.block('option-list');
392
+ const labelledby = this.labelledby || this.ariaForm.labelId;
393
+ return (h(Host, { class: Object.assign({}, block.class()), id: this.inputId, tabIndex: -1 }, h("div", Object.assign({ role: "listbox", "aria-labelledby": labelledby, "aria-disabled": this.disabled, class: Object.assign({}, block.element('container').class()) }, this.inheritAttributes), h("slot", null))));
394
+ }
395
+ static get is() { return "bal-option-list"; }
396
+ static get originalStyleUrls() {
397
+ return {
398
+ "$": ["bal-option-list.sass"]
399
+ };
400
+ }
401
+ static get styleUrls() {
402
+ return {
403
+ "$": ["bal-option-list.css"]
404
+ };
405
+ }
406
+ static get properties() {
407
+ return {
408
+ "multiple": {
409
+ "type": "boolean",
410
+ "mutable": false,
411
+ "complexType": {
412
+ "original": "boolean",
413
+ "resolved": "boolean",
414
+ "references": {}
415
+ },
416
+ "required": false,
417
+ "optional": false,
418
+ "docs": {
419
+ "tags": [],
420
+ "text": "If `true` the list supports multiple selections"
421
+ },
422
+ "attribute": "multiple",
423
+ "reflect": false,
424
+ "defaultValue": "false"
425
+ },
426
+ "disabled": {
427
+ "type": "boolean",
428
+ "mutable": false,
429
+ "complexType": {
430
+ "original": "boolean",
431
+ "resolved": "boolean",
432
+ "references": {}
433
+ },
434
+ "required": false,
435
+ "optional": false,
436
+ "docs": {
437
+ "tags": [],
438
+ "text": "If `true`, the user cannot interact with the option."
439
+ },
440
+ "attribute": "disabled",
441
+ "reflect": false,
442
+ "defaultValue": "false"
443
+ },
444
+ "required": {
445
+ "type": "boolean",
446
+ "mutable": false,
447
+ "complexType": {
448
+ "original": "boolean",
449
+ "resolved": "boolean",
450
+ "references": {}
451
+ },
452
+ "required": false,
453
+ "optional": false,
454
+ "docs": {
455
+ "tags": [],
456
+ "text": "If `true`, the user must fill in a value before submitting a form."
457
+ },
458
+ "attribute": "required",
459
+ "reflect": false,
460
+ "defaultValue": "false"
461
+ },
462
+ "focusIndex": {
463
+ "type": "number",
464
+ "mutable": true,
465
+ "complexType": {
466
+ "original": "number",
467
+ "resolved": "number",
468
+ "references": {}
469
+ },
470
+ "required": false,
471
+ "optional": false,
472
+ "docs": {
473
+ "tags": [],
474
+ "text": "Defines the focused option with his index value"
475
+ },
476
+ "attribute": "focus-index",
477
+ "reflect": false,
478
+ "defaultValue": "-1"
479
+ },
480
+ "labelledby": {
481
+ "type": "string",
482
+ "mutable": false,
483
+ "complexType": {
484
+ "original": "string",
485
+ "resolved": "string",
486
+ "references": {}
487
+ },
488
+ "required": false,
489
+ "optional": true,
490
+ "docs": {
491
+ "tags": [],
492
+ "text": "Id of the label element to describe this option list"
493
+ },
494
+ "attribute": "labelledby",
495
+ "reflect": false
496
+ },
497
+ "filter": {
498
+ "type": "string",
499
+ "mutable": false,
500
+ "complexType": {
501
+ "original": "BalProps.BalOptionListFilter",
502
+ "resolved": "\"includes\" | \"starts-with\"",
503
+ "references": {
504
+ "BalProps": {
505
+ "location": "global",
506
+ "id": "global::BalProps"
507
+ }
508
+ }
509
+ },
510
+ "required": false,
511
+ "optional": false,
512
+ "docs": {
513
+ "tags": [],
514
+ "text": "Defines the filter logic of the list"
515
+ },
516
+ "attribute": "filter",
517
+ "reflect": false,
518
+ "defaultValue": "'includes'"
519
+ },
520
+ "contentHeight": {
521
+ "type": "number",
522
+ "mutable": false,
523
+ "complexType": {
524
+ "original": "number",
525
+ "resolved": "number",
526
+ "references": {}
527
+ },
528
+ "required": false,
529
+ "optional": true,
530
+ "docs": {
531
+ "tags": [],
532
+ "text": "Defines the max height of the list element"
533
+ },
534
+ "attribute": "content-height",
535
+ "reflect": false,
536
+ "defaultValue": "262"
537
+ }
538
+ };
539
+ }
540
+ static get states() {
541
+ return {
542
+ "ariaForm": {}
543
+ };
544
+ }
545
+ static get methods() {
546
+ return {
547
+ "focusFirst": {
548
+ "complexType": {
549
+ "signature": "() => Promise<number>",
550
+ "parameters": [],
551
+ "references": {
552
+ "Promise": {
553
+ "location": "global",
554
+ "id": "global::Promise"
555
+ }
556
+ },
557
+ "return": "Promise<number>"
558
+ },
559
+ "docs": {
560
+ "text": "Focus the first visible option in the list",
561
+ "tags": [{
562
+ "name": "returns",
563
+ "text": "focusIndex"
564
+ }]
565
+ }
566
+ },
567
+ "focusLast": {
568
+ "complexType": {
569
+ "signature": "() => Promise<number>",
570
+ "parameters": [],
571
+ "references": {
572
+ "Promise": {
573
+ "location": "global",
574
+ "id": "global::Promise"
575
+ }
576
+ },
577
+ "return": "Promise<number>"
578
+ },
579
+ "docs": {
580
+ "text": "Focus the last visible option in the list",
581
+ "tags": [{
582
+ "name": "returns",
583
+ "text": "focusIndex"
584
+ }]
585
+ }
586
+ },
587
+ "focusNext": {
588
+ "complexType": {
589
+ "signature": "() => Promise<number>",
590
+ "parameters": [],
591
+ "references": {
592
+ "Promise": {
593
+ "location": "global",
594
+ "id": "global::Promise"
595
+ }
596
+ },
597
+ "return": "Promise<number>"
598
+ },
599
+ "docs": {
600
+ "text": "Focus the next visible option in the list",
601
+ "tags": [{
602
+ "name": "returns",
603
+ "text": "focusIndex"
604
+ }]
605
+ }
606
+ },
607
+ "focusPrevious": {
608
+ "complexType": {
609
+ "signature": "() => Promise<number>",
610
+ "parameters": [],
611
+ "references": {
612
+ "Promise": {
613
+ "location": "global",
614
+ "id": "global::Promise"
615
+ }
616
+ },
617
+ "return": "Promise<number>"
618
+ },
619
+ "docs": {
620
+ "text": "Focus the previous visible option in the list",
621
+ "tags": [{
622
+ "name": "returns",
623
+ "text": "focusIndex"
624
+ }]
625
+ }
626
+ },
627
+ "focusByLabel": {
628
+ "complexType": {
629
+ "signature": "(search: string, config: Partial<{ select: boolean; }>) => Promise<number>",
630
+ "parameters": [{
631
+ "name": "search",
632
+ "type": "string",
633
+ "docs": ""
634
+ }, {
635
+ "name": "config",
636
+ "type": "{ select?: boolean; }",
637
+ "docs": ""
638
+ }],
639
+ "references": {
640
+ "Promise": {
641
+ "location": "global",
642
+ "id": "global::Promise"
643
+ },
644
+ "Partial": {
645
+ "location": "global",
646
+ "id": "global::Partial"
647
+ }
648
+ },
649
+ "return": "Promise<number>"
650
+ },
651
+ "docs": {
652
+ "text": "Focus the option with the label that starts with the search property",
653
+ "tags": [{
654
+ "name": "returns",
655
+ "text": "focusIndex"
656
+ }]
657
+ }
658
+ },
659
+ "filterByContent": {
660
+ "complexType": {
661
+ "signature": "(search: string) => Promise<number>",
662
+ "parameters": [{
663
+ "name": "search",
664
+ "type": "string",
665
+ "docs": ""
666
+ }],
667
+ "references": {
668
+ "Promise": {
669
+ "location": "global",
670
+ "id": "global::Promise"
671
+ }
672
+ },
673
+ "return": "Promise<number>"
674
+ },
675
+ "docs": {
676
+ "text": "Filter the options by the given filter property and hides options",
677
+ "tags": [{
678
+ "name": "returns",
679
+ "text": "focusIndex"
680
+ }]
681
+ }
682
+ },
683
+ "resetHidden": {
684
+ "complexType": {
685
+ "signature": "(hidden?: boolean) => Promise<void>",
686
+ "parameters": [{
687
+ "name": "hidden",
688
+ "type": "boolean",
689
+ "docs": ""
690
+ }],
691
+ "references": {
692
+ "Promise": {
693
+ "location": "global",
694
+ "id": "global::Promise"
695
+ }
696
+ },
697
+ "return": "Promise<void>"
698
+ },
699
+ "docs": {
700
+ "text": "Shows or hides all options",
701
+ "tags": []
702
+ }
703
+ },
704
+ "resetSelected": {
705
+ "complexType": {
706
+ "signature": "(selected?: boolean) => Promise<void>",
707
+ "parameters": [{
708
+ "name": "selected",
709
+ "type": "boolean",
710
+ "docs": ""
711
+ }],
712
+ "references": {
713
+ "Promise": {
714
+ "location": "global",
715
+ "id": "global::Promise"
716
+ }
717
+ },
718
+ "return": "Promise<void>"
719
+ },
720
+ "docs": {
721
+ "text": "Selects or deselects all options",
722
+ "tags": []
723
+ }
724
+ },
725
+ "updateSelected": {
726
+ "complexType": {
727
+ "signature": "(values?: string[]) => Promise<void>",
728
+ "parameters": [{
729
+ "name": "values",
730
+ "type": "string[]",
731
+ "docs": ""
732
+ }],
733
+ "references": {
734
+ "Promise": {
735
+ "location": "global",
736
+ "id": "global::Promise"
737
+ }
738
+ },
739
+ "return": "Promise<void>"
740
+ },
741
+ "docs": {
742
+ "text": "Updates options",
743
+ "tags": []
744
+ }
745
+ },
746
+ "resetFocus": {
747
+ "complexType": {
748
+ "signature": "() => Promise<number>",
749
+ "parameters": [],
750
+ "references": {
751
+ "Promise": {
752
+ "location": "global",
753
+ "id": "global::Promise"
754
+ }
755
+ },
756
+ "return": "Promise<number>"
757
+ },
758
+ "docs": {
759
+ "text": "Resets the focus index to pristine and scrolls to the top of the list",
760
+ "tags": []
761
+ }
762
+ },
763
+ "getSelectedValues": {
764
+ "complexType": {
765
+ "signature": "() => Promise<string[]>",
766
+ "parameters": [],
767
+ "references": {
768
+ "Promise": {
769
+ "location": "global",
770
+ "id": "global::Promise"
771
+ }
772
+ },
773
+ "return": "Promise<string[]>"
774
+ },
775
+ "docs": {
776
+ "text": "Returns a list of option values",
777
+ "tags": []
778
+ }
779
+ },
780
+ "getSelectedOptions": {
781
+ "complexType": {
782
+ "signature": "(values?: string[]) => Promise<BalOption[]>",
783
+ "parameters": [{
784
+ "name": "values",
785
+ "type": "string[]",
786
+ "docs": ""
787
+ }],
788
+ "references": {
789
+ "Promise": {
790
+ "location": "global",
791
+ "id": "global::Promise"
792
+ },
793
+ "BalOption": {
794
+ "location": "import",
795
+ "path": "../../utils/dropdown",
796
+ "id": "src/utils/dropdown/index.ts::BalOption"
797
+ }
798
+ },
799
+ "return": "Promise<BalOption[]>"
800
+ },
801
+ "docs": {
802
+ "text": "Returns a list of option labels",
803
+ "tags": []
804
+ }
805
+ },
806
+ "getValues": {
807
+ "complexType": {
808
+ "signature": "() => Promise<string[]>",
809
+ "parameters": [],
810
+ "references": {
811
+ "Promise": {
812
+ "location": "global",
813
+ "id": "global::Promise"
814
+ }
815
+ },
816
+ "return": "Promise<string[]>"
817
+ },
818
+ "docs": {
819
+ "text": "Returns a list of options",
820
+ "tags": []
821
+ }
822
+ },
823
+ "getLabels": {
824
+ "complexType": {
825
+ "signature": "() => Promise<string[]>",
826
+ "parameters": [],
827
+ "references": {
828
+ "Promise": {
829
+ "location": "global",
830
+ "id": "global::Promise"
831
+ }
832
+ },
833
+ "return": "Promise<string[]>"
834
+ },
835
+ "docs": {
836
+ "text": "Returns a list of options",
837
+ "tags": []
838
+ }
839
+ },
840
+ "getOptions": {
841
+ "complexType": {
842
+ "signature": "() => Promise<BalOption[]>",
843
+ "parameters": [],
844
+ "references": {
845
+ "Promise": {
846
+ "location": "global",
847
+ "id": "global::Promise"
848
+ },
849
+ "BalOption": {
850
+ "location": "import",
851
+ "path": "../../utils/dropdown",
852
+ "id": "src/utils/dropdown/index.ts::BalOption"
853
+ }
854
+ },
855
+ "return": "Promise<BalOption[]>"
856
+ },
857
+ "docs": {
858
+ "text": "Returns a list of accessible options",
859
+ "tags": []
860
+ }
861
+ },
862
+ "selectByFocus": {
863
+ "complexType": {
864
+ "signature": "() => Promise<void>",
865
+ "parameters": [],
866
+ "references": {
867
+ "Promise": {
868
+ "location": "global",
869
+ "id": "global::Promise"
870
+ }
871
+ },
872
+ "return": "Promise<void>"
873
+ },
874
+ "docs": {
875
+ "text": "Selects the option with the current focus",
876
+ "tags": []
877
+ }
878
+ },
879
+ "setAriaForm": {
880
+ "complexType": {
881
+ "signature": "(ariaForm: BalAriaForm) => Promise<void>",
882
+ "parameters": [{
883
+ "name": "ariaForm",
884
+ "type": "BalAriaForm",
885
+ "docs": ""
886
+ }],
887
+ "references": {
888
+ "Promise": {
889
+ "location": "global",
890
+ "id": "global::Promise"
891
+ },
892
+ "BalAriaForm": {
893
+ "location": "import",
894
+ "path": "../../utils/form",
895
+ "id": "src/utils/form.ts::BalAriaForm"
896
+ }
897
+ },
898
+ "return": "Promise<void>"
899
+ },
900
+ "docs": {
901
+ "text": "",
902
+ "tags": [{
903
+ "name": "internal",
904
+ "text": undefined
905
+ }]
906
+ }
907
+ }
908
+ };
909
+ }
910
+ static get elementRef() { return "el"; }
911
+ static get watchers() {
912
+ return [{
913
+ "propName": "contentHeight",
914
+ "methodName": "contentHeightChanged"
915
+ }];
916
+ }
917
+ static get listeners() {
918
+ return [{
919
+ "name": "balOptionFocus",
920
+ "method": "listenToMouseEnter",
921
+ "target": undefined,
922
+ "capture": false,
923
+ "passive": true
924
+ }, {
925
+ "name": "balOptionChange",
926
+ "method": "listenToOptionChange",
927
+ "target": undefined,
928
+ "capture": false,
929
+ "passive": false
930
+ }];
931
+ }
932
+ }
933
+ __decorate([
934
+ Logger('bal-option-list'),
935
+ __metadata("design:type", Function),
936
+ __metadata("design:paramtypes", [Function]),
937
+ __metadata("design:returntype", void 0)
938
+ ], OptionList.prototype, "createLogger", null);
939
+ let balOptionListIds = 0;