@fundamental-ngx/core 0.36.0-rc.2 → 0.36.0-rc.3

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 (458) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/carousel.component.d.ts +8 -2
  13. package/carousel/carousel.module.d.ts +2 -1
  14. package/carousel/esm2020/carousel.component.mjs +4 -7
  15. package/carousel/esm2020/carousel.module.mjs +5 -4
  16. package/carousel/fesm2015/fundamental-ngx-core-carousel.mjs +7 -9
  17. package/carousel/fesm2015/fundamental-ngx-core-carousel.mjs.map +1 -1
  18. package/carousel/fesm2020/fundamental-ngx-core-carousel.mjs +7 -9
  19. package/carousel/fesm2020/fundamental-ngx-core-carousel.mjs.map +1 -1
  20. package/carousel/package.json +1 -1
  21. package/checkbox/package.json +1 -1
  22. package/combobox/package.json +1 -1
  23. package/content-density/package.json +3 -3
  24. package/date-picker/date-picker.component.d.ts +22 -6
  25. package/date-picker/date-picker.module.d.ts +9 -8
  26. package/date-picker/esm2020/date-picker.component.mjs +14 -31
  27. package/date-picker/esm2020/date-picker.module.mjs +5 -1
  28. package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs +17 -30
  29. package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
  30. package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs +17 -30
  31. package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
  32. package/date-picker/package.json +1 -1
  33. package/datetime/package.json +1 -1
  34. package/datetime-picker/datetime-picker.component.d.ts +17 -7
  35. package/datetime-picker/datetime-picker.module.d.ts +6 -5
  36. package/datetime-picker/esm2020/datetime-picker.component.mjs +5 -14
  37. package/datetime-picker/esm2020/datetime-picker.module.mjs +5 -1
  38. package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs +8 -13
  39. package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  40. package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs +8 -13
  41. package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  42. package/datetime-picker/package.json +1 -1
  43. package/dialog/package.json +1 -1
  44. package/dynamic-page/package.json +1 -1
  45. package/dynamic-side-content/package.json +1 -1
  46. package/esm2020/carousel/carousel.component.mjs +4 -7
  47. package/esm2020/carousel/carousel.module.mjs +5 -4
  48. package/esm2020/date-picker/date-picker.component.mjs +14 -31
  49. package/esm2020/date-picker/date-picker.module.mjs +5 -1
  50. package/esm2020/datetime-picker/datetime-picker.component.mjs +5 -14
  51. package/esm2020/datetime-picker/datetime-picker.module.mjs +5 -1
  52. package/esm2020/feed-list-item/components/item/feed-list-item.component.mjs +4 -11
  53. package/esm2020/feed-list-item/feed-list-item.module.mjs +5 -4
  54. package/esm2020/formatted-text/formatted-text.component.mjs +2 -2
  55. package/esm2020/grid-list/components/grid-list-filter-bar/grid-list-filter-bar.component.mjs +4 -3
  56. package/esm2020/grid-list/components/grid-list-item/grid-list-item.component.mjs +4 -3
  57. package/esm2020/grid-list/grid-list.module.mjs +30 -4
  58. package/esm2020/message-strip/message-strip.component.mjs +4 -5
  59. package/esm2020/message-strip/message-strip.module.mjs +5 -4
  60. package/esm2020/multi-input/multi-input.component.mjs +1 -1
  61. package/esm2020/nested-list/nested-list/nested-list.directive.mjs +27 -14
  62. package/esm2020/overflow-layout/overflow-layout.component.mjs +4 -3
  63. package/esm2020/overflow-layout/overflow-layout.module.mjs +5 -4
  64. package/esm2020/pagination/pagination.component.mjs +37 -71
  65. package/esm2020/pagination/pagination.module.mjs +5 -1
  66. package/esm2020/product-switch/product-switch/product-switch.component.mjs +4 -5
  67. package/esm2020/product-switch/product-switch.module.mjs +5 -4
  68. package/esm2020/shellbar/shellbar-actions/shellbar-actions.component.mjs +1 -3
  69. package/esm2020/shellbar/shellbar.module.mjs +5 -1
  70. package/esm2020/slider/slider.component.mjs +9 -45
  71. package/esm2020/slider/slider.module.mjs +5 -4
  72. package/esm2020/split-button/split-button.component.mjs +4 -7
  73. package/esm2020/split-button/split-button.module.mjs +5 -4
  74. package/esm2020/splitter/splitter-pagination/splitter-pagination.component.mjs +8 -4
  75. package/esm2020/splitter/splitter.component.mjs +1 -3
  76. package/esm2020/splitter/splitter.module.mjs +5 -4
  77. package/esm2020/step-input/step-input.component.mjs +4 -9
  78. package/esm2020/step-input/step-input.module.mjs +9 -5
  79. package/esm2020/switch/switch.component.mjs +4 -7
  80. package/esm2020/switch/switch.module.mjs +5 -4
  81. package/esm2020/tabs/tab-item-expand/tab-item-expand.component.mjs +4 -7
  82. package/esm2020/tabs/tab-list.component.mjs +1 -3
  83. package/esm2020/tabs/tabs.module.mjs +8 -4
  84. package/esm2020/text/text.component.mjs +4 -11
  85. package/esm2020/text/text.module.mjs +5 -4
  86. package/esm2020/time/i18n/time-i18n.mjs +9 -6
  87. package/esm2020/time/time-column/time-column.component.mjs +54 -3
  88. package/esm2020/time/time.component.mjs +29 -14
  89. package/esm2020/time/time.module.mjs +30 -4
  90. package/esm2020/time-picker/time-picker.component.mjs +4 -7
  91. package/esm2020/time-picker/time-picker.module.mjs +8 -4
  92. package/esm2020/token/token.component.mjs +4 -7
  93. package/esm2020/token/token.module.mjs +27 -4
  94. package/esm2020/token/tokenizer.component.mjs +4 -7
  95. package/esm2020/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +4 -15
  96. package/esm2020/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +4 -5
  97. package/esm2020/upload-collection/upload-collection.module.mjs +5 -4
  98. package/esm2020/utils/services/local-storage.service.mjs +5 -1
  99. package/esm2020/wizard/wizard-injection-token.mjs +1 -1
  100. package/esm2020/wizard/wizard-navigation/wizard-navigation.component.mjs +19 -7
  101. package/esm2020/wizard/wizard.component.mjs +26 -14
  102. package/facets/package.json +1 -1
  103. package/feed-input/package.json +1 -1
  104. package/feed-list-item/components/item/feed-list-item.component.d.ts +2 -0
  105. package/feed-list-item/esm2020/components/item/feed-list-item.component.mjs +4 -11
  106. package/feed-list-item/esm2020/feed-list-item.module.mjs +5 -4
  107. package/feed-list-item/feed-list-item.module.d.ts +2 -1
  108. package/feed-list-item/fesm2015/fundamental-ngx-core-feed-list-item.mjs +7 -13
  109. package/feed-list-item/fesm2015/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  110. package/feed-list-item/fesm2020/fundamental-ngx-core-feed-list-item.mjs +7 -13
  111. package/feed-list-item/fesm2020/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  112. package/feed-list-item/package.json +1 -1
  113. package/fesm2015/fundamental-ngx-core-carousel.mjs +7 -9
  114. package/fesm2015/fundamental-ngx-core-carousel.mjs.map +1 -1
  115. package/fesm2015/fundamental-ngx-core-date-picker.mjs +17 -30
  116. package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
  117. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +8 -13
  118. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  119. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +7 -13
  120. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  121. package/fesm2015/fundamental-ngx-core-formatted-text.mjs +2 -1
  122. package/fesm2015/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  123. package/fesm2015/fundamental-ngx-core-grid-list.mjs +34 -7
  124. package/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  125. package/fesm2015/fundamental-ngx-core-message-strip.mjs +7 -7
  126. package/fesm2015/fundamental-ngx-core-message-strip.mjs.map +1 -1
  127. package/fesm2015/fundamental-ngx-core-multi-input.mjs +1 -1
  128. package/fesm2015/fundamental-ngx-core-nested-list.mjs +26 -12
  129. package/fesm2015/fundamental-ngx-core-nested-list.mjs.map +1 -1
  130. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +7 -5
  131. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  132. package/fesm2015/fundamental-ngx-core-pagination.mjs +42 -70
  133. package/fesm2015/fundamental-ngx-core-pagination.mjs.map +1 -1
  134. package/fesm2015/fundamental-ngx-core-product-switch.mjs +9 -9
  135. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  136. package/fesm2015/fundamental-ngx-core-shellbar.mjs +4 -2
  137. package/fesm2015/fundamental-ngx-core-shellbar.mjs.map +1 -1
  138. package/fesm2015/fundamental-ngx-core-slider.mjs +12 -47
  139. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  140. package/fesm2015/fundamental-ngx-core-split-button.mjs +7 -9
  141. package/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
  142. package/fesm2015/fundamental-ngx-core-splitter.mjs +11 -8
  143. package/fesm2015/fundamental-ngx-core-splitter.mjs.map +1 -1
  144. package/fesm2015/fundamental-ngx-core-step-input.mjs +12 -13
  145. package/fesm2015/fundamental-ngx-core-step-input.mjs.map +1 -1
  146. package/fesm2015/fundamental-ngx-core-switch.mjs +7 -9
  147. package/fesm2015/fundamental-ngx-core-switch.mjs.map +1 -1
  148. package/fesm2015/fundamental-ngx-core-tabs.mjs +10 -11
  149. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  150. package/fesm2015/fundamental-ngx-core-text.mjs +7 -13
  151. package/fesm2015/fundamental-ngx-core-text.mjs.map +1 -1
  152. package/fesm2015/fundamental-ngx-core-time-picker.mjs +10 -9
  153. package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  154. package/fesm2015/fundamental-ngx-core-time.mjs +117 -22
  155. package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  156. package/fesm2015/fundamental-ngx-core-token.mjs +32 -16
  157. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  158. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +10 -22
  159. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  160. package/fesm2015/fundamental-ngx-core-utils.mjs +4 -0
  161. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  162. package/fesm2015/fundamental-ngx-core-wizard.mjs +43 -16
  163. package/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  164. package/fesm2020/fundamental-ngx-core-carousel.mjs +7 -9
  165. package/fesm2020/fundamental-ngx-core-carousel.mjs.map +1 -1
  166. package/fesm2020/fundamental-ngx-core-date-picker.mjs +17 -30
  167. package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
  168. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +8 -13
  169. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  170. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +7 -13
  171. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  172. package/fesm2020/fundamental-ngx-core-formatted-text.mjs +1 -1
  173. package/fesm2020/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  174. package/fesm2020/fundamental-ngx-core-grid-list.mjs +34 -7
  175. package/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  176. package/fesm2020/fundamental-ngx-core-message-strip.mjs +7 -7
  177. package/fesm2020/fundamental-ngx-core-message-strip.mjs.map +1 -1
  178. package/fesm2020/fundamental-ngx-core-multi-input.mjs +1 -1
  179. package/fesm2020/fundamental-ngx-core-nested-list.mjs +25 -12
  180. package/fesm2020/fundamental-ngx-core-nested-list.mjs.map +1 -1
  181. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +7 -5
  182. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  183. package/fesm2020/fundamental-ngx-core-pagination.mjs +39 -70
  184. package/fesm2020/fundamental-ngx-core-pagination.mjs.map +1 -1
  185. package/fesm2020/fundamental-ngx-core-product-switch.mjs +9 -9
  186. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  187. package/fesm2020/fundamental-ngx-core-shellbar.mjs +4 -2
  188. package/fesm2020/fundamental-ngx-core-shellbar.mjs.map +1 -1
  189. package/fesm2020/fundamental-ngx-core-slider.mjs +12 -47
  190. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  191. package/fesm2020/fundamental-ngx-core-split-button.mjs +7 -9
  192. package/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
  193. package/fesm2020/fundamental-ngx-core-splitter.mjs +11 -8
  194. package/fesm2020/fundamental-ngx-core-splitter.mjs.map +1 -1
  195. package/fesm2020/fundamental-ngx-core-step-input.mjs +12 -13
  196. package/fesm2020/fundamental-ngx-core-step-input.mjs.map +1 -1
  197. package/fesm2020/fundamental-ngx-core-switch.mjs +7 -9
  198. package/fesm2020/fundamental-ngx-core-switch.mjs.map +1 -1
  199. package/fesm2020/fundamental-ngx-core-tabs.mjs +10 -11
  200. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  201. package/fesm2020/fundamental-ngx-core-text.mjs +7 -13
  202. package/fesm2020/fundamental-ngx-core-text.mjs.map +1 -1
  203. package/fesm2020/fundamental-ngx-core-time-picker.mjs +10 -9
  204. package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  205. package/fesm2020/fundamental-ngx-core-time.mjs +116 -22
  206. package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  207. package/fesm2020/fundamental-ngx-core-token.mjs +32 -16
  208. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  209. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +10 -22
  210. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  211. package/fesm2020/fundamental-ngx-core-utils.mjs +4 -0
  212. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  213. package/fesm2020/fundamental-ngx-core-wizard.mjs +39 -16
  214. package/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  215. package/file-uploader/package.json +1 -1
  216. package/fixed-card-layout/package.json +1 -1
  217. package/flexible-column-layout/package.json +1 -1
  218. package/form/package.json +1 -1
  219. package/formatted-text/esm2020/formatted-text.component.mjs +2 -2
  220. package/formatted-text/fesm2015/fundamental-ngx-core-formatted-text.mjs +2 -1
  221. package/formatted-text/fesm2015/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  222. package/formatted-text/fesm2020/fundamental-ngx-core-formatted-text.mjs +1 -1
  223. package/formatted-text/fesm2020/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  224. package/formatted-text/package.json +1 -1
  225. package/grid-list/esm2020/components/grid-list-filter-bar/grid-list-filter-bar.component.mjs +4 -3
  226. package/grid-list/esm2020/components/grid-list-item/grid-list-item.component.mjs +4 -3
  227. package/grid-list/esm2020/grid-list.module.mjs +30 -4
  228. package/grid-list/fesm2015/fundamental-ngx-core-grid-list.mjs +34 -7
  229. package/grid-list/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  230. package/grid-list/fesm2020/fundamental-ngx-core-grid-list.mjs +34 -7
  231. package/grid-list/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  232. package/grid-list/grid-list.module.d.ts +2 -1
  233. package/grid-list/package.json +1 -1
  234. package/icon/package.json +1 -1
  235. package/illustrated-message/package.json +1 -1
  236. package/infinite-scroll/package.json +1 -1
  237. package/info-label/package.json +1 -1
  238. package/inline-help/package.json +1 -1
  239. package/input-group/package.json +1 -1
  240. package/layout-grid/package.json +1 -1
  241. package/layout-panel/package.json +1 -1
  242. package/link/package.json +1 -1
  243. package/list/package.json +1 -1
  244. package/menu/package.json +1 -1
  245. package/message-box/package.json +1 -1
  246. package/message-strip/esm2020/message-strip.component.mjs +4 -5
  247. package/message-strip/esm2020/message-strip.module.mjs +5 -4
  248. package/message-strip/fesm2015/fundamental-ngx-core-message-strip.mjs +7 -7
  249. package/message-strip/fesm2015/fundamental-ngx-core-message-strip.mjs.map +1 -1
  250. package/message-strip/fesm2020/fundamental-ngx-core-message-strip.mjs +7 -7
  251. package/message-strip/fesm2020/fundamental-ngx-core-message-strip.mjs.map +1 -1
  252. package/message-strip/message-strip.component.d.ts +4 -1
  253. package/message-strip/message-strip.module.d.ts +2 -1
  254. package/message-strip/package.json +1 -1
  255. package/message-toast/package.json +1 -1
  256. package/micro-process-flow/package.json +1 -1
  257. package/mobile-mode/package.json +1 -1
  258. package/multi-input/esm2020/multi-input.component.mjs +1 -1
  259. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs +1 -1
  260. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs +1 -1
  261. package/multi-input/package.json +1 -1
  262. package/nested-list/esm2020/nested-list/nested-list.directive.mjs +27 -14
  263. package/nested-list/fesm2015/fundamental-ngx-core-nested-list.mjs +26 -12
  264. package/nested-list/fesm2015/fundamental-ngx-core-nested-list.mjs.map +1 -1
  265. package/nested-list/fesm2020/fundamental-ngx-core-nested-list.mjs +25 -12
  266. package/nested-list/fesm2020/fundamental-ngx-core-nested-list.mjs.map +1 -1
  267. package/nested-list/nested-list/nested-list.directive.d.ts +7 -2
  268. package/nested-list/package.json +1 -1
  269. package/notification/package.json +1 -1
  270. package/object-identifier/package.json +1 -1
  271. package/object-marker/package.json +1 -1
  272. package/object-number/package.json +1 -1
  273. package/object-status/package.json +1 -1
  274. package/overflow-layout/esm2020/overflow-layout.component.mjs +4 -3
  275. package/overflow-layout/esm2020/overflow-layout.module.mjs +5 -4
  276. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +7 -5
  277. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  278. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +7 -5
  279. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  280. package/overflow-layout/overflow-layout.module.d.ts +2 -1
  281. package/overflow-layout/package.json +15 -14
  282. package/package.json +2 -1
  283. package/pagination/esm2020/pagination.component.mjs +37 -71
  284. package/pagination/esm2020/pagination.module.mjs +5 -1
  285. package/pagination/fesm2015/fundamental-ngx-core-pagination.mjs +42 -70
  286. package/pagination/fesm2015/fundamental-ngx-core-pagination.mjs.map +1 -1
  287. package/pagination/fesm2020/fundamental-ngx-core-pagination.mjs +39 -70
  288. package/pagination/fesm2020/fundamental-ngx-core-pagination.mjs.map +1 -1
  289. package/pagination/package.json +1 -1
  290. package/pagination/pagination.component.d.ts +22 -2
  291. package/pagination/pagination.module.d.ts +6 -5
  292. package/panel/package.json +1 -1
  293. package/popover/package.json +1 -1
  294. package/product-switch/esm2020/product-switch/product-switch.component.mjs +4 -5
  295. package/product-switch/esm2020/product-switch.module.mjs +5 -4
  296. package/product-switch/fesm2015/fundamental-ngx-core-product-switch.mjs +9 -9
  297. package/product-switch/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  298. package/product-switch/fesm2020/fundamental-ngx-core-product-switch.mjs +9 -9
  299. package/product-switch/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  300. package/product-switch/package.json +1 -1
  301. package/product-switch/product-switch/product-switch.component.d.ts +3 -1
  302. package/product-switch/product-switch.module.d.ts +2 -1
  303. package/progress-indicator/package.json +1 -1
  304. package/quick-view/package.json +1 -1
  305. package/radio/package.json +1 -1
  306. package/rating-indicator/package.json +1 -1
  307. package/resizable-card-layout/package.json +1 -1
  308. package/scroll-spy/package.json +1 -1
  309. package/scrollbar/package.json +1 -1
  310. package/segmented-button/package.json +1 -1
  311. package/select/package.json +1 -1
  312. package/shared/package.json +1 -1
  313. package/shellbar/esm2020/shellbar-actions/shellbar-actions.component.mjs +1 -3
  314. package/shellbar/esm2020/shellbar.module.mjs +5 -1
  315. package/shellbar/fesm2015/fundamental-ngx-core-shellbar.mjs +4 -2
  316. package/shellbar/fesm2015/fundamental-ngx-core-shellbar.mjs.map +1 -1
  317. package/shellbar/fesm2020/fundamental-ngx-core-shellbar.mjs +4 -2
  318. package/shellbar/fesm2020/fundamental-ngx-core-shellbar.mjs.map +1 -1
  319. package/shellbar/package.json +1 -1
  320. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +4 -1
  321. package/shellbar/shellbar.module.d.ts +4 -3
  322. package/side-navigation/package.json +1 -1
  323. package/slider/esm2020/slider.component.mjs +9 -45
  324. package/slider/esm2020/slider.module.mjs +5 -4
  325. package/slider/fesm2015/fundamental-ngx-core-slider.mjs +12 -47
  326. package/slider/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  327. package/slider/fesm2020/fundamental-ngx-core-slider.mjs +12 -47
  328. package/slider/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  329. package/slider/package.json +1 -1
  330. package/slider/slider.component.d.ts +6 -10
  331. package/slider/slider.module.d.ts +2 -1
  332. package/split-button/esm2020/split-button.component.mjs +4 -7
  333. package/split-button/esm2020/split-button.module.mjs +5 -4
  334. package/split-button/fesm2015/fundamental-ngx-core-split-button.mjs +7 -9
  335. package/split-button/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
  336. package/split-button/fesm2020/fundamental-ngx-core-split-button.mjs +7 -9
  337. package/split-button/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
  338. package/split-button/package.json +1 -1
  339. package/split-button/split-button.component.d.ts +4 -1
  340. package/split-button/split-button.module.d.ts +2 -1
  341. package/splitter/esm2020/splitter-pagination/splitter-pagination.component.mjs +8 -4
  342. package/splitter/esm2020/splitter.component.mjs +1 -3
  343. package/splitter/esm2020/splitter.module.mjs +5 -4
  344. package/splitter/fesm2015/fundamental-ngx-core-splitter.mjs +11 -8
  345. package/splitter/fesm2015/fundamental-ngx-core-splitter.mjs.map +1 -1
  346. package/splitter/fesm2020/fundamental-ngx-core-splitter.mjs +11 -8
  347. package/splitter/fesm2020/fundamental-ngx-core-splitter.mjs.map +1 -1
  348. package/splitter/package.json +1 -1
  349. package/splitter/splitter-pagination/splitter-pagination.component.d.ts +4 -1
  350. package/splitter/splitter.component.d.ts +4 -1
  351. package/splitter/splitter.module.d.ts +2 -1
  352. package/status-indicator/package.json +1 -1
  353. package/step-input/esm2020/step-input.component.mjs +4 -9
  354. package/step-input/esm2020/step-input.module.mjs +9 -5
  355. package/step-input/fesm2015/fundamental-ngx-core-step-input.mjs +12 -13
  356. package/step-input/fesm2015/fundamental-ngx-core-step-input.mjs.map +1 -1
  357. package/step-input/fesm2020/fundamental-ngx-core-step-input.mjs +12 -13
  358. package/step-input/fesm2020/fundamental-ngx-core-step-input.mjs.map +1 -1
  359. package/step-input/package.json +1 -1
  360. package/step-input/step-input.component.d.ts +8 -2
  361. package/step-input/step-input.module.d.ts +2 -1
  362. package/switch/esm2020/switch.component.mjs +4 -7
  363. package/switch/esm2020/switch.module.mjs +5 -4
  364. package/switch/fesm2015/fundamental-ngx-core-switch.mjs +7 -9
  365. package/switch/fesm2015/fundamental-ngx-core-switch.mjs.map +1 -1
  366. package/switch/fesm2020/fundamental-ngx-core-switch.mjs +7 -9
  367. package/switch/fesm2020/fundamental-ngx-core-switch.mjs.map +1 -1
  368. package/switch/package.json +1 -1
  369. package/switch/switch.component.d.ts +8 -2
  370. package/switch/switch.module.d.ts +2 -1
  371. package/table/package.json +1 -1
  372. package/tabs/esm2020/tab-item-expand/tab-item-expand.component.mjs +4 -7
  373. package/tabs/esm2020/tab-list.component.mjs +1 -3
  374. package/tabs/esm2020/tabs.module.mjs +8 -4
  375. package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs +10 -11
  376. package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  377. package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs +10 -11
  378. package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  379. package/tabs/package.json +1 -1
  380. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +3 -1
  381. package/tabs/tab-list.component.d.ts +4 -1
  382. package/tabs/tabs.module.d.ts +2 -1
  383. package/text/esm2020/text.component.mjs +4 -11
  384. package/text/esm2020/text.module.mjs +5 -4
  385. package/text/fesm2015/fundamental-ngx-core-text.mjs +7 -13
  386. package/text/fesm2015/fundamental-ngx-core-text.mjs.map +1 -1
  387. package/text/fesm2020/fundamental-ngx-core-text.mjs +7 -13
  388. package/text/fesm2020/fundamental-ngx-core-text.mjs.map +1 -1
  389. package/text/package.json +1 -1
  390. package/text/text.component.d.ts +2 -0
  391. package/text/text.module.d.ts +2 -1
  392. package/theming/package.json +1 -1
  393. package/tile/package.json +1 -1
  394. package/time/esm2020/i18n/time-i18n.mjs +9 -6
  395. package/time/esm2020/time-column/time-column.component.mjs +54 -3
  396. package/time/esm2020/time.component.mjs +29 -14
  397. package/time/esm2020/time.module.mjs +30 -4
  398. package/time/fesm2015/fundamental-ngx-core-time.mjs +117 -22
  399. package/time/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  400. package/time/fesm2020/fundamental-ngx-core-time.mjs +116 -22
  401. package/time/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  402. package/time/i18n/time-i18n.d.ts +2 -0
  403. package/time/package.json +1 -1
  404. package/time/time-column/time-column.component.d.ts +12 -4
  405. package/time/time.component.d.ts +8 -8
  406. package/time/time.module.d.ts +2 -1
  407. package/time-picker/esm2020/time-picker.component.mjs +4 -7
  408. package/time-picker/esm2020/time-picker.module.mjs +8 -4
  409. package/time-picker/fesm2015/fundamental-ngx-core-time-picker.mjs +10 -9
  410. package/time-picker/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  411. package/time-picker/fesm2020/fundamental-ngx-core-time-picker.mjs +10 -9
  412. package/time-picker/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  413. package/time-picker/package.json +1 -1
  414. package/time-picker/time-picker.module.d.ts +2 -1
  415. package/timeline/package.json +1 -1
  416. package/title/package.json +1 -1
  417. package/token/esm2020/token.component.mjs +4 -7
  418. package/token/esm2020/token.module.mjs +27 -4
  419. package/token/esm2020/tokenizer.component.mjs +4 -7
  420. package/token/fesm2015/fundamental-ngx-core-token.mjs +32 -16
  421. package/token/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  422. package/token/fesm2020/fundamental-ngx-core-token.mjs +32 -16
  423. package/token/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  424. package/token/package.json +1 -1
  425. package/token/token.component.d.ts +8 -2
  426. package/token/token.module.d.ts +2 -1
  427. package/token/tokenizer.component.d.ts +1 -3
  428. package/toolbar/package.json +1 -1
  429. package/tree/package.json +1 -1
  430. package/upload-collection/esm2020/upload-collection-button-group/upload-collection-button-group.component.mjs +4 -15
  431. package/upload-collection/esm2020/upload-collection-form-item/upload-collection-form-item.component.mjs +4 -5
  432. package/upload-collection/esm2020/upload-collection.module.mjs +5 -4
  433. package/upload-collection/fesm2015/fundamental-ngx-core-upload-collection.mjs +10 -22
  434. package/upload-collection/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  435. package/upload-collection/fesm2020/fundamental-ngx-core-upload-collection.mjs +10 -22
  436. package/upload-collection/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  437. package/upload-collection/package.json +1 -1
  438. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  439. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +4 -1
  440. package/upload-collection/upload-collection.module.d.ts +2 -1
  441. package/utils/esm2020/services/local-storage.service.mjs +5 -1
  442. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +4 -0
  443. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  444. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +4 -0
  445. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  446. package/utils/package.json +1 -1
  447. package/vertical-navigation/package.json +1 -1
  448. package/wizard/esm2020/wizard-injection-token.mjs +1 -1
  449. package/wizard/esm2020/wizard-navigation/wizard-navigation.component.mjs +19 -7
  450. package/wizard/esm2020/wizard.component.mjs +26 -14
  451. package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs +43 -16
  452. package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  453. package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs +39 -16
  454. package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  455. package/wizard/package.json +1 -1
  456. package/wizard/wizard-injection-token.d.ts +1 -0
  457. package/wizard/wizard-navigation/wizard-navigation.component.d.ts +9 -2
  458. package/wizard/wizard.component.d.ts +11 -4
@@ -8,10 +8,12 @@ import { KeyUtil, resizeObservable, applyCssClass } from '@fundamental-ngx/core/
8
8
  import { ENTER, SPACE, DELETE, BACKSPACE, LEFT_ARROW, RIGHT_ARROW, A } from '@angular/cdk/keycodes';
9
9
  import * as i1 from '@fundamental-ngx/core/content-density';
10
10
  import { contentDensityObserverProviders, DeprecatedCompactDirective, CONTENT_DENSITY_DIRECTIVE, ContentDensityModule } from '@fundamental-ngx/core/content-density';
11
+ import * as i3 from '@fundamental-ngx/i18n';
12
+ import { I18nModule } from '@fundamental-ngx/i18n';
11
13
  import { __decorate, __metadata } from 'tslib';
12
14
  import { filter, mapTo, debounceTime, takeUntil } from 'rxjs/operators';
13
15
  import { FormControlComponent } from '@fundamental-ngx/core/form';
14
- import * as i3 from '@fundamental-ngx/core/button';
16
+ import * as i3$1 from '@fundamental-ngx/core/button';
15
17
  import { ButtonModule } from '@fundamental-ngx/core/button';
16
18
  import * as i4 from '@fundamental-ngx/core/popover';
17
19
  import { PopoverModule } from '@fundamental-ngx/core/popover';
@@ -35,10 +37,6 @@ class TokenComponent {
35
37
  this._subscriptions = new Subscription();
36
38
  /** Whether the token is read-only. */
37
39
  this.readOnly = false;
38
- /** label for close icon */
39
- this.deleteButtonLabel = 'Deletable';
40
- /** role description for token */
41
- this.ariaRoleDescription = 'token';
42
40
  /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */
43
41
  this.onCloseClick = new EventEmitter();
44
42
  /** Emitted when token should be removed */
@@ -95,10 +93,10 @@ class TokenComponent {
95
93
  }
96
94
  }
97
95
  TokenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component });
98
- TokenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TokenComponent, selector: "fd-token", inputs: { disabled: "disabled", selected: "selected", readOnly: "readOnly", deleteButtonLabel: "deleteButtonLabel", ariaRoleDescription: "ariaRoleDescription" }, outputs: { onCloseClick: "onCloseClick", onRemove: "onRemove", onTokenClick: "onTokenClick", onTokenKeydown: "onTokenKeydown" }, providers: [contentDensityObserverProviders()], viewQueries: [{ propertyName: "tokenWrapperElement", first: true, predicate: ["tokenWrapperElement"], descendants: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true }, { propertyName: "_viewContainer", first: true, predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{-webkit-box-sizing:border-box;-ms-flex-negative:0;align-items:center;background-color:var(--sapButton_TokenBackground);border:0;border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:inline-flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:1.625rem;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:3.625rem;padding:0;padding:.25rem 0 .25rem var(--fdToken_Padding_Left);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token[dir=rtl],[dir=rtl] .fd-token{padding-left:0;padding-right:var(--fdToken_Padding_Left)}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_IconColor);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;height:1.625rem;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:1.75rem;padding:.25rem .5rem;width:1.75rem}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{text-rendering:optimizeLegibility;content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Hover);background-color:var(--fdToken_Background_Color_Hover);border-color:var(--fdToken_Border_Color_Hover);box-shadow:var(--fdToken_Box_Shadow_Hover)}.fd-token.is-focus,.fd-token:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--compact{height:1.25rem;line-height:1.125rem;min-width:3rem;padding:.1rem 0 .1rem .25rem}.fd-token--compact .fd-token__close{height:1.25rem;min-width:1.25rem;padding:.1rem .25rem;vertical-align:baseline;width:1.25rem}.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--compact{padding-left:0;padding-right:.25rem}.fd-token--compact.is-focus,.fd-token--compact:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);color:var(--sapContent_LabelColor);padding:.25rem .375rem}.fd-token--readonly.fd-token--compact{padding:.1rem .25rem}.fd-token--readonly.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--readonly.fd-token--compact{padding-left:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{-webkit-box-shadow:none;background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);box-shadow:none;color:var(--sapContent_LabelColor)}.fd-token--readonly[dir=rtl],[dir=rtl] .fd-token--readonly{padding-left:.375rem}.fd-token.fd-token--selected{background-color:var(--sapButton_Selected_Background);border-color:var(--sapButton_Selected_BorderColor)}.fd-token.fd-token--selected,.fd-token.fd-token--selected .fd-token__close{color:var(--sapButton_Selected_TextColor)}.fd-token.fd-token--selected.is-hover,.fd-token.fd-token--selected:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Selected_Hover);background-color:var(--sapButton_Selected_Hover_Background);border-color:var(--sapButton_Selected_Hover_BorderColor);box-shadow:var(--fdToken_Box_Shadow_Selected_Hover)}.fd-token.fd-token--selected.is-focus,.fd-token.fd-token--selected:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i6.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
96
+ TokenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TokenComponent, selector: "fd-token", inputs: { disabled: "disabled", selected: "selected", readOnly: "readOnly", deleteButtonLabel: "deleteButtonLabel", ariaRoleDescription: "ariaRoleDescription" }, outputs: { onCloseClick: "onCloseClick", onRemove: "onRemove", onTokenClick: "onTokenClick", onTokenKeydown: "onTokenKeydown" }, providers: [contentDensityObserverProviders()], viewQueries: [{ propertyName: "tokenWrapperElement", first: true, predicate: ["tokenWrapperElement"], descendants: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true }, { propertyName: "_viewContainer", first: true, predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{-webkit-box-sizing:border-box;-ms-flex-negative:0;align-items:center;background-color:var(--sapButton_TokenBackground);border:0;border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:inline-flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:1.625rem;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:3.625rem;padding:0;padding:.25rem 0 .25rem var(--fdToken_Padding_Left);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token[dir=rtl],[dir=rtl] .fd-token{padding-left:0;padding-right:var(--fdToken_Padding_Left)}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_IconColor);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;height:1.625rem;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:1.75rem;padding:.25rem .5rem;width:1.75rem}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{text-rendering:optimizeLegibility;content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Hover);background-color:var(--fdToken_Background_Color_Hover);border-color:var(--fdToken_Border_Color_Hover);box-shadow:var(--fdToken_Box_Shadow_Hover)}.fd-token.is-focus,.fd-token:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--compact{height:1.25rem;line-height:1.125rem;min-width:3rem;padding:.1rem 0 .1rem .25rem}.fd-token--compact .fd-token__close{height:1.25rem;min-width:1.25rem;padding:.1rem .25rem;vertical-align:baseline;width:1.25rem}.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--compact{padding-left:0;padding-right:.25rem}.fd-token--compact.is-focus,.fd-token--compact:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);color:var(--sapContent_LabelColor);padding:.25rem .375rem}.fd-token--readonly.fd-token--compact{padding:.1rem .25rem}.fd-token--readonly.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--readonly.fd-token--compact{padding-left:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{-webkit-box-shadow:none;background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);box-shadow:none;color:var(--sapContent_LabelColor)}.fd-token--readonly[dir=rtl],[dir=rtl] .fd-token--readonly{padding-left:.375rem}.fd-token.fd-token--selected{background-color:var(--sapButton_Selected_Background);border-color:var(--sapButton_Selected_BorderColor)}.fd-token.fd-token--selected,.fd-token.fd-token--selected .fd-token__close{color:var(--sapButton_Selected_TextColor)}.fd-token.fd-token--selected.is-hover,.fd-token.fd-token--selected:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Selected_Hover);background-color:var(--sapButton_Selected_Hover_Background);border-color:var(--sapButton_Selected_Hover_BorderColor);box-shadow:var(--fdToken_Box_Shadow_Selected_Hover)}.fd-token.fd-token--selected.is-focus,.fd-token.fd-token--selected:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i6.AsyncPipe, "fdTranslate": i3.FdTranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
99
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenComponent, decorators: [{
100
98
  type: Component,
101
- args: [{ selector: 'fd-token', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{-webkit-box-sizing:border-box;-ms-flex-negative:0;align-items:center;background-color:var(--sapButton_TokenBackground);border:0;border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:inline-flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:1.625rem;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:3.625rem;padding:0;padding:.25rem 0 .25rem var(--fdToken_Padding_Left);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token[dir=rtl],[dir=rtl] .fd-token{padding-left:0;padding-right:var(--fdToken_Padding_Left)}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_IconColor);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;height:1.625rem;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:1.75rem;padding:.25rem .5rem;width:1.75rem}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{text-rendering:optimizeLegibility;content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Hover);background-color:var(--fdToken_Background_Color_Hover);border-color:var(--fdToken_Border_Color_Hover);box-shadow:var(--fdToken_Box_Shadow_Hover)}.fd-token.is-focus,.fd-token:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--compact{height:1.25rem;line-height:1.125rem;min-width:3rem;padding:.1rem 0 .1rem .25rem}.fd-token--compact .fd-token__close{height:1.25rem;min-width:1.25rem;padding:.1rem .25rem;vertical-align:baseline;width:1.25rem}.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--compact{padding-left:0;padding-right:.25rem}.fd-token--compact.is-focus,.fd-token--compact:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);color:var(--sapContent_LabelColor);padding:.25rem .375rem}.fd-token--readonly.fd-token--compact{padding:.1rem .25rem}.fd-token--readonly.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--readonly.fd-token--compact{padding-left:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{-webkit-box-shadow:none;background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);box-shadow:none;color:var(--sapContent_LabelColor)}.fd-token--readonly[dir=rtl],[dir=rtl] .fd-token--readonly{padding-left:.375rem}.fd-token.fd-token--selected{background-color:var(--sapButton_Selected_Background);border-color:var(--sapButton_Selected_BorderColor)}.fd-token.fd-token--selected,.fd-token.fd-token--selected .fd-token__close{color:var(--sapButton_Selected_TextColor)}.fd-token.fd-token--selected.is-hover,.fd-token.fd-token--selected:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Selected_Hover);background-color:var(--sapButton_Selected_Hover_Background);border-color:var(--sapButton_Selected_Hover_BorderColor);box-shadow:var(--fdToken_Box_Shadow_Selected_Hover)}.fd-token.fd-token--selected.is-focus,.fd-token.fd-token--selected:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"] }]
99
+ args: [{ selector: 'fd-token', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-token{-webkit-box-sizing:border-box;-ms-flex-negative:0;align-items:center;background-color:var(--sapButton_TokenBackground);border:0;border:var(--sapButton_BorderWidth) solid var(--sapButton_TokenBorderColor);border-radius:var(--fdToken_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);color:var(--fdToken_Text_Color);cursor:default;display:inline-flex;flex-shrink:0;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:1.625rem;line-height:var(--sapContent_LineHeight);line-height:1.5rem;margin:0;max-width:100%;min-width:3.625rem;padding:0;padding:.25rem 0 .25rem var(--fdToken_Padding_Left);text-align:center;text-overflow:clip;white-space:nowrap}.fd-token:after,.fd-token:before{box-sizing:inherit;font-size:inherit}.fd-token[dir=rtl],[dir=rtl] .fd-token{padding-left:0;padding-right:var(--fdToken_Padding_Left)}.fd-token__text{max-width:100%;min-width:auto;overflow:hidden;text-overflow:ellipsis;text-shadow:var(--fdToken_Text_Shadow);width:100%}.fd-token__close{-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:transparent;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_IconColor);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;height:1.625rem;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:1.25rem;margin:0;min-width:1.75rem;padding:.25rem .5rem;width:1.75rem}.fd-token__close:after,.fd-token__close:before{box-sizing:inherit;font-size:inherit}.fd-token__close:before{text-rendering:optimizeLegibility;content:\"\\e03e\";font-family:SAP-icons;text-align:center;text-decoration:inherit;text-transform:none}.fd-token__close.is-focus,.fd-token__close:focus{box-shadow:none;outline:none;z-index:5}.fd-token:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Hover);background-color:var(--fdToken_Background_Color_Hover);border-color:var(--fdToken_Border_Color_Hover);box-shadow:var(--fdToken_Box_Shadow_Hover)}.fd-token.is-focus,.fd-token:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--compact{height:1.25rem;line-height:1.125rem;min-width:3rem;padding:.1rem 0 .1rem .25rem}.fd-token--compact .fd-token__close{height:1.25rem;min-width:1.25rem;padding:.1rem .25rem;vertical-align:baseline;width:1.25rem}.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--compact{padding-left:0;padding-right:.25rem}.fd-token--compact.is-focus,.fd-token--compact:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:var(--fdToken_Outline_Offset);outline-offset:var(--fdToken_Outline_Offset_Compact);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token--disabled{cursor:not-allowed}.fd-token--readonly{background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);color:var(--sapContent_LabelColor);padding:.25rem .375rem}.fd-token--readonly.fd-token--compact{padding:.1rem .25rem}.fd-token--readonly.fd-token--compact[dir=rtl],[dir=rtl] .fd-token--readonly.fd-token--compact{padding-left:.25rem}.fd-token--readonly.is-hover,.fd-token--readonly:hover{-webkit-box-shadow:none;background-color:var(--fdToken_Background_Color_Read_Only);border:var(--sapButton_BorderWidth) solid var(--fdToken_Border_Color_Read_Only);box-shadow:none;color:var(--sapContent_LabelColor)}.fd-token--readonly[dir=rtl],[dir=rtl] .fd-token--readonly{padding-left:.375rem}.fd-token.fd-token--selected{background-color:var(--sapButton_Selected_Background);border-color:var(--sapButton_Selected_BorderColor)}.fd-token.fd-token--selected,.fd-token.fd-token--selected .fd-token__close{color:var(--sapButton_Selected_TextColor)}.fd-token.fd-token--selected.is-hover,.fd-token.fd-token--selected:hover{-webkit-box-shadow:var(--fdToken_Box_Shadow_Selected_Hover);background-color:var(--sapButton_Selected_Hover_Background);border-color:var(--sapButton_Selected_Hover_BorderColor);box-shadow:var(--fdToken_Box_Shadow_Selected_Hover)}.fd-token.fd-token--selected.is-focus,.fd-token.fd-token--selected:focus{box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-color:var(--fdToken_Border_Color_Selected_Focus);outline-offset:var(--fdToken_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-token__disabled:after{cursor:not-allowed}.no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}\n"] }]
102
100
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }]; }, propDecorators: { disabled: [{
103
101
  type: Input
104
102
  }], tokenWrapperElement: [{
@@ -141,8 +139,6 @@ class TokenizerComponent {
141
139
  this._renderer = _renderer;
142
140
  /** Disables possibility to remove tokens by keyboard */
143
141
  this.disableKeyboardDeletion = false;
144
- /** role description for tokenizer component */
145
- this.ariaRoleDescription = 'tokenizer';
146
142
  /** Whether to use cozy visuals but compact collapsing behavior. */
147
143
  this.compactCollapse = false;
148
144
  /** Whether tokenizer should have fake focus indicator, when input is focused inside*/
@@ -656,7 +652,7 @@ class TokenizerComponent {
656
652
  }
657
653
  }
658
654
  TokenizerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenizerComponent, deps: [{ token: i1.ContentDensityObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.RtlService, optional: true }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
659
- TokenizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TokenizerComponent, selector: "fd-tokenizer", inputs: { class: "class", disableKeyboardDeletion: "disableKeyboardDeletion", ariaRoleDescription: "ariaRoleDescription", compactCollapse: "compactCollapse", tokenizerFocusable: "tokenizerFocusable", inputValue: "inputValue", glyph: "glyph", moreTerm: "moreTerm", open: "open" }, outputs: { moreClickedEvent: "moreClickedEvent" }, host: { listeners: { "keydown": "keyDown($event)" } }, providers: [contentDensityObserverProviders()], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return FormControlComponent; }), descendants: true }, { propertyName: "tokenList", predicate: i0.forwardRef(function () { return TokenComponent; }) }], viewQueries: [{ propertyName: "tokenizerInnerEl", first: true, predicate: ["tokenizerInner"], descendants: true }, { propertyName: "moreElement", first: true, predicate: ["moreElement"], descendants: true }, { propertyName: "content", first: true, predicate: ["inputGroupAddOn"], descendants: true }, { propertyName: "_viewContainer", predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle);background-color:var(--sapField_Background);border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:2.75rem;outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background);border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:0 .3125rem;scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:3rem;padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{-webkit-box-shadow:none;background:none;background-color:transparent;border:none;box-shadow:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer--compact .fd-tokenizer__inner{padding:0 .25rem}.fd-tokenizer--compact .fd-tokenizer__input.fd-input{min-width:2rem}.fd-tokenizer--compact .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer--compact .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer--compact .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer--compact .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"], components: [{ type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i4.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i4.PopoverControlComponent, selector: "fd-popover-control" }, { type: i4.PopoverBodyComponent, selector: "fd-popover-body" }, { type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.InputGroupAddOnDirective, selector: "[fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
655
+ TokenizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TokenizerComponent, selector: "fd-tokenizer", inputs: { class: "class", disableKeyboardDeletion: "disableKeyboardDeletion", compactCollapse: "compactCollapse", tokenizerFocusable: "tokenizerFocusable", inputValue: "inputValue", glyph: "glyph", moreTerm: "moreTerm", open: "open" }, outputs: { moreClickedEvent: "moreClickedEvent" }, host: { listeners: { "keydown": "keyDown($event)" } }, providers: [contentDensityObserverProviders()], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return FormControlComponent; }), descendants: true }, { propertyName: "tokenList", predicate: i0.forwardRef(function () { return TokenComponent; }) }], viewQueries: [{ propertyName: "tokenizerInnerEl", first: true, predicate: ["tokenizerInner"], descendants: true }, { propertyName: "moreElement", first: true, predicate: ["moreElement"], descendants: true }, { propertyName: "content", first: true, predicate: ["inputGroupAddOn"], descendants: true }, { propertyName: "_viewContainer", predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle);background-color:var(--sapField_Background);border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:2.75rem;outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background);border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:0 .3125rem;scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:3rem;padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{-webkit-box-shadow:none;background:none;background-color:transparent;border:none;box-shadow:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer--compact .fd-tokenizer__inner{padding:0 .25rem}.fd-tokenizer--compact .fd-tokenizer__input.fd-input{min-width:2rem}.fd-tokenizer--compact .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer--compact .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer--compact .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer--compact .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"], components: [{ type: i3$1.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i4.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i4.PopoverControlComponent, selector: "fd-popover-control" }, { type: i4.PopoverBodyComponent, selector: "fd-popover-body" }, { type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.InputGroupAddOnDirective, selector: "[fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fdTranslate": i3.FdTranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
660
656
  __decorate([
661
657
  applyCssClass,
662
658
  __metadata("design:type", Function),
@@ -665,7 +661,7 @@ __decorate([
665
661
  ], TokenizerComponent.prototype, "buildComponentCssClass", null);
666
662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenizerComponent, decorators: [{
667
663
  type: Component,
668
- args: [{ selector: 'fd-tokenizer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle);background-color:var(--sapField_Background);border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:2.75rem;outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background);border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:0 .3125rem;scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:3rem;padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{-webkit-box-shadow:none;background:none;background-color:transparent;border:none;box-shadow:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer--compact .fd-tokenizer__inner{padding:0 .25rem}.fd-tokenizer--compact .fd-tokenizer__input.fd-input{min-width:2rem}.fd-tokenizer--compact .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer--compact .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer--compact .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer--compact .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"] }]
664
+ args: [{ selector: 'fd-tokenizer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [contentDensityObserverProviders()], template: "<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.4\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-tokenizer{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:var(--sapField_BackgroundStyle);background-color:var(--sapField_Background);border:none;border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:2.25rem;height:auto;line-height:var(--sapContent_LineHeight);margin:0;min-height:2.25rem;min-width:2.75rem;outline:none;overflow:hidden;padding:0;text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-tokenizer:after,.fd-tokenizer:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-tokenizer[dir=rtl]::placeholder,[dir=rtl] .fd-tokenizer::placeholder{text-indent:.125rem}.fd-tokenizer::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-tokenizer::-ms-clear{display:none}.fd-tokenizer.is-hover,.fd-tokenizer:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background);border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-tokenizer.is-focus,.fd-tokenizer:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset)}.fd-tokenizer.is-hover,.fd-tokenizer:hover{box-shadow:none}.fd-tokenizer__inner{-ms-overflow-style:none;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;align-items:center;display:flex;float:right;justify-content:flex-end;overflow:hidden;padding:0 .3125rem;scrollbar-width:none;white-space:nowrap;width:100%}.fd-tokenizer__inner::-webkit-scrollbar{display:none}.fd-tokenizer .fd-token{margin-right:.3125rem;max-width:calc(100% - 3.3125rem)}.fd-tokenizer .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer__indicator{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:inline-block;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-tokenizer__indicator:after,.fd-tokenizer__indicator:before{box-sizing:inherit;font-size:inherit}.fd-tokenizer .fd-tokenizer__input{background:transparent}.fd-tokenizer .fd-tokenizer__input.fd-input{border:none;min-width:3rem;padding:0}.fd-tokenizer .fd-tokenizer__input:first-child{padding:0 .3125rem}.fd-tokenizer .fd-tokenizer__input:last-child{flex-basis:100%}.fd-tokenizer .fd-tokenizer__input.is-focus,.fd-tokenizer .fd-tokenizer__input:focus{-webkit-box-shadow:none;background:none;background-color:transparent;border:none;box-shadow:none;outline:none;z-index:5}.fd-tokenizer .fd-tokenizer__input.is-hover,.fd-tokenizer .fd-tokenizer__input:hover{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer.is-focus,.fd-tokenizer:focus{-webkit-box-shadow:none;border:none;box-shadow:none;outline-color:var(--sapContent_FocusColor);outline-offset:-.0625rem;outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-tokenizer--compact .fd-tokenizer__inner{padding:0 .25rem}.fd-tokenizer--compact .fd-tokenizer__input.fd-input{min-width:2rem}.fd-tokenizer--compact .fd-tokenizer__input:first-child{padding:0 .25rem}.fd-tokenizer--compact .fd-token{margin-right:.25rem;max-width:calc(100% - 2.25rem)}.fd-tokenizer--compact .fd-token[dir=rtl],[dir=rtl] .fd-tokenizer--compact .fd-token{margin:0 0 0 .3125rem}.fd-tokenizer--readonly{background-color:var(--sapField_ReadOnly_Background);overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__inner{overflow:visible}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true],.fd-tokenizer--readonly .fd-tokenizer__input[readonly]{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none}.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly.is-focus,.fd-tokenizer--readonly .fd-tokenizer__input.is-readonly:focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[aria-readonly=true]:focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly].is-focus,.fd-tokenizer--readonly .fd-tokenizer__input[readonly]:focus{-webkit-box-shadow:none;background:none;background-color:transparent;box-shadow:none;z-index:5}.fd-tokenizer--scrollable .fd-tokenizer__inner{justify-content:normal;overflow:scroll}.fd-tokenizer .fd-token{max-width:inherit}input.fd-input.fd-tokenizer__input{background-color:transparent;margin-right:1px;border:none;outline:none}.fd-tokenizer-more{padding-right:.5rem}[dir=rtl] .fd-tokenizer-more,.fd-tokenizer-more[dir=rtl]{padding-left:.5rem;padding-right:0}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon{height:2.25rem}.fd-input-group__addon--button .fd-input-group__button.fd-tokenizer-addon--compact{height:1.625rem}.fd-tokenizer__overflow-list-item{display:flex;justify-content:space-between}\n"] }]
669
665
  }], ctorParameters: function () {
670
666
  return [{ type: i1.ContentDensityObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.RtlService, decorators: [{
671
667
  type: Optional
@@ -674,8 +670,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
674
670
  type: Input
675
671
  }], disableKeyboardDeletion: [{
676
672
  type: Input
677
- }], ariaRoleDescription: [{
678
- type: Input
679
673
  }], tokenList: [{
680
674
  type: ContentChildren,
681
675
  args: [forwardRef(() => TokenComponent)]
@@ -799,12 +793,26 @@ TokenModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13
799
793
  TokenModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenModule, declarations: [TokenComponent,
800
794
  TokenizerComponent,
801
795
  TokenizerInputDirective,
802
- DeprecatedTokenizerContentDensityDirective], imports: [CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule, ContentDensityModule], exports: [TokenComponent,
796
+ DeprecatedTokenizerContentDensityDirective], imports: [CommonModule,
797
+ InputGroupModule,
798
+ ButtonModule,
799
+ PopoverModule,
800
+ ListModule,
801
+ ContentDensityModule,
802
+ I18nModule], exports: [TokenComponent,
803
803
  TokenizerComponent,
804
804
  TokenizerInputDirective,
805
805
  DeprecatedTokenizerContentDensityDirective,
806
806
  ContentDensityModule] });
807
- TokenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenModule, imports: [[CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule, ContentDensityModule], ContentDensityModule] });
807
+ TokenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenModule, imports: [[
808
+ CommonModule,
809
+ InputGroupModule,
810
+ ButtonModule,
811
+ PopoverModule,
812
+ ListModule,
813
+ ContentDensityModule,
814
+ I18nModule
815
+ ], ContentDensityModule] });
808
816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TokenModule, decorators: [{
809
817
  type: NgModule,
810
818
  args: [{
@@ -814,7 +822,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
814
822
  TokenizerInputDirective,
815
823
  DeprecatedTokenizerContentDensityDirective
816
824
  ],
817
- imports: [CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule, ContentDensityModule],
825
+ imports: [
826
+ CommonModule,
827
+ InputGroupModule,
828
+ ButtonModule,
829
+ PopoverModule,
830
+ ListModule,
831
+ ContentDensityModule,
832
+ I18nModule
833
+ ],
818
834
  exports: [
819
835
  TokenComponent,
820
836
  TokenizerComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-token.mjs","sources":["../../../../../libs/core/src/lib/token/token.component.ts","../../../../../libs/core/src/lib/token/token.component.html","../../../../../libs/core/src/lib/token/tokenizer.component.ts","../../../../../libs/core/src/lib/token/tokenizer.component.html","../../../../../libs/core/src/lib/token/token-input.directive.ts","../../../../../libs/core/src/lib/token/deprecated-tokenizer-content-density.directive.ts","../../../../../libs/core/src/lib/token/token.module.ts","../../../../../libs/core/src/lib/token/fundamental-ngx-core-token.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\n/**\n * A token is used to represent contextualizing information.\n * They can be useful to show applied filters, selected values for form fields or object metadata.\n */\n@Component({\n selector: 'fd-token',\n templateUrl: './token.component.html',\n styleUrls: ['./token.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()]\n})\nexport class TokenComponent implements AfterViewInit, OnDestroy {\n /** Whether the token is disabled. */\n @Input()\n disabled = false;\n\n /** @hidden */\n @ViewChild('tokenWrapperElement')\n tokenWrapperElement: ElementRef;\n\n /** @hidden */\n @ViewChild('content')\n readonly _content: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: ViewContainerRef;\n\n private _selected = false;\n\n private _subscriptions = new Subscription();\n\n /** Whether the token is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(val: boolean) {\n if (this._selected !== val) {\n this._cdRef.markForCheck();\n }\n this._selected = val;\n }\n\n /** Whether the token is read-only. */\n @Input()\n readOnly = false;\n\n /** label for close icon */\n @Input()\n deleteButtonLabel = 'Deletable';\n\n /** role description for token */\n @Input()\n ariaRoleDescription = 'token';\n\n /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onCloseClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n /** Emitted when token should be removed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onRemove: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emitted when a token is clicked. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenClick = new EventEmitter<MouseEvent>();\n\n /** Emitted when a there's a keydown registered on the token. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenKeydown = new EventEmitter<KeyboardEvent>();\n\n /** @hidden */\n totalCount: number;\n\n constructor(\n public elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewContainer.createEmbeddedView(this._content);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n closeClickHandler(event?): void {\n if (event) {\n event.stopPropagation();\n if (!this.disabled) {\n this.onCloseClick.emit(event);\n }\n }\n }\n\n /** @hidden */\n tokenClickHandler(event): void {\n this.onTokenClick.emit(event);\n }\n\n /** @hidden */\n tokenKeydownHandler(event): void {\n this.onTokenKeydown.emit(event);\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n this.onTokenClick.emit(event);\n }\n }\n\n /** @hidden */\n _setTotalCount(count: number): void {\n this.totalCount = count;\n this._cdRef.markForCheck();\n }\n}\n","<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { A, BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { fromEvent, merge, Subject, Subscription } from 'rxjs';\nimport { filter, mapTo, takeUntil, debounceTime } from 'rxjs/operators';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { applyCssClass, CssClassBuilder, KeyUtil, resizeObservable, RtlService } from '@fundamental-ngx/core/utils';\nimport { TokenComponent } from './token.component';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\n@Component({\n selector: 'fd-tokenizer',\n templateUrl: './tokenizer.component.html',\n styleUrls: ['./tokenizer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()]\n})\nexport class TokenizerComponent\n implements AfterViewInit, AfterContentInit, OnDestroy, CssClassBuilder, OnInit, OnChanges\n{\n /** user's custom classes */\n @Input()\n class: string;\n\n /** Disables possibility to remove tokens by keyboard */\n @Input()\n disableKeyboardDeletion = false;\n\n /** role description for tokenizer component */\n @Input()\n ariaRoleDescription = 'tokenizer';\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TokenComponent))\n tokenList: QueryList<TokenComponent>;\n\n /** @hidden */\n @ContentChild(forwardRef(() => FormControlComponent))\n input: FormControlComponent;\n\n /** @hidden */\n @ViewChild('tokenizerInner')\n tokenizerInnerEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('moreElement')\n moreElement: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('inputGroupAddOn') set content(content: ElementRef<HTMLElement>) {\n this.inputGroupAddonEl = content;\n }\n\n /** @hidden */\n @ViewChildren('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: QueryList<ViewContainerRef>;\n\n /** @hidden */\n get _hiddenTokens(): TokenComponent[] {\n return this.tokenList.filter((token) => token.elementRef.nativeElement.style.display === 'none');\n }\n\n /**\n * Component is in compact mode, determined by the consumer\n */\n get compact(): boolean {\n return this._contentDensityObserver.isCompact;\n }\n\n /** @hidden */\n inputGroupAddonEl: ElementRef;\n\n /** Whether to use cozy visuals but compact collapsing behavior. */\n @Input()\n compactCollapse = false;\n\n /** Whether tokenizer should have fake focus indicator, when input is focused inside*/\n @Input()\n tokenizerFocusable = true;\n\n /** The value for the tokenizer input */\n @Input()\n inputValue: string;\n\n /** Icon of the button on the right of the input field. */\n @Input()\n glyph: string;\n\n /** Word to use for when there are extra tokens. */\n @Input()\n moreTerm = 'more';\n\n /** @hidden */\n @Input()\n open: boolean;\n\n /** Event emitted when the search term changes. Use *$event* to access the new term. */\n @Output()\n readonly moreClickedEvent: EventEmitter<any> = new EventEmitter<any>();\n\n /** @hidden */\n previousElementWidth: number;\n\n /** @hidden */\n moreTokensLeft: Array<TokenComponent> = [];\n\n /** @hidden */\n moreTokensRight: Array<TokenComponent> = [];\n\n /** @hidden */\n previousTokenCount: number;\n\n /** @hidden */\n tokenListChangesSubscription: Subscription;\n\n /** @hidden */\n tokenListClickSubscriptions: Subscription[] = [];\n\n /** @hidden */\n hiddenCozyTokenCount = 0;\n\n /** @hidden Used to add focus to tokenizer element */\n _tokenizerHasFocus = false;\n\n /** @hidden */\n _showOverflowPopover = true;\n\n /** @hidden */\n /* Variable which will keep the index of the first token pressed in the tokenizer*/\n private _firstElementInSelection: number | null = null;\n\n /** @hidden */\n /* Variable which will keep the index of the last token pressed in the tokenizer*/\n private _lastElementInSelection: number | null = null;\n\n /** @hidden */\n /* Flag which will say if the last keyboard and click operation they used was using control*/\n private _ctrlPrevious: boolean;\n\n /** @hidden */\n /* Flag which will say if they held shift and clicked highlighting elements before or*/\n private _directionShiftIsRight: boolean | null = null;\n\n /** An RxJS Subject that will kill the data stream upon destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n constructor(\n readonly _contentDensityObserver: ContentDensityObserver,\n private _elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _rtlService: RtlService,\n private _renderer: Renderer2\n ) {\n this._renderer.listen('window', 'click', (e: Event) => {\n if (this.elementRef().nativeElement.contains(e.target) === false) {\n this.tokenList.forEach((token) => {\n token.selected = false;\n });\n }\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.input && this.input.elementRef()) {\n this._inputKeydownEvent();\n }\n // watch for changes to the tokenList and attempt to expand/collapse tokens as needed\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this.tokenListChangesSubscription = this.tokenList.changes.subscribe(() => {\n this._resetTokens();\n });\n this.tokenList.forEach((token) => {\n this.tokenListChangesSubscription.add(\n token.onCloseClick.subscribe(() => {\n this._resetTokens();\n })\n );\n });\n if (!this.compact && !this.compactCollapse) {\n this._handleCozyTokenCount();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenElementEvents();\n this.previousElementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this._listenOnResize();\n this.onResize();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._unsubscribeClicks();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [this.class];\n }\n\n elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n handleTokenClickSubscriptions(): void {\n this._unsubscribeClicks();\n this.tokenList.forEach((token, index) => {\n if (token.tokenWrapperElement) {\n token.tokenWrapperElement.nativeElement.tabIndex = -1;\n }\n this.tokenListClickSubscriptions.push(\n token.onTokenClick.subscribe((event) => {\n event.stopPropagation();\n this.focusTokenElement(index);\n if (this._isControlKey(event)) {\n this._ctrlSelected(token, index);\n } else if (!event.shiftKey || this._ctrlPrevious) {\n this._basicSelected(token, index);\n } else if (event.shiftKey) {\n this.resetFirstAndLastElement();\n this._shiftSelected(index);\n }\n })\n );\n this.tokenListClickSubscriptions.push(\n token.onTokenKeydown.subscribe((event) => {\n this.handleKeyDown(event, index);\n })\n );\n });\n }\n\n /** @hidden */\n focusTokenElement(newIndex: number): HTMLElement | undefined {\n let elementToFocus: HTMLElement | undefined;\n const tokenListArray: TokenComponent[] = this.tokenList.toArray();\n if (tokenListArray[newIndex]) {\n elementToFocus = tokenListArray[newIndex].tokenWrapperElement.nativeElement;\n // element needs tabindex in order to be focused\n elementToFocus!.focus();\n }\n\n return elementToFocus;\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDown(keyboardEvent: KeyboardEvent): void {\n if (\n KeyUtil.isKeyCode(keyboardEvent, [DELETE, BACKSPACE]) &&\n (!this._isInputFocused() || this._tokensSelected()) &&\n !this.disableKeyboardDeletion\n ) {\n const selectedElements = this._getActiveTokens();\n const focusedTokenIndex = this._getFocusedTokenIndex();\n selectedElements.forEach((element) => element.onCloseClick.emit());\n if (selectedElements.length > 0) {\n if (KeyUtil.isKeyCode(keyboardEvent, DELETE)) {\n this._focusInput();\n } else {\n this.focusTokenElement(focusedTokenIndex - 1);\n }\n }\n }\n\n if (\n KeyUtil.isKeyCode(keyboardEvent, BACKSPACE) &&\n this._isInputFocused() &&\n !this._getInputValue() &&\n !this.disableKeyboardDeletion\n ) {\n this.focusTokenElement(this.tokenList.length - 1);\n }\n }\n\n /** @hidden */\n onResize(): void {\n if (this._elementRef) {\n const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this._resetTokens();\n this.previousElementWidth = elementWidth;\n if (!this.compact && !this.compactCollapse) {\n this._handleCozyTokenCount();\n }\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent, fromIndex: number): void {\n let newIndex: number | undefined;\n const rtl = this._rtlService && this._rtlService.rtl ? this._rtlService.rtl.getValue() : false;\n if (KeyUtil.isKeyCode(event, SPACE) && !this._isInputFocused()) {\n const token = this.tokenList.find((_, index) => index === fromIndex);\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n token && (token.selected = !token.selected);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._focusInput();\n } else if ((KeyUtil.isKeyCode(event, LEFT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, RIGHT_ARROW) && rtl)) {\n this._handleArrowLeft(fromIndex);\n newIndex = fromIndex - 1;\n } else if ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl)) {\n this._handleArrowRight(fromIndex);\n newIndex = fromIndex + 1;\n } else if (KeyUtil.isKeyCode(event, A) && !this._getInputValue() && this._isControlKey(event)) {\n event.preventDefault();\n this.tokenList.forEach((token) => (token.selected = true));\n }\n if (\n newIndex === this.tokenList.length &&\n ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl))\n ) {\n this._focusInput();\n } else if (newIndex! > this.tokenList.length - this.moreTokensRight.length && this._isInputFocused()) {\n this.focusTokenElement(newIndex! - this.moreTokensRight.length);\n } else if (newIndex || newIndex === 0) {\n this.focusTokenElement(newIndex);\n }\n }\n\n /** @hidden */\n getCombinedTokenWidth(): number {\n let totalTokenWidth = 0;\n // get the width of each token\n this.tokenList.forEach((token) => {\n totalTokenWidth = totalTokenWidth + token.elementRef.nativeElement.getBoundingClientRect().width;\n });\n // add input width\n if (this.input && this.input.elementRef()) {\n totalTokenWidth = totalTokenWidth + this.input.elementRef().nativeElement.getBoundingClientRect().width;\n }\n // add the width of the \"____ more\" element\n if (this.moreTokensLeft.length > 0 && this.moreElement && this.moreElement.nativeElement) {\n totalTokenWidth = totalTokenWidth + this.moreElement.nativeElement.getBoundingClientRect().width;\n }\n // add the input group addon\n if (this.inputGroupAddonEl && this.inputGroupAddonEl.nativeElement) {\n totalTokenWidth = totalTokenWidth + this.inputGroupAddonEl.nativeElement.getBoundingClientRect().width;\n }\n\n return totalTokenWidth;\n }\n\n /** @hidden */\n moreClicked(): void {\n this.moreClickedEvent.emit();\n }\n\n /** Removes all selected tokens */\n removeSelectedTokens(): void {\n const selectedElements = this._getActiveTokens();\n selectedElements.forEach((element) => element.onRemove.emit());\n }\n\n /** @hidden */\n private _handleArrowLeft(fromIndex: number): void {\n // if the leftmost visible token is selected, and there are moreTokensLeft, need to display a moreTokenLeft\n if (fromIndex === this.moreTokensLeft.length) {\n const poppedToken = this.moreTokensLeft.pop();\n if (poppedToken) {\n this._makeElementVisible(poppedToken.elementRef);\n }\n // and then hide any tokens from the right that no longer fit\n this._collapseTokens('right');\n\n this._cdRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _handleArrowRight(fromIndex: number): void {\n if (fromIndex === this.tokenList.length - this.moreTokensRight.length - 1 && this.moreTokensRight.length) {\n const poppedToken = this.moreTokensRight.pop();\n if (poppedToken) {\n this._makeElementVisible(poppedToken.elementRef);\n }\n // and then hide any tokens from the left that no longer fit\n this._collapseTokens('left');\n\n this._cdRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _collapseTokens(side?: string): void {\n if (this.compact || this.compactCollapse) {\n this._cdRef.detectChanges();\n this._viewContainer.forEach((viewContainer) => viewContainer.clear());\n this.tokenList.forEach((token) => token._viewContainer.createEmbeddedView(token._content));\n\n let elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n let combinedTokenWidth = this.getCombinedTokenWidth(); // the combined width of all tokens, the \"____ more\" text, and the input\n let i = 0;\n /*\n When resizing, we want to collapse the tokens on the left first. However when the user is navigating through\n a group of overflowing tokens using the arrow left key, we may need to hide tokens on the right. So if this\n function has been called with the param 'right' it will collapse tokens from the right side of the list rather\n than the (default) left side.\n */\n if (side === 'right') {\n i = this.tokenList.length - 1;\n }\n while (combinedTokenWidth > elementWidth && (side === 'right' ? i >= 0 : i < this.tokenList.length)) {\n // loop through the tokens and hide them until the combinedTokenWidth fits in the elementWidth\n const token = this.tokenList.find((item, index) => index === i);\n const moreTokens = side === 'right' ? this.moreTokensRight : this.moreTokensLeft;\n\n if (token) {\n if (moreTokens.indexOf(token) === -1) {\n moreTokens.push(token);\n }\n token.elementRef.nativeElement.style.display = 'none';\n }\n // get the new elementWidth and combinedTokenWidth as these will have changed after setting a token display to 'none'\n elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n combinedTokenWidth = this.getCombinedTokenWidth();\n side === 'right' ? i-- : i++;\n }\n\n this._cdRef.detectChanges();\n this._hiddenTokens.forEach((hiddenToken, index) => {\n hiddenToken._viewContainer.clear();\n this._viewContainer.get(index)?.createEmbeddedView(hiddenToken._content);\n });\n } else {\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _resetTokens(): void {\n this.moreTokensLeft = [];\n this.moreTokensRight = [];\n if (this.compact || this.compactCollapse) {\n this.tokenList.forEach((token) => {\n this._makeElementVisible(token.elementRef);\n });\n this._cdRef.markForCheck();\n this._collapseTokens();\n } else {\n this._getHiddenCozyTokenCount();\n }\n this.handleTokenClickSubscriptions();\n this.previousTokenCount = this.tokenList.length;\n this.tokenList.forEach((token) => token._setTotalCount(this.tokenList.length));\n }\n\n /** @hidden */\n private _getHiddenCozyTokenCount(): void {\n const elementLeft = this._elementRef.nativeElement.getBoundingClientRect().left;\n this.hiddenCozyTokenCount = 0;\n this.tokenList.forEach((token) => {\n if (\n token.tokenWrapperElement &&\n token.tokenWrapperElement.nativeElement.getBoundingClientRect().right < elementLeft\n ) {\n this.hiddenCozyTokenCount += 1;\n }\n });\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n private _handleCozyTokenCount(): void {\n // because justify-content breaks scrollbar, it cannot be used on cozy screens, so use JS to scroll to the end\n this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n this._getHiddenCozyTokenCount();\n if (this.hiddenCozyTokenCount > 0) {\n // need to do this again in case \"____ more\" text was added\n this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _makeElementVisible(elementRef: ElementRef): void {\n elementRef.nativeElement.style.display = 'inline-block';\n elementRef.nativeElement.style.visibility = 'visible';\n }\n\n private _unsubscribeClicks(): void {\n if (this.tokenListClickSubscriptions && this.tokenListClickSubscriptions.length) {\n this.tokenListClickSubscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n }\n }\n\n private _inputKeydownEvent(): void {\n this.input.elementRef().nativeElement.addEventListener('keydown', (event) => {\n this.handleKeyDown(event, this.tokenList.length);\n });\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and no key is being held down.*/\n private _basicSelected(token, index): void {\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n token.selected = true;\n this._ctrlPrevious = false;\n }\n\n /** @hidden Restart first and last elements for shift selection.*/\n private resetFirstAndLastElement(): void {\n const reset = !this.tokenList.some((token) => token.selected);\n if (reset) {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n }\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and the shift key is being held down.*/\n private _shiftSelected(index): void {\n if (!this._firstElementInSelection && !this._lastElementInSelection) {\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n this._directionShiftIsRight = null;\n } else {\n if (this._firstElementInSelection && index < this._firstElementInSelection) {\n if (this._directionShiftIsRight) {\n this._lastElementInSelection = this._firstElementInSelection;\n }\n this._directionShiftIsRight = false;\n this._firstElementInSelection = index;\n } else if (this._lastElementInSelection && index > this._lastElementInSelection) {\n if (!this._directionShiftIsRight) {\n this._firstElementInSelection = this._lastElementInSelection;\n }\n this._directionShiftIsRight = true;\n this._lastElementInSelection = index;\n }\n if (!this._directionShiftIsRight) {\n this._firstElementInSelection = index;\n } else if (this._directionShiftIsRight) {\n this._lastElementInSelection = index;\n }\n }\n\n this.tokenList.forEach((token, indexOfToken) => {\n token.selected =\n this._firstElementInSelection != null &&\n this._lastElementInSelection != null &&\n indexOfToken >= this._firstElementInSelection &&\n indexOfToken <= this._lastElementInSelection;\n });\n this._ctrlPrevious = false;\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and the control or meta key is being held down.*/\n private _ctrlSelected(token, index): void {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n const selected = token.selected;\n token.selected = true;\n if (selected) {\n token.selected = false;\n this.tokenList.forEach((element, indexOfToken) => {\n if (!this._firstElementInSelection) {\n if (element.selected) {\n this._firstElementInSelection = indexOfToken;\n }\n } else {\n this._lastElementInSelection = indexOfToken;\n }\n });\n if (index === this._lastElementInSelection) {\n this._lastElementInSelection = this._lastElementInSelection! - 1;\n }\n if (index === this._firstElementInSelection) {\n this._firstElementInSelection = this._firstElementInSelection! - 1;\n }\n }\n this._ctrlPrevious = true;\n }\n\n /** Get selected and focused tokens */\n private _getActiveTokens(): TokenComponent[] {\n return this.tokenList.filter((item) => item.selected || this._isTokenFocused(item));\n }\n\n /** @hidden */\n private _getFocusedTokenIndex(): number {\n return this.tokenList.toArray().findIndex((token) => this._isTokenFocused(token));\n }\n\n /** @hidden */\n private _isTokenFocused(token: TokenComponent): boolean {\n return token.tokenWrapperElement.nativeElement === document.activeElement;\n }\n\n /** @hidden */\n private _isInputFocused(): boolean {\n return document.activeElement === this.input.elementRef().nativeElement;\n }\n\n /** @hidden */\n private _tokensSelected(): boolean {\n return this.tokenList.some((t) => t.selected);\n }\n\n /** @hidden */\n private _getInputValue(): string {\n return this.input.elementRef().nativeElement.value;\n }\n\n /** @hidden */\n private _focusInput(): void {\n this.input.elementRef().nativeElement.focus();\n }\n\n /** @hidden */\n private _isControlKey(keyboardEvent: KeyboardEvent | MouseEvent): boolean {\n return keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n }\n\n /** @hidden */\n private _listenElementEvents(): void {\n merge(\n fromEvent<Event>(this.elementRef().nativeElement, 'focus', { capture: true }).pipe(\n filter((event) => (event['target'] as any)?.tagName === 'INPUT' && this.tokenizerFocusable),\n mapTo(true)\n ),\n fromEvent<Event>(this.elementRef().nativeElement, 'blur', { capture: true }).pipe(mapTo(false))\n )\n .pipe(\n // debounceTime is needed in order to filter subsequent focus-blur events, that happen simultaneously\n debounceTime(10),\n takeUntil(this._onDestroy$)\n )\n .subscribe((focused) => {\n this._tokenizerHasFocus = focused;\n this._cdRef.markForCheck();\n });\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n resizeObservable(this.elementRef().nativeElement)\n .pipe(debounceTime(60), takeUntil(this._onDestroy$))\n .subscribe(() => this.onResize());\n }\n}\n","<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n","import { Directive, ElementRef, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tokenizer-input]'\n})\nexport class TokenizerInputDirective implements OnInit, OnChanges, CssClassBuilder {\n /** user's custom classes */\n @Input()\n class: string;\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tokenizer__input', this.class];\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-tokenizer[compact], fd-token[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedTokenizerContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedTokenizerContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-tokenizer[compact], fd-token');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TokenComponent } from './token.component';\nimport { TokenizerComponent } from './tokenizer.component';\nimport { TokenizerInputDirective } from './token-input.directive';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { DeprecatedTokenizerContentDensityDirective } from './deprecated-tokenizer-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [\n TokenComponent,\n TokenizerComponent,\n TokenizerInputDirective,\n DeprecatedTokenizerContentDensityDirective\n ],\n imports: [CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule, ContentDensityModule],\n exports: [\n TokenComponent,\n TokenizerComponent,\n TokenizerInputDirective,\n DeprecatedTokenizerContentDensityDirective,\n ContentDensityModule\n ]\n})\nexport class TokenModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-token.mjs","sources":["../../../../../libs/core/src/lib/token/token.component.ts","../../../../../libs/core/src/lib/token/token.component.html","../../../../../libs/core/src/lib/token/tokenizer.component.ts","../../../../../libs/core/src/lib/token/tokenizer.component.html","../../../../../libs/core/src/lib/token/token-input.directive.ts","../../../../../libs/core/src/lib/token/deprecated-tokenizer-content-density.directive.ts","../../../../../libs/core/src/lib/token/token.module.ts","../../../../../libs/core/src/lib/token/fundamental-ngx-core-token.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\n/**\n * A token is used to represent contextualizing information.\n * They can be useful to show applied filters, selected values for form fields or object metadata.\n */\n@Component({\n selector: 'fd-token',\n templateUrl: './token.component.html',\n styleUrls: ['./token.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()]\n})\nexport class TokenComponent implements AfterViewInit, OnDestroy {\n /** Whether the token is disabled. */\n @Input()\n disabled = false;\n\n /** @hidden */\n @ViewChild('tokenWrapperElement')\n tokenWrapperElement: ElementRef;\n\n /** @hidden */\n @ViewChild('content')\n readonly _content: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: ViewContainerRef;\n\n private _selected = false;\n\n private _subscriptions = new Subscription();\n\n /** Whether the token is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(val: boolean) {\n if (this._selected !== val) {\n this._cdRef.markForCheck();\n }\n this._selected = val;\n }\n\n /** Whether the token is read-only. */\n @Input()\n readOnly = false;\n\n /**\n * @deprecated use i18n capabilities instead\n * label for close icon\n */\n @Input()\n deleteButtonLabel: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * role description for token\n */\n @Input()\n ariaRoleDescription: string;\n\n /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onCloseClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n /** Emitted when token should be removed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onRemove: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emitted when a token is clicked. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenClick = new EventEmitter<MouseEvent>();\n\n /** Emitted when a there's a keydown registered on the token. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenKeydown = new EventEmitter<KeyboardEvent>();\n\n /** @hidden */\n totalCount: number;\n\n constructor(\n public elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewContainer.createEmbeddedView(this._content);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n closeClickHandler(event?): void {\n if (event) {\n event.stopPropagation();\n if (!this.disabled) {\n this.onCloseClick.emit(event);\n }\n }\n }\n\n /** @hidden */\n tokenClickHandler(event): void {\n this.onTokenClick.emit(event);\n }\n\n /** @hidden */\n tokenKeydownHandler(event): void {\n this.onTokenKeydown.emit(event);\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n this.onTokenClick.emit(event);\n }\n }\n\n /** @hidden */\n _setTotalCount(count: number): void {\n this.totalCount = count;\n this._cdRef.markForCheck();\n }\n}\n","<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n (keydown)=\"tokenKeydownHandler($event)\"\n [attr.aria-setsize]=\"totalCount\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { A, BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { fromEvent, merge, Subject, Subscription } from 'rxjs';\nimport { filter, mapTo, takeUntil, debounceTime } from 'rxjs/operators';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { applyCssClass, CssClassBuilder, KeyUtil, resizeObservable, RtlService } from '@fundamental-ngx/core/utils';\nimport { TokenComponent } from './token.component';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\n@Component({\n selector: 'fd-tokenizer',\n templateUrl: './tokenizer.component.html',\n styleUrls: ['./tokenizer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [contentDensityObserverProviders()]\n})\nexport class TokenizerComponent\n implements AfterViewInit, AfterContentInit, OnDestroy, CssClassBuilder, OnInit, OnChanges\n{\n /** user's custom classes */\n @Input()\n class: string;\n\n /** Disables possibility to remove tokens by keyboard */\n @Input()\n disableKeyboardDeletion = false;\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TokenComponent))\n tokenList: QueryList<TokenComponent>;\n\n /** @hidden */\n @ContentChild(forwardRef(() => FormControlComponent))\n input: FormControlComponent;\n\n /** @hidden */\n @ViewChild('tokenizerInner')\n tokenizerInnerEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('moreElement')\n moreElement: ElementRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('inputGroupAddOn') set content(content: ElementRef<HTMLElement>) {\n this.inputGroupAddonEl = content;\n }\n\n /** @hidden */\n @ViewChildren('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: QueryList<ViewContainerRef>;\n\n /** @hidden */\n get _hiddenTokens(): TokenComponent[] {\n return this.tokenList.filter((token) => token.elementRef.nativeElement.style.display === 'none');\n }\n\n /**\n * Component is in compact mode, determined by the consumer\n */\n get compact(): boolean {\n return this._contentDensityObserver.isCompact;\n }\n\n /** @hidden */\n inputGroupAddonEl: ElementRef;\n\n /** Whether to use cozy visuals but compact collapsing behavior. */\n @Input()\n compactCollapse = false;\n\n /** Whether tokenizer should have fake focus indicator, when input is focused inside*/\n @Input()\n tokenizerFocusable = true;\n\n /** The value for the tokenizer input */\n @Input()\n inputValue: string;\n\n /** Icon of the button on the right of the input field. */\n @Input()\n glyph: string;\n\n /** Word to use for when there are extra tokens. */\n @Input()\n moreTerm = 'more';\n\n /** @hidden */\n @Input()\n open: boolean;\n\n /** Event emitted when the search term changes. Use *$event* to access the new term. */\n @Output()\n readonly moreClickedEvent: EventEmitter<any> = new EventEmitter<any>();\n\n /** @hidden */\n previousElementWidth: number;\n\n /** @hidden */\n moreTokensLeft: Array<TokenComponent> = [];\n\n /** @hidden */\n moreTokensRight: Array<TokenComponent> = [];\n\n /** @hidden */\n previousTokenCount: number;\n\n /** @hidden */\n tokenListChangesSubscription: Subscription;\n\n /** @hidden */\n tokenListClickSubscriptions: Subscription[] = [];\n\n /** @hidden */\n hiddenCozyTokenCount = 0;\n\n /** @hidden Used to add focus to tokenizer element */\n _tokenizerHasFocus = false;\n\n /** @hidden */\n _showOverflowPopover = true;\n\n /** @hidden */\n /* Variable which will keep the index of the first token pressed in the tokenizer*/\n private _firstElementInSelection: number | null = null;\n\n /** @hidden */\n /* Variable which will keep the index of the last token pressed in the tokenizer*/\n private _lastElementInSelection: number | null = null;\n\n /** @hidden */\n /* Flag which will say if the last keyboard and click operation they used was using control*/\n private _ctrlPrevious: boolean;\n\n /** @hidden */\n /* Flag which will say if they held shift and clicked highlighting elements before or*/\n private _directionShiftIsRight: boolean | null = null;\n\n /** An RxJS Subject that will kill the data stream upon destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n constructor(\n readonly _contentDensityObserver: ContentDensityObserver,\n private _elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _rtlService: RtlService,\n private _renderer: Renderer2\n ) {\n this._renderer.listen('window', 'click', (e: Event) => {\n if (this.elementRef().nativeElement.contains(e.target) === false) {\n this.tokenList.forEach((token) => {\n token.selected = false;\n });\n }\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.input && this.input.elementRef()) {\n this._inputKeydownEvent();\n }\n // watch for changes to the tokenList and attempt to expand/collapse tokens as needed\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this.tokenListChangesSubscription = this.tokenList.changes.subscribe(() => {\n this._resetTokens();\n });\n this.tokenList.forEach((token) => {\n this.tokenListChangesSubscription.add(\n token.onCloseClick.subscribe(() => {\n this._resetTokens();\n })\n );\n });\n if (!this.compact && !this.compactCollapse) {\n this._handleCozyTokenCount();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenElementEvents();\n this.previousElementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this._listenOnResize();\n this.onResize();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._unsubscribeClicks();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [this.class];\n }\n\n elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n handleTokenClickSubscriptions(): void {\n this._unsubscribeClicks();\n this.tokenList.forEach((token, index) => {\n if (token.tokenWrapperElement) {\n token.tokenWrapperElement.nativeElement.tabIndex = -1;\n }\n this.tokenListClickSubscriptions.push(\n token.onTokenClick.subscribe((event) => {\n event.stopPropagation();\n this.focusTokenElement(index);\n if (this._isControlKey(event)) {\n this._ctrlSelected(token, index);\n } else if (!event.shiftKey || this._ctrlPrevious) {\n this._basicSelected(token, index);\n } else if (event.shiftKey) {\n this.resetFirstAndLastElement();\n this._shiftSelected(index);\n }\n })\n );\n this.tokenListClickSubscriptions.push(\n token.onTokenKeydown.subscribe((event) => {\n this.handleKeyDown(event, index);\n })\n );\n });\n }\n\n /** @hidden */\n focusTokenElement(newIndex: number): HTMLElement | undefined {\n let elementToFocus: HTMLElement | undefined;\n const tokenListArray: TokenComponent[] = this.tokenList.toArray();\n if (tokenListArray[newIndex]) {\n elementToFocus = tokenListArray[newIndex].tokenWrapperElement.nativeElement;\n // element needs tabindex in order to be focused\n elementToFocus!.focus();\n }\n\n return elementToFocus;\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDown(keyboardEvent: KeyboardEvent): void {\n if (\n KeyUtil.isKeyCode(keyboardEvent, [DELETE, BACKSPACE]) &&\n (!this._isInputFocused() || this._tokensSelected()) &&\n !this.disableKeyboardDeletion\n ) {\n const selectedElements = this._getActiveTokens();\n const focusedTokenIndex = this._getFocusedTokenIndex();\n selectedElements.forEach((element) => element.onCloseClick.emit());\n if (selectedElements.length > 0) {\n if (KeyUtil.isKeyCode(keyboardEvent, DELETE)) {\n this._focusInput();\n } else {\n this.focusTokenElement(focusedTokenIndex - 1);\n }\n }\n }\n\n if (\n KeyUtil.isKeyCode(keyboardEvent, BACKSPACE) &&\n this._isInputFocused() &&\n !this._getInputValue() &&\n !this.disableKeyboardDeletion\n ) {\n this.focusTokenElement(this.tokenList.length - 1);\n }\n }\n\n /** @hidden */\n onResize(): void {\n if (this._elementRef) {\n const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this._resetTokens();\n this.previousElementWidth = elementWidth;\n if (!this.compact && !this.compactCollapse) {\n this._handleCozyTokenCount();\n }\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent, fromIndex: number): void {\n let newIndex: number | undefined;\n const rtl = this._rtlService && this._rtlService.rtl ? this._rtlService.rtl.getValue() : false;\n if (KeyUtil.isKeyCode(event, SPACE) && !this._isInputFocused()) {\n const token = this.tokenList.find((_, index) => index === fromIndex);\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n token && (token.selected = !token.selected);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._focusInput();\n } else if ((KeyUtil.isKeyCode(event, LEFT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, RIGHT_ARROW) && rtl)) {\n this._handleArrowLeft(fromIndex);\n newIndex = fromIndex - 1;\n } else if ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl)) {\n this._handleArrowRight(fromIndex);\n newIndex = fromIndex + 1;\n } else if (KeyUtil.isKeyCode(event, A) && !this._getInputValue() && this._isControlKey(event)) {\n event.preventDefault();\n this.tokenList.forEach((token) => (token.selected = true));\n }\n if (\n newIndex === this.tokenList.length &&\n ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl))\n ) {\n this._focusInput();\n } else if (newIndex! > this.tokenList.length - this.moreTokensRight.length && this._isInputFocused()) {\n this.focusTokenElement(newIndex! - this.moreTokensRight.length);\n } else if (newIndex || newIndex === 0) {\n this.focusTokenElement(newIndex);\n }\n }\n\n /** @hidden */\n getCombinedTokenWidth(): number {\n let totalTokenWidth = 0;\n // get the width of each token\n this.tokenList.forEach((token) => {\n totalTokenWidth = totalTokenWidth + token.elementRef.nativeElement.getBoundingClientRect().width;\n });\n // add input width\n if (this.input && this.input.elementRef()) {\n totalTokenWidth = totalTokenWidth + this.input.elementRef().nativeElement.getBoundingClientRect().width;\n }\n // add the width of the \"____ more\" element\n if (this.moreTokensLeft.length > 0 && this.moreElement && this.moreElement.nativeElement) {\n totalTokenWidth = totalTokenWidth + this.moreElement.nativeElement.getBoundingClientRect().width;\n }\n // add the input group addon\n if (this.inputGroupAddonEl && this.inputGroupAddonEl.nativeElement) {\n totalTokenWidth = totalTokenWidth + this.inputGroupAddonEl.nativeElement.getBoundingClientRect().width;\n }\n\n return totalTokenWidth;\n }\n\n /** @hidden */\n moreClicked(): void {\n this.moreClickedEvent.emit();\n }\n\n /** Removes all selected tokens */\n removeSelectedTokens(): void {\n const selectedElements = this._getActiveTokens();\n selectedElements.forEach((element) => element.onRemove.emit());\n }\n\n /** @hidden */\n private _handleArrowLeft(fromIndex: number): void {\n // if the leftmost visible token is selected, and there are moreTokensLeft, need to display a moreTokenLeft\n if (fromIndex === this.moreTokensLeft.length) {\n const poppedToken = this.moreTokensLeft.pop();\n if (poppedToken) {\n this._makeElementVisible(poppedToken.elementRef);\n }\n // and then hide any tokens from the right that no longer fit\n this._collapseTokens('right');\n\n this._cdRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _handleArrowRight(fromIndex: number): void {\n if (fromIndex === this.tokenList.length - this.moreTokensRight.length - 1 && this.moreTokensRight.length) {\n const poppedToken = this.moreTokensRight.pop();\n if (poppedToken) {\n this._makeElementVisible(poppedToken.elementRef);\n }\n // and then hide any tokens from the left that no longer fit\n this._collapseTokens('left');\n\n this._cdRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _collapseTokens(side?: string): void {\n if (this.compact || this.compactCollapse) {\n this._cdRef.detectChanges();\n this._viewContainer.forEach((viewContainer) => viewContainer.clear());\n this.tokenList.forEach((token) => token._viewContainer.createEmbeddedView(token._content));\n\n let elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n let combinedTokenWidth = this.getCombinedTokenWidth(); // the combined width of all tokens, the \"____ more\" text, and the input\n let i = 0;\n /*\n When resizing, we want to collapse the tokens on the left first. However when the user is navigating through\n a group of overflowing tokens using the arrow left key, we may need to hide tokens on the right. So if this\n function has been called with the param 'right' it will collapse tokens from the right side of the list rather\n than the (default) left side.\n */\n if (side === 'right') {\n i = this.tokenList.length - 1;\n }\n while (combinedTokenWidth > elementWidth && (side === 'right' ? i >= 0 : i < this.tokenList.length)) {\n // loop through the tokens and hide them until the combinedTokenWidth fits in the elementWidth\n const token = this.tokenList.find((item, index) => index === i);\n const moreTokens = side === 'right' ? this.moreTokensRight : this.moreTokensLeft;\n\n if (token) {\n if (moreTokens.indexOf(token) === -1) {\n moreTokens.push(token);\n }\n token.elementRef.nativeElement.style.display = 'none';\n }\n // get the new elementWidth and combinedTokenWidth as these will have changed after setting a token display to 'none'\n elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n combinedTokenWidth = this.getCombinedTokenWidth();\n side === 'right' ? i-- : i++;\n }\n\n this._cdRef.detectChanges();\n this._hiddenTokens.forEach((hiddenToken, index) => {\n hiddenToken._viewContainer.clear();\n this._viewContainer.get(index)?.createEmbeddedView(hiddenToken._content);\n });\n } else {\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _resetTokens(): void {\n this.moreTokensLeft = [];\n this.moreTokensRight = [];\n if (this.compact || this.compactCollapse) {\n this.tokenList.forEach((token) => {\n this._makeElementVisible(token.elementRef);\n });\n this._cdRef.markForCheck();\n this._collapseTokens();\n } else {\n this._getHiddenCozyTokenCount();\n }\n this.handleTokenClickSubscriptions();\n this.previousTokenCount = this.tokenList.length;\n this.tokenList.forEach((token) => token._setTotalCount(this.tokenList.length));\n }\n\n /** @hidden */\n private _getHiddenCozyTokenCount(): void {\n const elementLeft = this._elementRef.nativeElement.getBoundingClientRect().left;\n this.hiddenCozyTokenCount = 0;\n this.tokenList.forEach((token) => {\n if (\n token.tokenWrapperElement &&\n token.tokenWrapperElement.nativeElement.getBoundingClientRect().right < elementLeft\n ) {\n this.hiddenCozyTokenCount += 1;\n }\n });\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n private _handleCozyTokenCount(): void {\n // because justify-content breaks scrollbar, it cannot be used on cozy screens, so use JS to scroll to the end\n this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n this._getHiddenCozyTokenCount();\n if (this.hiddenCozyTokenCount > 0) {\n // need to do this again in case \"____ more\" text was added\n this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _makeElementVisible(elementRef: ElementRef): void {\n elementRef.nativeElement.style.display = 'inline-block';\n elementRef.nativeElement.style.visibility = 'visible';\n }\n\n private _unsubscribeClicks(): void {\n if (this.tokenListClickSubscriptions && this.tokenListClickSubscriptions.length) {\n this.tokenListClickSubscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n }\n }\n\n private _inputKeydownEvent(): void {\n this.input.elementRef().nativeElement.addEventListener('keydown', (event) => {\n this.handleKeyDown(event, this.tokenList.length);\n });\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and no key is being held down.*/\n private _basicSelected(token, index): void {\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n token.selected = true;\n this._ctrlPrevious = false;\n }\n\n /** @hidden Restart first and last elements for shift selection.*/\n private resetFirstAndLastElement(): void {\n const reset = !this.tokenList.some((token) => token.selected);\n if (reset) {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n }\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and the shift key is being held down.*/\n private _shiftSelected(index): void {\n if (!this._firstElementInSelection && !this._lastElementInSelection) {\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n this._directionShiftIsRight = null;\n } else {\n if (this._firstElementInSelection && index < this._firstElementInSelection) {\n if (this._directionShiftIsRight) {\n this._lastElementInSelection = this._firstElementInSelection;\n }\n this._directionShiftIsRight = false;\n this._firstElementInSelection = index;\n } else if (this._lastElementInSelection && index > this._lastElementInSelection) {\n if (!this._directionShiftIsRight) {\n this._firstElementInSelection = this._lastElementInSelection;\n }\n this._directionShiftIsRight = true;\n this._lastElementInSelection = index;\n }\n if (!this._directionShiftIsRight) {\n this._firstElementInSelection = index;\n } else if (this._directionShiftIsRight) {\n this._lastElementInSelection = index;\n }\n }\n\n this.tokenList.forEach((token, indexOfToken) => {\n token.selected =\n this._firstElementInSelection != null &&\n this._lastElementInSelection != null &&\n indexOfToken >= this._firstElementInSelection &&\n indexOfToken <= this._lastElementInSelection;\n });\n this._ctrlPrevious = false;\n }\n\n /** @hidden Method which handles what happens to token when it is clicked and the control or meta key is being held down.*/\n private _ctrlSelected(token, index): void {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n const selected = token.selected;\n token.selected = true;\n if (selected) {\n token.selected = false;\n this.tokenList.forEach((element, indexOfToken) => {\n if (!this._firstElementInSelection) {\n if (element.selected) {\n this._firstElementInSelection = indexOfToken;\n }\n } else {\n this._lastElementInSelection = indexOfToken;\n }\n });\n if (index === this._lastElementInSelection) {\n this._lastElementInSelection = this._lastElementInSelection! - 1;\n }\n if (index === this._firstElementInSelection) {\n this._firstElementInSelection = this._firstElementInSelection! - 1;\n }\n }\n this._ctrlPrevious = true;\n }\n\n /** Get selected and focused tokens */\n private _getActiveTokens(): TokenComponent[] {\n return this.tokenList.filter((item) => item.selected || this._isTokenFocused(item));\n }\n\n /** @hidden */\n private _getFocusedTokenIndex(): number {\n return this.tokenList.toArray().findIndex((token) => this._isTokenFocused(token));\n }\n\n /** @hidden */\n private _isTokenFocused(token: TokenComponent): boolean {\n return token.tokenWrapperElement.nativeElement === document.activeElement;\n }\n\n /** @hidden */\n private _isInputFocused(): boolean {\n return document.activeElement === this.input.elementRef().nativeElement;\n }\n\n /** @hidden */\n private _tokensSelected(): boolean {\n return this.tokenList.some((t) => t.selected);\n }\n\n /** @hidden */\n private _getInputValue(): string {\n return this.input.elementRef().nativeElement.value;\n }\n\n /** @hidden */\n private _focusInput(): void {\n this.input.elementRef().nativeElement.focus();\n }\n\n /** @hidden */\n private _isControlKey(keyboardEvent: KeyboardEvent | MouseEvent): boolean {\n return keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n }\n\n /** @hidden */\n private _listenElementEvents(): void {\n merge(\n fromEvent<Event>(this.elementRef().nativeElement, 'focus', { capture: true }).pipe(\n filter((event) => (event['target'] as any)?.tagName === 'INPUT' && this.tokenizerFocusable),\n mapTo(true)\n ),\n fromEvent<Event>(this.elementRef().nativeElement, 'blur', { capture: true }).pipe(mapTo(false))\n )\n .pipe(\n // debounceTime is needed in order to filter subsequent focus-blur events, that happen simultaneously\n debounceTime(10),\n takeUntil(this._onDestroy$)\n )\n .subscribe((focused) => {\n this._tokenizerHasFocus = focused;\n this._cdRef.markForCheck();\n });\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n resizeObservable(this.elementRef().nativeElement)\n .pipe(debounceTime(60), takeUntil(this._onDestroy$))\n .subscribe(() => this.onResize());\n }\n}\n","<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <div role=\"listbox\">\n <ng-content select=\"fd-token\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n [attr.aria-label]=\"token.deleteButtonLabel || ('coreToken.deleteButtonLabel' | fdTranslate)\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n role=\"button\"\n tabindex=\"0\"\n >\n <ng-container *ngIf=\"compact || compactCollapse\">\n {{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}\n </ng-container>\n <ng-container *ngIf=\"!compact && !compactCollapse\"> {{ hiddenCozyTokenCount }} {{ moreTerm }} </ng-container>\n </span>\n</ng-template>\n","import { Directive, ElementRef, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tokenizer-input]'\n})\nexport class TokenizerInputDirective implements OnInit, OnChanges, CssClassBuilder {\n /** user's custom classes */\n @Input()\n class: string;\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tokenizer__input', this.class];\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","import { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\nimport { Directive, forwardRef } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-tokenizer[compact], fd-token[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedTokenizerContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedTokenizerContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-tokenizer[compact], fd-token');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TokenComponent } from './token.component';\nimport { TokenizerComponent } from './tokenizer.component';\nimport { TokenizerInputDirective } from './token-input.directive';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { DeprecatedTokenizerContentDensityDirective } from './deprecated-tokenizer-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { I18nModule } from '@fundamental-ngx/i18n';\n\n@NgModule({\n declarations: [\n TokenComponent,\n TokenizerComponent,\n TokenizerInputDirective,\n DeprecatedTokenizerContentDensityDirective\n ],\n imports: [\n CommonModule,\n InputGroupModule,\n ButtonModule,\n PopoverModule,\n ListModule,\n ContentDensityModule,\n I18nModule\n ],\n exports: [\n TokenComponent,\n TokenizerComponent,\n TokenizerInputDirective,\n DeprecatedTokenizerContentDensityDirective,\n ContentDensityModule\n ]\n})\nexport class TokenModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAoBA;;;;MAYa,cAAc;IA2EvB,YACW,UAAsB,EACrB,MAAyB,EACxB,uBAA+C;QAFjD,eAAU,GAAV,UAAU,CAAY;QACrB,WAAM,GAAN,MAAM,CAAmB;QACxB,4BAAuB,GAAvB,uBAAuB,CAAwB;;QA3E5D,aAAQ,GAAG,KAAK,CAAC;QAcT,cAAS,GAAG,KAAK,CAAC;QAElB,mBAAc,GAAG,IAAI,YAAY,EAAE,CAAC;;QAiB5C,aAAQ,GAAG,KAAK,CAAC;;QAmBR,iBAAY,GAA6B,IAAI,YAAY,EAAc,CAAC;;QAKxE,aAAQ,GAAuB,IAAI,YAAY,EAAQ,CAAC;;;QAKjE,iBAAY,GAAG,IAAI,YAAY,EAAc,CAAC;;;QAK9C,mBAAc,GAAG,IAAI,YAAY,EAAiB,CAAC;KAS/C;;IAzDJ,IACI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,GAAY;QACrB,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;KACxB;;IAkDD,eAAe;QACX,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzD;;IAGD,WAAW;QACP,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACrC;;IAGD,iBAAiB,CAAC,KAAM;QACpB,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjC;SACJ;KACJ;;IAGD,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;;IAGD,mBAAmB,CAAC,KAAK;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;KACJ;;IAGD,cAAc,CAAC,KAAa;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KAC9B;;2GAtHQ,cAAc;+FAAd,cAAc,sUAFZ,CAAC,+BAA+B,EAAE,CAAC,yTAgBV,gBAAgB,6BC9CxD,ihCA+BA;2FDCa,cAAc;kBAR1B,SAAS;+BACI,UAAU,iBAGL,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,aACpC,CAAC,+BAA+B,EAAE,CAAC;sKAK9C,QAAQ;sBADP,KAAK;gBAKN,mBAAmB;sBADlB,SAAS;uBAAC,qBAAqB;gBAKvB,QAAQ;sBADhB,SAAS;uBAAC,SAAS;gBAKX,cAAc;sBADtB,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;gBASlD,QAAQ;sBADX,KAAK;gBAcN,QAAQ;sBADP,KAAK;gBAQN,iBAAiB;sBADhB,KAAK;gBAQN,mBAAmB;sBADlB,KAAK;gBAMG,YAAY;sBAFpB,MAAM;gBAOE,QAAQ;sBAFhB,MAAM;;;QAOP,YAAY;sBAFX,MAAM;;;QAOP,cAAc;sBAFb,MAAM;;;ME3DE,kBAAkB;IA6H3B,YACa,uBAA+C,EAChD,WAAuB,EACvB,MAAyB,EACb,WAAuB,EACnC,SAAoB;QAJnB,4BAAuB,GAAvB,uBAAuB,CAAwB;QAChD,gBAAW,GAAX,WAAW,CAAY;QACvB,WAAM,GAAN,MAAM,CAAmB;QACb,gBAAW,GAAX,WAAW,CAAY;QACnC,cAAS,GAAT,SAAS,CAAW;;QAzHhC,4BAAuB,GAAG,KAAK,CAAC;;QA4ChC,oBAAe,GAAG,KAAK,CAAC;;QAIxB,uBAAkB,GAAG,IAAI,CAAC;;QAY1B,aAAQ,GAAG,MAAM,CAAC;;QAQT,qBAAgB,GAAsB,IAAI,YAAY,EAAO,CAAC;;QAMvE,mBAAc,GAA0B,EAAE,CAAC;;QAG3C,oBAAe,GAA0B,EAAE,CAAC;;QAS5C,gCAA2B,GAAmB,EAAE,CAAC;;QAGjD,yBAAoB,GAAG,CAAC,CAAC;;QAGzB,uBAAkB,GAAG,KAAK,CAAC;;QAG3B,yBAAoB,GAAG,IAAI,CAAC;;;QAIpB,6BAAwB,GAAkB,IAAI,CAAC;;;QAI/C,4BAAuB,GAAkB,IAAI,CAAC;;;QAQ9C,2BAAsB,GAAmB,IAAI,CAAC;;QAGrC,gBAAW,GAAkB,IAAI,OAAO,EAAQ,CAAC;QAS9D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAQ;YAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;gBAC9D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;oBACzB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;iBAC1B,CAAC,CAAC;aACN;SACJ,CAAC,CAAC;KACN;;IA/GD,IAAkC,OAAO,CAAC,OAAgC;QACtE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;KACpC;;IAOD,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;KACpG;;;;IAKD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;KACjD;;IAgGD,eAAe;QACX,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;;QAED,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,CAAC;SACnD;QACD,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;YACjE,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;YACzB,IAAI,CAAC,4BAA4B,CAAC,GAAG,CACjC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;gBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB,CAAC,CACL,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;KACJ;;IAGD,kBAAkB;QACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QACzF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnB;;IAGD,WAAW;QACP,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,CAAC;SACnD;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;;IAGD,QAAQ;QACJ,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IAGD,WAAW;QACP,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;;;;IAOD,sBAAsB;QAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvB;IAED,UAAU;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;IAGD,6BAA6B;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK;YAChC,IAAI,KAAK,CAAC,mBAAmB,EAAE;gBAC3B,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aACzD;YACD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CACjC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK;gBAC/B,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBACpC;qBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;oBAC9C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBACrC;qBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;oBACvB,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC9B;aACJ,CAAC,CACL,CAAC;YACF,IAAI,CAAC,2BAA2B,CAAC,IAAI,CACjC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK;gBACjC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACpC,CAAC,CACL,CAAC;SACL,CAAC,CAAC;KACN;;IAGD,iBAAiB,CAAC,QAAgB;QAC9B,IAAI,cAAuC,CAAC;QAC5C,MAAM,cAAc,GAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE;YAC1B,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC;;YAE5E,cAAe,CAAC,KAAK,EAAE,CAAC;SAC3B;QAED,OAAO,cAAc,CAAC;KACzB;;IAID,OAAO,CAAC,aAA4B;QAChC,IACI,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;aACpD,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACnD,CAAC,IAAI,CAAC,uBAAuB,EAC/B;YACE,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACvD,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE;oBAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;iBACtB;qBAAM;oBACH,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;iBACjD;aACJ;SACJ;QAED,IACI,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC;YAC3C,IAAI,CAAC,eAAe,EAAE;YACtB,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,CAAC,IAAI,CAAC,uBAAuB,EAC/B;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACrD;KACJ;;IAGD,QAAQ;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAClF,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAChC;SACJ;KACJ;;IAGD,aAAa,CAAC,KAAoB,EAAE,SAAiB;QACjD,IAAI,QAA4B,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;QAC/F,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,aAAa;gBACjC,IAAI,aAAa,KAAK,KAAK,EAAE;oBACzB,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;iBAClC;aACJ,CAAC,CAAC;YACH,KAAK,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;aAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE;YACzG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACjC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;SAC5B;aAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;YACzG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAClC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;SAC5B;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YAC3F,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;SAC9D;QACD,IACI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;aACjC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,EACpG;YACE,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;aAAM,IAAI,QAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAClG,IAAI,CAAC,iBAAiB,CAAC,QAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACnE;aAAM,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACpC;KACJ;;IAGD,qBAAqB;QACjB,IAAI,eAAe,GAAG,CAAC,CAAC;;QAExB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;YACzB,eAAe,GAAG,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;SACpG,CAAC,CAAC;;QAEH,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvC,eAAe,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;SAC3G;;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YACtF,eAAe,GAAG,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;SACpG;;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;YAChE,eAAe,GAAG,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;SAC1G;QAED,OAAO,eAAe,CAAC;KAC1B;;IAGD,WAAW;QACP,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAChC;;IAGD,oBAAoB;QAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjD,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;;IAGO,gBAAgB,CAAC,SAAiB;;QAEtC,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACpD;;YAED,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;SAC/B;KACJ;;IAGO,iBAAiB,CAAC,SAAiB;QACvC,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YACtG,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;YAC/C,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACpD;;YAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAE7B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;SAC/B;KACJ;;IAGO,eAAe,CAAC,IAAa;QACjC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE3F,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAChF,IAAI,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,CAAC;;;;;;;YAOV,IAAI,IAAI,KAAK,OAAO,EAAE;gBAClB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC;YACD,OAAO,kBAAkB,GAAG,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;;gBAEjG,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;gBAChE,MAAM,UAAU,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;gBAEjF,IAAI,KAAK,EAAE;oBACP,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;wBAClC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC1B;oBACD,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;iBACzD;;gBAED,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;gBAC5E,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAClD,IAAI,KAAK,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;aAChC;YAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK;;gBAC1C,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBACnC,MAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,0CAAE,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aAC5E,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACnC;KACJ;;IAGO,YAAY;QAChB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;gBACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aAC9C,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;aAAM;YACH,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACnC;QACD,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;KAClF;;IAGO,wBAAwB;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;YACzB,IACI,KAAK,CAAC,mBAAmB;gBACzB,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,WAAW,EACrF;gBACE,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;aAClC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;KAC/B;;IAGO,qBAAqB;;QAEzB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;QACjG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE;;YAE/B,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;YACjG,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACnC;KACJ;;IAGO,mBAAmB,CAAC,UAAsB;QAC9C,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QACxD,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;KACzD;IAEO,kBAAkB;QACtB,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE;YAC7E,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,YAAY;gBAClD,YAAY,CAAC,WAAW,EAAE,CAAC;aAC9B,CAAC,CAAC;SACN;KACJ;IAEO,kBAAkB;QACtB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK;YACpE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACpD,CAAC,CAAC;KACN;;IAGO,cAAc,CAAC,KAAK,EAAE,KAAK;QAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,aAAa;YACjC,IAAI,aAAa,KAAK,KAAK,EAAE;gBACzB,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;aAClC;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;;IAGO,wBAAwB;QAC5B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACvC;KACJ;;IAGO,cAAc,CAAC,KAAK;QACxB,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACjE,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;aAAM;YACH,IAAI,IAAI,CAAC,wBAAwB,IAAI,KAAK,GAAG,IAAI,CAAC,wBAAwB,EAAE;gBACxE,IAAI,IAAI,CAAC,sBAAsB,EAAE;oBAC7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC;iBAChE;gBACD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACpC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;aACzC;iBAAM,IAAI,IAAI,CAAC,uBAAuB,IAAI,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE;gBAC7E,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBAC9B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,CAAC;iBAChE;gBACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;aACxC;YACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC9B,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;aACzC;iBAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBACpC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;aACxC;SACJ;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,YAAY;YACvC,KAAK,CAAC,QAAQ;gBACV,IAAI,CAAC,wBAAwB,IAAI,IAAI;oBACrC,IAAI,CAAC,uBAAuB,IAAI,IAAI;oBACpC,YAAY,IAAI,IAAI,CAAC,wBAAwB;oBAC7C,YAAY,IAAI,IAAI,CAAC,uBAAuB,CAAC;SACpD,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;;IAGO,aAAa,CAAC,KAAK,EAAE,KAAK;QAC9B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,QAAQ,EAAE;YACV,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY;gBACzC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAChC,IAAI,OAAO,CAAC,QAAQ,EAAE;wBAClB,IAAI,CAAC,wBAAwB,GAAG,YAAY,CAAC;qBAChD;iBACJ;qBAAM;oBACH,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC;iBAC/C;aACJ,CAAC,CAAC;YACH,IAAI,KAAK,KAAK,IAAI,CAAC,uBAAuB,EAAE;gBACxC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAwB,GAAG,CAAC,CAAC;aACpE;YACD,IAAI,KAAK,KAAK,IAAI,CAAC,wBAAwB,EAAE;gBACzC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAyB,GAAG,CAAC,CAAC;aACtE;SACJ;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC7B;;IAGO,gBAAgB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;KACvF;;IAGO,qBAAqB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;KACrF;;IAGO,eAAe,CAAC,KAAqB;QACzC,OAAO,KAAK,CAAC,mBAAmB,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,CAAC;KAC7E;;IAGO,eAAe;QACnB,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC;KAC3E;;IAGO,eAAe;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;KACjD;;IAGO,cAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;KACtD;;IAGO,WAAW;QACf,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACjD;;IAGO,aAAa,CAAC,aAAyC;QAC3D,OAAO,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;KACzD;;IAGO,oBAAoB;QACxB,KAAK,CACD,SAAS,CAAQ,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC9E,MAAM,CAAC,CAAC,KAAK,eAAM,OAAA,CAAA,MAAA,KAAK,CAAC,QAAQ,CAAS,0CAAE,OAAO,MAAK,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAA,EAAA,CAAC,EAC3F,KAAK,CAAC,IAAI,CAAC,CACd,EACD,SAAS,CAAQ,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAClG;aACI,IAAI;;QAED,YAAY,CAAC,EAAE,CAAC,EAChB,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAC9B;aACA,SAAS,CAAC,CAAC,OAAO;YACf,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC9B,CAAC,CAAC;KACV;;IAGO,eAAe;QACnB,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC;aAC5C,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnD,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACzC;;+GA7oBQ,kBAAkB;mGAAlB,kBAAkB,6XAFhB,CAAC,+BAA+B,EAAE,CAAC,gGAkBf,oBAAoB,sGAJjB,cAAc,+YAqBT,gBAAgB,kDC1E3D,kqFAqEA;AD0KI;IALC,aAAa;;;;gEAOb;2FAxMQ,kBAAkB;kBAR9B,SAAS;+BACI,cAAc,iBAGT,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,aACpC,CAAC,+BAA+B,EAAE,CAAC;;;8BAmIzC,QAAQ;;yBA5Hb,KAAK;sBADJ,KAAK;gBAKN,uBAAuB;sBADtB,KAAK;gBAKN,SAAS;sBADR,eAAe;uBAAC,UAAU,CAAC,MAAM,cAAc,CAAC;gBAKjD,KAAK;sBADJ,YAAY;uBAAC,UAAU,CAAC,MAAM,oBAAoB,CAAC;gBAKpD,gBAAgB;sBADf,SAAS;uBAAC,gBAAgB;gBAK3B,WAAW;sBADV,SAAS;uBAAC,aAAa;gBAIU,OAAO;sBAAxC,SAAS;uBAAC,iBAAiB;gBAMnB,cAAc;sBADtB,YAAY;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;gBAoBzD,eAAe;sBADd,KAAK;gBAKN,kBAAkB;sBADjB,KAAK;gBAKN,UAAU;sBADT,KAAK;gBAKN,KAAK;sBADJ,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,IAAI;sBADH,KAAK;gBAKG,gBAAgB;sBADxB,MAAM;;;;;;QA0HP,sBAAsB,MAoDtB,OAAO;sBADN,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEzR1B,uBAAuB;;IAehC,YAAoB,WAAuB;QAAvB,gBAAW,GAAX,WAAW,CAAY;KAAI;;;;;IAL/C,sBAAsB;QAClB,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9C;;IAMD,QAAQ;QACJ,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IAGD,WAAW;QACP,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IAGD,UAAU;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;oHA9BQ,uBAAuB;wGAAvB,uBAAuB;AAUhC;IALC,aAAa;;;;qEAOb;2FAZQ,uBAAuB;kBALnC,SAAS;mBAAC;;;oBAGP,QAAQ,EAAE,sBAAsB;iBACnC;iGAIG,KAAK;sBADJ,KAAK;;;;;;QAQN,sBAAsB;;MCNb,mDAAmD,0BAA0B;IACtF;QACI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KAC5C;;uIAHQ,0CAA0C;2HAA1C,0CAA0C,mEAPxC;QACP;YACI,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,UAAU,CAAC,MAAM,0CAA0C,CAAC;SAC5E;KACJ;2FAEQ,0CAA0C;kBAVtD,SAAS;mBAAC;;oBAEP,QAAQ,EAAE,0CAA0C;oBACpD,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,yBAAyB;4BAClC,WAAW,EAAE,UAAU,CAAC,gDAAgD,CAAC;yBAC5E;qBACJ;iBACJ;;;MCyBY,WAAW;;wGAAX,WAAW;yGAAX,WAAW,iBAtBhB,cAAc;QACd,kBAAkB;QAClB,uBAAuB;QACvB,0CAA0C,aAG1C,YAAY;QACZ,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,UAAU;QACV,oBAAoB;QACpB,UAAU,aAGV,cAAc;QACd,kBAAkB;QAClB,uBAAuB;QACvB,0CAA0C;QAC1C,oBAAoB;yGAGf,WAAW,YAjBX;YACL,YAAY;YACZ,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,UAAU;YACV,oBAAoB;YACpB,UAAU;SACb,EAMG,oBAAoB;2FAGf,WAAW;kBAxBvB,QAAQ;mBAAC;oBACN,YAAY,EAAE;wBACV,cAAc;wBACd,kBAAkB;wBAClB,uBAAuB;wBACvB,0CAA0C;qBAC7C;oBACD,OAAO,EAAE;wBACL,YAAY;wBACZ,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,UAAU;wBACV,oBAAoB;wBACpB,UAAU;qBACb;oBACD,OAAO,EAAE;wBACL,cAAc;wBACd,kBAAkB;wBAClB,uBAAuB;wBACvB,0CAA0C;wBAC1C,oBAAoB;qBACvB;iBACJ;;;ACpCD;;;;;;"}