@flitsmeister/design-system 2.2.36 → 3.0.1

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 (572) hide show
  1. package/README.md +55 -42
  2. package/dist/fm-button/fm-button-core.d.ts +25 -0
  3. package/dist/fm-button/fm-button-core.d.ts.map +1 -0
  4. package/dist/fm-button/fm-button-core.js +23 -0
  5. package/dist/fm-button/fm-button-core.js.map +1 -0
  6. package/dist/fm-button/fm-button.d.ts +83 -0
  7. package/dist/fm-button/fm-button.d.ts.map +1 -0
  8. package/dist/fm-button/fm-button.js +256 -0
  9. package/dist/fm-button/fm-button.js.map +1 -0
  10. package/dist/fm-button/fm-button.style.d.ts +2 -0
  11. package/dist/fm-button/fm-button.style.d.ts.map +1 -0
  12. package/dist/fm-button/fm-button.style.js +395 -0
  13. package/dist/fm-button/fm-button.style.js.map +1 -0
  14. package/dist/fm-dropdown/fm-dropdown-core.d.ts +34 -0
  15. package/dist/fm-dropdown/fm-dropdown-core.d.ts.map +1 -0
  16. package/dist/fm-dropdown/fm-dropdown-core.js +137 -0
  17. package/dist/fm-dropdown/fm-dropdown-core.js.map +1 -0
  18. package/dist/fm-dropdown/fm-dropdown-mobile.d.ts +11 -0
  19. package/dist/fm-dropdown/fm-dropdown-mobile.d.ts.map +1 -0
  20. package/dist/fm-dropdown/fm-dropdown-mobile.js +47 -0
  21. package/dist/fm-dropdown/fm-dropdown-mobile.js.map +1 -0
  22. package/dist/fm-dropdown/fm-dropdown.d.ts +107 -0
  23. package/dist/fm-dropdown/fm-dropdown.d.ts.map +1 -0
  24. package/dist/fm-dropdown/fm-dropdown.js +727 -0
  25. package/dist/fm-dropdown/fm-dropdown.js.map +1 -0
  26. package/dist/fm-dropdown/fm-dropdown.style.d.ts +2 -0
  27. package/dist/fm-dropdown/fm-dropdown.style.d.ts.map +1 -0
  28. package/dist/fm-dropdown/fm-dropdown.style.js +480 -0
  29. package/dist/fm-dropdown/fm-dropdown.style.js.map +1 -0
  30. package/dist/fm-icon/all.d.ts +6 -0
  31. package/dist/fm-icon/all.d.ts.map +1 -0
  32. package/dist/fm-icon/all.js +11 -0
  33. package/dist/fm-icon/all.js.map +1 -0
  34. package/dist/fm-icon/fm-icon.d.ts +47 -0
  35. package/dist/fm-icon/fm-icon.d.ts.map +1 -0
  36. package/dist/fm-icon/fm-icon.js +100 -0
  37. package/dist/fm-icon/fm-icon.js.map +1 -0
  38. package/dist/fm-icon/fm-icon.style.d.ts +2 -0
  39. package/dist/fm-icon/fm-icon.style.d.ts.map +1 -0
  40. package/dist/fm-icon/fm-icon.style.js +102 -0
  41. package/dist/fm-icon/fm-icon.style.js.map +1 -0
  42. package/dist/fm-icon/icon-registry.d.ts +4 -0
  43. package/dist/fm-icon/icon-registry.d.ts.map +1 -0
  44. package/dist/fm-icon/icon-registry.generated.d.ts +9 -0
  45. package/dist/fm-icon/icon-registry.generated.d.ts.map +1 -0
  46. package/dist/fm-icon/icon-registry.generated.js +96 -0
  47. package/dist/fm-icon/icon-registry.generated.js.map +1 -0
  48. package/dist/fm-icon/icon-registry.js +11 -0
  49. package/dist/fm-icon/icon-registry.js.map +1 -0
  50. package/dist/fm-icon/icons/bold-add.d.ts +5 -0
  51. package/dist/fm-icon/icons/bold-add.d.ts.map +1 -0
  52. package/dist/fm-icon/icons/bold-add.js +6 -0
  53. package/dist/fm-icon/icons/bold-add.js.map +1 -0
  54. package/dist/fm-icon/icons/bold-check.d.ts +5 -0
  55. package/dist/fm-icon/icons/bold-check.d.ts.map +1 -0
  56. package/dist/fm-icon/icons/bold-check.js +6 -0
  57. package/dist/fm-icon/icons/bold-check.js.map +1 -0
  58. package/dist/fm-icon/icons/bold-checkbox-checked.d.ts +5 -0
  59. package/dist/fm-icon/icons/bold-checkbox-checked.d.ts.map +1 -0
  60. package/dist/fm-icon/icons/bold-checkbox-checked.js +6 -0
  61. package/dist/fm-icon/icons/bold-checkbox-checked.js.map +1 -0
  62. package/dist/fm-icon/icons/bold-checkbox-unchecked.d.ts +5 -0
  63. package/dist/fm-icon/icons/bold-checkbox-unchecked.d.ts.map +1 -0
  64. package/dist/fm-icon/icons/bold-checkbox-unchecked.js +6 -0
  65. package/dist/fm-icon/icons/bold-checkbox-unchecked.js.map +1 -0
  66. package/dist/fm-icon/icons/bold-chevron-backward.d.ts +5 -0
  67. package/dist/fm-icon/icons/bold-chevron-backward.d.ts.map +1 -0
  68. package/dist/fm-icon/icons/bold-chevron-backward.js +6 -0
  69. package/dist/fm-icon/icons/bold-chevron-backward.js.map +1 -0
  70. package/dist/fm-icon/icons/bold-chevron-down.d.ts +5 -0
  71. package/dist/fm-icon/icons/bold-chevron-down.d.ts.map +1 -0
  72. package/dist/fm-icon/icons/bold-chevron-down.js +6 -0
  73. package/dist/fm-icon/icons/bold-chevron-down.js.map +1 -0
  74. package/dist/fm-icon/icons/bold-chevron-forward.d.ts +5 -0
  75. package/dist/fm-icon/icons/bold-chevron-forward.d.ts.map +1 -0
  76. package/dist/fm-icon/icons/bold-chevron-forward.js +6 -0
  77. package/dist/fm-icon/icons/bold-chevron-forward.js.map +1 -0
  78. package/dist/fm-icon/icons/bold-chevron-up.d.ts +5 -0
  79. package/dist/fm-icon/icons/bold-chevron-up.d.ts.map +1 -0
  80. package/dist/fm-icon/icons/bold-chevron-up.js +6 -0
  81. package/dist/fm-icon/icons/bold-chevron-up.js.map +1 -0
  82. package/dist/fm-icon/icons/bold-close-1.d.ts +5 -0
  83. package/dist/fm-icon/icons/bold-close-1.d.ts.map +1 -0
  84. package/dist/fm-icon/icons/bold-close-1.js +6 -0
  85. package/dist/fm-icon/icons/bold-close-1.js.map +1 -0
  86. package/dist/fm-icon/icons/bold-close.d.ts +5 -0
  87. package/dist/fm-icon/icons/bold-close.d.ts.map +1 -0
  88. package/dist/fm-icon/icons/bold-close.js +6 -0
  89. package/dist/fm-icon/icons/bold-close.js.map +1 -0
  90. package/dist/fm-icon/icons/bold-dot.d.ts +5 -0
  91. package/dist/fm-icon/icons/bold-dot.d.ts.map +1 -0
  92. package/dist/fm-icon/icons/bold-dot.js +6 -0
  93. package/dist/fm-icon/icons/bold-dot.js.map +1 -0
  94. package/dist/fm-icon/icons/bold-open-external.d.ts +5 -0
  95. package/dist/fm-icon/icons/bold-open-external.d.ts.map +1 -0
  96. package/dist/fm-icon/icons/bold-open-external.js +6 -0
  97. package/dist/fm-icon/icons/bold-open-external.js.map +1 -0
  98. package/dist/fm-icon/icons/bold-prominent-1.d.ts +5 -0
  99. package/dist/fm-icon/icons/bold-prominent-1.d.ts.map +1 -0
  100. package/dist/fm-icon/icons/bold-prominent-1.js +6 -0
  101. package/dist/fm-icon/icons/bold-prominent-1.js.map +1 -0
  102. package/dist/fm-icon/icons/bold-prominent.d.ts +5 -0
  103. package/dist/fm-icon/icons/bold-prominent.d.ts.map +1 -0
  104. package/dist/fm-icon/icons/bold-prominent.js +6 -0
  105. package/dist/fm-icon/icons/bold-prominent.js.map +1 -0
  106. package/dist/fm-icon/icons/bold-question.d.ts +5 -0
  107. package/dist/fm-icon/icons/bold-question.d.ts.map +1 -0
  108. package/dist/fm-icon/icons/bold-question.js +6 -0
  109. package/dist/fm-icon/icons/bold-question.js.map +1 -0
  110. package/dist/fm-icon/icons/bold-remove.d.ts +5 -0
  111. package/dist/fm-icon/icons/bold-remove.d.ts.map +1 -0
  112. package/dist/fm-icon/icons/bold-remove.js +6 -0
  113. package/dist/fm-icon/icons/bold-remove.js.map +1 -0
  114. package/dist/fm-icon/icons/bold-search.d.ts +5 -0
  115. package/dist/fm-icon/icons/bold-search.d.ts.map +1 -0
  116. package/dist/fm-icon/icons/bold-search.js +6 -0
  117. package/dist/fm-icon/icons/bold-search.js.map +1 -0
  118. package/dist/fm-icon/icons/bold-spinner.d.ts +5 -0
  119. package/dist/fm-icon/icons/bold-spinner.d.ts.map +1 -0
  120. package/dist/fm-icon/icons/bold-spinner.js +6 -0
  121. package/dist/fm-icon/icons/bold-spinner.js.map +1 -0
  122. package/dist/fm-icon/icons/bold-warning.d.ts +5 -0
  123. package/dist/fm-icon/icons/bold-warning.d.ts.map +1 -0
  124. package/dist/fm-icon/icons/bold-warning.js +6 -0
  125. package/dist/fm-icon/icons/bold-warning.js.map +1 -0
  126. package/dist/fm-icon/icons/duotone-check.d.ts +5 -0
  127. package/dist/fm-icon/icons/duotone-check.d.ts.map +1 -0
  128. package/dist/fm-icon/icons/duotone-check.js +6 -0
  129. package/dist/fm-icon/icons/duotone-check.js.map +1 -0
  130. package/dist/fm-icon/icons/filled-achievements.d.ts +5 -0
  131. package/dist/fm-icon/icons/filled-achievements.d.ts.map +1 -0
  132. package/dist/fm-icon/icons/filled-achievements.js +6 -0
  133. package/dist/fm-icon/icons/filled-achievements.js.map +1 -0
  134. package/dist/fm-icon/icons/filled-add.d.ts +5 -0
  135. package/dist/fm-icon/icons/filled-add.d.ts.map +1 -0
  136. package/dist/fm-icon/icons/filled-add.js +6 -0
  137. package/dist/fm-icon/icons/filled-add.js.map +1 -0
  138. package/dist/fm-icon/icons/filled-app-settings.d.ts +5 -0
  139. package/dist/fm-icon/icons/filled-app-settings.d.ts.map +1 -0
  140. package/dist/fm-icon/icons/filled-app-settings.js +6 -0
  141. package/dist/fm-icon/icons/filled-app-settings.js.map +1 -0
  142. package/dist/fm-icon/icons/filled-calendar.d.ts +5 -0
  143. package/dist/fm-icon/icons/filled-calendar.d.ts.map +1 -0
  144. package/dist/fm-icon/icons/filled-calendar.js +6 -0
  145. package/dist/fm-icon/icons/filled-calendar.js.map +1 -0
  146. package/dist/fm-icon/icons/filled-car-simplified.d.ts +5 -0
  147. package/dist/fm-icon/icons/filled-car-simplified.d.ts.map +1 -0
  148. package/dist/fm-icon/icons/filled-car-simplified.js +6 -0
  149. package/dist/fm-icon/icons/filled-car-simplified.js.map +1 -0
  150. package/dist/fm-icon/icons/filled-check.d.ts +5 -0
  151. package/dist/fm-icon/icons/filled-check.d.ts.map +1 -0
  152. package/dist/fm-icon/icons/filled-check.js +6 -0
  153. package/dist/fm-icon/icons/filled-check.js.map +1 -0
  154. package/dist/fm-icon/icons/filled-clock.d.ts +5 -0
  155. package/dist/fm-icon/icons/filled-clock.d.ts.map +1 -0
  156. package/dist/fm-icon/icons/filled-clock.js +6 -0
  157. package/dist/fm-icon/icons/filled-clock.js.map +1 -0
  158. package/dist/fm-icon/icons/filled-close.d.ts +5 -0
  159. package/dist/fm-icon/icons/filled-close.d.ts.map +1 -0
  160. package/dist/fm-icon/icons/filled-close.js +6 -0
  161. package/dist/fm-icon/icons/filled-close.js.map +1 -0
  162. package/dist/fm-icon/icons/filled-control.d.ts +5 -0
  163. package/dist/fm-icon/icons/filled-control.d.ts.map +1 -0
  164. package/dist/fm-icon/icons/filled-control.js +6 -0
  165. package/dist/fm-icon/icons/filled-control.js.map +1 -0
  166. package/dist/fm-icon/icons/filled-danger.d.ts +5 -0
  167. package/dist/fm-icon/icons/filled-danger.d.ts.map +1 -0
  168. package/dist/fm-icon/icons/filled-danger.js +6 -0
  169. package/dist/fm-icon/icons/filled-danger.js.map +1 -0
  170. package/dist/fm-icon/icons/filled-delete.d.ts +5 -0
  171. package/dist/fm-icon/icons/filled-delete.d.ts.map +1 -0
  172. package/dist/fm-icon/icons/filled-delete.js +6 -0
  173. package/dist/fm-icon/icons/filled-delete.js.map +1 -0
  174. package/dist/fm-icon/icons/filled-deviceOne.d.ts +5 -0
  175. package/dist/fm-icon/icons/filled-deviceOne.d.ts.map +1 -0
  176. package/dist/fm-icon/icons/filled-deviceOne.js +6 -0
  177. package/dist/fm-icon/icons/filled-deviceOne.js.map +1 -0
  178. package/dist/fm-icon/icons/filled-deviceTwo.d.ts +5 -0
  179. package/dist/fm-icon/icons/filled-deviceTwo.d.ts.map +1 -0
  180. package/dist/fm-icon/icons/filled-deviceTwo.js +6 -0
  181. package/dist/fm-icon/icons/filled-deviceTwo.js.map +1 -0
  182. package/dist/fm-icon/icons/filled-disputeFine.d.ts +5 -0
  183. package/dist/fm-icon/icons/filled-disputeFine.d.ts.map +1 -0
  184. package/dist/fm-icon/icons/filled-disputeFine.js +6 -0
  185. package/dist/fm-icon/icons/filled-disputeFine.js.map +1 -0
  186. package/dist/fm-icon/icons/filled-email.d.ts +5 -0
  187. package/dist/fm-icon/icons/filled-email.d.ts.map +1 -0
  188. package/dist/fm-icon/icons/filled-email.js +6 -0
  189. package/dist/fm-icon/icons/filled-email.js.map +1 -0
  190. package/dist/fm-icon/icons/filled-gasPrices.d.ts +5 -0
  191. package/dist/fm-icon/icons/filled-gasPrices.d.ts.map +1 -0
  192. package/dist/fm-icon/icons/filled-gasPrices.js +6 -0
  193. package/dist/fm-icon/icons/filled-gasPrices.js.map +1 -0
  194. package/dist/fm-icon/icons/filled-hazard.d.ts +5 -0
  195. package/dist/fm-icon/icons/filled-hazard.d.ts.map +1 -0
  196. package/dist/fm-icon/icons/filled-hazard.js +6 -0
  197. package/dist/fm-icon/icons/filled-hazard.js.map +1 -0
  198. package/dist/fm-icon/icons/filled-highway.d.ts +5 -0
  199. package/dist/fm-icon/icons/filled-highway.d.ts.map +1 -0
  200. package/dist/fm-icon/icons/filled-highway.js +6 -0
  201. package/dist/fm-icon/icons/filled-highway.js.map +1 -0
  202. package/dist/fm-icon/icons/filled-info.d.ts +5 -0
  203. package/dist/fm-icon/icons/filled-info.d.ts.map +1 -0
  204. package/dist/fm-icon/icons/filled-info.js +6 -0
  205. package/dist/fm-icon/icons/filled-info.js.map +1 -0
  206. package/dist/fm-icon/icons/filled-lock-close.d.ts +5 -0
  207. package/dist/fm-icon/icons/filled-lock-close.d.ts.map +1 -0
  208. package/dist/fm-icon/icons/filled-lock-close.js +6 -0
  209. package/dist/fm-icon/icons/filled-lock-close.js.map +1 -0
  210. package/dist/fm-icon/icons/filled-lock-open.d.ts +5 -0
  211. package/dist/fm-icon/icons/filled-lock-open.d.ts.map +1 -0
  212. package/dist/fm-icon/icons/filled-lock-open.js +6 -0
  213. package/dist/fm-icon/icons/filled-lock-open.js.map +1 -0
  214. package/dist/fm-icon/icons/filled-lock.d.ts +5 -0
  215. package/dist/fm-icon/icons/filled-lock.d.ts.map +1 -0
  216. package/dist/fm-icon/icons/filled-lock.js +6 -0
  217. package/dist/fm-icon/icons/filled-lock.js.map +1 -0
  218. package/dist/fm-icon/icons/filled-microphone.d.ts +5 -0
  219. package/dist/fm-icon/icons/filled-microphone.d.ts.map +1 -0
  220. package/dist/fm-icon/icons/filled-microphone.js +6 -0
  221. package/dist/fm-icon/icons/filled-microphone.js.map +1 -0
  222. package/dist/fm-icon/icons/filled-notificaiton-unread.d.ts +5 -0
  223. package/dist/fm-icon/icons/filled-notificaiton-unread.d.ts.map +1 -0
  224. package/dist/fm-icon/icons/filled-notificaiton-unread.js +6 -0
  225. package/dist/fm-icon/icons/filled-notificaiton-unread.js.map +1 -0
  226. package/dist/fm-icon/icons/filled-notificaiton.d.ts +5 -0
  227. package/dist/fm-icon/icons/filled-notificaiton.d.ts.map +1 -0
  228. package/dist/fm-icon/icons/filled-notificaiton.js +6 -0
  229. package/dist/fm-icon/icons/filled-notificaiton.js.map +1 -0
  230. package/dist/fm-icon/icons/filled-parking.d.ts +5 -0
  231. package/dist/fm-icon/icons/filled-parking.d.ts.map +1 -0
  232. package/dist/fm-icon/icons/filled-parking.js +6 -0
  233. package/dist/fm-icon/icons/filled-parking.js.map +1 -0
  234. package/dist/fm-icon/icons/filled-play.d.ts +5 -0
  235. package/dist/fm-icon/icons/filled-play.d.ts.map +1 -0
  236. package/dist/fm-icon/icons/filled-play.js +6 -0
  237. package/dist/fm-icon/icons/filled-play.js.map +1 -0
  238. package/dist/fm-icon/icons/filled-question.d.ts +5 -0
  239. package/dist/fm-icon/icons/filled-question.d.ts.map +1 -0
  240. package/dist/fm-icon/icons/filled-question.js +6 -0
  241. package/dist/fm-icon/icons/filled-question.js.map +1 -0
  242. package/dist/fm-icon/icons/filled-rating-empty.d.ts +5 -0
  243. package/dist/fm-icon/icons/filled-rating-empty.d.ts.map +1 -0
  244. package/dist/fm-icon/icons/filled-rating-empty.js +6 -0
  245. package/dist/fm-icon/icons/filled-rating-empty.js.map +1 -0
  246. package/dist/fm-icon/icons/filled-rating-full.d.ts +5 -0
  247. package/dist/fm-icon/icons/filled-rating-full.d.ts.map +1 -0
  248. package/dist/fm-icon/icons/filled-rating-full.js +6 -0
  249. package/dist/fm-icon/icons/filled-rating-full.js.map +1 -0
  250. package/dist/fm-icon/icons/filled-rating-half.d.ts +5 -0
  251. package/dist/fm-icon/icons/filled-rating-half.d.ts.map +1 -0
  252. package/dist/fm-icon/icons/filled-rating-half.js +6 -0
  253. package/dist/fm-icon/icons/filled-rating-half.js.map +1 -0
  254. package/dist/fm-icon/icons/filled-remove.d.ts +5 -0
  255. package/dist/fm-icon/icons/filled-remove.d.ts.map +1 -0
  256. package/dist/fm-icon/icons/filled-remove.js +6 -0
  257. package/dist/fm-icon/icons/filled-remove.js.map +1 -0
  258. package/dist/fm-icon/icons/filled-return-location.d.ts +5 -0
  259. package/dist/fm-icon/icons/filled-return-location.d.ts.map +1 -0
  260. package/dist/fm-icon/icons/filled-return-location.js +6 -0
  261. package/dist/fm-icon/icons/filled-return-location.js.map +1 -0
  262. package/dist/fm-icon/icons/filled-support.d.ts +5 -0
  263. package/dist/fm-icon/icons/filled-support.d.ts.map +1 -0
  264. package/dist/fm-icon/icons/filled-support.js +6 -0
  265. package/dist/fm-icon/icons/filled-support.js.map +1 -0
  266. package/dist/fm-icon/icons/filled-toll.d.ts +5 -0
  267. package/dist/fm-icon/icons/filled-toll.d.ts.map +1 -0
  268. package/dist/fm-icon/icons/filled-toll.js +6 -0
  269. package/dist/fm-icon/icons/filled-toll.js.map +1 -0
  270. package/dist/fm-icon/icons/filled-tripHistory.d.ts +5 -0
  271. package/dist/fm-icon/icons/filled-tripHistory.d.ts.map +1 -0
  272. package/dist/fm-icon/icons/filled-tripHistory.js +6 -0
  273. package/dist/fm-icon/icons/filled-tripHistory.js.map +1 -0
  274. package/dist/fm-icon/icons/filled-truck.d.ts +5 -0
  275. package/dist/fm-icon/icons/filled-truck.d.ts.map +1 -0
  276. package/dist/fm-icon/icons/filled-truck.js +6 -0
  277. package/dist/fm-icon/icons/filled-truck.js.map +1 -0
  278. package/dist/fm-icon/icons/filled-user-pin.d.ts +5 -0
  279. package/dist/fm-icon/icons/filled-user-pin.d.ts.map +1 -0
  280. package/dist/fm-icon/icons/filled-user-pin.js +6 -0
  281. package/dist/fm-icon/icons/filled-user-pin.js.map +1 -0
  282. package/dist/fm-icon/icons/filled-user-profile.d.ts +5 -0
  283. package/dist/fm-icon/icons/filled-user-profile.d.ts.map +1 -0
  284. package/dist/fm-icon/icons/filled-user-profile.js +6 -0
  285. package/dist/fm-icon/icons/filled-user-profile.js.map +1 -0
  286. package/dist/fm-icon/icons/filled-warning.d.ts +5 -0
  287. package/dist/fm-icon/icons/filled-warning.d.ts.map +1 -0
  288. package/dist/fm-icon/icons/filled-warning.js +6 -0
  289. package/dist/fm-icon/icons/filled-warning.js.map +1 -0
  290. package/dist/fm-icon/icons/filled-zone-default.d.ts +5 -0
  291. package/dist/fm-icon/icons/filled-zone-default.d.ts.map +1 -0
  292. package/dist/fm-icon/icons/filled-zone-default.js +6 -0
  293. package/dist/fm-icon/icons/filled-zone-default.js.map +1 -0
  294. package/dist/fm-icon/icons/filled-zone-indoor.d.ts +5 -0
  295. package/dist/fm-icon/icons/filled-zone-indoor.d.ts.map +1 -0
  296. package/dist/fm-icon/icons/filled-zone-indoor.js +6 -0
  297. package/dist/fm-icon/icons/filled-zone-indoor.js.map +1 -0
  298. package/dist/fm-icon/icons/filled-zone-street.d.ts +5 -0
  299. package/dist/fm-icon/icons/filled-zone-street.d.ts.map +1 -0
  300. package/dist/fm-icon/icons/filled-zone-street.js +6 -0
  301. package/dist/fm-icon/icons/filled-zone-street.js.map +1 -0
  302. package/dist/fm-icon/icons/stroke-arrow-Down.d.ts +5 -0
  303. package/dist/fm-icon/icons/stroke-arrow-Down.d.ts.map +1 -0
  304. package/dist/fm-icon/icons/stroke-arrow-Down.js +6 -0
  305. package/dist/fm-icon/icons/stroke-arrow-Down.js.map +1 -0
  306. package/dist/fm-icon/icons/stroke-arrow-Up.d.ts +5 -0
  307. package/dist/fm-icon/icons/stroke-arrow-Up.d.ts.map +1 -0
  308. package/dist/fm-icon/icons/stroke-arrow-Up.js +6 -0
  309. package/dist/fm-icon/icons/stroke-arrow-Up.js.map +1 -0
  310. package/dist/fm-icon/icons/stroke-arrow-left.d.ts +5 -0
  311. package/dist/fm-icon/icons/stroke-arrow-left.d.ts.map +1 -0
  312. package/dist/fm-icon/icons/stroke-arrow-left.js +6 -0
  313. package/dist/fm-icon/icons/stroke-arrow-left.js.map +1 -0
  314. package/dist/fm-icon/icons/stroke-arrow-right.d.ts +5 -0
  315. package/dist/fm-icon/icons/stroke-arrow-right.d.ts.map +1 -0
  316. package/dist/fm-icon/icons/stroke-arrow-right.js +6 -0
  317. package/dist/fm-icon/icons/stroke-arrow-right.js.map +1 -0
  318. package/dist/fm-icon/icons/stroke-check.d.ts +5 -0
  319. package/dist/fm-icon/icons/stroke-check.d.ts.map +1 -0
  320. package/dist/fm-icon/icons/stroke-check.js +6 -0
  321. package/dist/fm-icon/icons/stroke-check.js.map +1 -0
  322. package/dist/fm-icon/icons/stroke-checkbox-checked.d.ts +5 -0
  323. package/dist/fm-icon/icons/stroke-checkbox-checked.d.ts.map +1 -0
  324. package/dist/fm-icon/icons/stroke-checkbox-checked.js +6 -0
  325. package/dist/fm-icon/icons/stroke-checkbox-checked.js.map +1 -0
  326. package/dist/fm-icon/icons/stroke-checkbox-unchecked.d.ts +5 -0
  327. package/dist/fm-icon/icons/stroke-checkbox-unchecked.d.ts.map +1 -0
  328. package/dist/fm-icon/icons/stroke-checkbox-unchecked.js +6 -0
  329. package/dist/fm-icon/icons/stroke-checkbox-unchecked.js.map +1 -0
  330. package/dist/fm-icon/icons/stroke-chevron-backward.d.ts +5 -0
  331. package/dist/fm-icon/icons/stroke-chevron-backward.d.ts.map +1 -0
  332. package/dist/fm-icon/icons/stroke-chevron-backward.js +6 -0
  333. package/dist/fm-icon/icons/stroke-chevron-backward.js.map +1 -0
  334. package/dist/fm-icon/icons/stroke-chevron-down.d.ts +5 -0
  335. package/dist/fm-icon/icons/stroke-chevron-down.d.ts.map +1 -0
  336. package/dist/fm-icon/icons/stroke-chevron-down.js +6 -0
  337. package/dist/fm-icon/icons/stroke-chevron-down.js.map +1 -0
  338. package/dist/fm-icon/icons/stroke-chevron-forward.d.ts +5 -0
  339. package/dist/fm-icon/icons/stroke-chevron-forward.d.ts.map +1 -0
  340. package/dist/fm-icon/icons/stroke-chevron-forward.js +6 -0
  341. package/dist/fm-icon/icons/stroke-chevron-forward.js.map +1 -0
  342. package/dist/fm-icon/icons/stroke-chevron-up.d.ts +5 -0
  343. package/dist/fm-icon/icons/stroke-chevron-up.d.ts.map +1 -0
  344. package/dist/fm-icon/icons/stroke-chevron-up.js +6 -0
  345. package/dist/fm-icon/icons/stroke-chevron-up.js.map +1 -0
  346. package/dist/fm-icon/icons/stroke-clock.d.ts +5 -0
  347. package/dist/fm-icon/icons/stroke-clock.d.ts.map +1 -0
  348. package/dist/fm-icon/icons/stroke-clock.js +6 -0
  349. package/dist/fm-icon/icons/stroke-clock.js.map +1 -0
  350. package/dist/fm-icon/icons/stroke-close-1.d.ts +5 -0
  351. package/dist/fm-icon/icons/stroke-close-1.d.ts.map +1 -0
  352. package/dist/fm-icon/icons/stroke-close-1.js +6 -0
  353. package/dist/fm-icon/icons/stroke-close-1.js.map +1 -0
  354. package/dist/fm-icon/icons/stroke-close.d.ts +5 -0
  355. package/dist/fm-icon/icons/stroke-close.d.ts.map +1 -0
  356. package/dist/fm-icon/icons/stroke-close.js +6 -0
  357. package/dist/fm-icon/icons/stroke-close.js.map +1 -0
  358. package/dist/fm-icon/icons/stroke-download.d.ts +5 -0
  359. package/dist/fm-icon/icons/stroke-download.d.ts.map +1 -0
  360. package/dist/fm-icon/icons/stroke-download.js +6 -0
  361. package/dist/fm-icon/icons/stroke-download.js.map +1 -0
  362. package/dist/fm-icon/icons/stroke-email.d.ts +5 -0
  363. package/dist/fm-icon/icons/stroke-email.d.ts.map +1 -0
  364. package/dist/fm-icon/icons/stroke-email.js +6 -0
  365. package/dist/fm-icon/icons/stroke-email.js.map +1 -0
  366. package/dist/fm-icon/icons/stroke-hamburger.d.ts +5 -0
  367. package/dist/fm-icon/icons/stroke-hamburger.d.ts.map +1 -0
  368. package/dist/fm-icon/icons/stroke-hamburger.js +6 -0
  369. package/dist/fm-icon/icons/stroke-hamburger.js.map +1 -0
  370. package/dist/fm-icon/icons/stroke-login.d.ts +5 -0
  371. package/dist/fm-icon/icons/stroke-login.d.ts.map +1 -0
  372. package/dist/fm-icon/icons/stroke-login.js +6 -0
  373. package/dist/fm-icon/icons/stroke-login.js.map +1 -0
  374. package/dist/fm-icon/icons/stroke-logout.d.ts +5 -0
  375. package/dist/fm-icon/icons/stroke-logout.d.ts.map +1 -0
  376. package/dist/fm-icon/icons/stroke-logout.js +6 -0
  377. package/dist/fm-icon/icons/stroke-logout.js.map +1 -0
  378. package/dist/fm-icon/icons/stroke-more.d.ts +5 -0
  379. package/dist/fm-icon/icons/stroke-more.d.ts.map +1 -0
  380. package/dist/fm-icon/icons/stroke-more.js +6 -0
  381. package/dist/fm-icon/icons/stroke-more.js.map +1 -0
  382. package/dist/fm-icon/icons/stroke-open-external.d.ts +5 -0
  383. package/dist/fm-icon/icons/stroke-open-external.d.ts.map +1 -0
  384. package/dist/fm-icon/icons/stroke-open-external.js +6 -0
  385. package/dist/fm-icon/icons/stroke-open-external.js.map +1 -0
  386. package/dist/fm-icon/icons/stroke-question.d.ts +5 -0
  387. package/dist/fm-icon/icons/stroke-question.d.ts.map +1 -0
  388. package/dist/fm-icon/icons/stroke-question.js +6 -0
  389. package/dist/fm-icon/icons/stroke-question.js.map +1 -0
  390. package/dist/fm-icon/icons/stroke-search.d.ts +5 -0
  391. package/dist/fm-icon/icons/stroke-search.d.ts.map +1 -0
  392. package/dist/fm-icon/icons/stroke-search.js +6 -0
  393. package/dist/fm-icon/icons/stroke-search.js.map +1 -0
  394. package/dist/fm-icon/icons/stroke-spinner.d.ts +5 -0
  395. package/dist/fm-icon/icons/stroke-spinner.d.ts.map +1 -0
  396. package/dist/fm-icon/icons/stroke-spinner.js +6 -0
  397. package/dist/fm-icon/icons/stroke-spinner.js.map +1 -0
  398. package/dist/fm-icon/icons/stroke-warning.d.ts +5 -0
  399. package/dist/fm-icon/icons/stroke-warning.d.ts.map +1 -0
  400. package/dist/fm-icon/icons/stroke-warning.js +6 -0
  401. package/dist/fm-icon/icons/stroke-warning.js.map +1 -0
  402. package/dist/fm-input/fm-input.d.ts +95 -0
  403. package/dist/fm-input/fm-input.d.ts.map +1 -0
  404. package/dist/fm-input/fm-input.js +343 -0
  405. package/dist/fm-input/fm-input.js.map +1 -0
  406. package/dist/fm-input/fm-input.style.d.ts +2 -0
  407. package/dist/fm-input/fm-input.style.d.ts.map +1 -0
  408. package/dist/fm-input/fm-input.style.js +221 -0
  409. package/dist/fm-input/fm-input.style.js.map +1 -0
  410. package/dist/fm-radio-input/fm-radio-input.d.ts +54 -0
  411. package/dist/fm-radio-input/fm-radio-input.d.ts.map +1 -0
  412. package/dist/fm-radio-input/fm-radio-input.js +88 -0
  413. package/dist/fm-radio-input/fm-radio-input.js.map +1 -0
  414. package/dist/fm-radio-input/fm-radio-input.style.d.ts +2 -0
  415. package/dist/fm-radio-input/fm-radio-input.style.d.ts.map +1 -0
  416. package/dist/fm-radio-input/fm-radio-input.style.js +151 -0
  417. package/dist/fm-radio-input/fm-radio-input.style.js.map +1 -0
  418. package/dist/fm-segmented-controller/fm-segmented-controller-core.d.ts +22 -0
  419. package/dist/fm-segmented-controller/fm-segmented-controller-core.d.ts.map +1 -0
  420. package/dist/fm-segmented-controller/fm-segmented-controller-core.js +64 -0
  421. package/dist/fm-segmented-controller/fm-segmented-controller-core.js.map +1 -0
  422. package/dist/fm-segmented-controller/fm-segmented-controller.d.ts +51 -0
  423. package/dist/fm-segmented-controller/fm-segmented-controller.d.ts.map +1 -0
  424. package/dist/fm-segmented-controller/fm-segmented-controller.js +166 -0
  425. package/dist/fm-segmented-controller/fm-segmented-controller.js.map +1 -0
  426. package/dist/fm-segmented-controller/fm-segmented-controller.style.d.ts +2 -0
  427. package/dist/fm-segmented-controller/fm-segmented-controller.style.d.ts.map +1 -0
  428. package/dist/fm-segmented-controller/fm-segmented-controller.style.js +197 -0
  429. package/dist/fm-segmented-controller/fm-segmented-controller.style.js.map +1 -0
  430. package/dist/fm-wizard/fm-wizard-core.d.ts +106 -0
  431. package/dist/fm-wizard/fm-wizard-core.d.ts.map +1 -0
  432. package/dist/fm-wizard/fm-wizard-core.js +263 -0
  433. package/dist/fm-wizard/fm-wizard-core.js.map +1 -0
  434. package/dist/fm-wizard/fm-wizard-node.d.ts +34 -0
  435. package/dist/fm-wizard/fm-wizard-node.d.ts.map +1 -0
  436. package/dist/fm-wizard/fm-wizard-node.js +70 -0
  437. package/dist/fm-wizard/fm-wizard-node.js.map +1 -0
  438. package/dist/fm-wizard/fm-wizard.d.ts +66 -0
  439. package/dist/fm-wizard/fm-wizard.d.ts.map +1 -0
  440. package/dist/fm-wizard/fm-wizard.js +293 -0
  441. package/dist/fm-wizard/fm-wizard.js.map +1 -0
  442. package/dist/fm-wizard/fm-wizard.style.d.ts +2 -0
  443. package/dist/fm-wizard/fm-wizard.style.d.ts.map +1 -0
  444. package/dist/fm-wizard/fm-wizard.style.js +197 -0
  445. package/dist/fm-wizard/fm-wizard.style.js.map +1 -0
  446. package/dist/index.d.ts +8 -0
  447. package/dist/index.d.ts.map +1 -0
  448. package/dist/index.js +8 -0
  449. package/dist/index.js.map +1 -0
  450. package/package.json +104 -67
  451. package/scripts/build-report.js +92 -0
  452. package/scripts/enrich-custom-elements-manifest.js +70 -0
  453. package/scripts/generate-icon-registry.js +80 -0
  454. package/scripts/install-cli.mjs +157 -0
  455. package/dist-lib/assets/style-entry-l0sNRNKZ.js +0 -1
  456. package/dist-lib/flitsmeister-design-system.es.js +0 -506
  457. package/dist-lib/flitsmeister-design-system.umd.js +0 -1
  458. package/dist-lib/main.css +0 -2
  459. package/dist-lib/style.css +0 -1
  460. package/index.js +0 -4
  461. package/tokens/schema_exports/fm-design-system/fm-design-system.css +0 -286
  462. package/tokens/schema_exports/fm-design-system/fm-design-system.json +0 -562
  463. package/tokens/schema_exports/fm-design-system/fm-design-system.xml +0 -207
  464. package/tokens/schema_exports/safedrive/safedrive.css +0 -349
  465. package/tokens/schema_exports/safedrive/safedrive.json +0 -658
  466. package/tokens/schema_exports/safedrive/safedrive.xml +0 -248
  467. package/web/components/CookieConsent.vue +0 -115
  468. package/web/components/Flag.vue +0 -47
  469. package/web/components/Icon.vue +0 -31
  470. package/web/components/LanguageSwitcher.vue +0 -77
  471. package/web/components/PermissionToggle.vue +0 -49
  472. package/web/components/button-with-loader.vue +0 -26
  473. package/web/components/fmxButton.vue +0 -287
  474. package/web/components/fmxDropdown.vue +0 -226
  475. package/web/components/fmxInput.vue +0 -319
  476. package/web/components/loader.vue +0 -22
  477. package/web/components/modal.vue +0 -61
  478. package/web/components/navbar.vue +0 -72
  479. package/web/icons/bold/add.svg +0 -3
  480. package/web/icons/bold/check.svg +0 -3
  481. package/web/icons/bold/checkbox-checked.svg +0 -4
  482. package/web/icons/bold/checkbox-unchecked.svg +0 -3
  483. package/web/icons/bold/chevron-backward.svg +0 -3
  484. package/web/icons/bold/chevron-down.svg +0 -3
  485. package/web/icons/bold/chevron-forward.svg +0 -3
  486. package/web/icons/bold/chevron-up.svg +0 -3
  487. package/web/icons/bold/close-1.svg +0 -3
  488. package/web/icons/bold/close.svg +0 -4
  489. package/web/icons/bold/dot.svg +0 -3
  490. package/web/icons/bold/open-external.svg +0 -3
  491. package/web/icons/bold/prominent-1.svg +0 -3
  492. package/web/icons/bold/prominent.svg +0 -3
  493. package/web/icons/bold/question.svg +0 -4
  494. package/web/icons/bold/remove.svg +0 -3
  495. package/web/icons/bold/search.svg +0 -3
  496. package/web/icons/bold/spinner.svg +0 -3
  497. package/web/icons/bold/warning.svg +0 -3
  498. package/web/icons/duotone/check.svg +0 -4
  499. package/web/icons/filled/achievements.svg +0 -3
  500. package/web/icons/filled/add.svg +0 -3
  501. package/web/icons/filled/app-settings.svg +0 -3
  502. package/web/icons/filled/calendar.svg +0 -7
  503. package/web/icons/filled/car-simplified.svg +0 -3
  504. package/web/icons/filled/check.svg +0 -3
  505. package/web/icons/filled/clock.svg +0 -3
  506. package/web/icons/filled/close.svg +0 -3
  507. package/web/icons/filled/control.svg +0 -7
  508. package/web/icons/filled/danger.svg +0 -3
  509. package/web/icons/filled/delete.svg +0 -3
  510. package/web/icons/filled/deviceOne.svg +0 -3
  511. package/web/icons/filled/deviceTwo.svg +0 -3
  512. package/web/icons/filled/disputeFine.svg +0 -3
  513. package/web/icons/filled/email.svg +0 -3
  514. package/web/icons/filled/gasPrices.svg +0 -3
  515. package/web/icons/filled/hazard.svg +0 -3
  516. package/web/icons/filled/highway.svg +0 -3
  517. package/web/icons/filled/info.svg +0 -3
  518. package/web/icons/filled/lock-close.svg +0 -3
  519. package/web/icons/filled/lock-open.svg +0 -3
  520. package/web/icons/filled/lock.svg +0 -3
  521. package/web/icons/filled/microphone.svg +0 -4
  522. package/web/icons/filled/notificaiton-unread.svg +0 -4
  523. package/web/icons/filled/notificaiton.svg +0 -3
  524. package/web/icons/filled/parking.svg +0 -3
  525. package/web/icons/filled/play.svg +0 -8
  526. package/web/icons/filled/question.svg +0 -3
  527. package/web/icons/filled/rating-empty.svg +0 -3
  528. package/web/icons/filled/rating-full.svg +0 -3
  529. package/web/icons/filled/rating-half.svg +0 -4
  530. package/web/icons/filled/remove.svg +0 -3
  531. package/web/icons/filled/return-location.svg +0 -3
  532. package/web/icons/filled/support.svg +0 -3
  533. package/web/icons/filled/toll.svg +0 -3
  534. package/web/icons/filled/tripHistory.svg +0 -3
  535. package/web/icons/filled/truck.svg +0 -3
  536. package/web/icons/filled/user-pin.svg +0 -3
  537. package/web/icons/filled/user-profile.svg +0 -3
  538. package/web/icons/filled/warning.svg +0 -3
  539. package/web/icons/filled/zone-default.svg +0 -3
  540. package/web/icons/filled/zone-indoor.svg +0 -3
  541. package/web/icons/filled/zone-street.svg +0 -3
  542. package/web/icons/stroke/arrow-Down.svg +0 -3
  543. package/web/icons/stroke/arrow-Up.svg +0 -3
  544. package/web/icons/stroke/arrow-left.svg +0 -3
  545. package/web/icons/stroke/arrow-right.svg +0 -3
  546. package/web/icons/stroke/check.svg +0 -3
  547. package/web/icons/stroke/checkbox-checked.svg +0 -4
  548. package/web/icons/stroke/checkbox-unchecked.svg +0 -3
  549. package/web/icons/stroke/chevron-backward.svg +0 -3
  550. package/web/icons/stroke/chevron-down.svg +0 -3
  551. package/web/icons/stroke/chevron-forward.svg +0 -3
  552. package/web/icons/stroke/chevron-up.svg +0 -3
  553. package/web/icons/stroke/clock.svg +0 -3
  554. package/web/icons/stroke/close-1.svg +0 -3
  555. package/web/icons/stroke/close.svg +0 -4
  556. package/web/icons/stroke/download.svg +0 -4
  557. package/web/icons/stroke/email.svg +0 -4
  558. package/web/icons/stroke/hamburger.svg +0 -3
  559. package/web/icons/stroke/login.svg +0 -4
  560. package/web/icons/stroke/logout.svg +0 -3
  561. package/web/icons/stroke/more.svg +0 -5
  562. package/web/icons/stroke/open-external.svg +0 -3
  563. package/web/icons/stroke/question.svg +0 -4
  564. package/web/icons/stroke/search.svg +0 -3
  565. package/web/icons/stroke/spinner.svg +0 -3
  566. package/web/icons/stroke/warning.svg +0 -3
  567. package/web/index.js +0 -55
  568. package/web/styles/flashmaster/primitives.json +0 -604
  569. package/web/styles/flashmaster/sample_fmdx_android.xml +0 -223
  570. package/web/styles/flashmaster/sample_fmdx_ios.json +0 -265
  571. package/web/styles/flashmaster.scss +0 -21
  572. package/web/styles/main.pcss +0 -143
@@ -0,0 +1,727 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, nothing } from 'lit';
8
+ import { customElement, property, query, state } from 'lit/decorators.js';
9
+ import { classMap } from 'lit/directives/class-map.js';
10
+ import { fmDropdownStyle } from './fm-dropdown.style.js';
11
+ import { canUseHoverInput, clipDurationMsForRowCount, dropdownLabelId, dropdownListboxId, dropdownOptionId, eventTargetsComponent, findTypeaheadIndex, firstEnabledListIndex, isEmptyDropdownValue, isIconMedia, isImageMedia, isTypeaheadKey, labelForValue, mediaForValue, optionRowsForListbox, rowsFromSelectElement, rowsFromSlot, triggerLineText, } from './fm-dropdown-core.js';
12
+ import { clampSheetVerticalDragDelta, DropdownBodyScrollLock, isMobileOs, sheetDragShouldClose, sheetHandlePointerDownAllowed, } from './fm-dropdown-mobile.js';
13
+ import { FmIcon } from '../fm-icon/fm-icon.js';
14
+ import '../fm-icon/icons/bold-chevron-down.js';
15
+ import '../fm-icon/icons/bold-check.js';
16
+ if (!customElements.get('fm-icon')) {
17
+ customElements.define('fm-icon', FmIcon);
18
+ }
19
+ /**
20
+ * Flitsmeister dropdown web component. Animated listbox with a hidden native select
21
+ * for forms and accessibility.
22
+ *
23
+ * @element fm-dropdown
24
+ *
25
+ * @fires fm-dropdown - Fired when a user selects an option. Detail: `{ value: string }`.
26
+ *
27
+ * @slot options - Option and optgroup elements for the native select. Use `slot="options"` on each direct option or optgroup.
28
+ * @slot media - Optional image or icon shown before placeholder text while `value` is empty.
29
+ * @slot description - Secondary text below the trigger label or placeholder.
30
+ *
31
+ * @cssprop --fm-dropdown-host-z-open - z-index for the opened host.
32
+ * @cssprop --fm-dropdown-overlay-z - z-index for the mobile overlay.
33
+ * @cssprop --fm-dropdown-sheet-z - z-index for the mobile sheet.
34
+ * @cssprop --fm-dropdown-clip-ms - Internal listbox clipping animation duration in milliseconds.
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <fm-dropdown name="country" placeholder="Kies een land" value="">
39
+ * <option slot="options" value="">Kies een land</option>
40
+ * <option slot="options" value="nl">Nederland</option>
41
+ * </fm-dropdown>
42
+ * ```
43
+ */
44
+ let FmDropdown = class FmDropdown extends LitElement {
45
+ constructor() {
46
+ super(...arguments);
47
+ this.instanceId = Math.random().toString(36).slice(2, 11);
48
+ this.docPointerDown = (e) => this.onDocumentPointerDown(e);
49
+ this.docKeyDown = (e) => this.onDocumentKeyDown(e);
50
+ this.focusOutTimer = null;
51
+ this.typeaheadTimer = null;
52
+ this.typeaheadBuffer = '';
53
+ this.bodyScrollLock = new DropdownBodyScrollLock();
54
+ this.sheetPointerId = null;
55
+ this.sheetStartY = 0;
56
+ /** Form field name forwarded to the hidden native select. */
57
+ this.name = '';
58
+ /** Selected option value. */
59
+ this.value = '';
60
+ /** Placeholder text shown while `value` is empty. */
61
+ this.placeholder = '';
62
+ /** Disabled state. */
63
+ this.disabled = false;
64
+ /** Gray border in default state. */
65
+ this.grayBorder = false;
66
+ this.selectedText = '';
67
+ this.open = false;
68
+ this.activeIndex = 0;
69
+ this.sheetDragOffset = 0;
70
+ this.sheetDragging = false;
71
+ }
72
+ static { this.styles = [fmDropdownStyle]; }
73
+ get listboxId() {
74
+ return dropdownListboxId(this.instanceId);
75
+ }
76
+ get labelId() {
77
+ return dropdownLabelId(this.instanceId);
78
+ }
79
+ connectedCallback() {
80
+ super.connectedCallback();
81
+ document.addEventListener('pointerdown', this.docPointerDown, true);
82
+ document.addEventListener('keydown', this.docKeyDown, true);
83
+ }
84
+ disconnectedCallback() {
85
+ super.disconnectedCallback();
86
+ document.removeEventListener('pointerdown', this.docPointerDown, true);
87
+ document.removeEventListener('keydown', this.docKeyDown, true);
88
+ if (this.focusOutTimer !== null) {
89
+ window.clearTimeout(this.focusOutTimer);
90
+ this.focusOutTimer = null;
91
+ }
92
+ if (this.typeaheadTimer !== null) {
93
+ window.clearTimeout(this.typeaheadTimer);
94
+ this.typeaheadTimer = null;
95
+ }
96
+ this.bodyScrollLock.clear();
97
+ }
98
+ firstUpdated() {
99
+ const slot = this.optionsSlotEl ?? this.renderRoot.querySelector('slot[name="options"]');
100
+ slot?.addEventListener('slotchange', () => {
101
+ this.syncFromSelect();
102
+ this.requestUpdate();
103
+ });
104
+ this.syncFromSelect();
105
+ }
106
+ updated(changed) {
107
+ if (changed.has('value'))
108
+ this.syncFromSelect();
109
+ if (changed.has('open')) {
110
+ if (this.open)
111
+ this.setAttribute('data-menu-open', '');
112
+ else
113
+ this.removeAttribute('data-menu-open');
114
+ if (!this.open)
115
+ this.resetSheetDrag();
116
+ this.bodyScrollLock.sync(this.open);
117
+ }
118
+ if (this.open && changed.has('activeIndex'))
119
+ this.scrollActiveOptionIntoView();
120
+ }
121
+ get optionRows() {
122
+ const slot = this.optionsSlotEl ?? this.renderRoot?.querySelector('slot[name="options"]');
123
+ if (slot) {
124
+ const fromSlot = rowsFromSlot(slot);
125
+ if (fromSlot.length > 0)
126
+ return fromSlot;
127
+ }
128
+ const sel = this.selectEl;
129
+ if (!sel)
130
+ return [];
131
+ return rowsFromSelectElement(sel);
132
+ }
133
+ get listboxRows() {
134
+ return optionRowsForListbox(this.optionRows);
135
+ }
136
+ renderInlineMedia(media, alt = '') {
137
+ if (isIconMedia(media)) {
138
+ const iconName = media.trim().slice(5).trim();
139
+ return html `<fm-icon name=${iconName} variant="bold" size="sm" aria-hidden="true"></fm-icon>`;
140
+ }
141
+ if (isImageMedia(media))
142
+ return html `<img src=${media} alt=${alt} />`;
143
+ return html `<span class="dropdown-media-text" aria-hidden="true">${media}</span>`;
144
+ }
145
+ renderTriggerMedia() {
146
+ if (isEmptyDropdownValue(this.value))
147
+ return html `<slot name="media"></slot>`;
148
+ const m = mediaForValue(this.optionRows, this.value ?? '');
149
+ return m ? this.renderInlineMedia(m.media, m.alt) : nothing;
150
+ }
151
+ syncFromSelect() {
152
+ const sel = this.selectEl;
153
+ if (!sel)
154
+ return;
155
+ const v = this.value ?? '';
156
+ if (sel.value !== v)
157
+ sel.value = v;
158
+ const fromOptions = labelForValue(this.optionRows, v);
159
+ const fromNative = sel.selectedOptions[0]?.text?.trim() ?? '';
160
+ const text = fromOptions || fromNative;
161
+ if (text || v === '') {
162
+ if (text !== this.selectedText)
163
+ this.selectedText = text;
164
+ }
165
+ }
166
+ get triggerLineTextComputed() {
167
+ return triggerLineText({
168
+ value: this.value,
169
+ placeholder: this.placeholder,
170
+ optionRows: this.optionRows,
171
+ selectedText: this.selectedText,
172
+ });
173
+ }
174
+ optionElId(index) {
175
+ return dropdownOptionId(this.instanceId, index);
176
+ }
177
+ close({ restoreFocus = true } = {}) {
178
+ if (!this.open)
179
+ return;
180
+ this.open = false;
181
+ this.resetTypeahead();
182
+ this.resetSheetDrag();
183
+ if (restoreFocus)
184
+ this.triggerEl?.focus();
185
+ }
186
+ commitValue(newValue, labelHint) {
187
+ const sel = this.selectEl;
188
+ if (!sel)
189
+ return;
190
+ const hint = (labelHint ?? '').trim();
191
+ const label = hint ||
192
+ labelForValue(this.optionRows, newValue) ||
193
+ sel.selectedOptions[0]?.text?.trim() ||
194
+ '';
195
+ const prev = this.value ?? '';
196
+ if (prev === newValue && sel.value === newValue) {
197
+ if (label !== this.selectedText)
198
+ this.selectedText = label;
199
+ return;
200
+ }
201
+ sel.value = newValue;
202
+ this.value = newValue;
203
+ this.selectedText = label;
204
+ sel.dispatchEvent(new Event('input', { bubbles: true }));
205
+ sel.dispatchEvent(new Event('change', { bubbles: true }));
206
+ this.dispatchEvent(new CustomEvent('fm-dropdown', {
207
+ detail: { value: this.value },
208
+ bubbles: true,
209
+ composed: true,
210
+ }));
211
+ }
212
+ selectActive() {
213
+ const rows = this.listboxRows;
214
+ const row = rows[this.activeIndex];
215
+ if (!row || row.disabled)
216
+ return;
217
+ this.commitValue(row.value, row.label);
218
+ this.close();
219
+ }
220
+ onDocumentPointerDown(e) {
221
+ const targetsThisComponent = eventTargetsComponent(e, this, this.shadowRoot);
222
+ if (!targetsThisComponent)
223
+ this.removeAttribute('data-focused');
224
+ if (!this.open || this.disabled)
225
+ return;
226
+ if (targetsThisComponent)
227
+ return;
228
+ this.close({ restoreFocus: false });
229
+ }
230
+ onDocumentKeyDown(e) {
231
+ if (!this.open)
232
+ return;
233
+ if (e.key !== 'Escape')
234
+ return;
235
+ this.close({ restoreFocus: false });
236
+ }
237
+ markFocusedState() {
238
+ if (this.disabled)
239
+ return;
240
+ this.setAttribute('data-focused', '');
241
+ }
242
+ clearFocusedStateIfOutside() {
243
+ if (this.focusOutTimer !== null)
244
+ window.clearTimeout(this.focusOutTimer);
245
+ this.focusOutTimer = window.setTimeout(() => {
246
+ this.focusOutTimer = null;
247
+ const root = this.shadowRoot;
248
+ const activeInsideShadow = root?.activeElement instanceof Node;
249
+ if (activeInsideShadow)
250
+ return;
251
+ if (this.matches(':focus-within'))
252
+ return;
253
+ this.removeAttribute('data-focused');
254
+ }, 0);
255
+ }
256
+ onTriggerClick() {
257
+ if (this.disabled)
258
+ return;
259
+ this.markFocusedState();
260
+ this.open = !this.open;
261
+ this.resetTypeahead();
262
+ if (this.open)
263
+ this.activeIndex = firstEnabledListIndex(this.listboxRows, this.value);
264
+ }
265
+ onOverlayClick() {
266
+ if (!this.open)
267
+ return;
268
+ this.close({ restoreFocus: false });
269
+ }
270
+ resetSheetDrag() {
271
+ this.sheetPointerId = null;
272
+ this.sheetStartY = 0;
273
+ this.sheetDragOffset = 0;
274
+ this.sheetDragging = false;
275
+ }
276
+ onHandlePointerDown(e) {
277
+ if (!this.open || !isMobileOs())
278
+ return;
279
+ if (!sheetHandlePointerDownAllowed(e))
280
+ return;
281
+ this.sheetPointerId = e.pointerId;
282
+ this.sheetStartY = e.clientY;
283
+ this.sheetDragging = true;
284
+ this.sheetDragOffset = 0;
285
+ const handle = e.currentTarget;
286
+ handle.setPointerCapture?.(e.pointerId);
287
+ e.preventDefault();
288
+ }
289
+ onHandlePointerMove(e) {
290
+ if (!this.sheetDragging || this.sheetPointerId !== e.pointerId)
291
+ return;
292
+ this.sheetDragOffset = clampSheetVerticalDragDelta(e.clientY, this.sheetStartY);
293
+ }
294
+ onHandlePointerUp(e) {
295
+ if (this.sheetPointerId !== e.pointerId)
296
+ return;
297
+ const handle = e.currentTarget;
298
+ handle.releasePointerCapture?.(e.pointerId);
299
+ const shouldClose = sheetDragShouldClose(this.sheetDragOffset);
300
+ this.resetSheetDrag();
301
+ if (shouldClose)
302
+ this.close({ restoreFocus: false });
303
+ }
304
+ onHandlePointerCancel(e) {
305
+ if (this.sheetPointerId !== e.pointerId)
306
+ return;
307
+ const handle = e.currentTarget;
308
+ handle.releasePointerCapture?.(e.pointerId);
309
+ this.resetSheetDrag();
310
+ }
311
+ resetTypeahead() {
312
+ this.typeaheadBuffer = '';
313
+ if (this.typeaheadTimer !== null) {
314
+ window.clearTimeout(this.typeaheadTimer);
315
+ this.typeaheadTimer = null;
316
+ }
317
+ }
318
+ pushTypeaheadChar(char) {
319
+ if (!char)
320
+ return;
321
+ this.typeaheadBuffer += char.toLocaleLowerCase();
322
+ if (this.typeaheadTimer !== null)
323
+ window.clearTimeout(this.typeaheadTimer);
324
+ this.typeaheadTimer = window.setTimeout(() => {
325
+ this.typeaheadTimer = null;
326
+ this.typeaheadBuffer = '';
327
+ }, 450);
328
+ }
329
+ scrollActiveOptionIntoView() {
330
+ const optionId = this.optionElId(this.activeIndex);
331
+ const optionEl = this.renderRoot.querySelector(`#${optionId}`);
332
+ optionEl?.scrollIntoView({ block: 'nearest' });
333
+ }
334
+ onTriggerKeydown(e) {
335
+ if (this.disabled)
336
+ return;
337
+ const rows = this.listboxRows;
338
+ if (rows.length === 0)
339
+ return;
340
+ if (!this.open) {
341
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {
342
+ e.preventDefault();
343
+ this.open = true;
344
+ this.activeIndex = firstEnabledListIndex(rows, this.value);
345
+ }
346
+ return;
347
+ }
348
+ if (e.key === 'Escape') {
349
+ e.preventDefault();
350
+ this.close({ restoreFocus: true });
351
+ return;
352
+ }
353
+ if (e.key === 'Tab') {
354
+ this.close({ restoreFocus: false });
355
+ return;
356
+ }
357
+ if (e.key === 'Enter' || e.key === ' ') {
358
+ e.preventDefault();
359
+ this.selectActive();
360
+ return;
361
+ }
362
+ if (e.key === 'Home') {
363
+ e.preventDefault();
364
+ this.activeIndex = firstEnabledListIndex(rows);
365
+ return;
366
+ }
367
+ if (e.key === 'End') {
368
+ e.preventDefault();
369
+ if (rows.every((r) => r.disabled))
370
+ return;
371
+ for (let i = rows.length - 1; i >= 0; i--) {
372
+ if (!rows[i].disabled) {
373
+ this.activeIndex = i;
374
+ break;
375
+ }
376
+ }
377
+ return;
378
+ }
379
+ if (e.key === 'ArrowDown') {
380
+ e.preventDefault();
381
+ if (rows.every((r) => r.disabled))
382
+ return;
383
+ let i = this.activeIndex;
384
+ let steps = 0;
385
+ do {
386
+ i = i >= rows.length - 1 ? 0 : i + 1;
387
+ steps++;
388
+ if (steps > rows.length)
389
+ return;
390
+ } while (rows[i].disabled);
391
+ this.activeIndex = i;
392
+ return;
393
+ }
394
+ if (e.key === 'ArrowUp') {
395
+ e.preventDefault();
396
+ if (rows.every((r) => r.disabled))
397
+ return;
398
+ let i = this.activeIndex;
399
+ let steps = 0;
400
+ do {
401
+ i = i <= 0 ? rows.length - 1 : i - 1;
402
+ steps++;
403
+ if (steps > rows.length)
404
+ return;
405
+ } while (rows[i].disabled);
406
+ this.activeIndex = i;
407
+ return;
408
+ }
409
+ if (isTypeaheadKey(e)) {
410
+ this.pushTypeaheadChar(e.key);
411
+ const typeaheadIndex = findTypeaheadIndex(rows, this.activeIndex, this.typeaheadBuffer);
412
+ if (typeaheadIndex >= 0) {
413
+ e.preventDefault();
414
+ this.activeIndex = typeaheadIndex;
415
+ }
416
+ }
417
+ }
418
+ onTriggerFocus() {
419
+ this.markFocusedState();
420
+ }
421
+ onTriggerBlur() {
422
+ this.clearFocusedStateIfOutside();
423
+ }
424
+ onNativeFocus() {
425
+ this.triggerEl?.focus();
426
+ }
427
+ onRootFocusIn(e) {
428
+ if (e.target === this.selectEl) {
429
+ this.triggerEl?.focus();
430
+ return;
431
+ }
432
+ this.markFocusedState();
433
+ }
434
+ onRootFocusOut() {
435
+ this.clearFocusedStateIfOutside();
436
+ }
437
+ onOptionPointerDown(e) {
438
+ e.preventDefault();
439
+ this.markFocusedState();
440
+ }
441
+ onOptionClick(e, index) {
442
+ e.preventDefault();
443
+ const row = this.listboxRows[index];
444
+ if (!row || row.disabled)
445
+ return;
446
+ this.activeIndex = index;
447
+ this.commitValue(row.value, row.label);
448
+ this.close({ restoreFocus: true });
449
+ }
450
+ onOptionPointerEnter(index) {
451
+ if (!this.open || this.disabled)
452
+ return;
453
+ if (!canUseHoverInput())
454
+ return;
455
+ const row = this.listboxRows[index];
456
+ if (!row || row.disabled)
457
+ return;
458
+ this.activeIndex = index;
459
+ }
460
+ render() {
461
+ const isMobileSheet = isMobileOs();
462
+ const bodyClasses = classMap({
463
+ 'dropdown-body': true,
464
+ 'dropdown-body--gray-border': this.grayBorder,
465
+ });
466
+ const rootClass = classMap({
467
+ 'dropdown-root': true,
468
+ 'dropdown-root--open': this.open,
469
+ 'dropdown-root--mobile-sheet': isMobileSheet,
470
+ });
471
+ const overlayClass = classMap({
472
+ 'dropdown-overlay': true,
473
+ 'dropdown-overlay--open': this.open,
474
+ });
475
+ const sheetClass = classMap({
476
+ 'dropdown-sheet': true,
477
+ 'dropdown-sheet--open': this.open,
478
+ 'dropdown-sheet--dragging': this.sheetDragging,
479
+ });
480
+ const allRows = this.optionRows;
481
+ const rows = this.listboxRows;
482
+ const clipDurationMs = clipDurationMsForRowCount(rows.length);
483
+ const activedescendant = this.open && rows[this.activeIndex] && !rows[this.activeIndex].disabled
484
+ ? this.optionElId(this.activeIndex)
485
+ : undefined;
486
+ return html `
487
+ <div
488
+ class=${rootClass}
489
+ @pointerdown=${() => this.markFocusedState()}
490
+ @focusin=${this.onRootFocusIn}
491
+ @focusout=${this.onRootFocusOut}
492
+ >
493
+ <select
494
+ class="dropdown-native"
495
+ name=${this.name}
496
+ .value=${this.value}
497
+ ?disabled=${this.disabled}
498
+ tabindex="-1"
499
+ inert
500
+ aria-hidden="true"
501
+ @change=${this.handleNativeChange}
502
+ @focus=${this.onNativeFocus}
503
+ >
504
+ ${allRows.map((row) => html `
505
+ <option
506
+ value=${row.value}
507
+ ?disabled=${row.disabled}
508
+ data-media=${row.media ?? ''}
509
+ data-media-alt=${row.mediaAlt ?? ''}
510
+ >
511
+ ${row.label}
512
+ </option>
513
+ `)}
514
+ </select>
515
+ <slot class="dropdown-options-source" name="options" aria-hidden="true"></slot>
516
+ <button
517
+ type="button"
518
+ class="dropdown-trigger"
519
+ ?disabled=${this.disabled}
520
+ aria-haspopup="listbox"
521
+ aria-expanded=${this.open ? 'true' : 'false'}
522
+ aria-controls=${this.listboxId}
523
+ aria-activedescendant=${activedescendant ?? nothing}
524
+ aria-labelledby=${this.labelId}
525
+ @click=${this.onTriggerClick}
526
+ @keydown=${this.onTriggerKeydown}
527
+ @focus=${this.onTriggerFocus}
528
+ @blur=${this.onTriggerBlur}
529
+ >
530
+ <div class=${bodyClasses}>
531
+ <div class="dropdown-prepend">
532
+ <span class="dropdown-media">${this.renderTriggerMedia()}</span>
533
+ </div>
534
+ <div class="dropdown-text">
535
+ <span
536
+ class=${classMap({
537
+ 'dropdown-placeholder': true,
538
+ 'dropdown-placeholder--selected': !isEmptyDropdownValue(this.value),
539
+ })}
540
+ id=${this.labelId}
541
+ >
542
+ ${this.triggerLineTextComputed}
543
+ </span>
544
+ <slot name="description"></slot>
545
+ </div>
546
+ <div class="dropdown-append">
547
+ <span class="dropdown-chevron">
548
+ <fm-icon name="chevron-down" variant="bold" size="sm"></fm-icon>
549
+ </span>
550
+ </div>
551
+ </div>
552
+ </button>
553
+ ${isMobileSheet
554
+ ? html `
555
+ <div class=${overlayClass} aria-hidden=${this.open ? 'false' : 'true'} @click=${this.onOverlayClick}></div>
556
+ <div
557
+ class=${sheetClass}
558
+ aria-hidden=${this.open ? 'false' : 'true'}
559
+ style=${`--fm-dropdown-sheet-drag:${this.sheetDragOffset}px`}
560
+ >
561
+ <div
562
+ class="dropdown-sheet-handle"
563
+ @pointerdown=${this.onHandlePointerDown}
564
+ @pointermove=${this.onHandlePointerMove}
565
+ @pointerup=${this.onHandlePointerUp}
566
+ @pointercancel=${this.onHandlePointerCancel}
567
+ >
568
+ <span class="dropdown-sheet-handle__bar" aria-hidden="true"></span>
569
+ </div>
570
+ <div class="dropdown-panel dropdown-panel--sheet" id=${this.listboxId} role="listbox" aria-labelledby=${this.labelId}>
571
+ ${rows.map((row, index) => {
572
+ const selected = row.value === (this.value ?? '');
573
+ const active = !isMobileSheet && index === this.activeIndex && !row.disabled;
574
+ return html `
575
+ <div
576
+ class=${classMap({
577
+ 'dropdown-option': true,
578
+ 'dropdown-option--disabled': row.disabled,
579
+ 'dropdown-option--active': active,
580
+ 'dropdown-option--selected': selected,
581
+ })}
582
+ id=${this.optionElId(index)}
583
+ role="option"
584
+ aria-selected=${selected ? 'true' : 'false'}
585
+ aria-disabled=${row.disabled ? 'true' : 'false'}
586
+ style=${`--stagger:${index}`}
587
+ @pointerdown=${this.onOptionPointerDown}
588
+ @pointerenter=${() => this.onOptionPointerEnter(index)}
589
+ @click=${(e) => this.onOptionClick(e, index)}
590
+ >
591
+ ${row.media
592
+ ? html `<span class="dropdown-option__media">${this.renderInlineMedia(row.media, row.mediaAlt ?? '')}</span>`
593
+ : nothing}
594
+ <span class="dropdown-option__label">${row.label}</span>
595
+ ${selected
596
+ ? html `
597
+ <span class="dropdown-option__check" aria-hidden="true">
598
+ <fm-icon name="check" variant="bold" size="sm" color="primary"></fm-icon>
599
+ </span>
600
+ `
601
+ : nothing}
602
+ </div>
603
+ `;
604
+ })}
605
+ </div>
606
+ </div>
607
+ `
608
+ : html `
609
+ <div
610
+ class="dropdown-panel-clip"
611
+ aria-hidden=${this.open ? 'false' : 'true'}
612
+ style=${`--fm-dropdown-clip-ms:${clipDurationMs}`}
613
+ >
614
+ <div class="dropdown-panel-inner">
615
+ ${this.open
616
+ ? html `
617
+ <div
618
+ class="dropdown-panel"
619
+ id=${this.listboxId}
620
+ role="listbox"
621
+ aria-labelledby=${this.labelId}
622
+ >
623
+ ${rows.map((row, index) => {
624
+ const selected = row.value === (this.value ?? '');
625
+ const active = !isMobileSheet && index === this.activeIndex && !row.disabled;
626
+ return html `
627
+ <div
628
+ class=${classMap({
629
+ 'dropdown-option': true,
630
+ 'dropdown-option--disabled': row.disabled,
631
+ 'dropdown-option--active': active,
632
+ 'dropdown-option--selected': selected,
633
+ })}
634
+ id=${this.optionElId(index)}
635
+ role="option"
636
+ aria-selected=${selected ? 'true' : 'false'}
637
+ aria-disabled=${row.disabled ? 'true' : 'false'}
638
+ style=${`--stagger:${index}`}
639
+ @pointerdown=${this.onOptionPointerDown}
640
+ @pointerenter=${() => this.onOptionPointerEnter(index)}
641
+ @click=${(e) => this.onOptionClick(e, index)}
642
+ >
643
+ ${row.media
644
+ ? html `<span class="dropdown-option__media">${this.renderInlineMedia(row.media, row.mediaAlt ?? '')}</span>`
645
+ : nothing}
646
+ <span class="dropdown-option__label">${row.label}</span>
647
+ ${selected
648
+ ? html `
649
+ <span class="dropdown-option__check" aria-hidden="true">
650
+ <fm-icon name="check" variant="bold" size="sm" color="primary"></fm-icon>
651
+ </span>
652
+ `
653
+ : nothing}
654
+ </div>
655
+ `;
656
+ })}
657
+ </div>
658
+ `
659
+ : nothing}
660
+ </div>
661
+ </div>
662
+ `}
663
+ </div>
664
+ `;
665
+ }
666
+ handleNativeChange(e) {
667
+ if (!e.isTrusted)
668
+ return;
669
+ const sel = e.target;
670
+ this.value = sel.value;
671
+ const v = this.value ?? '';
672
+ let label = labelForValue(this.optionRows, v) || sel.selectedOptions[0]?.text?.trim() || '';
673
+ if (label || v === '') {
674
+ if (label !== this.selectedText)
675
+ this.selectedText = label;
676
+ }
677
+ this.dispatchEvent(new CustomEvent('fm-dropdown', {
678
+ detail: { value: this.value },
679
+ bubbles: true,
680
+ composed: true,
681
+ }));
682
+ }
683
+ };
684
+ __decorate([
685
+ property({ type: String })
686
+ ], FmDropdown.prototype, "name", void 0);
687
+ __decorate([
688
+ property({ type: String })
689
+ ], FmDropdown.prototype, "value", void 0);
690
+ __decorate([
691
+ property({ type: String })
692
+ ], FmDropdown.prototype, "placeholder", void 0);
693
+ __decorate([
694
+ property({ type: Boolean, reflect: true })
695
+ ], FmDropdown.prototype, "disabled", void 0);
696
+ __decorate([
697
+ property({ type: Boolean, attribute: 'gray-border', reflect: true })
698
+ ], FmDropdown.prototype, "grayBorder", void 0);
699
+ __decorate([
700
+ query('select.dropdown-native')
701
+ ], FmDropdown.prototype, "selectEl", void 0);
702
+ __decorate([
703
+ query('slot[name="options"]')
704
+ ], FmDropdown.prototype, "optionsSlotEl", void 0);
705
+ __decorate([
706
+ query('.dropdown-trigger')
707
+ ], FmDropdown.prototype, "triggerEl", void 0);
708
+ __decorate([
709
+ state()
710
+ ], FmDropdown.prototype, "selectedText", void 0);
711
+ __decorate([
712
+ state()
713
+ ], FmDropdown.prototype, "open", void 0);
714
+ __decorate([
715
+ state()
716
+ ], FmDropdown.prototype, "activeIndex", void 0);
717
+ __decorate([
718
+ state()
719
+ ], FmDropdown.prototype, "sheetDragOffset", void 0);
720
+ __decorate([
721
+ state()
722
+ ], FmDropdown.prototype, "sheetDragging", void 0);
723
+ FmDropdown = __decorate([
724
+ customElement('fm-dropdown')
725
+ ], FmDropdown);
726
+ export { FmDropdown };
727
+ //# sourceMappingURL=fm-dropdown.js.map