@aurodesignsystem-dev/auro-formkit 0.0.0-pr1001.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +2 -0
  4. package/README.md +314 -0
  5. package/components/bibtemplate/dist/auro-bibtemplate.d.ts +50 -0
  6. package/components/bibtemplate/dist/buttonVersion.d.ts +2 -0
  7. package/components/bibtemplate/dist/headerVersion.d.ts +2 -0
  8. package/components/bibtemplate/dist/iconVersion.d.ts +2 -0
  9. package/components/bibtemplate/dist/index.d.ts +2 -0
  10. package/components/bibtemplate/dist/index.js +1940 -0
  11. package/components/bibtemplate/dist/registered.js +1940 -0
  12. package/components/bibtemplate/dist/styles/color-css.d.ts +2 -0
  13. package/components/bibtemplate/dist/styles/style-css.d.ts +2 -0
  14. package/components/bibtemplate/dist/styles/tokens-css.d.ts +2 -0
  15. package/components/checkbox/README.md +142 -0
  16. package/components/checkbox/demo/api.html +61 -0
  17. package/components/checkbox/demo/api.js +17 -0
  18. package/components/checkbox/demo/api.md +436 -0
  19. package/components/checkbox/demo/api.min.js +1870 -0
  20. package/components/checkbox/demo/index.html +57 -0
  21. package/components/checkbox/demo/index.js +8 -0
  22. package/components/checkbox/demo/index.md +327 -0
  23. package/components/checkbox/demo/index.min.js +1845 -0
  24. package/components/checkbox/demo/readme.html +57 -0
  25. package/components/checkbox/demo/readme.md +142 -0
  26. package/components/checkbox/dist/auro-checkbox-group.d.ts +166 -0
  27. package/components/checkbox/dist/auro-checkbox.d.ts +136 -0
  28. package/components/checkbox/dist/helptextVersion.d.ts +2 -0
  29. package/components/checkbox/dist/index.d.ts +3 -0
  30. package/components/checkbox/dist/index.js +1794 -0
  31. package/components/checkbox/dist/registered.js +1795 -0
  32. package/components/checkbox/dist/styles/auro-checkbox-css.d.ts +2 -0
  33. package/components/checkbox/dist/styles/auro-checkbox-group-css.d.ts +2 -0
  34. package/components/checkbox/dist/styles/color-css.d.ts +2 -0
  35. package/components/checkbox/dist/styles/colorGroup-css.d.ts +2 -0
  36. package/components/checkbox/dist/styles/tokens-css.d.ts +2 -0
  37. package/components/combobox/README.md +154 -0
  38. package/components/combobox/demo/api.html +63 -0
  39. package/components/combobox/demo/api.js +36 -0
  40. package/components/combobox/demo/api.md +1326 -0
  41. package/components/combobox/demo/api.min.js +18691 -0
  42. package/components/combobox/demo/index.html +63 -0
  43. package/components/combobox/demo/index.js +26 -0
  44. package/components/combobox/demo/index.md +725 -0
  45. package/components/combobox/demo/index.min.js +18545 -0
  46. package/components/combobox/demo/readme.html +57 -0
  47. package/components/combobox/demo/readme.md +154 -0
  48. package/components/combobox/dist/auro-combobox.d.ts +434 -0
  49. package/components/combobox/dist/bibtemplateVersion.d.ts +2 -0
  50. package/components/combobox/dist/dropdownVersion.d.ts +2 -0
  51. package/components/combobox/dist/index.d.ts +2 -0
  52. package/components/combobox/dist/index.js +16999 -0
  53. package/components/combobox/dist/inputVersion.d.ts +2 -0
  54. package/components/combobox/dist/registered.js +17001 -0
  55. package/components/combobox/dist/styles/emphasized/style-css.d.ts +2 -0
  56. package/components/combobox/dist/styles/snowflake/style-css.d.ts +2 -0
  57. package/components/combobox/dist/styles/style-css.d.ts +2 -0
  58. package/components/counter/README.md +146 -0
  59. package/components/counter/demo/api.html +61 -0
  60. package/components/counter/demo/api.js +20 -0
  61. package/components/counter/demo/api.md +730 -0
  62. package/components/counter/demo/api.min.js +10406 -0
  63. package/components/counter/demo/index.html +61 -0
  64. package/components/counter/demo/index.js +21 -0
  65. package/components/counter/demo/index.md +401 -0
  66. package/components/counter/demo/index.min.js +10370 -0
  67. package/components/counter/demo/readme.html +57 -0
  68. package/components/counter/demo/readme.md +146 -0
  69. package/components/counter/dist/auro-counter-button.d.ts +14 -0
  70. package/components/counter/dist/auro-counter-group.d.ts +386 -0
  71. package/components/counter/dist/auro-counter-wrapper.d.ts +22 -0
  72. package/components/counter/dist/auro-counter.d.ts +113 -0
  73. package/components/counter/dist/bibtemplateVersion.d.ts +2 -0
  74. package/components/counter/dist/dropdownVersion.d.ts +2 -0
  75. package/components/counter/dist/helptextVersion.d.ts +2 -0
  76. package/components/counter/dist/iconVersion.d.ts +2 -0
  77. package/components/counter/dist/index.d.ts +3 -0
  78. package/components/counter/dist/index.js +10313 -0
  79. package/components/counter/dist/registered.js +10314 -0
  80. package/components/counter/dist/styles/color-css.d.ts +2 -0
  81. package/components/counter/dist/styles/counter-button-color-css.d.ts +2 -0
  82. package/components/counter/dist/styles/counter-button-css.d.ts +2 -0
  83. package/components/counter/dist/styles/counter-group-css.d.ts +2 -0
  84. package/components/counter/dist/styles/counter-wrapper-color-css.d.ts +2 -0
  85. package/components/counter/dist/styles/counter-wrapper-css.d.ts +2 -0
  86. package/components/counter/dist/styles/shapeSize-css.d.ts +2 -0
  87. package/components/counter/dist/styles/style-css.d.ts +2 -0
  88. package/components/counter/dist/styles/tokens-css.d.ts +2 -0
  89. package/components/datepicker/README.md +141 -0
  90. package/components/datepicker/demo/api.html +63 -0
  91. package/components/datepicker/demo/api.js +35 -0
  92. package/components/datepicker/demo/api.md +1529 -0
  93. package/components/datepicker/demo/api.min.js +29755 -0
  94. package/components/datepicker/demo/index.html +62 -0
  95. package/components/datepicker/demo/index.js +19 -0
  96. package/components/datepicker/demo/index.md +204 -0
  97. package/components/datepicker/demo/index.min.js +29476 -0
  98. package/components/datepicker/demo/readme.html +57 -0
  99. package/components/datepicker/demo/readme.md +141 -0
  100. package/components/datepicker/dist/auro-calendar-cell.d.ts +163 -0
  101. package/components/datepicker/dist/auro-calendar-month.d.ts +20 -0
  102. package/components/datepicker/dist/auro-calendar.d.ts +133 -0
  103. package/components/datepicker/dist/auro-datepicker.d.ts +625 -0
  104. package/components/datepicker/dist/bibtemplateVersion.d.ts +2 -0
  105. package/components/datepicker/dist/buttonVersion.d.ts +2 -0
  106. package/components/datepicker/dist/dropdownVersion.d.ts +2 -0
  107. package/components/datepicker/dist/iconVersion.d.ts +2 -0
  108. package/components/datepicker/dist/index.d.ts +2 -0
  109. package/components/datepicker/dist/index.js +29406 -0
  110. package/components/datepicker/dist/inputVersion.d.ts +2 -0
  111. package/components/datepicker/dist/popoverVersion.d.ts +2 -0
  112. package/components/datepicker/dist/registered.js +29406 -0
  113. package/components/datepicker/dist/styles/classic/color-css.d.ts +2 -0
  114. package/components/datepicker/dist/styles/classic/style-css.d.ts +2 -0
  115. package/components/datepicker/dist/styles/color-calendar-css.d.ts +2 -0
  116. package/components/datepicker/dist/styles/color-cell-css.d.ts +2 -0
  117. package/components/datepicker/dist/styles/color-css.d.ts +2 -0
  118. package/components/datepicker/dist/styles/color-month-css.d.ts +2 -0
  119. package/components/datepicker/dist/styles/shapeSize-css.d.ts +2 -0
  120. package/components/datepicker/dist/styles/snowflake/color-css.d.ts +2 -0
  121. package/components/datepicker/dist/styles/snowflake/style-css.d.ts +2 -0
  122. package/components/datepicker/dist/styles/style-auro-calendar-cell-css.d.ts +2 -0
  123. package/components/datepicker/dist/styles/style-auro-calendar-css.d.ts +2 -0
  124. package/components/datepicker/dist/styles/style-auro-calendar-month-css.d.ts +2 -0
  125. package/components/datepicker/dist/styles/style-css.d.ts +2 -0
  126. package/components/datepicker/dist/styles/tokens-css.d.ts +2 -0
  127. package/components/datepicker/dist/utilities.d.ts +78 -0
  128. package/components/datepicker/dist/utilitiesCalendar.d.ts +38 -0
  129. package/components/datepicker/dist/utilitiesCalendarRender.d.ts +50 -0
  130. package/components/datepicker/dist/vendor/wc-range-datepicker/day.d.ts +5 -0
  131. package/components/datepicker/dist/vendor/wc-range-datepicker/range-datepicker-calendar.d.ts +60 -0
  132. package/components/datepicker/dist/vendor/wc-range-datepicker/range-datepicker-cell.d.ts +1 -0
  133. package/components/datepicker/dist/vendor/wc-range-datepicker/range-datepicker.d.ts +57 -0
  134. package/components/dropdown/README.md +144 -0
  135. package/components/dropdown/demo/api.html +63 -0
  136. package/components/dropdown/demo/api.js +21 -0
  137. package/components/dropdown/demo/api.md +1266 -0
  138. package/components/dropdown/demo/api.min.js +4442 -0
  139. package/components/dropdown/demo/index.html +61 -0
  140. package/components/dropdown/demo/index.js +19 -0
  141. package/components/dropdown/demo/index.md +337 -0
  142. package/components/dropdown/demo/index.min.js +4405 -0
  143. package/components/dropdown/demo/readme.html +57 -0
  144. package/components/dropdown/demo/readme.md +144 -0
  145. package/components/dropdown/dist/auro-dropdown.d.ts +425 -0
  146. package/components/dropdown/dist/auro-dropdownBib.d.ts +68 -0
  147. package/components/dropdown/dist/dropdownVersion.d.ts +2 -0
  148. package/components/dropdown/dist/helptextVersion.d.ts +2 -0
  149. package/components/dropdown/dist/iconVersion.d.ts +2 -0
  150. package/components/dropdown/dist/index.d.ts +2 -0
  151. package/components/dropdown/dist/index.js +4350 -0
  152. package/components/dropdown/dist/registered.js +4350 -0
  153. package/components/dropdown/dist/styles/classic/bibColors-css.d.ts +2 -0
  154. package/components/dropdown/dist/styles/classic/bibStyles-css.d.ts +2 -0
  155. package/components/dropdown/dist/styles/classic/color-css.d.ts +2 -0
  156. package/components/dropdown/dist/styles/classic/style-css.d.ts +2 -0
  157. package/components/dropdown/dist/styles/color-css.d.ts +2 -0
  158. package/components/dropdown/dist/styles/emphasized/style-css.d.ts +2 -0
  159. package/components/dropdown/dist/styles/shapeSize-css.d.ts +2 -0
  160. package/components/dropdown/dist/styles/snowflake/style-css.d.ts +2 -0
  161. package/components/dropdown/dist/styles/style-css.d.ts +2 -0
  162. package/components/dropdown/dist/styles/tokens-css.d.ts +2 -0
  163. package/components/form/README.md +142 -0
  164. package/components/form/demo/api.html +56 -0
  165. package/components/form/demo/api.js +3 -0
  166. package/components/form/demo/api.md +51 -0
  167. package/components/form/demo/api.min.js +638 -0
  168. package/components/form/demo/autocomplete.html +31 -0
  169. package/components/form/demo/index.html +57 -0
  170. package/components/form/demo/index.js +4 -0
  171. package/components/form/demo/index.md +403 -0
  172. package/components/form/demo/index.min.js +639 -0
  173. package/components/form/demo/readme.html +57 -0
  174. package/components/form/demo/readme.md +142 -0
  175. package/components/form/demo/registerDemoDeps.js +23 -0
  176. package/components/form/demo/working.html +124 -0
  177. package/components/form/dist/auro-form.d.ts +223 -0
  178. package/components/form/dist/index.d.ts +2 -0
  179. package/components/form/dist/index.js +614 -0
  180. package/components/form/dist/registered.d.ts +1 -0
  181. package/components/form/dist/registered.js +614 -0
  182. package/components/form/dist/styles/style-css.d.ts +2 -0
  183. package/components/helptext/dist/auro-helptext.d.ts +59 -0
  184. package/components/helptext/dist/index.d.ts +2 -0
  185. package/components/helptext/dist/index.js +207 -0
  186. package/components/helptext/dist/registered.js +207 -0
  187. package/components/helptext/dist/styles/color-css.d.ts +2 -0
  188. package/components/helptext/dist/styles/style-css.d.ts +2 -0
  189. package/components/helptext/dist/styles/tokens-css.d.ts +2 -0
  190. package/components/input/README.md +139 -0
  191. package/components/input/demo/api.html +48 -0
  192. package/components/input/demo/api.js +29 -0
  193. package/components/input/demo/api.md +1366 -0
  194. package/components/input/demo/api.min.js +8542 -0
  195. package/components/input/demo/index.html +49 -0
  196. package/components/input/demo/index.js +20 -0
  197. package/components/input/demo/index.md +270 -0
  198. package/components/input/demo/index.min.js +8461 -0
  199. package/components/input/demo/readme.html +57 -0
  200. package/components/input/demo/readme.md +139 -0
  201. package/components/input/dist/auro-input.d.ts +167 -0
  202. package/components/input/dist/base-input.d.ts +566 -0
  203. package/components/input/dist/buttonVersion.d.ts +2 -0
  204. package/components/input/dist/helptextVersion.d.ts +2 -0
  205. package/components/input/dist/i18n.d.ts +18 -0
  206. package/components/input/dist/iconVersion.d.ts +2 -0
  207. package/components/input/dist/index.d.ts +2 -0
  208. package/components/input/dist/index.js +8367 -0
  209. package/components/input/dist/registered.js +8367 -0
  210. package/components/input/dist/styles/classic/color-css.d.ts +2 -0
  211. package/components/input/dist/styles/classic/style-css.d.ts +2 -0
  212. package/components/input/dist/styles/color-css.d.ts +2 -0
  213. package/components/input/dist/styles/default/borders-css.d.ts +2 -0
  214. package/components/input/dist/styles/default/color-css.d.ts +2 -0
  215. package/components/input/dist/styles/default/mixins-css.d.ts +2 -0
  216. package/components/input/dist/styles/default/notificationIcons-css.d.ts +2 -0
  217. package/components/input/dist/styles/default/style-css.d.ts +2 -0
  218. package/components/input/dist/styles/emphasized/color-css.d.ts +2 -0
  219. package/components/input/dist/styles/emphasized/style-css.d.ts +2 -0
  220. package/components/input/dist/styles/mixins-css.d.ts +2 -0
  221. package/components/input/dist/styles/shapeSize-css.d.ts +2 -0
  222. package/components/input/dist/styles/snowflake/style-css.d.ts +2 -0
  223. package/components/input/dist/styles/style-css.d.ts +2 -0
  224. package/components/input/dist/styles/tokens-css.d.ts +2 -0
  225. package/components/input/dist/utilities.d.ts +25 -0
  226. package/components/layoutElement/dist/auroElement.d.ts +34 -0
  227. package/components/layoutElement/dist/index.d.ts +2 -0
  228. package/components/layoutElement/dist/index.js +98 -0
  229. package/components/layoutElement/dist/registered.js +98 -0
  230. package/components/menu/README.md +145 -0
  231. package/components/menu/demo/api.html +62 -0
  232. package/components/menu/demo/api.js +27 -0
  233. package/components/menu/demo/api.md +1011 -0
  234. package/components/menu/demo/api.min.js +1762 -0
  235. package/components/menu/demo/index.html +58 -0
  236. package/components/menu/demo/index.js +28 -0
  237. package/components/menu/demo/index.md +61 -0
  238. package/components/menu/demo/index.min.js +1708 -0
  239. package/components/menu/demo/readme.html +57 -0
  240. package/components/menu/demo/readme.md +145 -0
  241. package/components/menu/dist/auro-menu-utils.d.ts +34 -0
  242. package/components/menu/dist/auro-menu.d.ts +246 -0
  243. package/components/menu/dist/auro-menuoption.d.ts +81 -0
  244. package/components/menu/dist/dropdownVersion.d.ts +2 -0
  245. package/components/menu/dist/iconVersion.d.ts +2 -0
  246. package/components/menu/dist/index.d.ts +4 -0
  247. package/components/menu/dist/index.js +1691 -0
  248. package/components/menu/dist/registered.js +1651 -0
  249. package/components/menu/dist/styles/default/color-menu-css.d.ts +2 -0
  250. package/components/menu/dist/styles/default/color-menuoption-css.d.ts +2 -0
  251. package/components/menu/dist/styles/default/style-menu-css.d.ts +2 -0
  252. package/components/menu/dist/styles/default/style-menuoption-css.d.ts +2 -0
  253. package/components/menu/dist/styles/default/tokens-css.d.ts +2 -0
  254. package/components/radio/README.md +137 -0
  255. package/components/radio/demo/api.html +59 -0
  256. package/components/radio/demo/api.js +19 -0
  257. package/components/radio/demo/api.md +602 -0
  258. package/components/radio/demo/api.min.js +1951 -0
  259. package/components/radio/demo/index.html +56 -0
  260. package/components/radio/demo/index.js +8 -0
  261. package/components/radio/demo/index.md +150 -0
  262. package/components/radio/demo/index.min.js +1908 -0
  263. package/components/radio/demo/readme.html +57 -0
  264. package/components/radio/demo/readme.md +137 -0
  265. package/components/radio/dist/auro-radio-group.d.ts +194 -0
  266. package/components/radio/dist/auro-radio.d.ts +147 -0
  267. package/components/radio/dist/helptextVersion.d.ts +2 -0
  268. package/components/radio/dist/index.d.ts +3 -0
  269. package/components/radio/dist/index.js +1857 -0
  270. package/components/radio/dist/registered.js +1858 -0
  271. package/components/radio/dist/styles/auro-radio-group-css.d.ts +2 -0
  272. package/components/radio/dist/styles/color-css.d.ts +2 -0
  273. package/components/radio/dist/styles/groupColor-css.d.ts +2 -0
  274. package/components/radio/dist/styles/style-css.d.ts +2 -0
  275. package/components/radio/dist/styles/tokens-css.d.ts +2 -0
  276. package/components/select/README.md +145 -0
  277. package/components/select/demo/api.html +77 -0
  278. package/components/select/demo/api.js +35 -0
  279. package/components/select/demo/api.md +1413 -0
  280. package/components/select/demo/api.min.js +10502 -0
  281. package/components/select/demo/index.html +73 -0
  282. package/components/select/demo/index.js +9 -0
  283. package/components/select/demo/index.md +1151 -0
  284. package/components/select/demo/index.min.js +10390 -0
  285. package/components/select/demo/readme.html +57 -0
  286. package/components/select/demo/readme.md +145 -0
  287. package/components/select/dist/auro-select.d.ts +512 -0
  288. package/components/select/dist/bibtemplateVersion.d.ts +2 -0
  289. package/components/select/dist/dropdownVersion.d.ts +2 -0
  290. package/components/select/dist/helptextVersion.d.ts +2 -0
  291. package/components/select/dist/index.d.ts +2 -0
  292. package/components/select/dist/index.js +8898 -0
  293. package/components/select/dist/registered.js +8898 -0
  294. package/components/select/dist/styles/shapeSize-css.d.ts +2 -0
  295. package/components/select/dist/styles/style-css.d.ts +2 -0
  296. package/components/select/dist/styles/tokens-css.d.ts +2 -0
  297. package/package.json +218 -0
@@ -0,0 +1,1691 @@
1
+ import { css, LitElement, html } from 'lit';
2
+ import { classMap } from 'lit/directives/class-map.js';
3
+ import { unsafeStatic, literal, html as html$1 } from 'lit/static-html.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+
6
+ var styleCss$2 = css`:focus:not(:focus-visible){outline:3px solid transparent}.body-default{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem))}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem))}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem))}.display-md{font-family:var(--wcss-display-md-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-md-letter-spacing, 0);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem))}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem))}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem))}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem))}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem))}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem))}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem))}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);font-weight:var(--wcss-heading-xs-weight, 450);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem))}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);font-weight:var(--wcss-heading-2xs-weight, 450);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem))}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));text-transform:uppercase}:host{display:block;vertical-align:middle;line-height:0}:host .menuWrapper{box-sizing:border-box;display:flex;flex-direction:column;width:100%;margin:0;padding:0}:host ::slotted(hr){box-sizing:content-box !important;height:0 !important;overflow:visible !important;margin:var(--ds-size-100, 0.5rem) 0 !important;border-width:0 !important;border-top-width:1px !important;border-top-style:solid !important}:host [loadingplaceholder].empty{opacity:0;position:absolute}:host [loadingplaceholder] slot[name=loadingIcon]{vertical-align:middle;display:inline-block}:host [loadingplaceholder] slot[name=loadingIcon]::slotted(*){margin-right:var(--ds-size-150, 0.75rem)}:host([root]){overflow-y:auto}:host([root]) .menuWrapper.lg{padding:var(--ds-size-150, 0.75rem);gap:var(--ds-size-50, 0.25rem)}:host([root]) .menuWrapper.xl{padding:var(--ds-size-200, 1rem);gap:var(--ds-size-100, 0.5rem)}`;
7
+
8
+ var colorCss$2 = css`:host ::slotted(hr){border-top-color:var(--ds-auro-menu-divider-color)}[loadingplaceholder] slot[name=loadingIcon]{color:var(--ds-auro-menu-loader-color)}[loadingplaceholder] slot[name=loadingText]{color:var(--ds-auro-menu-loader-text-color)}`;
9
+
10
+ var tokensCss$1 = css`:host{--ds-auro-menu-divider-color: var(--ds-basic-color-border-divider, rgba(0, 0, 0, 0.15));--ds-auro-menu-loader-color: var(--ds-basic-color-brand-primary, #01426a);--ds-auro-menu-loader-text-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-menuoption-container-color: transparent;--ds-auro-menuoption-container-border-color: var(--ds-auro-menuoption-container-color);--ds-auro-menuoption-icon-color: transparent;--ds-auro-menuoption-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}`;
11
+
12
+ let AuroElement$1 = class AuroElement extends LitElement {
13
+ static get properties() {
14
+ return {
15
+
16
+ /**
17
+ * Defines the language of an element.
18
+ * @default {'default'}
19
+ */
20
+ layout: {
21
+ type: String,
22
+ attribute: "layout",
23
+ reflect: true
24
+ },
25
+
26
+ shape: {
27
+ type: String,
28
+ attribute: "shape",
29
+ reflect: true
30
+ },
31
+
32
+ size: {
33
+ type: String,
34
+ attribute: "size",
35
+ reflect: true
36
+ },
37
+
38
+ onDark: {
39
+ type: Boolean,
40
+ attribute: "ondark",
41
+ reflect: true
42
+ }
43
+ };
44
+ }
45
+
46
+ resetShapeClasses() {
47
+ const wrapper = this.shadowRoot.querySelector('.wrapper');
48
+
49
+ if (wrapper) {
50
+ wrapper.classList.forEach((className) => {
51
+ if (className.startsWith('shape-')) {
52
+ wrapper.classList.remove(className);
53
+ }
54
+ });
55
+
56
+ if (this.shape && this.size) {
57
+ wrapper.classList.add(`shape-${this.shape.toLowerCase()}-${this.size.toLowerCase()}`);
58
+ } else {
59
+ wrapper.classList.add('shape-none');
60
+ }
61
+ }
62
+
63
+ }
64
+
65
+ resetLayoutClasses() {
66
+ if (this.layout) {
67
+ const wrapper = this.shadowRoot.querySelector('.wrapper');
68
+
69
+ if (wrapper) {
70
+ wrapper.classList.forEach((className) => {
71
+ if (className.startsWith('layout-')) {
72
+ wrapper.classList.remove(className);
73
+ }
74
+ });
75
+
76
+ wrapper.classList.add(`layout-${this.layout.toLowerCase()}`);
77
+ }
78
+ }
79
+ }
80
+
81
+ updateComponentArchitecture() {
82
+ this.resetLayoutClasses();
83
+ this.resetShapeClasses();
84
+ }
85
+
86
+ updated(changedProperties) {
87
+ if (changedProperties.has('layout') || changedProperties.has('shape') || changedProperties.has('size')) {
88
+ this.updateComponentArchitecture();
89
+ }
90
+ }
91
+
92
+ // Try to render the defined `this.layout` layout. If that fails, fall back to the default layout.
93
+ // This will catch if an invalid layout value is passed in and render the default layout if so.
94
+ render() {
95
+ try {
96
+ return this.renderLayout();
97
+ } catch (error) {
98
+ // failed to get the defined layout
99
+ console.error('Failed to get the defined layout - using the default layout', error); // eslint-disable-line no-console
100
+
101
+ // fallback to the default layout
102
+ return this.getLayout('default');
103
+ }
104
+ }
105
+ };
106
+
107
+ // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
108
+ // See LICENSE in the project root for license information.
109
+
110
+ // ---------------------------------------------------------------------
111
+
112
+ /* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */
113
+
114
+ let AuroLibraryRuntimeUtils$1 = class AuroLibraryRuntimeUtils {
115
+
116
+ /* eslint-disable jsdoc/require-param */
117
+
118
+ /**
119
+ * This will register a new custom element with the browser.
120
+ * @param {String} name - The name of the custom element.
121
+ * @param {Object} componentClass - The class to register as a custom element.
122
+ * @returns {void}
123
+ */
124
+ registerComponent(name, componentClass) {
125
+ if (!customElements.get(name)) {
126
+ customElements.define(name, class extends componentClass {});
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Finds and returns the closest HTML Element based on a selector.
132
+ * @returns {void}
133
+ */
134
+ closestElement(
135
+ selector, // selector like in .closest()
136
+ base = this, // extra functionality to skip a parent
137
+ __Closest = (el, found = el && el.closest(selector)) =>
138
+ !el || el === document || el === window
139
+ ? null // standard .closest() returns null for non-found selectors also
140
+ : found
141
+ ? found // found a selector INside this element
142
+ : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM
143
+ ) {
144
+ return __Closest(base);
145
+ }
146
+ /* eslint-enable jsdoc/require-param */
147
+
148
+ /**
149
+ * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.
150
+ * @param {Object} elem - The element to check.
151
+ * @param {String} tagName - The name of the Auro component to check for or add as an attribute.
152
+ * @returns {void}
153
+ */
154
+ handleComponentTagRename(elem, tagName) {
155
+ const tag = tagName.toLowerCase();
156
+ const elemTag = elem.tagName.toLowerCase();
157
+
158
+ if (elemTag !== tag) {
159
+ elem.setAttribute(tag, true);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Validates if an element is a specific Auro component.
165
+ * @param {Object} elem - The element to validate.
166
+ * @param {String} tagName - The name of the Auro component to check against.
167
+ * @returns {Boolean} - Returns true if the element is the specified Auro component.
168
+ */
169
+ elementMatch(elem, tagName) {
170
+ const tag = tagName.toLowerCase();
171
+ const elemTag = elem.tagName.toLowerCase();
172
+
173
+ return elemTag === tag || elem.hasAttribute(tag);
174
+ }
175
+ };
176
+
177
+ // Copyright (c) 2021 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
178
+ // See LICENSE in the project root for license information.
179
+
180
+ // ---------------------------------------------------------------------
181
+
182
+ /**
183
+ * Converts value to an array.
184
+ * If the value is a JSON string representing an array, it will be parsed.
185
+ * If the value is already an array, it is returned.
186
+ * If the value is undefined, it returns undefined.
187
+ * @private
188
+ * @param {any} value - The value to be converted. Can be a string, array, or undefined.
189
+ * @returns {Array|undefined} - The converted array or undefined.
190
+ * @throws {Error} - Throws an error if the value is not an array, undefined,
191
+ * or if the value cannot be parsed into an array from a JSON string.
192
+ */
193
+ function arrayConverter(value) {
194
+ // Allow undefined
195
+ if (value === undefined) {
196
+ return undefined;
197
+ }
198
+
199
+ // Return the value if it is already an array
200
+ if (Array.isArray(value)) {
201
+ return value;
202
+ }
203
+
204
+ try {
205
+ // If value is a JSON string, parse it
206
+ const parsed = typeof value === 'string' ? JSON.parse(value) : value;
207
+
208
+ // Check if the parsed value is an array
209
+ if (Array.isArray(parsed)) {
210
+ return parsed;
211
+ }
212
+ } catch (error) {
213
+ // If JSON parsing fails, continue to throw an error below
214
+ /* eslint-disable no-console */
215
+ console.error('JSON parsing failed:', error);
216
+ }
217
+
218
+ // Throw error if the input is not an array or undefined
219
+ throw new Error('Invalid value: Input must be an array or undefined');
220
+ }
221
+
222
+ /**
223
+ * Validates if an option can be interacted with.
224
+ * @private
225
+ * @param {HTMLElement} option - The option to check.
226
+ * @returns {boolean} True if option is interactive.
227
+ */
228
+ function isOptionInteractive(option) {
229
+ return !option.hasAttribute('hidden') &&
230
+ !option.hasAttribute('disabled') &&
231
+ !option.hasAttribute('static');
232
+ }
233
+
234
+ /**
235
+ * Helper method to dispatch custom events.
236
+ * @param {HTMLElement} element - Element to dispatch event from.
237
+ * @param {string} eventName - Name of the event to dispatch.
238
+ * @param {Object} [detail] - Optional detail object to include with the event.
239
+ */
240
+ function dispatchMenuEvent(element, eventName, detail = null) {
241
+ const eventConfig = {
242
+ bubbles: true,
243
+ cancelable: false,
244
+ composed: true
245
+ };
246
+
247
+ if (detail !== null) {
248
+ eventConfig.detail = detail;
249
+ }
250
+
251
+ element.dispatchEvent(new CustomEvent(eventName, eventConfig));
252
+ }
253
+
254
+ // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
255
+ // See LICENSE in the project root for license information.
256
+
257
+
258
+
259
+ // See https://git.io/JJ6SJ for "How to document your components using JSDoc"
260
+ /**
261
+ * The auro-menu element provides users a way to select from a list of options.
262
+ * @attr {HTMLElement|Array<HTMLElement>} optionSelected - An array of currently selected menu options, type `HTMLElement` by default. In multi-select mode, `optionSelected` is an array of HTML elements.
263
+ * @attr {object} optionactive - Specifies the current active menuOption.
264
+ * @attr {string} matchword - Specifies a string used to highlight matched string parts in options.
265
+ * @attr {boolean} disabled - When true, the entire menu and all options are disabled;
266
+ * @attr {boolean} nocheckmark - When true, selected option will not show the checkmark.
267
+ * @attr {boolean} loading - When true, displays a loading state using the loadingIcon and loadingText slots if provided.
268
+ * @attr {boolean} multiselect - When true, the selected option can be multiple options.
269
+ * @prop {boolean} hasLoadingPlaceholder - Indicates whether the menu has a loadingIcon or loadingText to render when in a loading state.
270
+ * @event {CustomEvent<Element>} auroMenu-activatedOption - Notifies that a menuoption has been made `active`.
271
+ * @event {CustomEvent<any>} auroMenu-customEventFired - Notifies that a custom event has been fired.
272
+ * @event {CustomEvent<{ loading: boolean; hasLoadingPlaceholder: boolean; }>} auroMenu-loadingChange - Notifies when the loading attribute is changed.
273
+ * @event {CustomEvent<any>} auroMenu-selectValueFailure - Notifies that an attempt to select a menuoption by matching a value has failed.
274
+ * @event {CustomEvent<any>} auroMenu-selectValueReset - Notifies that the component value has been reset.
275
+ * @event {CustomEvent<any>} auroMenu-selectedOption - Notifies that a new menuoption selection has been made.
276
+ * @slot loadingText - Text to show while loading attribute is set
277
+ * @slot loadingIcon - Icon to show while loading attribute is set
278
+ * @slot - Slot for insertion of menu options.
279
+ */
280
+
281
+ /* eslint-disable no-magic-numbers, max-lines, no-extra-parens */
282
+
283
+ class AuroMenu extends AuroElement$1 {
284
+ constructor() {
285
+ super();
286
+
287
+ // State properties (reactive)
288
+
289
+ /**
290
+ * @private
291
+ */
292
+ this.shape = "box";
293
+
294
+ /**
295
+ * @private
296
+ */
297
+ this.size = "sm";
298
+
299
+ // Value of the selected options
300
+ this.value = undefined;
301
+ // Currently selected option
302
+ this.optionSelected = undefined;
303
+ // String used for highlighting/filtering
304
+ this.matchWord = undefined;
305
+ // Hide the checkmark icon on selected options
306
+ this.noCheckmark = false;
307
+ // Currently active option
308
+ this.optionActive = undefined;
309
+ // Loading state
310
+ this.loading = false;
311
+ // Multi-select mode
312
+ this.multiSelect = false;
313
+
314
+ // Event Bindings
315
+
316
+ /**
317
+ * @private
318
+ */
319
+ this.handleKeyDown = this.handleKeyDown.bind(this);
320
+
321
+ /**
322
+ * @private
323
+ */
324
+ this.handleMouseSelect = this.handleMouseSelect.bind(this);
325
+
326
+ /**
327
+ * @private
328
+ */
329
+ this.handleOptionHover = this.handleOptionHover.bind(this);
330
+
331
+ /**
332
+ * @private
333
+ */
334
+ this.handleSlotChange = this.handleSlotChange.bind(this);
335
+
336
+ // Instance properties (non-reactive)
337
+
338
+ /**
339
+ * @private
340
+ */
341
+ Object.assign(this, {
342
+ // Root-level menu (true) or a nested submenu (false)
343
+ rootMenu: true,
344
+ // Currently focused/active menu item index
345
+ index: -1,
346
+ // Nested menu spacer
347
+ nestingSpacer: '<span class="nestingSpacer"></span>',
348
+ // Loading indicator for slot elements
349
+ loadingSlots: null,
350
+ // Store for menu items
351
+ items: [],
352
+ });
353
+ }
354
+
355
+ static get properties() {
356
+ return {
357
+ ...super.properties,
358
+ noCheckmark: {
359
+ type: Boolean,
360
+ reflect: true,
361
+ attribute: 'nocheckmark'
362
+ },
363
+ disabled: {
364
+ type: Boolean,
365
+ reflect: true
366
+ },
367
+ loading: {
368
+ type: Boolean,
369
+ reflect: true
370
+ },
371
+ optionSelected: {
372
+ // Allow HTMLElement, HTMLElement[] arrays and undefined
373
+ type: Object
374
+ },
375
+ optionActive: {
376
+ type: Object,
377
+ attribute: 'optionactive'
378
+ },
379
+ matchWord: {
380
+ type: String,
381
+ attribute: 'matchword'
382
+ },
383
+ multiSelect: {
384
+ type: Boolean,
385
+ reflect: true,
386
+ attribute: 'multiselect'
387
+ },
388
+
389
+ /**
390
+ * Value selected for the component.
391
+ */
392
+ value: {
393
+ type: String,
394
+ reflect: true,
395
+ attribute: 'value'
396
+ },
397
+
398
+ /**
399
+ * Indent level for submenus.
400
+ * @private
401
+ */
402
+ level: {
403
+ type: Number,
404
+ reflect: false,
405
+ attribute: false
406
+ }
407
+ };
408
+ }
409
+
410
+ static get styles() {
411
+ return [
412
+ styleCss$2,
413
+ colorCss$2,
414
+ tokensCss$1
415
+ ];
416
+ }
417
+
418
+ /**
419
+ * This will register this element with the browser.
420
+ * @param {string} [name="auro-menu"] - The name of element that you want to register to.
421
+ *
422
+ * @example
423
+ * AuroMenu.register("custom-menu") // this will register this element to <custom-menu/>
424
+ *
425
+ */
426
+ static register(name = "auro-menu") {
427
+ AuroLibraryRuntimeUtils$1.prototype.registerComponent(name, AuroMenu);
428
+ }
429
+
430
+ /**
431
+ * Formatted value based on `multiSelect` state.
432
+ * Default type is `String`, changing to `Array<String>` when `multiSelect` is true.
433
+ * @private
434
+ * @returns {String|Array<String>}
435
+ */
436
+ get formattedValue() {
437
+ if (this.multiSelect) {
438
+ if (!this.value) {
439
+ return undefined;
440
+ }
441
+ if (this.value.startsWith("[")) {
442
+ return JSON.parse(this.value);
443
+ }
444
+ return [this.value];
445
+ }
446
+ return this.value;
447
+ }
448
+
449
+ // Lifecycle Methods
450
+
451
+ connectedCallback() {
452
+ super.connectedCallback();
453
+
454
+ this.addEventListener('keydown', this.handleKeyDown);
455
+ this.addEventListener('mousedown', this.handleMouseSelect);
456
+ this.addEventListener('auroMenuOption-mouseover', this.handleOptionHover);
457
+ this.addEventListener('slotchange', this.handleSlotChange);
458
+ this.setTagAttribute("auro-menu");
459
+ }
460
+
461
+ disconnectedCallback() {
462
+ this.removeEventListener('keydown', this.handleKeyDown);
463
+ this.removeEventListener('mousedown', this.handleMouseSelect);
464
+ this.removeEventListener('auroMenuOption-mouseover', this.handleOptionHover);
465
+ this.removeEventListener('slotchange', this.handleSlotChange);
466
+
467
+ super.disconnectedCallback();
468
+ }
469
+
470
+ firstUpdated() {
471
+ AuroLibraryRuntimeUtils$1.prototype.handleComponentTagRename(this, 'auro-menu');
472
+
473
+ this.loadingSlots = this.querySelectorAll("[slot='loadingText'], [slot='loadingIcon']");
474
+ this.initializeMenu();
475
+ }
476
+
477
+ /**
478
+ * Sets an attribute that matches the default tag name if the tag name is not the default.
479
+ * @param {string} tagName - The tag name to set as an attribute.
480
+ * @private
481
+ */
482
+ setTagAttribute(tagName) {
483
+ if (this.tagName.toLowerCase() !== tagName) {
484
+ this.setAttribute(tagName, true);
485
+ }
486
+ }
487
+
488
+ updated(changedProperties) {
489
+ super.updated(changedProperties);
490
+
491
+ if (changedProperties.has('multiSelect') && !changedProperties.has("value")) {
492
+ // Reset selection if multiSelect mode changes
493
+ this.clearSelection();
494
+ }
495
+
496
+
497
+ if (changedProperties.has("value")) {
498
+ // Handle null/undefined case
499
+ if (this.value === undefined || this.value === null) {
500
+ this.optionSelected = undefined;
501
+ this.index = -1;
502
+ } else {
503
+ if (this.multiSelect) {
504
+ // In multiselect mode, this.value should be an array of strings
505
+ const valueArray = this.formattedValue;
506
+ const matchingOptions = this.items.filter((item) => valueArray.includes(item.value));
507
+
508
+ this.optionSelected = matchingOptions.length > 0 ? matchingOptions : undefined;
509
+ } else {
510
+ // In single-select mode, this.value should be a string
511
+ const matchingOptions = this.items.find((item) => item.value === this.value);
512
+
513
+ if (matchingOptions) {
514
+ this.optionSelected = matchingOptions;
515
+ this.index = this.items.indexOf(matchingOptions);
516
+ } else {
517
+ // If no matching option found, reset selection
518
+ this.optionSelected = undefined;
519
+ this.index = -1;
520
+ }
521
+ }
522
+
523
+ // If no matching options were found in either mode
524
+ if (!this.optionSelected || (Array.isArray(this.optionSelected) && this.optionSelected.length === 0)) {
525
+ dispatchMenuEvent(this, 'auroMenu-selectValueFailure');
526
+ this.optionSelected = undefined;
527
+ this.index = -1;
528
+ }
529
+ }
530
+
531
+ // Update UI state
532
+ this.updateItemsState(new Map([
533
+ [
534
+ 'optionSelected',
535
+ true
536
+ ]
537
+ ]));
538
+
539
+ // Notify of changes
540
+ if (this.optionSelected !== undefined) {
541
+ this.notifySelectionChange();
542
+ }
543
+ }
544
+
545
+ // Process all other UI updates
546
+ this.updateItemsState(changedProperties);
547
+ }
548
+
549
+ /**
550
+ * Updates the UI state and appearance of menu items based on changed properties.
551
+ * @private
552
+ * @param {Map<string, boolean>} changedProperties - LitElement's changed properties map.
553
+ */
554
+ updateItemsState(changedProperties) {
555
+ if (!this.items) {
556
+ return;
557
+ }
558
+
559
+ // Handle noCheckmark propagation to all menus and options
560
+ if (changedProperties.has('noCheckmark') && this.noCheckmark) {
561
+ // Update both menus and options
562
+ this.querySelectorAll('auro-menu, [auro-menu], auro-menuoption, [auro-menuoption]').forEach((element) => element.setAttribute('noCheckmark', ''));
563
+ }
564
+
565
+ // Handle layout propagation to all menus and options
566
+ const propagationTargets = this.querySelectorAll('auro-menu, [auro-menu], auro-menuoption, [auro-menuoption]');
567
+ [
568
+ 'size',
569
+ 'shape'
570
+ ].forEach((prop) => {
571
+ if (changedProperties.has(prop)) {
572
+ propagationTargets.forEach((el) => {
573
+ el.setAttribute(prop, this[prop]);
574
+ });
575
+ }
576
+ });
577
+
578
+ // Regex for matchWord if needed
579
+ let regexWord = null;
580
+
581
+ if (changedProperties.has('matchWord') && this.matchWord && this.matchWord.length) {
582
+ const escapedWord = this.matchWord.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
583
+ regexWord = new RegExp(escapedWord, 'giu');
584
+ }
585
+
586
+ // Handle direct item updates
587
+ this.items.forEach((option) => {
588
+ // Update selection if option or value changed
589
+ if (changedProperties.has('optionSelected') || changedProperties.has('value')) {
590
+ const isSelected = this.isOptionSelected(option);
591
+ option.setAttribute('aria-selected', isSelected ? 'true' : 'false');
592
+
593
+ // Add/remove selected attribute based on state
594
+ if (isSelected) {
595
+ option.setAttribute('selected', '');
596
+ } else {
597
+ option.removeAttribute('selected');
598
+ }
599
+ }
600
+
601
+ // Update text highlighting if matchWord changed
602
+ if (changedProperties.has('matchWord') && regexWord &&
603
+ isOptionInteractive(option) && !option.hasAttribute('persistent')) {
604
+ const nested = option.querySelectorAll('.nestingSpacer');
605
+ // Create nested spacers
606
+ const nestingSpacerBundle = [...nested].map(() => this.nestingSpacer).join('');
607
+
608
+ // Update with spacers and matchWord
609
+ option.innerHTML = nestingSpacerBundle +
610
+ option.textContent.replace(
611
+ regexWord,
612
+ (match) => `<strong>${match}</strong>`
613
+ );
614
+ }
615
+
616
+ // Update disabled state
617
+ if (changedProperties.has('disabled')) {
618
+ option.disabled = this.disabled;
619
+ }
620
+ });
621
+
622
+ // Handle loading state changes
623
+ if (changedProperties.has('loading')) {
624
+ this.setAttribute("aria-busy", this.loading);
625
+ dispatchMenuEvent(this, "auroMenu-loadingChange", {
626
+ loading: this.loading,
627
+ hasLoadingPlaceholder: this.hasLoadingPlaceholder
628
+ });
629
+ }
630
+ }
631
+
632
+ // Init Methods
633
+
634
+ /**
635
+ * Initializes the menu's state and structure.
636
+ * @private
637
+ */
638
+ initializeMenu() {
639
+ this.initItems();
640
+ if (this.rootMenu) {
641
+ this.setAttribute('role', 'listbox');
642
+ this.setAttribute('root', '');
643
+ this.handleNestedMenus(this);
644
+ }
645
+ }
646
+
647
+ /**
648
+ * Initializes menu items and their attributes.
649
+ * @private
650
+ */
651
+ initItems() {
652
+ this.items = Array.from(this.querySelectorAll('auro-menuoption, [auro-menuoption]'));
653
+ if (this.noCheckmark) {
654
+ this.updateItemsState(new Map([
655
+ [
656
+ 'noCheckmark',
657
+ true
658
+ ]
659
+ ]));
660
+ }
661
+ }
662
+
663
+ // Logic Methods
664
+
665
+ /**
666
+ * Updates menu state when an option is selected.
667
+ * @private
668
+ * @param {HTMLElement} option - The option element to select.
669
+ */
670
+ handleSelectState(option) {
671
+ if (this.multiSelect) {
672
+ const currentValue = this.formattedValue || [];
673
+ const currentSelected = this.optionSelected || [];
674
+
675
+ if (!currentValue.includes(option.value)) {
676
+ this.value = JSON.stringify([
677
+ ...currentValue,
678
+ option.value
679
+ ]);
680
+ }
681
+ if (!currentSelected.includes(option)) {
682
+ this.optionSelected = [
683
+ ...currentSelected,
684
+ option
685
+ ];
686
+ }
687
+ } else {
688
+ // Single select - use arrays with single values
689
+ this.value = option.value;
690
+ this.optionSelected = option;
691
+ }
692
+
693
+ this.index = this.items.indexOf(option);
694
+ }
695
+
696
+ /**
697
+ * Deselects a menu option and updates related state.
698
+ * @private
699
+ * @param {HTMLElement} option - The menuoption to be deselected.
700
+ */
701
+ handleDeselectState(option) {
702
+ if (this.multiSelect) {
703
+ // Remove this option from array
704
+ const newFormattedValue = (this.formattedValue || []).filter((val) => val !== option.value);
705
+
706
+ // If array is empty after removal, set back to undefined
707
+ if (newFormattedValue && newFormattedValue.length === 0) {
708
+ this.value = undefined;
709
+ } else {
710
+ this.value = JSON.stringify(newFormattedValue);
711
+ }
712
+
713
+ this.optionSelected = this.optionSelected.filter((val) => val !== option);
714
+ if (this.optionSelected.length === 0) {
715
+ this.optionSelected = undefined;
716
+ }
717
+ } else {
718
+ // For single-select: Back to undefined when deselected
719
+ this.value = undefined;
720
+ this.optionSelected = undefined;
721
+ }
722
+
723
+ // Update the index tracking
724
+ this.index = this.items.indexOf(option);
725
+
726
+ // Update UI to reflect changes
727
+ this.updateItemsState(new Map([
728
+ [
729
+ 'optionSelected',
730
+ true
731
+ ]
732
+ ]));
733
+
734
+ // Notify of selection change
735
+ this.notifySelectionChange();
736
+ }
737
+
738
+ /**
739
+ * Resets all options to their default state.
740
+ * @private
741
+ */
742
+ clearSelection() {
743
+ this.optionSelected = undefined;
744
+ this.value = undefined;
745
+ }
746
+
747
+ /**
748
+ * Resets the menu to its initial state.
749
+ * This is the only way to return value to undefined.
750
+ * @public
751
+ */
752
+ reset() {
753
+ // Reset to undefined - initial state
754
+ this.value = undefined;
755
+ this.optionSelected = undefined;
756
+ this.index = -1;
757
+
758
+ // Reset UI state
759
+ this.updateItemsState(new Map([
760
+ [
761
+ 'optionSelected',
762
+ true
763
+ ]
764
+ ]));
765
+
766
+ // Dispatch reset event
767
+ dispatchMenuEvent(this, 'auroMenu-selectValueReset');
768
+ }
769
+
770
+ /**
771
+ * Handles nested menu structure.
772
+ * @private
773
+ * @param {HTMLElement} menu - Root menu element.
774
+ */
775
+ handleNestedMenus(menu) {
776
+ menu.level = menu.parentElement.level >= 0 ? menu.parentElement.level + 1 : 0;
777
+
778
+ if (menu.level > 0) {
779
+ menu.setAttribute('role', 'group');
780
+ menu.removeAttribute("root");
781
+ if (!menu.hasAttribute('aria-label')) {
782
+ menu.setAttribute('aria-label', 'submenu');
783
+ }
784
+ }
785
+
786
+ const options = menu.querySelectorAll(':scope > auro-menuoption, :scope > [auro-menuoption]');
787
+ options.forEach((option) => {
788
+ const regex = new RegExp(this.nestingSpacer, "gu");
789
+ option.innerHTML = this.nestingSpacer.repeat(menu.level) + option.innerHTML.replace(regex, '');
790
+ });
791
+ }
792
+
793
+ // Event Handlers
794
+
795
+ /**
796
+ * Handles keyboard navigation.
797
+ * @private
798
+ * @param {KeyboardEvent} event - Event object from the browser.
799
+ */
800
+ handleKeyDown(event) {
801
+ event.preventDefault();
802
+ switch (event.key) {
803
+ case "ArrowDown":
804
+ this.navigateOptions('down');
805
+ break;
806
+ case "ArrowUp":
807
+ this.navigateOptions('up');
808
+ break;
809
+ case "Enter":
810
+ this.makeSelection();
811
+ break;
812
+ }
813
+ }
814
+
815
+ /**
816
+ * Makes a selection based on the current index or clicked option.
817
+ * @private
818
+ */
819
+ makeSelection() {
820
+ if (!this.items) {
821
+ this.initItems();
822
+ }
823
+
824
+ // Get currently selected menu option based on index
825
+ const option = this.items[this.index];
826
+
827
+ // Return early if option is not interactive
828
+ if (!option || !isOptionInteractive(option)) {
829
+ return;
830
+ }
831
+
832
+ // Handle custom events first
833
+ if (option.hasAttribute('event')) {
834
+ this.handleCustomEvent(option);
835
+ return;
836
+ }
837
+
838
+ if (this.multiSelect) {
839
+ // In multiselect, toggle individual selections
840
+ this.toggleOption(option);
841
+ // In single select, only handle selection of new options
842
+ } else if (!this.isOptionSelected(option)) {
843
+ this.clearSelection();
844
+ this.handleSelectState(option);
845
+ }
846
+
847
+ this.notifySelectionChange();
848
+ }
849
+
850
+ /**
851
+ * Toggle the selection state of the menuoption.
852
+ * @private
853
+ * @param {HTMLElement} option - The menuoption to toggle.
854
+ */
855
+ toggleOption(option) {
856
+ const isCurrentlySelected = this.isOptionSelected(option);
857
+
858
+ if (isCurrentlySelected) {
859
+ this.handleDeselectState(option);
860
+ } else if (option.value === undefined || option.value === '') {
861
+ dispatchMenuEvent(this, 'auroMenu-selectValueFailure');
862
+ } else {
863
+ this.handleSelectState(option);
864
+ }
865
+ }
866
+
867
+ /**
868
+ * Handles option selection via mouse.
869
+ * @private
870
+ * @param {MouseEvent} event - Event object from the browser.
871
+ */
872
+ handleMouseSelect(event) {
873
+ if (event.target === this) {
874
+ return;
875
+ }
876
+
877
+ const option = event.target.closest('auro-menuoption, [auro-menuoption]');
878
+ if (option) {
879
+ this.index = this.items.indexOf(option);
880
+ this.makeSelection();
881
+ }
882
+ }
883
+
884
+ /**
885
+ * Handles option hover events.
886
+ * @private
887
+ * @param {CustomEvent} event - Event object from the browser.
888
+ */
889
+ handleOptionHover(event) {
890
+ const option = event.target;
891
+ this.index = this.items.indexOf(option);
892
+ this.updateActiveOption(this.index);
893
+ }
894
+
895
+ /**
896
+ * Handles slot change events.
897
+ * @private
898
+ */
899
+ handleSlotChange() {
900
+ if (this.parentElement && this.parentElement.closest('auro-menu, [auro-menu]')) {
901
+ this.rootMenu = false;
902
+ }
903
+
904
+ if (this.rootMenu) {
905
+ this.initializeMenu();
906
+ } else if (this.noCheckmark) {
907
+ this.updateItemsState(new Map([
908
+ [
909
+ 'noCheckmark',
910
+ true
911
+ ]
912
+ ]));
913
+ }
914
+ }
915
+
916
+ /**
917
+ * Navigates through options using keyboard.
918
+ * @private
919
+ * @param {string} direction - 'up' or 'down'.
920
+ */
921
+ navigateOptions(direction) {
922
+ // Return early if no items exist
923
+ if (!this.items || !this.items.length) {
924
+ return;
925
+ }
926
+
927
+ let newIndex = this.index;
928
+ const increment = direction === 'down' ? 1 : -1;
929
+ const maxIterations = this.items.length;
930
+ let iterations = 0;
931
+ let foundInteractiveOption = false;
932
+
933
+ do {
934
+ newIndex = (newIndex + increment + this.items.length) % this.items.length;
935
+ iterations += 1;
936
+
937
+ // Check if current option is interactive
938
+ const currentOption = this.items[newIndex];
939
+ if (isOptionInteractive(currentOption)) {
940
+ foundInteractiveOption = true;
941
+ break;
942
+ }
943
+
944
+ // Break if all options were checked
945
+ if (iterations >= maxIterations) {
946
+ break;
947
+ }
948
+ } while (iterations < maxIterations);
949
+
950
+ // Handle the results of the search
951
+ if (foundInteractiveOption) {
952
+ // Update only if an interactive option was found
953
+ this.index = newIndex;
954
+ this.updateActiveOption(this.index);
955
+ } else {
956
+ // All options are disabled or non-interactive
957
+ // Keep the current index unchanged
958
+ dispatchMenuEvent(this, 'auroMenu-navigateFailure', {
959
+ reason: 'No interactive options available',
960
+ direction,
961
+ currentIndex: this.index
962
+ });
963
+ }
964
+ }
965
+
966
+ /**
967
+ * Updates the active option state and dispatches events.
968
+ * @private
969
+ * @param {number} index - Index of the option to make active.
970
+ */
971
+ updateActiveOption(index) {
972
+ if (!this.items || !this.items[index]) {
973
+ return;
974
+ }
975
+
976
+ this.items.forEach((item) => item.classList.remove('active'));
977
+ this.items[index].classList.add('active');
978
+ this.optionActive = this.items[index];
979
+ this.index = index;
980
+
981
+ dispatchMenuEvent(this, 'auroMenu-activatedOption', this.items[index]);
982
+ }
983
+
984
+ /**
985
+ * Handles custom events defined on options.
986
+ * @private
987
+ * @param {HTMLElement} option - Option with custom event.
988
+ */
989
+ handleCustomEvent(option) {
990
+ const eventName = option.getAttribute('event');
991
+ dispatchMenuEvent(this, eventName);
992
+ dispatchMenuEvent(this, 'auroMenu-customEventFired');
993
+ }
994
+
995
+ /**
996
+ * Notifies selection change to parent components.
997
+ * @private
998
+ */
999
+ notifySelectionChange() {
1000
+ dispatchMenuEvent(this, 'auroMenu-selectedOption');
1001
+ }
1002
+
1003
+ /**
1004
+ * Checks if an option is currently selected.
1005
+ * @private
1006
+ * @param {HTMLElement} option - The option to check.
1007
+ * @returns {boolean}
1008
+ */
1009
+ isOptionSelected(option) {
1010
+ if (!this.optionSelected) {
1011
+ return false;
1012
+ }
1013
+
1014
+ if (this.multiSelect) {
1015
+ // In multi-select mode, check if the option is in the selected array
1016
+ return Array.isArray(this.optionSelected) && this.optionSelected.some((selectedOption) => selectedOption === option);
1017
+ }
1018
+
1019
+ return this.optionSelected === option;
1020
+ }
1021
+
1022
+ /**
1023
+ * Getter for loading placeholder state.
1024
+ * @returns {boolean} - True if loading slots are present and non-empty.
1025
+ */
1026
+ get hasLoadingPlaceholder() {
1027
+ return this.loadingSlots && this.loadingSlots.length > 0;
1028
+ }
1029
+
1030
+ /**
1031
+ * Getter for wrapper classes based on size.
1032
+ * @returns {Object} - Class map for the wrapper element.
1033
+ * @private
1034
+ */
1035
+ get wrapperClasses() {
1036
+ return classMap({
1037
+ 'menuWrapper': true,
1038
+ [this.size]: true,
1039
+ });
1040
+ }
1041
+
1042
+ /**
1043
+ * Logic to determine the layout of the component.
1044
+ * @protected
1045
+ * @returns {void}
1046
+ */
1047
+ renderLayout() {
1048
+ if (this.loading) {
1049
+ return html`
1050
+ <div class="${this.wrapperClasses}">
1051
+ <auro-menuoption
1052
+ disabled
1053
+ loadingplaceholder
1054
+ class="${this.hasLoadingPlaceholder ? "" : "empty"}"
1055
+ >
1056
+ <div>
1057
+ <slot name="loadingIcon" class="body-lg"></slot>
1058
+ <slot name="loadingText"></slot>
1059
+ </div>
1060
+ </auro-menuoption>
1061
+ </div>
1062
+ `;
1063
+ }
1064
+
1065
+ return html`
1066
+ <div class="${this.wrapperClasses}">
1067
+ <slot @slotchange=${this.handleSlotChange}></slot>
1068
+ </div>
1069
+ `;
1070
+ }
1071
+ }
1072
+
1073
+ var styleCss$1 = css`.body-default{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem))}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem))}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem))}.display-md{font-family:var(--wcss-display-md-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-md-letter-spacing, 0);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem))}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem))}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem))}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem))}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem))}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem))}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem))}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);font-weight:var(--wcss-heading-xs-weight, 450);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem))}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);font-weight:var(--wcss-heading-2xs-weight, 450);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem))}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));text-transform:uppercase}:host{cursor:pointer;user-select:none}:host .wrapper{display:flex;align-items:center;padding-right:var(--ds-size-200, 1rem);padding-left:calc(var(--ds-size-150, 0.75rem) + var(--ds-size-300, 1.5rem) + var(--ds-size-100, 0.5rem));padding-top:var(--ds-size-50, 0.25rem);padding-bottom:var(--ds-size-50, 0.25rem);border-radius:var(--ds-size-100, 0.5rem);-webkit-tap-highlight-color:transparent}:host .wrapper[class*=shape-box]{border-radius:unset}:host .wrapper[class*=shape-snowflake]{border-radius:unset;line-height:24px}:host .wrapper[class*=shape-pill]{border-radius:30px}:host .wrapper[class*=-lg]{padding-top:var(--ds-size-75, 0.375rem);padding-bottom:var(--ds-size-75, 0.375rem);padding-right:var(--ds-size-150, 0.75rem);line-height:26px}:host .wrapper[class*=-xl]{padding-top:var(--ds-size-100, 0.5rem);padding-bottom:var(--ds-size-100, 0.5rem);padding-right:var(--ds-size-200, 1rem);line-height:26px}:host slot{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host [auro-icon]{--ds-auro-icon-size: var(--ds-size-300, 1.5rem);margin-right:var(--ds-size-150, 0.75rem);margin-left:var(--ds-size-100, 0.5rem)}:host ::slotted(.nestingSpacer){display:inline-block;width:var(--ds-size-300, 1.5rem)}:host([loadingplaceholder]) .wrapper{padding-left:calc(var(--ds-size-150, 0.75rem) + var(--ds-size-300, 1.5rem) + var(--ds-size-100, 0.5rem))}:host([selected]) .wrapper{padding-left:0}:host([nocheckmark]) .wrapper{padding-left:var(--ds-size-150, 0.75rem)}:host([nocheckmark]) .wrapper[class*=-lg]{padding-left:var(--ds-size-150, 0.75rem)}:host([nocheckmark]) .wrapper[class*=-xl]{padding-left:var(--ds-size-200, 1rem)}:host([hidden]){display:none}:host([static]){pointer-events:none}:host([disabled]:hover){cursor:auto}:host([disabled]){user-select:none;pointer-events:none}`;
1074
+
1075
+ var colorCss$1 = css`:host .wrapper{background-color:var(--ds-auro-menuoption-container-color, transparent);box-shadow:inset 0 0 0 1px var(--ds-auro-menuoption-container-border-color, transparent);color:var(--ds-auro-menuoption-text-color)}:host svg{fill:var(--ds-auro-menuoption-icon-color)}:host([disabled]){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-menuoption-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-menuoption-icon-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host(:hover),:host(.active){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-muted, #ebfafd)}:host(:focus){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-menuoption-container-border-color: var(--ds-basic-color-border-brand, #00274a)}:host([selected]){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-subtle, #b4eff9);--ds-auro-menuoption-text-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-menuoption-icon-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([selected]:hover),:host([selected].active){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-muted, #ebfafd)}:host([selected]:focus){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-subtle, #b4eff9);--ds-auro-menuoption-container-border-color: var(--ds-basic-color-border-brand, #00274a)}:host(:focus:hover),:host(:focus.active){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-muted, #ebfafd);--ds-auro-menuoption-container-border-color: var(--ds-basic-color-border-brand, #00274a)}:host([selected]:focus:hover),:host([selected]:focus.active){--ds-auro-menuoption-container-color: var(--ds-basic-color-surface-accent1-muted, #ebfafd);--ds-auro-menuoption-container-border-color: var(--ds-basic-color-border-brand, #00274a)}`;
1076
+
1077
+ // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1078
+ // See LICENSE in the project root for license information.
1079
+
1080
+
1081
+ class AuroDependencyVersioning {
1082
+
1083
+ /**
1084
+ * Generates a unique string to be used for child auro element naming.
1085
+ * @private
1086
+ * @param {string} baseName - Defines the first part of the unique element name.
1087
+ * @param {string} version - Version of the component that will be appended to the baseName.
1088
+ * @returns {string} - Unique string to be used for naming.
1089
+ */
1090
+ generateElementName(baseName, version) {
1091
+ let result = baseName;
1092
+
1093
+ result += '-';
1094
+ result += version.replace(/[.]/g, '_');
1095
+
1096
+ return result;
1097
+ }
1098
+
1099
+ /**
1100
+ * Generates a unique string to be used for child auro element naming.
1101
+ * @param {string} baseName - Defines the first part of the unique element name.
1102
+ * @param {string} version - Version of the component that will be appended to the baseName.
1103
+ * @returns {string} - Unique string to be used for naming.
1104
+ */
1105
+ generateTag(baseName, version, tagClass) {
1106
+ const elementName = this.generateElementName(baseName, version);
1107
+ const tag = literal`${unsafeStatic(elementName)}`;
1108
+
1109
+ if (!customElements.get(elementName)) {
1110
+ customElements.define(elementName, class extends tagClass {});
1111
+ }
1112
+
1113
+ return tag;
1114
+ }
1115
+ }
1116
+
1117
+ // Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1118
+ // See LICENSE in the project root for license information.
1119
+
1120
+
1121
+ /**
1122
+ * @attr {Boolean} hidden - If present, the component will be hidden both visually and from screen readers
1123
+ * @attr {Boolean} hiddenVisually - If present, the component will be hidden visually, but still read by screen readers
1124
+ * @attr {Boolean} hiddenAudible - If present, the component will be hidden from screen readers, but seen visually
1125
+ */
1126
+
1127
+ class AuroElement extends LitElement {
1128
+
1129
+ // function to define props used within the scope of this component
1130
+ static get properties() {
1131
+ return {
1132
+ hidden: { type: Boolean,
1133
+ reflect: true },
1134
+ hiddenVisually: { type: Boolean,
1135
+ reflect: true },
1136
+ hiddenAudible: { type: Boolean,
1137
+ reflect: true },
1138
+ };
1139
+ }
1140
+
1141
+ /**
1142
+ * @private Function that determines state of aria-hidden
1143
+ */
1144
+ hideAudible(value) {
1145
+ if (value) {
1146
+ return 'true'
1147
+ }
1148
+
1149
+ return 'false'
1150
+ }
1151
+ }
1152
+
1153
+ var error = {"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" aria-labelledby=\"error__desc\" class=\"ico_squareLarge\" data-deprecated=\"true\" role=\"img\" style=\"min-width:var(--auro-size-lg, var(--ds-size-300, 1.5rem));height:var(--auro-size-lg, var(--ds-size-300, 1.5rem));fill:currentColor\" viewBox=\"0 0 24 24\" part=\"svg\"><title/><desc id=\"error__desc\">Error alert indicator.</desc><path d=\"m13.047 5.599 6.786 11.586A1.207 1.207 0 0 1 18.786 19H5.214a1.207 1.207 0 0 1-1.047-1.815l6.786-11.586a1.214 1.214 0 0 1 2.094 0m-1.165.87a.23.23 0 0 0-.085.085L5.419 17.442a.232.232 0 0 0 .203.35h12.756a.234.234 0 0 0 .203-.35L12.203 6.554a.236.236 0 0 0-.321-.084M12 15.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5m-.024-6.22c.325 0 .589.261.589.583v4.434a.586.586 0 0 1-.589.583.586.586 0 0 1-.588-.583V9.863c0-.322.264-.583.588-.583\"/></svg>"};
1154
+
1155
+ /* eslint-disable no-underscore-dangle, jsdoc/no-undefined-types, jsdoc/require-param-description */
1156
+
1157
+ const _fetchMap = new Map();
1158
+
1159
+ /**
1160
+ * A callback to parse Response body.
1161
+ *
1162
+ * @callback ResponseParser
1163
+ * @param {Fetch.Response} response
1164
+ * @returns {Promise}
1165
+ */
1166
+
1167
+ /**
1168
+ * A minimal in-memory map to de-duplicate Fetch API media requests.
1169
+ *
1170
+ * @param {String} uri
1171
+ * @param {Object} [options={}]
1172
+ * @param {ResponseParser} [options.responseParser=(response) => response.text()]
1173
+ * @returns {Promise}
1174
+ */
1175
+ const cacheFetch = (uri, options = {}) => {
1176
+ const responseParser = options.responseParser || ((response) => response.text());
1177
+ if (!_fetchMap.has(uri)) {
1178
+ _fetchMap.set(uri, fetch(uri).then(responseParser));
1179
+ }
1180
+ return _fetchMap.get(uri);
1181
+ };
1182
+
1183
+ var styleCss = css`:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.ico_squareLarge{fill:currentColor;height:var(--auro-size-lg, var(--ds-size-300, 1.5rem))}.ico_squareSmall{fill:currentColor;height:.6rem}.ico_squareMed{fill:currentColor;height:var(--auro-size-md, var(--ds-size-200, 1rem))}.ico_squareSml{fill:currentColor;height:var(--auro-size-sm, var(--ds-size-150, 0.75rem))}:host{color:currentColor;vertical-align:middle;line-height:1;display:inline-block}svg{min-width:var(--ds-auro-icon-size, 1.5rem) !important;width:var(--ds-auro-icon-size, 1.5rem) !important;height:var(--ds-auro-icon-size, 1.5rem) !important}.componentWrapper{display:flex}.svgWrapper{height:var(--ds-auro-icon-size);width:var(--ds-auro-icon-size)}.labelWrapper{margin-left:var(--ds-size-50, 0.25rem);line-height:1.8}`;
1184
+
1185
+ // Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1186
+ // See LICENSE in the project root for license information.
1187
+
1188
+
1189
+ // See https://git.io/JJ6SJ for "How to document your components using JSDoc"
1190
+ /**
1191
+ * @slot - Hidden from visibility, used for a11y if icon description is needed
1192
+ */
1193
+
1194
+ // build the component class
1195
+ class BaseIcon extends AuroElement {
1196
+ constructor() {
1197
+ super();
1198
+ this.onDark = false;
1199
+ }
1200
+
1201
+ // function to define props used within the scope of this component
1202
+ static get properties() {
1203
+ return {
1204
+ ...super.properties,
1205
+
1206
+ /**
1207
+ * Set value for on-dark version of auro-icon.
1208
+ */
1209
+ onDark: {
1210
+ type: Boolean,
1211
+ reflect: true
1212
+ },
1213
+
1214
+ /**
1215
+ * @private
1216
+ */
1217
+ svg: {
1218
+ attribute: false,
1219
+ reflect: true
1220
+ }
1221
+ };
1222
+ }
1223
+
1224
+ static get styles() {
1225
+ return css`
1226
+ ${styleCss}
1227
+ `;
1228
+ }
1229
+
1230
+ /**
1231
+ * Async function to fetch requested icon from npm CDN.
1232
+ * @private
1233
+ * @param {string} category - Icon category.
1234
+ * @param {string} name - Icon name.
1235
+ * @returns {SVGElement} DOM - Ready HTML to be appended.
1236
+ */
1237
+ async fetchIcon(category, name) {
1238
+ let iconHTML = '';
1239
+
1240
+ if (category === 'logos') {
1241
+ iconHTML = await cacheFetch(`${this.uri}/${category}/${name}.svg`);
1242
+ } else {
1243
+ iconHTML = await cacheFetch(`${this.uri}/icons/${category}/${name}.svg`);
1244
+ }
1245
+
1246
+ const dom = new DOMParser().parseFromString(iconHTML, 'text/html');
1247
+
1248
+ return dom.body.querySelector('svg');
1249
+ }
1250
+
1251
+ // lifecycle function
1252
+ async firstUpdated() {
1253
+ if (!this.customSvg) {
1254
+ const svg = await this.fetchIcon(this.category, this.name);
1255
+
1256
+ if (svg) {
1257
+ this.svg = svg;
1258
+ } else if (!svg) {
1259
+ const penDOM = new DOMParser().parseFromString(error.svg, 'text/html');
1260
+
1261
+ this.svg = penDOM.body.firstChild;
1262
+ }
1263
+ }
1264
+ }
1265
+ }
1266
+
1267
+ var tokensCss = css`:host{--ds-auro-icon-color:var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-alaska-color:#02426D;--ds-auro-icon-size:var(--ds-size-300, 1.5rem)}`;
1268
+
1269
+ var colorCss = css`:host{color:var(--ds-auro-icon-color)}:host([customColor]){color:inherit}:host(:not([onDark])[variant=accent1]){--ds-auro-icon-color:var(--ds-basic-color-texticon-accent1, #265688)}:host(:not([onDark])[variant=disabled]){--ds-auro-icon-color:var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host(:not([onDark])[variant=muted]){--ds-auro-icon-color:var(--ds-basic-color-texticon-muted, #676767)}:host(:not([onDark])[variant=statusDefault]){--ds-auro-icon-color:var(--ds-basic-color-status-default, #afb9c6)}:host(:not([onDark])[variant=statusInfo]){--ds-auro-icon-color:var(--ds-basic-color-status-info, #01426a)}:host(:not([onDark])[variant=statusSuccess]){--ds-auro-icon-color:var(--ds-basic-color-status-success, #447a1f)}:host(:not([onDark])[variant=statusWarning]){--ds-auro-icon-color:var(--ds-basic-color-status-warning, #fac200)}:host(:not([onDark])[variant=statusError]){--ds-auro-icon-color:var(--ds-basic-color-status-error, #e31f26)}:host(:not([onDark])[variant=statusInfoSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-info-subtle, #ebf3f9)}:host(:not([onDark])[variant=statusSuccessSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-success-subtle, #d6eac7)}:host(:not([onDark])[variant=statusWarningSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-warning-subtle, #fff0b2)}:host(:not([onDark])[variant=statusErrorSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host(:not([onDark])[variant=fareBasicEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-basiceconomy, #97eaf8)}:host(:not([onDark])[variant=fareBusiness]){--ds-auro-icon-color:var(--ds-basic-color-fare-business, #01426a)}:host(:not([onDark])[variant=fareEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-economy, #0074ca)}:host(:not([onDark])[variant=fareFirst]){--ds-auro-icon-color:var(--ds-basic-color-fare-first, #00274a)}:host(:not([onDark])[variant=farePremiumEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-premiumeconomy, #005154)}:host(:not([onDark])[variant=tierOneWorldEmerald]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-emerald, #139142)}:host(:not([onDark])[variant=tierOneWorldSapphire]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-sapphire, #015daa)}:host(:not([onDark])[variant=tierOneWorldRuby]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-ruby, #a41d4a)}:host([onDark]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse, #ffffff)}:host([onDark][variant=disabled]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}:host([onDark][variant=muted]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}:host([onDark][variant=statusError]){--ds-auro-icon-color:var(--ds-advanced-color-state-error-inverse, #f9a4a8)}`;
1270
+
1271
+ // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1272
+ // See LICENSE in the project root for license information.
1273
+
1274
+ // ---------------------------------------------------------------------
1275
+
1276
+ /* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */
1277
+
1278
+ class AuroLibraryRuntimeUtils {
1279
+
1280
+ /* eslint-disable jsdoc/require-param */
1281
+
1282
+ /**
1283
+ * This will register a new custom element with the browser.
1284
+ * @param {String} name - The name of the custom element.
1285
+ * @param {Object} componentClass - The class to register as a custom element.
1286
+ * @returns {void}
1287
+ */
1288
+ registerComponent(name, componentClass) {
1289
+ if (!customElements.get(name)) {
1290
+ customElements.define(name, class extends componentClass {});
1291
+ }
1292
+ }
1293
+
1294
+ /**
1295
+ * Finds and returns the closest HTML Element based on a selector.
1296
+ * @returns {void}
1297
+ */
1298
+ closestElement(
1299
+ selector, // selector like in .closest()
1300
+ base = this, // extra functionality to skip a parent
1301
+ __Closest = (el, found = el && el.closest(selector)) =>
1302
+ !el || el === document || el === window
1303
+ ? null // standard .closest() returns null for non-found selectors also
1304
+ : found
1305
+ ? found // found a selector INside this element
1306
+ : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM
1307
+ ) {
1308
+ return __Closest(base);
1309
+ }
1310
+ /* eslint-enable jsdoc/require-param */
1311
+
1312
+ /**
1313
+ * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.
1314
+ * @param {Object} elem - The element to check.
1315
+ * @param {String} tagName - The name of the Auro component to check for or add as an attribute.
1316
+ * @returns {void}
1317
+ */
1318
+ handleComponentTagRename(elem, tagName) {
1319
+ const tag = tagName.toLowerCase();
1320
+ const elemTag = elem.tagName.toLowerCase();
1321
+
1322
+ if (elemTag !== tag) {
1323
+ elem.setAttribute(tag, true);
1324
+ }
1325
+ }
1326
+
1327
+ /**
1328
+ * Validates if an element is a specific Auro component.
1329
+ * @param {Object} elem - The element to validate.
1330
+ * @param {String} tagName - The name of the Auro component to check against.
1331
+ * @returns {Boolean} - Returns true if the element is the specified Auro component.
1332
+ */
1333
+ elementMatch(elem, tagName) {
1334
+ const tag = tagName.toLowerCase();
1335
+ const elemTag = elem.tagName.toLowerCase();
1336
+
1337
+ return elemTag === tag || elem.hasAttribute(tag);
1338
+ }
1339
+ }
1340
+
1341
+ // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1342
+ // See LICENSE in the project root for license information.
1343
+
1344
+
1345
+ class AuroIcon extends BaseIcon {
1346
+ constructor() {
1347
+ super();
1348
+
1349
+ this.variant = undefined;
1350
+ this.privateDefaults();
1351
+ }
1352
+
1353
+ /**
1354
+ * Internal Defaults.
1355
+ * @private
1356
+ * @returns {void}
1357
+ */
1358
+ privateDefaults() {
1359
+ this.uri = 'https://cdn.jsdelivr.net/npm/@alaskaairux/icons@latest/dist';
1360
+ this.runtimeUtils = new AuroLibraryRuntimeUtils();
1361
+ }
1362
+
1363
+ // function to define props used within the scope of this component
1364
+ static get properties() {
1365
+ return {
1366
+ ...super.properties,
1367
+
1368
+ /**
1369
+ * Set aria-hidden value. Default is `true`. Option is `false`.
1370
+ */
1371
+ ariaHidden: {
1372
+ type: String,
1373
+ reflect: true
1374
+ },
1375
+
1376
+ /**
1377
+ * The category of the icon you are looking for. See https://auro.alaskaair.com/icons/usage.
1378
+ */
1379
+ category: {
1380
+ type: String,
1381
+ reflect: true
1382
+ },
1383
+
1384
+ /**
1385
+ * Allows custom color to be set.
1386
+ */
1387
+ customColor: {
1388
+ type: Boolean,
1389
+ reflect: true
1390
+ },
1391
+
1392
+ /**
1393
+ * When true, auro-icon will render a custom SVG inside the default slot.
1394
+ */
1395
+ customSvg: {
1396
+ type: Boolean
1397
+ },
1398
+
1399
+ /**
1400
+ * Exposes content in slot as icon label.
1401
+ */
1402
+ label: {
1403
+ type: Boolean,
1404
+ reflect: true
1405
+ },
1406
+
1407
+ /**
1408
+ * The name of the icon you are looking for without the file extension. See https://auro.alaskaair.com/icons/usage.
1409
+ */
1410
+ name: {
1411
+ type: String,
1412
+ reflect: true
1413
+ },
1414
+
1415
+ /**
1416
+ * The style of the icon. The accepted variants are `accent1`, `disabled`, `muted`, `statusDefault`, `statusInfo`, `statusSuccess`, `statusWarning`, `statusError`, `statusInfoSubtle`, `statusSuccessSubtle`, `statusWarningSubtle`, `statusErrorSubtle`, `fareBasicEconomy`, `fareBusiness`, `fareEconomy`, `fareFirst`, `farePremiumEconomy`, `tierOneWorldEmerald`, `tierOneWorldSapphire`, `tierOneWorldRuby`.
1417
+ */
1418
+ variant: {
1419
+ type: String,
1420
+ reflect: true
1421
+ }
1422
+ };
1423
+ }
1424
+
1425
+ static get styles() {
1426
+ return [
1427
+ super.styles,
1428
+ css`${tokensCss}`,
1429
+ css`${styleCss}`,
1430
+ css`${colorCss}`
1431
+ ];
1432
+ }
1433
+
1434
+ /**
1435
+ * This will register this element with the browser.
1436
+ * @param {string} [name="auro-icon"] - The name of element that you want to register to.
1437
+ *
1438
+ * @example
1439
+ * AuroIcon.register("custom-icon") // this will register this element to <custom-icon/>
1440
+ *
1441
+ */
1442
+ static register(name = "auro-icon") {
1443
+ AuroLibraryRuntimeUtils.prototype.registerComponent(name, AuroIcon);
1444
+ }
1445
+
1446
+ connectedCallback() {
1447
+ super.connectedCallback();
1448
+
1449
+ // Add the tag name as an attribute if it is different than the component name
1450
+ this.runtimeUtils.handleComponentTagRename(this, 'auro-icon');
1451
+ }
1452
+
1453
+ /**
1454
+ * @private
1455
+ * @returns {void} Exposes CSS parts for styling from parent components.
1456
+ */
1457
+ exposeCssParts() {
1458
+ this.setAttribute('exportparts', 'svg:iconSvg');
1459
+ }
1460
+
1461
+ async firstUpdated() {
1462
+ await super.firstUpdated();
1463
+
1464
+ /**
1465
+ * icons provide a description for screen readers. Icon only instances Auro-button
1466
+ * depend on this description to provide context for the user using a screen reader.
1467
+ * Removes the SVG description for screen reader if ariaHidden is set to true.
1468
+ */
1469
+ if (this.hasAttribute('ariaHidden') && this.svg) {
1470
+ const svgDesc = this.svg.querySelector('desc');
1471
+
1472
+ if (svgDesc) {
1473
+ svgDesc.remove();
1474
+ this.svg.removeAttribute('aria-labelledby');
1475
+ }
1476
+ }
1477
+ }
1478
+
1479
+ // function that renders the HTML and CSS into the scope of the component
1480
+ render() {
1481
+ const labelClasses = {
1482
+ 'labelWrapper': true,
1483
+ 'util_displayHiddenVisually': !this.label
1484
+ };
1485
+
1486
+ const svgClasses = {
1487
+ 'svgWrapper': true,
1488
+ };
1489
+
1490
+ return html`
1491
+ <div class="componentWrapper">
1492
+ <div
1493
+ class="${classMap(svgClasses)}"
1494
+ title="${ifDefined(this.title || undefined)}">
1495
+ <span aria-hidden="${ifDefined(this.ariaHidden || true)}" part="svg">
1496
+ ${this.customSvg ? html`
1497
+ <slot name="svg"></slot>
1498
+ ` : html`
1499
+ ${this.svg}
1500
+ `
1501
+ }
1502
+ </span>
1503
+ </div>
1504
+
1505
+ <div class="${classMap(labelClasses)}">
1506
+ <slot></slot>
1507
+ </div>
1508
+ </div>
1509
+ `;
1510
+ }
1511
+ }
1512
+
1513
+ var iconVersion = '8.1.1';
1514
+
1515
+ var checkmarkIcon = {"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" aria-labelledby=\"checkmark-sm__desc\" class=\"ico_squareLarge\" role=\"img\" style=\"min-width:var(--auro-size-lg, var(--ds-size-300, 1.5rem));height:var(--auro-size-lg, var(--ds-size-300, 1.5rem));fill:currentColor\" viewBox=\"0 0 24 24\" part=\"svg\"><title/><desc id=\"checkmark-sm__desc\">a small check mark.</desc><path d=\"M8.461 11.84a.625.625 0 1 0-.922.844l2.504 2.738c.247.27.674.27.922 0l5.496-6a.625.625 0 1 0-.922-.844l-5.035 5.496z\"/></svg>"};
1516
+
1517
+ // Copyright (c) 2021 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1518
+ // See LICENSE in the project root for license information.
1519
+
1520
+
1521
+ /**
1522
+ * The auro-menu element provides users a way to define a menu option.
1523
+ *
1524
+ * @attr {String} value - Specifies the value to be sent to a server.
1525
+ * @attr {String} noCheckmark - When true, selected option will not show the checkmark.
1526
+ * @attr {Boolean} disabled - When true specifies that the menuoption is disabled.
1527
+ * @attr {Boolean} selected - Specifies that an option is selected.
1528
+ * @event auroMenuOption-mouseover - Notifies that this option has been hovered over.
1529
+ * @slot - Specifies text for an option, but is not the value.
1530
+ */
1531
+ class AuroMenuOption extends AuroElement$1 {
1532
+ constructor() {
1533
+ super();
1534
+
1535
+ /**
1536
+ * @private
1537
+ */
1538
+ this.shape = undefined;
1539
+
1540
+ /**
1541
+ * @private
1542
+ */
1543
+ this.size = undefined;
1544
+
1545
+ /**
1546
+ * Generate unique names for dependency components.
1547
+ */
1548
+ const versioning = new AuroDependencyVersioning();
1549
+ this.iconTag = versioning.generateTag('auro-formkit-menuoption-icon', iconVersion, AuroIcon);
1550
+
1551
+ this.selected = false;
1552
+ this.nocheckmark = false;
1553
+ this.disabled = false;
1554
+
1555
+ /**
1556
+ * @private
1557
+ */
1558
+ this.tabIndex = -1;
1559
+
1560
+ /**
1561
+ * @private
1562
+ */
1563
+ this.runtimeUtils = new AuroLibraryRuntimeUtils$1();
1564
+ }
1565
+
1566
+ static get properties() {
1567
+ return {
1568
+ ...super.properties,
1569
+ nocheckmark: {
1570
+ type: Boolean,
1571
+ reflect: true
1572
+ },
1573
+ selected: {
1574
+ type: Boolean,
1575
+ reflect: true
1576
+ },
1577
+ disabled: {
1578
+ type: Boolean,
1579
+ reflect: true
1580
+ },
1581
+ value: {
1582
+ type: String
1583
+ },
1584
+ tabIndex: {
1585
+ type: Number,
1586
+ reflect: true
1587
+ }
1588
+ };
1589
+ }
1590
+
1591
+ static get styles() {
1592
+ return [
1593
+ styleCss$1,
1594
+ colorCss$1,
1595
+ tokensCss$1
1596
+ ];
1597
+ }
1598
+
1599
+ /**
1600
+ * This will register this element with the browser.
1601
+ * @param {string} [name="auro-menuoption"] - The name of element that you want to register to.
1602
+ *
1603
+ * @example
1604
+ * AuroMenuOption.register("custom-menuoption") // this will register this element to <custom-menuoption/>
1605
+ *
1606
+ */
1607
+ static register(name = "auro-menuoption") {
1608
+ AuroLibraryRuntimeUtils$1.prototype.registerComponent(name, AuroMenuOption);
1609
+ }
1610
+
1611
+ firstUpdated() {
1612
+ // Add the tag name as an attribute if it is different than the component name
1613
+ this.runtimeUtils.handleComponentTagRename(this, 'auro-menuoption');
1614
+
1615
+ if (!this.hasAttribute('size')) {
1616
+ this.size = this.parentElement.getAttribute('size') || 'sm';
1617
+ }
1618
+ if (!this.hasAttribute('shape')) {
1619
+ this.shape = this.parentElement.getAttribute('shape') || 'box';
1620
+ }
1621
+
1622
+ this.setAttribute('role', 'option');
1623
+ this.setAttribute('aria-selected', 'false');
1624
+
1625
+ this.addEventListener('mouseover', () => {
1626
+ this.dispatchEvent(new CustomEvent('auroMenuOption-mouseover', {
1627
+ bubbles: true,
1628
+ cancelable: false,
1629
+ composed: true,
1630
+ detail: this
1631
+ }));
1632
+ });
1633
+ }
1634
+
1635
+ // observer for selected property changes
1636
+ updated(changedProperties) {
1637
+ super.updated(changedProperties);
1638
+
1639
+ if (changedProperties.has('selected')) {
1640
+ this.setAttribute('aria-selected', this.selected.toString());
1641
+ }
1642
+ }
1643
+
1644
+ /**
1645
+ * Generates an HTML element containing an SVG icon based on the provided `svgContent`.
1646
+ *
1647
+ * @private
1648
+ * @param {string} svgContent - The SVG content to be embedded.
1649
+ * @returns {Element} The HTML element containing the SVG icon.
1650
+ */
1651
+ generateIconHtml(svgContent) {
1652
+ const dom = new DOMParser().parseFromString(svgContent, 'text/html');
1653
+ const svg = dom.body.firstChild;
1654
+
1655
+ svg.setAttribute('slot', 'svg');
1656
+
1657
+ return html$1`<${this.iconTag} customColor customSvg>${svg}</${this.iconTag}>`;
1658
+ }
1659
+
1660
+ /**
1661
+ * Logic to determine the layout of the component.
1662
+ * @protected
1663
+ * @returns {void}
1664
+ */
1665
+ renderLayout() {
1666
+
1667
+ const fontClassMap = {
1668
+ xs: 'body-sm',
1669
+ sm: 'body-default',
1670
+ md: 'body-default',
1671
+ lg: 'body-lg',
1672
+ xl: 'body-lg'
1673
+ };
1674
+
1675
+ const classes = classMap({
1676
+ 'wrapper': true,
1677
+ [this.size ? fontClassMap[this.size] : 'body-sm']: true,
1678
+ });
1679
+
1680
+ return html$1`
1681
+ <div class="${classes}">
1682
+ ${this.selected && !this.nocheckmark
1683
+ ? this.generateIconHtml(checkmarkIcon.svg)
1684
+ : undefined}
1685
+ <slot></slot>
1686
+ </div>
1687
+ `;
1688
+ }
1689
+ }
1690
+
1691
+ export { AuroMenu, AuroMenuOption, arrayConverter, dispatchMenuEvent, isOptionInteractive };