@ukic/web-components 3.12.0 → 3.13.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 (143) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/helpers-478d1107.js.map +1 -1
  3. package/dist/cjs/ic-alert.cjs.entry.js +3 -3
  4. package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
  6. package/dist/cjs/ic-checkbox-group.cjs.entry.js +8 -4
  7. package/dist/cjs/ic-checkbox-group.cjs.entry.js.map +1 -1
  8. package/dist/cjs/ic-dialog.cjs.entry.js +35 -10
  9. package/dist/cjs/ic-dialog.cjs.entry.js.map +1 -1
  10. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +12 -9
  11. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  12. package/dist/cjs/ic-navigation-item.cjs.entry.js +1 -1
  13. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  14. package/dist/cjs/ic-page-header.cjs.entry.js +1 -1
  15. package/dist/cjs/ic-page-header.cjs.entry.js.map +1 -1
  16. package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
  17. package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
  18. package/dist/cjs/ic-step.cjs.entry.js +14 -13
  19. package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
  20. package/dist/cjs/ic-stepper.cjs.entry.js +3 -2
  21. package/dist/cjs/ic-stepper.cjs.entry.js.map +1 -1
  22. package/dist/cjs/ic-top-navigation.cjs.entry.js +1 -1
  23. package/dist/cjs/ic-top-navigation.cjs.entry.js.map +1 -1
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/collection/components/ic-alert/ic-alert.css +13 -23
  26. package/dist/collection/components/ic-alert/ic-alert.js +2 -2
  27. package/dist/collection/components/ic-alert/ic-alert.js.map +1 -1
  28. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js +34 -4
  29. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js.map +1 -1
  30. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.stories.js +163 -0
  31. package/dist/collection/components/ic-dialog/ic-dialog.js +36 -11
  32. package/dist/collection/components/ic-dialog/ic-dialog.js.map +1 -1
  33. package/dist/collection/components/ic-menu/ic-menu.js +12 -9
  34. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  35. package/dist/collection/components/ic-navigation-item/ic-navigation-item.css +9 -0
  36. package/dist/collection/components/ic-page-header/ic-page-header.css +4 -0
  37. package/dist/collection/components/ic-select/ic-select_(single).stories.js +74 -1
  38. package/dist/collection/components/ic-status-tag/ic-status-tag.css +1 -4
  39. package/dist/collection/components/ic-step/ic-step.js +16 -15
  40. package/dist/collection/components/ic-step/ic-step.js.map +1 -1
  41. package/dist/collection/components/ic-step/ic-step.types.js.map +1 -1
  42. package/dist/collection/components/ic-stepper/ic-stepper.js +5 -4
  43. package/dist/collection/components/ic-stepper/ic-stepper.js.map +1 -1
  44. package/dist/collection/components/ic-stepper/ic-stepper.stories.js +2 -1
  45. package/dist/collection/components/ic-top-navigation/ic-top-navigation.css +13 -10
  46. package/dist/collection/utils/types.js.map +1 -1
  47. package/dist/components/helpers.js.map +1 -1
  48. package/dist/components/ic-alert.js +3 -3
  49. package/dist/components/ic-alert.js.map +1 -1
  50. package/dist/components/ic-checkbox-group.js +9 -4
  51. package/dist/components/ic-checkbox-group.js.map +1 -1
  52. package/dist/components/ic-dialog.js +35 -10
  53. package/dist/components/ic-dialog.js.map +1 -1
  54. package/dist/components/ic-menu2.js +12 -9
  55. package/dist/components/ic-menu2.js.map +1 -1
  56. package/dist/components/ic-navigation-item.js +1 -1
  57. package/dist/components/ic-navigation-item.js.map +1 -1
  58. package/dist/components/ic-page-header.js +1 -1
  59. package/dist/components/ic-page-header.js.map +1 -1
  60. package/dist/components/ic-popover-menu.js.map +1 -1
  61. package/dist/components/ic-radio-option.js.map +1 -1
  62. package/dist/components/ic-status-tag.js +1 -1
  63. package/dist/components/ic-status-tag.js.map +1 -1
  64. package/dist/components/ic-step.js +14 -13
  65. package/dist/components/ic-step.js.map +1 -1
  66. package/dist/components/ic-stepper.js +3 -2
  67. package/dist/components/ic-stepper.js.map +1 -1
  68. package/dist/components/ic-top-navigation.js +1 -1
  69. package/dist/components/ic-top-navigation.js.map +1 -1
  70. package/dist/core/core.css +6 -6
  71. package/dist/core/core.esm.js +1 -1
  72. package/dist/core/core.esm.js.map +1 -1
  73. package/dist/core/p-0123dde7.entry.js.map +1 -1
  74. package/dist/core/p-19f9d292.entry.js +2 -0
  75. package/dist/core/p-19f9d292.entry.js.map +1 -0
  76. package/dist/core/p-45f743e4.entry.js +2 -0
  77. package/dist/core/p-45f743e4.entry.js.map +1 -0
  78. package/dist/core/{p-cf868a24.entry.js → p-511aa329.entry.js} +2 -2
  79. package/dist/core/p-511aa329.entry.js.map +1 -0
  80. package/dist/core/p-621b0770.entry.js +2 -0
  81. package/dist/core/p-621b0770.entry.js.map +1 -0
  82. package/dist/core/p-6f50d2e0.entry.js +2 -0
  83. package/dist/core/p-6f50d2e0.entry.js.map +1 -0
  84. package/dist/core/p-71c86e71.entry.js +2 -0
  85. package/dist/core/p-71c86e71.entry.js.map +1 -0
  86. package/dist/core/{p-d58ad080.entry.js → p-96a6cff2.entry.js} +2 -2
  87. package/dist/core/p-96a6cff2.entry.js.map +1 -0
  88. package/dist/core/{p-b1838ad8.entry.js → p-9f12b20c.entry.js} +2 -2
  89. package/dist/core/p-9f12b20c.entry.js.map +1 -0
  90. package/dist/core/p-a08c360b.entry.js +2 -0
  91. package/dist/core/p-a08c360b.entry.js.map +1 -0
  92. package/dist/core/{p-33789b23.entry.js → p-a97b8082.entry.js} +3 -3
  93. package/dist/core/p-a97b8082.entry.js.map +1 -0
  94. package/dist/core/p-b57e59b7.js.map +1 -1
  95. package/dist/esm/core.js +1 -1
  96. package/dist/esm/helpers-4ddac6ed.js.map +1 -1
  97. package/dist/esm/ic-alert.entry.js +3 -3
  98. package/dist/esm/ic-alert.entry.js.map +1 -1
  99. package/dist/esm/ic-button_3.entry.js.map +1 -1
  100. package/dist/esm/ic-checkbox-group.entry.js +8 -4
  101. package/dist/esm/ic-checkbox-group.entry.js.map +1 -1
  102. package/dist/esm/ic-dialog.entry.js +35 -10
  103. package/dist/esm/ic-dialog.entry.js.map +1 -1
  104. package/dist/esm/ic-input-component-container_3.entry.js +12 -9
  105. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  106. package/dist/esm/ic-navigation-item.entry.js +1 -1
  107. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  108. package/dist/esm/ic-page-header.entry.js +1 -1
  109. package/dist/esm/ic-page-header.entry.js.map +1 -1
  110. package/dist/esm/ic-status-tag.entry.js +1 -1
  111. package/dist/esm/ic-status-tag.entry.js.map +1 -1
  112. package/dist/esm/ic-step.entry.js +14 -13
  113. package/dist/esm/ic-step.entry.js.map +1 -1
  114. package/dist/esm/ic-stepper.entry.js +3 -2
  115. package/dist/esm/ic-stepper.entry.js.map +1 -1
  116. package/dist/esm/ic-top-navigation.entry.js +1 -1
  117. package/dist/esm/ic-top-navigation.entry.js.map +1 -1
  118. package/dist/esm/loader.js +1 -1
  119. package/dist/types/components/ic-checkbox-group/ic-checkbox-group.d.ts +5 -1
  120. package/dist/types/components/ic-dialog/ic-dialog.d.ts +2 -1
  121. package/dist/types/components/ic-step/ic-step.types.d.ts +1 -0
  122. package/dist/types/components.d.ts +9 -1
  123. package/dist/types/utils/types.d.ts +6 -2
  124. package/hydrate/index.js +80 -45
  125. package/hydrate/index.mjs +80 -45
  126. package/package.json +2 -2
  127. package/vscode-data.json +15 -0
  128. package/dist/core/p-33789b23.entry.js.map +0 -1
  129. package/dist/core/p-3e36f281.entry.js +0 -2
  130. package/dist/core/p-3e36f281.entry.js.map +0 -1
  131. package/dist/core/p-80e0f66e.entry.js +0 -2
  132. package/dist/core/p-80e0f66e.entry.js.map +0 -1
  133. package/dist/core/p-a1e2e029.entry.js +0 -2
  134. package/dist/core/p-a1e2e029.entry.js.map +0 -1
  135. package/dist/core/p-b1838ad8.entry.js.map +0 -1
  136. package/dist/core/p-c2d5e301.entry.js +0 -2
  137. package/dist/core/p-c2d5e301.entry.js.map +0 -1
  138. package/dist/core/p-cf868a24.entry.js.map +0 -1
  139. package/dist/core/p-d58ad080.entry.js.map +0 -1
  140. package/dist/core/p-e9d28e02.entry.js +0 -2
  141. package/dist/core/p-e9d28e02.entry.js.map +0 -1
  142. package/dist/core/p-fb69fbc0.entry.js +0 -2
  143. package/dist/core/p-fb69fbc0.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ic-menu.js","sourceRoot":"","sources":["../../../src/components/ic-menu/ic-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAQxB,OAAO,KAAK,MAAM,6BAA6B,CAAC;AAChD,OAAO,EACL,iCAAiC,EACjC,WAAW,EACX,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAapC,6DAA6D;AAC7D,MAAM,OAAO,IAAI;IANjB;QAOU,sBAAiB,GAAG,uBAAuB,CAAC;QAC5C,oBAAe,GAAG,cAAc,CAAC;QACjC,mBAAc,GAAG,eAAe,CAAC;QACjC,2BAAsB,GAAG,KAAK,CAAC;QAC/B,yBAAoB,GAAG,KAAK,CAAC;QAC7B,gBAAW,GAAG,KAAK,CAAC;QACpB,cAAS,GAAG,KAAK,CAAC;QAClB,uBAAkB,GAAkB,IAAI,CAAC,CAAC,gCAAgC;QAC1E,sBAAiB,GAAkB,IAAI,CAAC,CAAC,+BAA+B;QAExE,uBAAkB,GAAkB,IAAI,CAAC;QAEzC,qBAAgB,GAAG,KAAK,CAAC,CAAC,uFAAuF;QACjH,qBAAgB,GAAG,KAAK,CAAC,CAAC,+EAA+E;QAEzG,iBAAY,GAAG,KAAK,CAAC;QACrB,qBAAgB,GAAmB,EAAE,CAAC;QAIrC,4BAAuB,GAAG,KAAK,CAAC;QAChC,6BAAwB,GAAG,KAAK,CAAC;QACjC,gBAAW,GAAG,KAAK,CAAC;QAEpB,6BAAwB,GAAG,KAAK,CAAC;QAEjC,gBAAW,GAAqB,EAAE,CAAC;QAE5C;;WAEG;QACK,mBAAc,GAAsB,WAAW,CAAC;QAOxD;;WAEG;QACK,wBAAmB,GAAG,IAAI,CAAC;QAEnC;;WAEG;QACK,kBAAa,GAAG,IAAI,CAAC;QAE7B;;WAEG;QACK,cAAS,GAAG,KAAK,CAAC;QAY1B;;WAEG;QACK,eAAU,GAAG,OAAO,CAAC;QAO7B;;WAEG;QACK,gBAAW,GAAG,KAAK,CAAC;QAmB5B;;WAEG;QACK,qBAAgB,GAAG,KAAK,CAAC;QAEjC;;WAEG;QACK,cAAS,GAAG,KAAK,CAAC;QAE1B;;WAEG;QACK,eAAU,GAA2B,YAAY,CAAC;QAE1D;;WAEG;QACK,kBAAa,GAAY,KAAK,CAAC;QAEvC;;WAEG;QACK,SAAI,GAAY,QAAQ,CAAC;QAmBjC;;WAEG;QACK,eAAU,GAAG,OAAO,CAAC;QA2NrB,wBAAmB,GAAG,GAAS,EAAE;YACvC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEM,uBAAkB,GAAG,GAAS,EAAE;YACtC,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACnD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAC/D,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEM,qBAAgB,GAAG,CAAC,IAAa,EAAE,UAAoB,EAAQ,EAAE;;YACvE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;oBACzB,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;oBACtB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAChC,CAAC;gBAED,qGAAqG;gBACrG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,mBAA2B,EAAQ,EAAE;YACjE,IAAI,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;oBACtE,QAAQ,EAAE,IAAI,CAAC,WAAW,CACxB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAChE;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;oBAChD,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACtE,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEM,2BAAsB,GAAG,CAAC,mBAA2B,EAAQ,EAAE;YACrE,IAAI,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;oBACtE,QAAQ,EAAE,IAAI,CAAC,WAAW,CACxB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAChE;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,KAAK,EACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CACrD,IAAI,CAAC,UAAU,CAChB;oBACH,QAAQ,EAAE,IAAI,CAAC,WAAW,CACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CACrD,IAAI,CAAC,UAAU,CAChB,CACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,mDAAmD;QAC3C,mBAAc,GAAG,CAAC,KAAoB,EAAQ,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEM,mBAAc,GAAG,GAAG,EAAE,CAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAExD,4DAA4D;QACpD,yBAAoB,GAAG,CAAC,gBAAwB,EAAQ,EAAE;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,WAAW,CAAC,gBAAgB,CAAC;gBAC3B,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,QAAQ;gBACvC,CAAC,IAAI,CAAC,iBAAiB;oBACrB,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC;QAEF,4DAA4D;QAC5D,2EAA2E;QAC3E,qBAAqB;QACb,kCAA6B,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACzD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,KAAK,CACnD,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,KAAK,WAAW;oBACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,GAAG,CAAC;gBACT,KAAK,OAAO;oBACV,IAAK,KAAK,CAAC,MAAsB,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEM,4BAAuB,GAAG,CAChC,OAAuB,EACvB,sBAA8B,EAC9B,EAAE;YACF,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YAED,MAAM,MAAM,GACV,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC;YAEvD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,sBAAsB,IAAI,CAAC,EAAE,CAAC;oBAChC,IAAI,OAAO,CAAC,sBAAsB,CAAC,KAAK,SAAS,EAAE,CAAC;wBAClD,IACE,IAAI,CAAC,SAAS;4BACd,OAAO,CAAC,sBAAsB,CAAC,CAAC,QAAQ,KAAK,IAAI,EACjD,CAAC;4BACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACrC,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QAEF,+DAA+D;QACvD,qBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,OAAO,IAAI,CAAC,KAAK;gBACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC;QAEF,4FAA4F;QACpF,4BAAuB,GAAG,CAAC,qBAA+B,EAAE,EAAE;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,qBAAqB,GAAI,IAAI,CAAC,KAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnE,OAAO,WAAW,CAAC,SAAS,CAC1B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,CAC9C,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,8FAA8F;gBAC9F,qBAAqB,CAAC,OAAO,CAC3B,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CACtE,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,iHAAiH;QACzG,oCAA+B,GAAG,CAAC,KAAoB,EAAE,EAAE;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,gGAAgG;YAChG,iGAAiG;YACjG,MAAM,qBAAqB,GACzB,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YAEnD,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEhE,MAAM,uBAAuB,GAAG,WAAW,CAAC,SAAS,CACnD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAChE,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,WAC5C,OAAA,MAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,0CAAE,EAAE,CAAA,EAAA,CAAC;YAE1D,8DAA8D;YAC9D,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;oBAClB,KAAK,WAAW;wBACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC3B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC5B,mCAAmC;4BACnC,oFAAoF;4BACpF,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;4BACnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBACjC,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,sBAAsB,EACtB,WAAW,CACZ,CAAC;4BAEF,IAAI,sBAAsB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACpD,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC;gCACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oCACrB,QAAQ,EAAE,WAAW,CAAC,sBAAsB,GAAG,CAAC,CAAC;iCAClD,CAAC,CAAC;gCAEH,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,sBAAsB,GAAG,CAAC,EAC1B,WAAW,CACZ,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gCAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oCACrB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;iCACzB,CAAC,CAAC;gCAEH,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;4BACtD,CAAC;4BAED,8FAA8F;4BAC9F,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gCAC1C,IAAI,CAAC,uBAAuB,CAAC;oCAC3B,sBAAsB;oCACtB,IAAI,CAAC,yBAAyB,EAAE;iCACjC,CAAC,CAAC;gCACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;4BAC5B,CAAC;wBACH,CAAC;wBACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBAC1D,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;wBACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;wBACrC,MAAM;oBACR,KAAK,SAAS;wBACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC3B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC5B,mCAAmC;4BACnC,uFAAuF;4BACvF,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;4BACnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBACjC,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,sBAAsB,EACtB,WAAW,CACZ,CAAC;4BAEF,IACE,sBAAsB,IAAI,CAAC;gCAC3B,sBAAsB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAC/C,CAAC;gCACD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gCAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oCACrB,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;iCAC9C,CAAC,CAAC;gCAEH,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,WAAW,CAAC,MAAM,GAAG,CAAC,EACtB,WAAW,CACZ,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC;gCACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oCACrB,QAAQ,EAAE,WAAW,CAAC,sBAAsB,GAAG,CAAC,CAAC;iCAClD,CAAC,CAAC;gCAEH,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,sBAAsB,GAAG,CAAC,EAC1B,WAAW,CACZ,CAAC;4BACJ,CAAC;4BAED,8FAA8F;4BAC9F,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gCAC1C,IAAI,CAAC,uBAAuB,CAAC;oCAC3B,sBAAsB;oCACtB,IAAI,CAAC,yBAAyB,EAAE;iCACjC,CAAC,CAAC;gCACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;4BAC5B,CAAC;wBACH,CAAC;wBAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBAC1D,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;wBACtC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;wBACrC,MAAM;oBACR,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,MAAM,gBAAgB,GAAG,CAAC,CAAC;wBAE3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;wBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;4BACrB,QAAQ,EAAE,WAAW,CAAC,gBAAgB,CAAC;yBACxC,CAAC,CAAC;wBAEH,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BACpC,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;wBACnD,CAAC;wBAED,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;wBAC1C,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;wBAC3C,MAAM;oBACR,CAAC;oBACD,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;wBAE9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC3B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;4BACrB,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC;yBACtC,CAAC,CAAC;wBAEH,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BACpC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC;wBACjD,CAAC;wBAED,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC;wBACxC,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC;wBACzC,MAAM;oBACR,CAAC;oBACD,KAAK,GAAG;wBACN,IAAI,CAAC,qBAAqB,EAAE,CAAC;4BAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;wBAC3B,CAAC;wBACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BAC5C,MAAM;wBACR,CAAC;6BAAM,CAAC;4BACN,IAAK,KAAK,CAAC,MAAsB,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;gCAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;4BAC9B,CAAC;wBACH,CAAC;wBACD,MAAM;oBACR,KAAK,OAAO;wBACV,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;4BAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;wBAC3B,CAAC;wBACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;wBACvD,MAAM;oBACR,KAAK,QAAQ;wBACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;4BACd,KAAK,CAAC,wBAAwB,EAAE,CAAC;wBACnC,CAAC;wBACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;wBAChD,MAAM;oBACR,KAAK,GAAG;wBACN,0FAA0F;wBAC1F,gDAAgD;wBAChD,IACE,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC;4BAChC,CAAC,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,EACjC,CAAC;4BACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;4BAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBACjC,CAAC;wBACD,MAAM;oBACR,KAAK,OAAO,CAAC;oBACb,KAAK,KAAK;wBACR,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;4BAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;wBAC3B,CAAC;wBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;4BACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBAC1B,CAAC;wBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;4BACrB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gCACzD,KAAK,CAAC,cAAc,EAAE,CAAC;gCACvB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,4DAA4D;gCAC1F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gCAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gCAC7B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC,6EAA6E;4BACnH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;wBACvC,CAAC;wBACD,MAAM;oBACR;wBACE,IAAI,CAAC,qBAAqB,EAAE,CAAC;4BAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;wBAC3B,CAAC;wBACD,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEM,kBAAa,GAAG,CAAC,sBAA8B,EAAE,EAAE;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,WAAW,CAAC,sBAAsB,CAAC,KAAK,SAAS,EAAE,CAAC;gBACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;iBAC5D,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACL,IAAI,CAAC,QAAmC,CAAC,QAAQ,EAAE,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,KAAiB,EAAQ,EAAE;YACtD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAI,KAAK,CAAC,MAAwB,CAAC,OAAO,CAAC;YAEjE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAC/C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CACnC,CAAC;gBAEF,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,IAAI,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC,CAAC;QAEM,gBAAW,GAAG,GAAS,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,EAAiB,EAAQ,EAAE;YACvD,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACzC,EAAE,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,KAAiB,EAAQ,EAAE;;YAC/C,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;oBACjD,MAAA,IAAI,CAAC,IAAI,0CAAE,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACrD,CAAC;gBAED,IACE,CAAC,CACC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,QAAQ,CAAC,KAAK,CAAC,aAA4B,CAAC;oBACvD,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,CAC7C,EACD,CAAC;oBACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBACxD,MAAA,IAAI,CAAC,IAAI,0CAAE,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,MAAA,IAAI,CAAC,IAAI,0CAAE,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QACzE,CAAC,CAAC;QAEM,oBAAe,GAAG,CAAC,KAAY,EAAQ,EAAE;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,KAAoB,EAAE,EAAE;YACnD,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;gBACxC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/D,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;QAEM,oBAAe,GAAG,CAAC,KAAoB,EAAQ,EAAE;YACvD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAChC,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACzD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACpC,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACnC,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;QAEM,yBAAoB,GAAG,GAAG,EAAE;;YAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC,CAAC;QAEM,wBAAmB,GAAG,CAAC,KAAiB,EAAE,EAAE;;YAClD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,QAAQ,CAAC,KAAK,CAAC,aAA4B,CAAC,CAAA,EAAE,CAAC;gBAC7D,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC;QAEM,yBAAoB,GAAG,GAAG,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC,CAAC;QAEF,qEAAqE;QAC7D,6BAAwB,GAAG,CAAC,KAAY,EAAE,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,yFAAyF;QACzF,yDAAyD;QACjD,4BAAuB,GAAG,CAChC,KAAoB,EACpB,mBAA2B,EAC3B,OAAuB,EACvB,EAAE;YACF,IACE,IAAI,CAAC,WAAW;gBAChB,KAAK,CAAC,QAAQ;gBACd,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAC3C,CAAC;gBACD,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;gBAC3D,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC;YAChD,CAAC;QACH,CAAC,CAAC;QAEF,oFAAoF;QACpF,mDAAmD;QAC3C,8BAAyB,GAAG,CAClC,qBAA6B,EAC7B,oBAAoB,GAAG,KAAK,EAC5B,sBAAqC,IAAI,EACzC,EAAE;YACF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAE1B,MAAM,sBAAsB,GAC1B,mBAAmB,KAAK,IAAI;gBAC1B,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC;gBACtD,CAAC,CAAC,mBAAmB,CAAC;YAC1B,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;gBACpC,MAAM,eAAe,GAAG,EAAE,CAAC;gBAE3B,IAAI,sBAAsB,GAAG,qBAAqB,EAAE,CAAC;oBACnD,KACE,IAAI,CAAC,GAAG,sBAAsB,EAC9B,CAAC,GAAG,qBAAqB,GAAG,CAAC,EAC7B,CAAC,EAAE,EACH,CAAC;wBACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,KACE,IAAI,CAAC,GAAG,sBAAsB,EAC9B,CAAC,GAAG,qBAAqB,GAAG,CAAC,EAC7B,CAAC,EAAE,EACH,CAAC;wBACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAED,eAAe,CAAC,OAAO,CACrB,CAAC,WAAW,EAAE,EAAE,CACd,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CACzE,CAAC;gBACF,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAC3B,KAAiC,EACjC,WAAmB,EACnB,oBAAoB,GAAG,KAAK,EAC5B,EAAE;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,MAAM,sBAAsB,GAC1B,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,QAAQ,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,yBAAyB,CAC5B,WAAW,EACX,oBAAoB,EACpB,sBAAsB,CACvB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;YACrC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACxC,CAAC,CAAC;QAEM,8BAAyB,GAAG,CAClC,oBAA6B,EACd,EAAE;YACjB,OAAO,oBAAoB,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI;gBAC5D,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI;oBAClC,CAAC,CAAC,IAAI,CAAC,kBAAkB;oBACzB,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAC;QAEM,wBAAmB,GAAG,GAAG,EAAE;;YACjC,yEAAyE;YACzE,mDAAmD;YACnD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,MAAM,EACJ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,MAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;aACxE,CAAC,CAAC;YACH,+CAA+C;YAC/C,IAAI,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,MAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEM,qBAAgB,GAAG,CAAC,QAAiB,EAAE,GAAW,EAAE,EAAE;YAC5D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;QAEF,4DAA4D;QAC5D,2EAA2E;QAC3E,sBAAsB;QACd,8BAAyB,GAAG,CAAC,KAAoB,EAAQ,EAAE;;YACjE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;YAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACzD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,KAAK,CACnD,CAAC;YAEF,MAAM,kBAAkB,GACtB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;YAErD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,KAAK,GAAG;oBACN,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;wBACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC1B,CAAC;oBACD,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;wBAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC1B,CAAC;oBACD,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;qBACjD,CAAC,CAAC;oBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACzB,KAAK,EACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CACrD,IAAI,CAAC,UAAU,CAChB;qBACJ,CAAC,CAAC;oBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,KAAK,OAAO;oBACV,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,kBAAkB,EAAE,CAAC;wBACvB,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;oBACxB,CAAC;oBACD,MAAM;gBACR,KAAK,OAAO;oBACV,MAAM;gBACR;oBACE,IAAI,kBAAkB,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACnE,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;oBACxB,CAAC;oBACD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC1B,CAAC;oBACD,MAAM;YACV,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC;QAEM,gBAAW,GAAG,CAAC,KAAa,EAAU,EAAE;YAC9C,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACnC,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAC3B,MAAoB,EACpB,YAA2B,EACnB,EAAE;YACV,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAExC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,SAAS,GAAG,GAAG,SAAS,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YACpD,CAAC;YAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,SAAS,GAAG,GAAG,SAAS,KAAK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1D,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,GAAG,SAAS,KAAK,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEM,qBAAgB,GAAG,CAAC,OAAuB,EAAkB,EAAE;YACrE,IAAI,MAAM,GAAmB,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACzC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEM,8BAAyB,GAAG,GAAG,EAAE;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,OAAO,WAAW,CAAC,SAAS,CAC1B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAC/D,CAAC;QACJ,CAAC,CAAC;QAEM,iBAAY,GAAG,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC;QAEhD,qBAAgB,GAAG,CAAC,IAAsB,EAAE,EAAE;;YACpD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa;gBACvC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CACtB,kBAAkB,IAAI,CAAC,iBAAiB,IAAI,CAC7B;gBACnB,CAAC,CAAE,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAiB,CAAC;YAEzE,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC;gBACrE,IACE,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;oBAC1C,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAC1C,CAAC;oBACD,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC;gBAC5C,CAAC;gBACD,sDAAsD;gBACtD,4FAA4F;gBAC5F,MAAA,IAAI,CAAC,IAAI,0CAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;gBACnE,cAAc,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,qDAAqD;QACrD,2EAA2E;QACnE,yBAAoB,GAAG,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC1B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CACnE,CAAC;oBACJ,CAAC;yBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC;QAEM,qBAAgB,GAAG,GAAG,EAAE;;YAC9B,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;iBACN,gBAAgB,CAAC,8BAA8B,CAAC;iBAChD,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAE/D,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;gBACzB,MAAA,IAAI,CAAC,IAAI,0CAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,EAAc,EAAE,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC;QAoBM,kBAAa,GAAG,CAAC,MAAoB,EAAE,QAAiB,EAAE,EAAE;;YAClE,MAAM,aAAa,GACjB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACzB,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,QAAQ;gBACR,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,MAAK,IAAI,CAAC,cAAc,CAAC;YAEjD,OAAO,CACL,EAAC,QAAQ;gBACN,MAAM,CAAC,OAAO,IAAI,4BAAsB,IAAI,EAAC,MAAM,GAAG;gBACvD,WACE,KAAK,EAAE;wBACL,uBAAuB,EAAE,IAAI;wBAC7B,iBAAiB,EAAE,aAAa;qBACjC;oBAED,WAAK,KAAK,EAAC,cAAc;wBACtB,MAAM,CAAC,IAAI,IAAI,CACd,WACE,KAAK,EAAC,aAAa,EACnB,SAAS,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAClC,MAAM,GACb,CACR;wBACD,qBAAe,OAAO,EAAC,MAAM,iBAAa,MAAM,IAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CACV,CACZ;oBACL,MAAM,CAAC,WAAW,IAAI,CACrB,qBACE,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,EAC9D,KAAK,EAAC,oBAAoB,EAC1B,OAAO,EAAC,SAAS,iBACL,MAAM;wBAElB,aAAI,MAAM,CAAC,WAAW,CAAK,CACb,CACjB;oBACA,MAAM,CAAC,OAAO,IAAI,CACjB,WACE,KAAK,EAAC,gBAAgB,EACtB,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,iBAC3C,MAAM,GACb,CACR,CACG;gBACL,aAAa,IAAI,YAAM,KAAK,EAAC,YAAY,EAAC,SAAS,EAAE,KAAK,GAAI,CACtD,CACZ,CAAC;QACJ,CAAC,CAAC;QAEM,kBAAa,GAAG,CACtB,MAAoB,EACpB,QAAiB,EACjB,KAAa,EACb,YAA2B,EACZ,EAAE;YACjB,MAAM,EACJ,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,EACjB,OAAO,GACR,GAAG,IAAI,CAAC;YAET,OAAO,CACL,UACE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC7C,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;oBACZ,gBAAgB,EAAE,YAAY;wBAC5B,CAAC,CAAC,CAAC,WAAW,IAAI,wBAAwB,CAAC;4BACzC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,iBAAiB;wBAC/C,CAAC,CAAC,WAAW,IAAI,QAAQ;oBAC3B,yBAAyB,EAAE,CAAC,CAAC,CAC3B,MAAM,CAAC,WAAW;wBAClB,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;wBAClB,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAChC;oBACD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;oBACpC,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;oBAClC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;iBAC3B,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EACN,IAAI;oBACJ,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,iBAAiB,CAAC;oBAC3D,WAAW;oBACT,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,gBAEE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,mBAC1C,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACjD,OAAO,EACL,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;oBACjC,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACxB,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,WAAW,EAAE,IAAI,CAAC,eAAe,gBACrB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,gBACvB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAElC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjB,EAAC,QAAQ;gBACP,WAAK,KAAK,EAAC,oBAAoB;oBAC7B,WACE,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,SAAS;wBAEd,yBAAoB;wBACpB;4BACE,YAAM,CAAC,EAAC,8KAA8K,GAAG,CACvL,CACA;oBACN,qBAAe,OAAO,EAAC,OAAO,IAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CACV,CACZ;gBACN,iBACE,IAAI,EAAC,OAAO,EACZ,OAAO,EAAC,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAClC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAC9B,EAAE,EAAC,cAAc,YAGP,CACH,CACZ,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CACrC,CACE,CACN,CAAC;QACJ,CAAC,CAAC;KAwIH;IA72CC,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAqCD,mBAAmB,CAAC,UAA0B;QAC5C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAyDD,iBAAiB;QACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,UAAU,KAAK,YAAY;gBAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED,oBAAoB;;QAClB,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;QAC/B,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxE,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAChC,gBAAgB,EAChB,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACJ,CAAC;IAED,iBAAiB;;QACf,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,MAAA,IAAI,CAAC,QAAQ,0CAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrE,MAAA,IAAI,CAAC,QAAQ,0CAAE,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,gBAAgB;QACd,IACE,IAAI,CAAC,SAAS;YACb,IAAI,CAAC,QAAmC,CAAC,oBAAoB,EAC9D,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,gCAAgC,CAC9B;YACE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;YACrC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC3C,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC1C,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE;YAClD,mHAAmH;SACpH,EACD,MAAM,CACP,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,KAAK,CACnD,CAAC;QAEF,IACE,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,IAAI,CAAC,gBAAgB,EACtB,CAAC;YACD,IACE,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,WAAW;gBAChB,mBAAmB;gBACnB,IAAI,CAAC,mBAAmB;gBACxB,CAAC,IAAI,CAAC,gBAAgB,EACtB,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;iBAAM,IACL,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,IAAI,CAAC,uBAAuB;gBAC7B,CAAC,IAAI,CAAC,wBAAwB,EAC9B,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAC3C,kBAAkB,IAAI,CAAC,iBAAiB,IAAI,CAC9B,CAAC;gBAEjB,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;oBACjE,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAChE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED;;;;OAIG;IAEH,KAAK,CAAC,kBAAkB,CAAC,KAAoB;QAC3C,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,oBAAoB;QACxB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IAEH,KAAK,CAAC,YAAY,CAAC,MAAmB;QACpC,8GAA8G;QAC9G,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,kBAClD,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;wBACP,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;qBACf;iBACF;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,kBAAkB,EAAE,CAAC,WAAW,CAAC;wBACjC,YAAY,EAAE,UAAU;qBACzB;iBACF;aACF,IACE,IAAI,CAAC,WAAW,EACnB,CAAC;IACL,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,sBAAsB,CAA6B,KAAQ;QAC/D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAszBO,0BAA0B,CAChC,WAA2B,EAC3B,sBAA8B;QAE9B,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC;YAAE,OAAO;QAEjD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,QAAmC,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,UAAU,KAAK,YAAY;gBAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAgC,CAAC,QAAQ,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACtC,CAAC;IA+ID,MAAM;QACJ,MAAM,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,GAAG,IAAI,CAAC;QAET,MAAM,mBAAmB,GAAG,GAC1B,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,MAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAC7D,MAAM,CAAC;QAEP,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEhE,OAAO,CACL,EAAC,IAAI,qDACH,KAAK,EAAE;gBACL,oBAAoB,EAAE,CAAC,CAAC,SAAS;gBACjC,kBAAkB,EAChB,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,OAAO;oBAC3B,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,MAAK,cAAc,CAAC;oBACvC,WAAW;oBACX,SAAS;gBACX,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,IAAI;gBACzB,cAAc,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAC5C,kBAAkB,EAAE,WAAW;aAChC;YAEA,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CACvB,2DACE,EAAE,EAAE,MAAM,EACV,KAAK,EAAC,MAAM,EACZ,IAAI,EAAC,SAAS,gBACF,GAAG,UAAU,SAAS,0BACZ,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACpD,QAAQ,EACN,IAAI;oBACJ,CAAC,WAAW;oBACZ,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,OAAO;wBAC3B,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,MAAK,cAAc,CAAC;oBACrC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,EAEV,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAC7B,SAAS,EAAE,IAAI,CAAC,iBAAiB,EACjC,OAAO,EAAE,IAAI,CAAC,eAAe,EAC7B,MAAM,EAAE,IAAI,CAAC,UAAU,IAEtB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACpD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/B,OAAO,CACL;4BACE,qBACE,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAC,cAAc,EACnB,OAAO,EAAC,gBAAgB;gCAExB,aAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAK,CAClB;4BACf,MAAM,CAAC,QAAQ,CAAC,GAAG,CAClB,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,KAAK;gCACjB,IAAI,CAAC,aAAa,CAChB,WAAW,EACX,WAAW;oCACT,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oCAC/C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,EAC1C,KAAK,EACL,MAAM,CACP,CACJ,CACG,CACP,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,gFAAgF;oBAChF,OAAO,CACL,MAAM,CAAC,KAAK;wBACZ,IAAI,CAAC,aAAa,CAChB,MAAM,EACN,WAAW;4BACT,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,EACrC,KAAK,CACN,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CACC,CACN;YACA,OAAO,CAAC,MAAM,KAAK,CAAC;gBACnB,WAAW;gBACX,CAAC,SAAS;gBACV,CAAC,WAAW;gBACZ,CAAC,YAAY,IAAI,CACf,4DAAK,KAAK,EAAC,YAAY;gBACrB;oBACE,4DAAI,GACF,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,IAAI,iCAAiC,CACnC,IAAI,CAAC,OAAO,CACb,WAAW,CAAK,CACH;gBAChB,kEACE,KAAK,EAAC,mBAAmB,gBACb,GAAG,mBAAmB,gBAAgB,UAAU,EAAE,EAC9D,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,EACxC,OAAO,EAAC,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,WAAW,EAAE,IAAI,CAAC,wBAAwB,EAC1C,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAChC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAE1C,mBAAmB,CACV,CACR,CACP,CACE,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Method,\n State,\n Watch,\n Fragment,\n} from \"@stencil/core\";\nimport {\n createPopper,\n Instance as PopperInstance,\n Options,\n} from \"@popperjs/core\";\n\nimport {\n IcActivationTypes,\n IcMenuOption,\n IcSizes,\n IcMultiValueEventDetail,\n} from \"../../utils/types\";\nimport Check from \"../../assets/check-icon.svg\";\nimport {\n getOptionsWithoutGroupTitlesCount,\n isMacDevice,\n onComponentRequiredPropUndefined,\n} from \"../../utils/helpers\";\nimport {\n sanitizeHTMLString,\n sanitizeHTMLIconString,\n} from \"../../utils/common-helpers\";\nimport {\n IcOptionSelectEventDetail,\n IcMenuChangeEventDetail,\n IcMenuOptionIdEventDetail,\n} from \"./ic-menu.types\";\nimport { IcSearchBarSearchModes } from \"../ic-search-bar/ic-search-bar.types\";\n\n@Component({\n tag: \"ic-menu\",\n styleUrl: \"ic-menu.css\",\n scoped: true,\n})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport class Menu {\n private ACTIVE_DESCENDANT = \"aria-activedescendant\";\n private CLEAR_BUTTON_ID = \"clear-button\";\n private SEARCH_BAR_TAG = \"IC-SEARCH-BAR\";\n private disabledOptionSelected = false;\n private hasPreviouslyBlurred = false;\n private hasTimedOut = false;\n private isLoading = false;\n private lastOptionSelected: number | null = null; // Index of last option selected\n private lastOptionFocused: number | null = null; // Index of last option focused\n private menu?: HTMLUListElement;\n private multiOptionClicked: string | null = null;\n private popperInstance: PopperInstance | null;\n private preventClickOpen = false; // Prevents menu re-opening immediately after it is closed on blur when clicking input.\n private preventMenuFocus = false; // (When multiple) ensures focus moves straight to select all button from menu.\n private selectAllButton?: HTMLIcButtonElement;\n private shiftPressed = false;\n private ungroupedOptions: IcMenuOption[] = [];\n\n @Element() host: HTMLIcMenuElement;\n\n @State() focusFromSearchKeypress = false;\n @State() initialOptionsListRender = false;\n @State() keyboardNav = false;\n @State() optionHighlighted?: string;\n @State() preventIncorrectTabOrder = false;\n @State() menuOptions: IcMenuOption[];\n @State() popperProps: Partial<Options> = {};\n\n /**\n * Determines whether options manually set as values (by pressing 'Enter') when they receive focus using keyboard navigation.\n */\n @Prop() activationType: IcActivationTypes = \"automatic\";\n\n /**\n * The reference to an anchor element the menu will position itself from when rendered.\n */\n @Prop() anchorEl?: HTMLElement;\n\n /**\n * @internal If `true`, autofocus will be applied on selected item when menu is open.\n */\n @Prop() autofocusOnSelected = true;\n\n /**\n * If `true`, the menu will close when an option is selected.\n */\n @Prop() closeOnSelect = true;\n\n /**\n * If `true`, the menu will fill the width of the container.\n */\n @Prop() fullWidth = false;\n\n /**\n * The reference to the input element.\n */\n @Prop() inputEl?: HTMLElement;\n\n /**\n * The label for the input element.\n */\n @Prop() inputLabel!: string;\n\n /**\n * The custom name for the label field for IcMenuOption.\n */\n @Prop() labelField = \"label\";\n\n /**\n * The ID of the menu.\n */\n @Prop() menuId!: string;\n\n /**\n * @internal - flag to specify if menu is in a ic-select multiple.\n */\n @Prop() multiSelect = false;\n\n /**\n * If `true`, the menu will be displayed open.\n */\n @Prop({ reflect: true }) open!: boolean;\n @Watch(\"open\")\n watchOpenHandler(): void {\n if (!this.open && this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n /**\n * @internal - The parent element if ic-menu is nested inside another component.\n */\n @Prop() parentEl?: HTMLElement;\n\n /**\n * @internal - flag to specify if menu is in a searchable ic-select.\n */\n @Prop() searchableSelect = false;\n\n /**\n * @internal - flag to specify if menu is in a ic-search-bar.\n */\n @Prop() searchBar = false;\n\n /**\n * Specify the mode search bar uses to search. `navigation` allows for quick lookups of a set of values, `query` allows for more general searches.\n */\n @Prop() searchMode: IcSearchBarSearchModes = \"navigation\";\n\n /**\n * @internal If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\n */\n @Prop() selectOnEnter: boolean = false;\n\n /**\n * The size of the menu.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * The possible menu selection options.\n */\n @Prop() options!: IcMenuOption[];\n @Watch(\"options\")\n watchOptionsHandler(newOptions: IcMenuOption[]): void {\n this.hasTimedOut = newOptions.some((opt) => opt.timedOut);\n this.isLoading = newOptions.some((opt) => opt.loading);\n this.ungroupedOptions = [];\n this.loadUngroupedOptions();\n }\n\n /**\n * The value of the currently selected option - or array of values (if multiple options allowed).\n */\n @Prop() value!: string | string[];\n\n /**\n * The custom name for the value field for IcMenuOption.\n */\n @Prop() valueField = \"value\";\n\n /**\n * Emitted when the clear all button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * @internal Emitted when key is pressed while menu is open.\n */\n @Event() menuKeyPress: EventEmitter<{ isNavKey: boolean; key: string }>;\n\n /**\n * @internal Emitted when an option has been highlighted.\n */\n @Event() menuOptionId: EventEmitter<IcMenuOptionIdEventDetail>;\n\n /**\n * @internal Emitted when an option is selected.\n */\n @Event() menuOptionSelect!: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * @internal Emitted when all options are selected or deselected.\n */\n @Event() menuOptionSelectAll!: EventEmitter<{ select: boolean }>;\n\n /**\n * @internal Emitted when state of menu changes (i.e. open or closed).\n */\n @Event() menuStateChange!: EventEmitter<IcMenuChangeEventDetail>;\n\n /**\n * @internal Emitted when the retry button is clicked.\n */\n @Event() retryButtonClicked: EventEmitter<IcMultiValueEventDetail>;\n\n /**\n * @internal Emitted when the timeout menu loses focus.\n */\n @Event() timeoutBlur: EventEmitter<{ ev: FocusEvent }>;\n\n /**\n * @internal Emitted when the ungrouped options have been set.\n */\n @Event() ungroupedOptionsSet: EventEmitter<{ options: IcMenuOption[] }>;\n\n connectedCallback(): void {\n if (this.searchBar) {\n if (this.searchMode === \"navigation\") this.setHighlightedOption(0);\n this.initialOptionsListRender = true;\n }\n }\n\n disconnectedCallback(): void {\n this.popperInstance?.destroy();\n this.parentEl?.removeEventListener(\"icClear\", this.handleClearListener);\n this.parentEl?.removeEventListener(\n \"icSubmitSearch\",\n this.handleSubmitSearch\n );\n }\n\n componentWillLoad(): void {\n this.loadUngroupedOptions();\n this.parentEl?.addEventListener(\"icClear\", this.handleClearListener);\n this.parentEl?.addEventListener(\"icSubmitSearch\", this.handleSubmitSearch);\n this.hasTimedOut = this.options?.some((opt) => opt.timedOut);\n this.isLoading = this.options?.some((opt) => opt.loading);\n }\n\n componentDidLoad(): void {\n if (\n this.searchBar &&\n (this.parentEl as HTMLIcSearchBarElement).disableAutoFiltering\n ) {\n this.focusFromSearchKeypress = true;\n }\n\n onComponentRequiredPropUndefined(\n [\n { prop: this.open, propName: \"open\" },\n { prop: this.options, propName: \"options\" },\n { prop: this.menuId, propName: \"menu-id\" },\n { prop: this.inputLabel, propName: \"input-label\" },\n //NOTE: no check for value, input-el or anchor-el as otherwise get console errors on first load of select component\n ],\n \"Menu\"\n );\n }\n\n componentDidUpdate(): void {\n const inputValueInOptions = this.options.some(\n (option) => option[this.valueField] === this.value\n );\n\n if (\n this.menu &&\n this.open &&\n this.options.length !== 0 &&\n !this.preventMenuFocus\n ) {\n if (\n this.value &&\n this.keyboardNav &&\n inputValueInOptions &&\n this.autofocusOnSelected &&\n !this.searchableSelect\n ) {\n this.scrollToSelected(this.menu);\n } else if (this.selectOnEnter) {\n this.menu.focus();\n } else if (\n !!this.optionHighlighted &&\n !this.focusFromSearchKeypress &&\n !this.preventIncorrectTabOrder\n ) {\n const highlightedEl = this.host.querySelector(\n `li[data-value=\"${this.optionHighlighted}\"]`\n ) as HTMLElement;\n\n if (highlightedEl) {\n this.menu.setAttribute(this.ACTIVE_DESCENDANT, highlightedEl.id);\n highlightedEl.focus();\n }\n } else if (this.inputEl && this.inputEl.tagName !== \"INPUT\") {\n this.menu.focus();\n }\n }\n\n if (this.menu && this.open && !this.value && this.selectOnEnter) {\n this.scrollToSelected(this.menu);\n }\n\n this.preventMenuFocus = false;\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance && this.anchorEl) {\n this.initPopperJs(this.anchorEl);\n }\n\n if (this.open && !!this.options.length) {\n this.setMenuScrollbar();\n }\n }\n\n /**\n * @internal If menu is opened with the mouse, emit menuStateChange custom event.\n */\n @Method()\n async handleClickOpen(): Promise<void> {\n if (!this.preventClickOpen) {\n this.menuStateChange.emit({ open: !this.open });\n this.keyboardNav = false;\n }\n this.preventClickOpen = false;\n }\n\n /**\n * Used alongside activationType\n * If menu is opened via keyboard navigation (i.e. Enter, ArrowUp or ArrowDown), emit optionSelect custom event.\n * @param {KeyboardEvent} event The keyboard event which is available when handleKeyboardOpen is invoked.\n */\n @Method()\n async handleKeyboardOpen(event: KeyboardEvent): Promise<void> {\n if (this.activationType === \"automatic\") {\n this.autoSetInputValueKeyboardOpen(event);\n } else {\n this.manualSetInputValueKeyboardOpen(event);\n }\n }\n\n /**\n * @internal Used to highlight the first option in the menu.\n */\n @Method()\n async handleSetFirstOption(): Promise<void> {\n this.setHighlightedOption(0);\n }\n\n /**\n * @internal Used to initialize popperJS with an anchor element.\n * 5/12/2023: Tested with Floating UI, however, discovered inconsistent\n * boundary behaviour so sticking with PopperJS.\n */\n @Method()\n async initPopperJs(anchor: HTMLElement): Promise<void> {\n // Placements set to \"-start\" to accommodate for custom menu width - menu should always be aligned to the left\n this.popperInstance = createPopper(anchor, this.host, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 7],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\"],\n rootBoundary: \"viewport\",\n },\n },\n ],\n ...this.popperProps,\n });\n }\n\n /**\n * @internal This method allows props to be added to the PopperJS createPopper instance outside of the menu\n * @param props object - createPopper props set externally\n */\n @Method()\n async setExternalPopperProps<T extends Partial<Options>>(props: T) {\n this.popperProps = props;\n }\n\n private handleClearListener = (): void => {\n this.optionHighlighted = \"\";\n };\n\n private handleSubmitSearch = (): void => {\n const highlightedOptionIndex = this.options.findIndex(\n (option) => option[this.valueField] === this.optionHighlighted\n );\n\n this.setInputValue(highlightedOptionIndex);\n };\n\n private handleMenuChange = (open: boolean, focusInput?: boolean): void => {\n this.menuStateChange.emit({ open, focusInput });\n\n if (!open) {\n if (focusInput !== false) {\n this.inputEl?.focus();\n this.preventClickOpen = false;\n }\n\n // Reset optionHighlighted so previously highlighted option doesn't get reselected when Enter pressed\n if (this.multiSelect) {\n this.optionHighlighted = undefined;\n this.multiOptionClicked = null;\n }\n }\n };\n\n private setNextOptionValue = (selectedOptionIndex: number): void => {\n if (this.ungroupedOptions[selectedOptionIndex + 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex + 1][this.valueField],\n optionId: this.getOptionId(\n this.ungroupedOptions[selectedOptionIndex + 1][this.valueField]\n ),\n });\n } else {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[0][this.valueField]),\n });\n }\n };\n\n private setPreviousOptionValue = (selectedOptionIndex: number): void => {\n if (this.ungroupedOptions[selectedOptionIndex - 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex - 1][this.valueField],\n optionId: this.getOptionId(\n this.ungroupedOptions[selectedOptionIndex - 1][this.valueField]\n ),\n });\n } else {\n this.menuOptionSelect.emit({\n value:\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ],\n optionId: this.getOptionId(\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ]\n ),\n });\n }\n };\n\n // Open menu when up or down arrow keys are pressed\n private arrowBehaviour = (event: KeyboardEvent): void => {\n event.preventDefault();\n this.handleMenuChange(true);\n };\n\n private getMenuOptions = () =>\n this.searchBar ? this.options : this.ungroupedOptions;\n\n // Set option that is focused and so should show focus state\n private setHighlightedOption = (highlightedIndex: number): void => {\n const menuOptions = this.getMenuOptions();\n\n menuOptions[highlightedIndex] &&\n !menuOptions[highlightedIndex].timedOut &&\n (this.optionHighlighted =\n menuOptions[highlightedIndex][this.valueField] || undefined);\n };\n\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is closed\n private autoSetInputValueKeyboardOpen = (event: KeyboardEvent) => {\n const selectedOptionIndex = this.ungroupedOptions.findIndex(\n (option) => option[this.valueField] === this.value\n );\n\n this.keyboardNav = false;\n\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setNextOptionValue(selectedOptionIndex);\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setPreviousOptionValue(selectedOptionIndex);\n break;\n case \" \":\n case \"Enter\":\n if ((event.target as HTMLElement).id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n break;\n }\n };\n\n private selectHighlightedOption = (\n options: IcMenuOption[],\n highlightedOptionIndex: number\n ) => {\n if (!this.isLoading && !this.hasTimedOut) {\n this.keyboardNav = true;\n }\n\n const isOpen: boolean =\n this.searchBar || this.searchableSelect || this.open;\n\n if (isOpen) {\n if (highlightedOptionIndex >= 0) {\n if (options[highlightedOptionIndex] !== undefined) {\n if (\n this.searchBar &&\n options[highlightedOptionIndex].disabled === true\n ) {\n this.disabledOptionSelected = true;\n } else {\n this.setInputValue(highlightedOptionIndex);\n }\n }\n } else {\n this.setInputValue(highlightedOptionIndex);\n }\n } else {\n this.handleMenuChange(true);\n }\n };\n\n // Check if option is selected based on the index of the option\n private isOptionSelected = (index: number) => {\n const menuOptions = this.getMenuOptions();\n\n return this.value\n ? this.value.includes(menuOptions[index][this.valueField])\n : false;\n };\n\n // Deselect currently selected options when shift pressed, but keep certain options selected\n private deselectSelectedOptions = (optionsToKeepSelected: number[]) => {\n const menuOptions = this.getMenuOptions();\n\n if (this.value) {\n const selectedOptionIndexes = (this.value as string[]).map((value) => {\n return menuOptions.findIndex(\n (option) => option[this.valueField] === value\n );\n });\n\n // Call setInputValue (which toggles the selected state) on options that need to be deselected\n selectedOptionIndexes.forEach(\n (index) =>\n !optionsToKeepSelected.includes(index) && this.setInputValue(index)\n );\n }\n };\n\n // Determines keyboard behaviour when selection is manual (i.e. when you have to press Enter to select an option)\n private manualSetInputValueKeyboardOpen = (event: KeyboardEvent) => {\n const menuOptions = this.getMenuOptions();\n\n // For preventing focus disappearing on currently focused option when Shift / Cmd / Ctrl pressed\n // (i.e. when user is likely in the middle of executing a keyboard combination to select options)\n const isKeyboardCombination =\n event.shiftKey || event.metaKey || event.ctrlKey;\n\n const highlightedOptionIndex = this.getOptionHighlightedIndex();\n\n const clickedMultiOptionIndex = menuOptions.findIndex(\n (option) => option[this.valueField] === this.multiOptionClicked\n );\n\n const getOptionId = (index: number): string =>\n Array.from(this.host.querySelectorAll(\"li\"))[index]?.id;\n\n // Space press should be equivalent to Enter when multi-select\n if (event.key === \" \" && this.multiSelect) {\n this.handleOptionSelect(event, highlightedOptionIndex);\n } else {\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the top of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n } else {\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex,\n menuOptions\n );\n\n if (highlightedOptionIndex < menuOptions.length - 1) {\n this.setHighlightedOption(highlightedOptionIndex + 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex + 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex + 1,\n menuOptions\n );\n } else {\n this.setHighlightedOption(0);\n this.menuOptionId.emit({\n optionId: getOptionId(0),\n });\n\n this.handleSingleShiftSelect(event, 0, menuOptions);\n }\n\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the bottom of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n } else {\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex,\n menuOptions\n );\n\n if (\n highlightedOptionIndex <= 0 ||\n highlightedOptionIndex > menuOptions.length + 1\n ) {\n this.setHighlightedOption(menuOptions.length - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(menuOptions.length - 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n menuOptions.length - 1,\n menuOptions\n );\n } else {\n this.setHighlightedOption(highlightedOptionIndex - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex - 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex - 1,\n menuOptions\n );\n }\n\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"Home\": {\n const startOptionIndex = 0;\n\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(startOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(startOptionIndex),\n });\n\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(startOptionIndex);\n }\n\n this.lastOptionFocused = startOptionIndex;\n this.lastOptionSelected = startOptionIndex;\n break;\n }\n case \"End\": {\n const endOptionIndex = menuOptions.length - 1;\n\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(endOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(endOptionIndex),\n });\n\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(endOptionIndex);\n }\n\n this.lastOptionFocused = endOptionIndex;\n this.lastOptionSelected = endOptionIndex;\n break;\n }\n case \" \":\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n if (this.searchBar || this.searchableSelect) {\n break;\n } else {\n if ((event.target as HTMLElement).id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n }\n break;\n case \"Enter\":\n event.preventDefault();\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.handleOptionSelect(event, highlightedOptionIndex);\n break;\n case \"Escape\":\n if (this.open) {\n event.stopImmediatePropagation();\n }\n this.handleMenuChange(false);\n this.menuOptionId.emit({ optionId: undefined });\n break;\n case \"a\":\n // Checks if Cmd (meta) key is pressed if Mac device (while excluding meta key on Windows)\n // Otherwise, if a different OS, checks Ctrl key\n if (\n (isMacDevice() && event.metaKey) ||\n (!isMacDevice() && event.ctrlKey)\n ) {\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n break;\n case \"Shift\":\n case \"Tab\":\n if (event.key === \"Shift\") {\n this.shiftPressed = true;\n }\n if (this.searchBar) {\n this.keyboardNav = true;\n }\n if (this.multiSelect) {\n if (this.open && !event.shiftKey && this.selectAllButton) {\n event.preventDefault();\n this.selectAllButton.focus(); // Move focus to select all button instead of focused option\n this.preventMenuFocus = true;\n this.preventClickOpen = true;\n this.optionHighlighted = undefined; // Stop any option focus states showing when focus moved to select all button\n }\n } else {\n this.preventIncorrectTabOrder = true;\n }\n break;\n default:\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex);\n }\n }\n };\n\n private setInputValue = (highlightedOptionIndex: number) => {\n const menuOptions = this.getMenuOptions();\n\n if (menuOptions[highlightedOptionIndex] !== undefined) {\n this.menuOptionSelect.emit({\n value: menuOptions[highlightedOptionIndex][this.valueField],\n });\n\n if (this.closeOnSelect) {\n this.optionHighlighted = undefined;\n this.menuOptionId.emit({ optionId: undefined });\n }\n }\n\n if (this.closeOnSelect) {\n if (!this.hasTimedOut) {\n this.handleMenuChange(false);\n } else {\n (this.parentEl as HTMLIcSearchBarElement).setFocus();\n }\n }\n };\n\n private handleOptionClick = (event: MouseEvent): void => {\n const { value, label } = (event.target as HTMLLIElement).dataset;\n\n if (this.multiSelect) {\n const menuOptions = this.getMenuOptions();\n const selectedOptionIndex = menuOptions.findIndex(\n (option) => option.value === value\n );\n\n this.handleOptionSelect(event, selectedOptionIndex, true);\n this.multiOptionClicked = value || null;\n } else {\n this.menuOptionSelect.emit({ value, label });\n this.handleMenuChange(false);\n }\n\n this.optionHighlighted = undefined;\n };\n\n private handleRetry = (): void => {\n this.retryButtonClicked.emit({ value: this.value });\n };\n\n private handleRetryKeyDown = (ev: KeyboardEvent): void => {\n if (ev.key === \"Enter\" || ev.key === \" \") {\n ev.preventDefault();\n this.retryButtonClicked.emit({ value: this.value, keyPressed: ev.key });\n }\n };\n\n private handleBlur = (event: FocusEvent): void => {\n if (event.relatedTarget !== this.inputEl) {\n if (event.relatedTarget === this.selectAllButton) {\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n }\n\n if (\n !(\n this.menu?.contains(event.relatedTarget as HTMLElement) ||\n event.relatedTarget === this.selectAllButton\n )\n ) {\n this.handleMenuChange(false, this.hasPreviouslyBlurred);\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n } else {\n this.handleMenuChange(false);\n this.preventClickOpen = true;\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n if (!this.searchBar) this.hasPreviouslyBlurred = !!event.relatedTarget;\n };\n\n private handleMouseDown = (event: Event): void => {\n event.preventDefault();\n };\n\n private handleMenuKeyDown = (event: KeyboardEvent) => {\n if (this.activationType === \"automatic\") {\n this.autoSetValueOnMenuKeyDown(event);\n } else if (this.activationType === \"manual\" && !this.searchBar) {\n this.manualSetInputValueKeyboardOpen(event);\n }\n };\n\n private handleMenuKeyUp = (event: KeyboardEvent): void => {\n if (event.key === \"Tab\" && event.shiftKey) {\n this.preventClickOpen = false;\n }\n if (event.key === \"Enter\" && this.disabledOptionSelected) {\n this.disabledOptionSelected = false;\n event.stopImmediatePropagation();\n }\n\n if (event.key === \"Shift\") {\n this.shiftPressed = false;\n }\n };\n\n private handleSelectAllClick = () => {\n this.keyboardNav = false;\n this.menu?.focus();\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n\n private handleSelectAllBlur = (event: FocusEvent) => {\n this.host.classList.remove(\"ic-select-select-all-focused\");\n if (!this.menu?.contains(event.relatedTarget as HTMLElement)) {\n this.handleMenuChange(false, false);\n }\n };\n\n private handleSelectAllFocus = () => {\n this.host.classList.add(\"ic-select-select-all-focused\");\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n\n // Fix for Safari - select all button click was causing menu to close\n private handleSelectAllMouseDown = (event: Event) => {\n event.preventDefault();\n };\n\n // When shift key is being used to select contiguous options one by one on a multi-select\n // I.e. holding shift and pressing up and down arrow keys\n private handleSingleShiftSelect = (\n event: KeyboardEvent,\n optionToSelectIndex: number,\n options: IcMenuOption[]\n ) => {\n if (\n this.multiSelect &&\n event.shiftKey &&\n !this.isOptionSelected(optionToSelectIndex)\n ) {\n this.selectHighlightedOption(options, optionToSelectIndex);\n this.lastOptionSelected = optionToSelectIndex;\n }\n };\n\n // When shift key is being used to select multiple options at once on a multi-select\n // I.e. holding shift when selecting another option\n private handleMultipleShiftSelect = (\n lastOptionInSelection: number,\n useFocusForSelection = false,\n firstOptionSelected: number | null = null\n ) => {\n this.shiftPressed = false;\n\n const firstOptionInSelection =\n firstOptionSelected === null\n ? this.getFirstOptionInSelection(useFocusForSelection)\n : firstOptionSelected;\n if (firstOptionInSelection !== null) {\n const optionsToSelect = [];\n\n if (firstOptionInSelection < lastOptionInSelection) {\n for (\n let i = firstOptionInSelection;\n i < lastOptionInSelection + 1;\n i++\n ) {\n optionsToSelect.push(i);\n }\n } else {\n for (\n let i = firstOptionInSelection;\n i > lastOptionInSelection - 1;\n i--\n ) {\n optionsToSelect.push(i);\n }\n }\n\n optionsToSelect.forEach(\n (optionIndex) =>\n !this.isOptionSelected(optionIndex) && this.setInputValue(optionIndex)\n );\n this.deselectSelectedOptions(optionsToSelect);\n }\n };\n\n private handleOptionSelect = (\n event: KeyboardEvent | MouseEvent,\n optionIndex: number,\n useFocusForSelection = false\n ) => {\n const menuOptions = this.getMenuOptions();\n const firstOptionInSelection =\n this.getFirstOptionInSelection(useFocusForSelection);\n if (event.shiftKey && firstOptionInSelection !== null) {\n this.handleMultipleShiftSelect(\n optionIndex,\n useFocusForSelection,\n firstOptionInSelection\n );\n } else {\n this.selectHighlightedOption(menuOptions, optionIndex);\n }\n\n this.lastOptionFocused = optionIndex;\n this.lastOptionSelected = optionIndex;\n };\n\n private getFirstOptionInSelection = (\n useFocusForSelection: boolean\n ): number | null => {\n return useFocusForSelection && this.lastOptionFocused !== null\n ? this.lastOptionFocused\n : this.lastOptionSelected !== null\n ? this.lastOptionSelected\n : null;\n };\n\n private emitSelectAllEvents = () => {\n // Select all if there is either no value or not all options are selected\n // 'true' means select all, 'false' means clear all\n this.menuOptionSelectAll.emit({\n select:\n !this.value || !(this.value?.length === this.ungroupedOptions.length),\n });\n // Emit clear event if all options are selected\n if (this.value?.length === this.ungroupedOptions.length) {\n this.icClear.emit();\n }\n };\n\n private emitMenuKeyPress = (isNavKey: boolean, key: string) => {\n this.menuKeyPress.emit({ isNavKey: isNavKey, key: key });\n };\n\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is focused\n private autoSetValueOnMenuKeyDown = (event: KeyboardEvent): void => {\n event.cancelBubble = true;\n const selectedOptionIndex = this.ungroupedOptions.findIndex(\n (option) => option[this.valueField] === this.value\n );\n\n const isSearchableSelect =\n !!this.inputEl && this.inputEl.tagName === \"INPUT\";\n\n this.keyboardNav = false;\n\n switch (event.key) {\n case \" \":\n event.preventDefault();\n break;\n case \"ArrowUp\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setPreviousOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"ArrowDown\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setNextOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"Home\":\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n });\n this.keyboardNav = true;\n break;\n case \"End\":\n this.menuOptionSelect.emit({\n value:\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ],\n });\n this.keyboardNav = true;\n break;\n case \"Enter\":\n !this.hasTimedOut && this.handleMenuChange(false);\n break;\n case \"Escape\":\n this.handleMenuChange(false);\n break;\n case \"Backspace\":\n if (isSearchableSelect) {\n this.inputEl?.focus();\n }\n break;\n case \"Shift\":\n break;\n default:\n if (isSearchableSelect && event.key !== \"Tab\" && !this.hasTimedOut) {\n this.inputEl?.focus();\n }\n if (event.key.length === 1) {\n this.keyboardNav = true;\n }\n break;\n }\n this.emitMenuKeyPress(this.keyboardNav, event.key);\n };\n\n private getOptionId = (value: string): string => {\n return `${this.menuId}-${value}`;\n };\n\n private getOptionAriaLabel = (\n option: IcMenuOption,\n parentOption?: IcMenuOption\n ): string => {\n let ariaLabel = option[this.labelField];\n\n if (option.description) {\n ariaLabel = `${ariaLabel}, ${option.description}`;\n }\n\n if (option.element) {\n ariaLabel = `${ariaLabel}, ${option.element.ariaLabel}`;\n }\n\n if (parentOption) {\n return `${ariaLabel}, ${parentOption[this.labelField]} group`;\n } else {\n return ariaLabel;\n }\n };\n\n private getSortedOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n let sorted: IcMenuOption[] = [];\n if (options.sort) {\n sorted = options.sort((optionA, optionB) =>\n optionA.recommended && !optionB.recommended ? -1 : 0\n );\n }\n return sorted;\n };\n\n private getOptionHighlightedIndex = () => {\n const menuOptions = this.getMenuOptions();\n\n return menuOptions.findIndex(\n (option) => option[this.valueField] === this.optionHighlighted\n );\n };\n\n private isManualMode = this.activationType === \"manual\";\n\n private scrollToSelected = (menu: HTMLUListElement) => {\n const selectedOption = this.selectOnEnter\n ? (this.host.querySelector(\n `li[data-value=\"${this.optionHighlighted}\"]`\n ) as HTMLElement)\n : (menu.querySelector(\".option[aria-selected='true']\") as HTMLElement);\n\n if (selectedOption) {\n const elTop = selectedOption.offsetTop + selectedOption.offsetHeight;\n if (\n elTop > menu.scrollTop + menu.offsetHeight ||\n elTop < menu.scrollTop + menu.offsetHeight\n ) {\n menu.scrollTop = selectedOption.offsetTop;\n }\n // 'aria-activedescendant' affects screen reader focus\n // https://www.w3.org/TR/2017/WD-wai-aria-practices-1.1-20170628/#kbd_focus_activedescendant\n this.menu?.setAttribute(this.ACTIVE_DESCENDANT, selectedOption.id);\n selectedOption.focus();\n }\n };\n\n // Set 'ungroupedOptions' variable and emit its value\n // - this is all the options with disabled options and group titles removed\n private loadUngroupedOptions = () => {\n if (this.options.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (option.children) {\n option.children.map(\n (option) => !option.disabled && this.ungroupedOptions.push(option)\n );\n } else if (!option.disabled) {\n this.ungroupedOptions.push(option);\n }\n });\n }\n this.ungroupedOptions = this.getSortedOptions(this.ungroupedOptions);\n this.ungroupedOptionsSet.emit({ options: this.ungroupedOptions });\n };\n\n private setMenuScrollbar = () => {\n let optionsHeight = 0;\n this.host\n .querySelectorAll(\".option, .option-group-title\")\n .forEach((option) => (optionsHeight += option.clientHeight));\n\n if (optionsHeight >= 320) {\n this.menu?.classList.add(\"menu-scroll\");\n }\n };\n\n private handleTimeoutBlur = (ev: FocusEvent) => {\n this.timeoutBlur.emit({ ev });\n };\n\n private focusOnSearchOrSelectInput(\n menuOptions: IcMenuOption[],\n highlightedOptionIndex: number\n ) {\n if (!menuOptions[highlightedOptionIndex]) return;\n\n if (this.searchBar) {\n (this.parentEl as HTMLIcSearchBarElement).setFocus();\n if (this.searchMode === \"navigation\") this.setHighlightedOption(0);\n }\n\n if (this.searchableSelect) {\n (this.parentEl as HTMLIcSelectElement).setFocus();\n }\n\n this.focusFromSearchKeypress = true;\n }\n\n private optionContent = (option: IcMenuOption, selected: boolean) => {\n const showCheckIcon =\n !!option[this.valueField] &&\n !!this.value &&\n selected &&\n this.parentEl?.tagName !== this.SEARCH_BAR_TAG;\n\n return (\n <Fragment>\n {option.loading && <ic-loading-indicator size=\"icon\" />}\n <div\n class={{\n \"option-text-container\": true,\n \"show-check-icon\": showCheckIcon,\n }}\n >\n <div class=\"option-label\">\n {option.icon && (\n <div\n class=\"option-icon\"\n innerHTML={sanitizeHTMLIconString(option.icon)}\n aria-hidden=\"true\"\n ></div>\n )}\n <ic-typography variant=\"body\" aria-hidden=\"true\">\n {option[this.labelField]}\n </ic-typography>\n </div>\n {option.description && (\n <ic-typography\n id={`${this.getOptionId(option[this.valueField])}-description`}\n class=\"option-description\"\n variant=\"caption\"\n aria-hidden=\"true\"\n >\n <p>{option.description}</p>\n </ic-typography>\n )}\n {option.element && (\n <div\n class=\"option-element\"\n innerHTML={sanitizeHTMLString(option.element.component)}\n aria-hidden=\"true\"\n ></div>\n )}\n </div>\n {showCheckIcon && <span class=\"check-icon\" innerHTML={Check} />}\n </Fragment>\n );\n };\n\n private displayOption = (\n option: IcMenuOption,\n selected: boolean,\n index: number,\n parentOption?: IcMenuOption\n ): HTMLLIElement => {\n const {\n open,\n keyboardNav,\n isManualMode,\n initialOptionsListRender,\n optionHighlighted,\n options,\n } = this;\n\n return (\n <li\n id={this.getOptionId(option[this.valueField])}\n class={{\n option: true,\n \"focused-option\": isManualMode\n ? (keyboardNav || initialOptionsListRender) &&\n option[this.valueField] === optionHighlighted\n : keyboardNav && selected,\n \"last-recommended-option\": !!(\n option.recommended &&\n options[index + 1] &&\n !options[index + 1].recommended\n ),\n \"disabled-option\": !!option.disabled,\n \"loading-option\": !!option.loading,\n timeout: !!option.timedOut,\n }}\n role=\"option\"\n tabindex={\n open &&\n (selected || option[this.valueField] === optionHighlighted) &&\n keyboardNav\n ? \"0\"\n : \"-1\"\n }\n aria-label={this.getOptionAriaLabel(option, parentOption)}\n aria-selected={selected ? \"true\" : \"false\"}\n aria-disabled={option.disabled ? \"true\" : \"false\"}\n onClick={\n !option.timedOut && !option.loading\n ? this.handleOptionClick\n : undefined\n }\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n data-value={option[this.valueField]}\n data-label={option[this.labelField]}\n >\n {option.timedOut ? (\n <Fragment>\n <div class=\"loading-error-info\">\n <svg\n class=\"error-icon-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"#000000\"\n >\n <title>Error</title>\n <g>\n <path d=\"M8.77 3L3.5 8.27V15.73L8.77 21H16.23L21.5 15.73V8.27L16.23 3M8.91 7L12.5 10.59L16.09 7L17.5 8.41L13.91 12L17.5 15.59L16.09 17L12.5 13.41L8.91 17L7.5 15.59L11.09 12L7.5 8.41\" />\n </g>\n </svg>\n <ic-typography variant=\"label\">\n {option[this.labelField]}\n </ic-typography>\n </div>\n <ic-button\n size=\"small\"\n variant=\"tertiary\"\n onClick={this.handleRetry}\n onKeyDown={this.handleRetryKeyDown}\n onBlur={this.handleTimeoutBlur}\n id=\"retry-button\"\n >\n Retry\n </ic-button>\n </Fragment>\n ) : (\n this.optionContent(option, selected)\n )}\n </li>\n );\n };\n\n render() {\n const {\n inputLabel,\n options,\n menuId,\n value,\n fullWidth,\n hasTimedOut,\n isLoading,\n size,\n open,\n inputEl,\n keyboardNav,\n parentEl,\n SEARCH_BAR_TAG,\n multiSelect,\n } = this;\n\n const selectAllButtonText = `${\n value?.length === this.ungroupedOptions.length ? \"Clear\" : \"Select\"\n } all`;\n\n const hasNoResults = this.host.classList.contains(\"no-results\");\n\n return (\n <Host\n class={{\n \"ic-menu-full-width\": !!fullWidth,\n \"ic-menu-no-focus\":\n (inputEl?.tagName === \"INPUT\" &&\n parentEl?.tagName !== SEARCH_BAR_TAG) ||\n hasTimedOut ||\n isLoading,\n [`ic-menu-${size}`]: true,\n \"ic-menu-open\": open && options.length !== 0,\n \"ic-menu-multiple\": multiSelect,\n }}\n >\n {options.length !== 0 && (\n <ul\n id={menuId}\n class=\"menu\"\n role=\"listbox\"\n aria-label={`${inputLabel} pop-up`}\n aria-multiselectable={multiSelect ? \"true\" : \"false\"}\n tabindex={\n open &&\n !keyboardNav &&\n (inputEl?.tagName !== \"INPUT\" ||\n parentEl?.tagName === SEARCH_BAR_TAG)\n ? \"0\"\n : \"-1\"\n }\n ref={(el) => (this.menu = el)}\n onKeyDown={this.handleMenuKeyDown}\n onKeyUp={this.handleMenuKeyUp}\n onBlur={this.handleBlur}\n >\n {this.getSortedOptions(options).map((option, index) => {\n if (option.children) {\n if (option.children.length > 0) {\n return (\n <div>\n <ic-typography\n class=\"option-group-title\"\n role=\"presentation\"\n variant=\"subtitle-small\"\n >\n <p>{option[this.labelField]}</p>\n </ic-typography>\n {option.children.map(\n (childOption) =>\n childOption.label &&\n this.displayOption(\n childOption,\n multiSelect\n ? value?.includes(childOption[this.valueField])\n : childOption[this.valueField] === value,\n index,\n option\n )\n )}\n </div>\n );\n } else {\n return null;\n }\n } else {\n // Display option only if it has a label (rather than displaying an empty space)\n return (\n option.label &&\n this.displayOption(\n option,\n multiSelect\n ? value?.includes(option[this.valueField])\n : option[this.valueField] === value,\n index\n )\n );\n }\n })}\n </ul>\n )}\n {options.length !== 0 &&\n multiSelect &&\n !isLoading &&\n !hasTimedOut &&\n !hasNoResults && (\n <div class=\"option-bar\">\n <ic-typography>\n <p>{`${\n value ? value.length : 0\n }/${getOptionsWithoutGroupTitlesCount(\n this.options\n )} selected`}</p>\n </ic-typography>\n <ic-button\n class=\"select-all-button\"\n aria-label={`${selectAllButtonText} options for ${inputLabel}`}\n ref={(el) => (this.selectAllButton = el)}\n variant=\"tertiary\"\n onClick={this.handleSelectAllClick}\n onMouseDown={this.handleSelectAllMouseDown}\n onBlur={this.handleSelectAllBlur}\n onFocus={this.handleSelectAllFocus}\n size={size === \"small\" ? \"small\" : \"medium\"}\n >\n {selectAllButtonText}\n </ic-button>\n </div>\n )}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ic-menu.js","sourceRoot":"","sources":["../../../src/components/ic-menu/ic-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Method,\n State,\n Watch,\n Fragment,\n} from \"@stencil/core\";\nimport {\n createPopper,\n Instance as PopperInstance,\n Options,\n} from \"@popperjs/core\";\n\nimport {\n IcActivationTypes,\n IcMenuOption,\n IcSizes,\n IcMultiValueEventDetail,\n} from \"../../utils/types\";\nimport Check from \"../../assets/check-icon.svg\";\nimport {\n getOptionsWithoutGroupTitlesCount,\n isMacDevice,\n onComponentRequiredPropUndefined,\n} from \"../../utils/helpers\";\nimport {\n sanitizeHTMLString,\n sanitizeHTMLIconString,\n} from \"../../utils/common-helpers\";\nimport {\n IcOptionSelectEventDetail,\n IcMenuChangeEventDetail,\n IcMenuOptionIdEventDetail,\n} from \"./ic-menu.types\";\nimport { IcSearchBarSearchModes } from \"../ic-search-bar/ic-search-bar.types\";\n\n@Component({\n tag: \"ic-menu\",\n styleUrl: \"ic-menu.css\",\n scoped: true,\n})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport class Menu {\n private ACTIVE_DESCENDANT = \"aria-activedescendant\";\n private CLEAR_BUTTON_ID = \"clear-button\";\n private SEARCH_BAR_TAG = \"IC-SEARCH-BAR\";\n private disabledOptionSelected = false;\n private hasPreviouslyBlurred = false;\n private hasTimedOut = false;\n private isLoading = false;\n private lastOptionSelected: number | null = null; // Index of last option selected\n private lastOptionFocused: number | null = null; // Index of last option focused\n private menu?: HTMLUListElement;\n private multiOptionClicked: string | null = null;\n private popperInstance: PopperInstance | null;\n private preventClickOpen = false; // Prevents menu re-opening immediately after it is closed on blur when clicking input.\n private preventMenuFocus = false; // (When multiple) ensures focus moves straight to select all button from menu.\n private selectAllButton?: HTMLIcButtonElement;\n private shiftPressed = false;\n private ungroupedOptions: IcMenuOption[] = [];\n\n @Element() host: HTMLIcMenuElement;\n\n @State() focusFromSearchKeypress = false;\n @State() initialOptionsListRender = false;\n @State() keyboardNav = false;\n @State() optionHighlighted?: string;\n @State() preventIncorrectTabOrder = false;\n @State() menuOptions: IcMenuOption[];\n @State() popperProps: Partial<Options> = {};\n\n /**\n * Determines whether options manually set as values (by pressing 'Enter') when they receive focus using keyboard navigation.\n */\n @Prop() activationType: IcActivationTypes = \"automatic\";\n\n /**\n * The reference to an anchor element the menu will position itself from when rendered.\n */\n @Prop() anchorEl?: HTMLElement;\n\n /**\n * @internal If `true`, autofocus will be applied on selected item when menu is open.\n */\n @Prop() autofocusOnSelected = true;\n\n /**\n * If `true`, the menu will close when an option is selected.\n */\n @Prop() closeOnSelect = true;\n\n /**\n * If `true`, the menu will fill the width of the container.\n */\n @Prop() fullWidth = false;\n\n /**\n * The reference to the input element.\n */\n @Prop() inputEl?: HTMLElement;\n\n /**\n * The label for the input element.\n */\n @Prop() inputLabel!: string;\n\n /**\n * The custom name for the label field for IcMenuOption.\n */\n @Prop() labelField = \"label\";\n\n /**\n * The ID of the menu.\n */\n @Prop() menuId!: string;\n\n /**\n * @internal - flag to specify if menu is in a ic-select multiple.\n */\n @Prop() multiSelect = false;\n\n /**\n * If `true`, the menu will be displayed open.\n */\n @Prop({ reflect: true }) open!: boolean;\n @Watch(\"open\")\n watchOpenHandler(): void {\n if (!this.open && this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n /**\n * @internal - The parent element if ic-menu is nested inside another component.\n */\n @Prop() parentEl?: HTMLElement;\n\n /**\n * @internal - flag to specify if menu is in a searchable ic-select.\n */\n @Prop() searchableSelect = false;\n\n /**\n * @internal - flag to specify if menu is in a ic-search-bar.\n */\n @Prop() searchBar = false;\n\n /**\n * Specify the mode search bar uses to search. `navigation` allows for quick lookups of a set of values, `query` allows for more general searches.\n */\n @Prop() searchMode: IcSearchBarSearchModes = \"navigation\";\n\n /**\n * @internal If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\n */\n @Prop() selectOnEnter: boolean = false;\n\n /**\n * The size of the menu.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * The possible menu selection options.\n */\n @Prop() options!: IcMenuOption[];\n @Watch(\"options\")\n watchOptionsHandler(newOptions: IcMenuOption[]): void {\n this.hasTimedOut = newOptions.some((opt) => opt.timedOut);\n this.isLoading = newOptions.some((opt) => opt.loading);\n this.ungroupedOptions = [];\n this.loadUngroupedOptions();\n }\n\n /**\n * The value of the currently selected option - or array of values (if multiple options allowed).\n */\n @Prop() value!: string | string[];\n\n /**\n * The custom name for the value field for IcMenuOption.\n */\n @Prop() valueField = \"value\";\n\n /**\n * Emitted when the clear all button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * @internal Emitted when key is pressed while menu is open.\n */\n @Event() menuKeyPress: EventEmitter<{ isNavKey: boolean; key: string }>;\n\n /**\n * @internal Emitted when an option has been highlighted.\n */\n @Event() menuOptionId: EventEmitter<IcMenuOptionIdEventDetail>;\n\n /**\n * @internal Emitted when an option is selected.\n */\n @Event() menuOptionSelect!: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * @internal Emitted when all options are selected or deselected.\n */\n @Event() menuOptionSelectAll!: EventEmitter<{ select: boolean }>;\n\n /**\n * @internal Emitted when state of menu changes (i.e. open or closed).\n */\n @Event() menuStateChange!: EventEmitter<IcMenuChangeEventDetail>;\n\n /**\n * @internal Emitted when the retry button is clicked.\n */\n @Event() retryButtonClicked: EventEmitter<IcMultiValueEventDetail>;\n\n /**\n * @internal Emitted when the timeout menu loses focus.\n */\n @Event() timeoutBlur: EventEmitter<{ ev: FocusEvent }>;\n\n /**\n * @internal Emitted when the ungrouped options have been set.\n */\n @Event() ungroupedOptionsSet: EventEmitter<{ options: IcMenuOption[] }>;\n\n connectedCallback(): void {\n if (this.searchBar) {\n if (this.searchMode === \"navigation\") this.setHighlightedOption(0);\n this.initialOptionsListRender = true;\n }\n }\n\n disconnectedCallback(): void {\n this.popperInstance?.destroy();\n this.parentEl?.removeEventListener(\"icClear\", this.handleClearListener);\n this.parentEl?.removeEventListener(\n \"icSubmitSearch\",\n this.handleSubmitSearch\n );\n }\n\n componentWillLoad(): void {\n this.loadUngroupedOptions();\n this.parentEl?.addEventListener(\"icClear\", this.handleClearListener);\n this.parentEl?.addEventListener(\"icSubmitSearch\", this.handleSubmitSearch);\n this.hasTimedOut = this.options?.some((opt) => opt.timedOut);\n this.isLoading = this.options?.some((opt) => opt.loading);\n }\n\n componentDidLoad(): void {\n if (\n this.searchBar &&\n (this.parentEl as HTMLIcSearchBarElement).disableAutoFiltering\n ) {\n this.focusFromSearchKeypress = true;\n }\n\n onComponentRequiredPropUndefined(\n [\n { prop: this.open, propName: \"open\" },\n { prop: this.options, propName: \"options\" },\n { prop: this.menuId, propName: \"menu-id\" },\n { prop: this.inputLabel, propName: \"input-label\" },\n //NOTE: no check for value, input-el or anchor-el as otherwise get console errors on first load of select component\n ],\n \"Menu\"\n );\n }\n\n componentDidUpdate(): void {\n const inputValueInOptions = this.options.some(\n (option) => option[this.valueField] === this.value\n );\n\n if (\n this.menu &&\n this.open &&\n this.options.length !== 0 &&\n !this.preventMenuFocus\n ) {\n if (\n this.value &&\n this.keyboardNav &&\n inputValueInOptions &&\n this.autofocusOnSelected &&\n !this.searchableSelect\n ) {\n this.scrollToSelected(this.menu);\n } else if (this.selectOnEnter) {\n this.menu.focus();\n } else if (\n !!this.optionHighlighted &&\n !this.focusFromSearchKeypress &&\n !this.preventIncorrectTabOrder\n ) {\n const highlightedEl = this.host.querySelector(\n `li[data-value=\"${this.optionHighlighted}\"]`\n ) as HTMLElement;\n\n if (highlightedEl) {\n this.menu.setAttribute(this.ACTIVE_DESCENDANT, highlightedEl.id);\n highlightedEl.focus();\n }\n } else if (this.inputEl && this.inputEl.tagName !== \"INPUT\") {\n this.menu.focus();\n }\n }\n\n if (this.menu && this.open && !this.value && this.selectOnEnter) {\n this.scrollToSelected(this.menu);\n }\n\n this.preventMenuFocus = false;\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance && this.anchorEl) {\n this.initPopperJs(this.anchorEl);\n }\n\n if (this.open && !!this.options.length) {\n this.setMenuScrollbar();\n }\n }\n\n /**\n * @internal If menu is opened with the mouse, emit menuStateChange custom event.\n */\n @Method()\n async handleClickOpen(): Promise<void> {\n if (!this.preventClickOpen) {\n this.menuStateChange.emit({ open: !this.open });\n this.keyboardNav = false;\n }\n this.preventClickOpen = false;\n }\n\n /**\n * Used alongside activationType\n * If menu is opened via keyboard navigation (i.e. Enter, ArrowUp or ArrowDown), emit optionSelect custom event.\n * @param {KeyboardEvent} event The keyboard event which is available when handleKeyboardOpen is invoked.\n */\n @Method()\n async handleKeyboardOpen(event: KeyboardEvent): Promise<void> {\n if (this.activationType === \"automatic\") {\n this.autoSetInputValueKeyboardOpen(event);\n } else {\n this.manualSetInputValueKeyboardOpen(event);\n }\n }\n\n /**\n * @internal Used to highlight the first option in the menu.\n */\n @Method()\n async handleSetFirstOption(): Promise<void> {\n this.setHighlightedOption(0);\n }\n\n /**\n * @internal Used to initialize popperJS with an anchor element.\n * 5/12/2023: Tested with Floating UI, however, discovered inconsistent\n * boundary behaviour so sticking with PopperJS.\n */\n @Method()\n async initPopperJs(anchor: HTMLElement): Promise<void> {\n // Placements set to \"-start\" to accommodate for custom menu width - menu should always be aligned to the left\n this.popperInstance = createPopper(anchor, this.host, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 7],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\"],\n rootBoundary: \"viewport\",\n },\n },\n ],\n ...this.popperProps,\n });\n }\n\n /**\n * @internal This method allows props to be added to the PopperJS createPopper instance outside of the menu\n * @param props object - createPopper props set externally\n */\n @Method()\n async setExternalPopperProps<T extends Partial<Options>>(props: T) {\n this.popperProps = props;\n }\n\n private handleClearListener = (): void => {\n this.optionHighlighted = \"\";\n };\n\n private handleSubmitSearch = (): void => {\n const highlightedOptionIndex = this.options.findIndex(\n (option) => option[this.valueField] === this.optionHighlighted\n );\n\n this.setInputValue(highlightedOptionIndex);\n };\n\n private handleMenuChange = (open: boolean, focusInput?: boolean): void => {\n this.menuStateChange.emit({ open, focusInput });\n\n if (!open) {\n if (focusInput !== false) {\n this.inputEl?.focus();\n this.preventClickOpen = false;\n }\n\n // Reset optionHighlighted so previously highlighted option doesn't get reselected when Enter pressed\n if (this.multiSelect) {\n this.optionHighlighted = undefined;\n this.multiOptionClicked = null;\n }\n }\n };\n\n private setNextOptionValue = (selectedOptionIndex: number): void => {\n if (this.ungroupedOptions[selectedOptionIndex + 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex + 1][this.valueField],\n optionId: this.getOptionId(\n this.ungroupedOptions[selectedOptionIndex + 1][this.valueField]\n ),\n });\n } else {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[0][this.valueField]),\n });\n }\n };\n\n private setPreviousOptionValue = (selectedOptionIndex: number): void => {\n if (this.ungroupedOptions[selectedOptionIndex - 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex - 1][this.valueField],\n optionId: this.getOptionId(\n this.ungroupedOptions[selectedOptionIndex - 1][this.valueField]\n ),\n });\n } else {\n this.menuOptionSelect.emit({\n value:\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ],\n optionId: this.getOptionId(\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ]\n ),\n });\n }\n };\n\n // Open menu when up or down arrow keys are pressed\n private arrowBehaviour = (event: KeyboardEvent): void => {\n event.preventDefault();\n this.handleMenuChange(true);\n };\n\n private getMenuOptions = () =>\n this.searchBar ? this.options : this.ungroupedOptions;\n\n // Set option that is focused and so should show focus state\n private setHighlightedOption = (highlightedIndex: number): void => {\n const menuOptions = this.getMenuOptions();\n\n menuOptions[highlightedIndex] &&\n !menuOptions[highlightedIndex].timedOut &&\n (this.optionHighlighted =\n menuOptions[highlightedIndex][this.valueField] || undefined);\n };\n\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is closed\n private autoSetInputValueKeyboardOpen = (event: KeyboardEvent) => {\n const selectedOptionIndex = this.ungroupedOptions.findIndex(\n (option) => option[this.valueField] === this.value\n );\n\n this.keyboardNav = false;\n\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setNextOptionValue(selectedOptionIndex);\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setPreviousOptionValue(selectedOptionIndex);\n break;\n case \" \":\n case \"Enter\":\n if ((event.target as HTMLElement).id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n break;\n }\n };\n\n private selectHighlightedOption = (\n options: IcMenuOption[],\n highlightedOptionIndex: number\n ) => {\n if (!this.isLoading && !this.hasTimedOut) {\n this.keyboardNav = true;\n }\n\n const isOpen: boolean =\n this.searchBar || this.searchableSelect || this.open;\n\n if (isOpen) {\n if (highlightedOptionIndex >= 0) {\n if (options[highlightedOptionIndex] !== undefined) {\n if (\n this.searchBar &&\n options[highlightedOptionIndex].disabled === true\n ) {\n this.disabledOptionSelected = true;\n } else {\n this.setInputValue(highlightedOptionIndex);\n }\n }\n } else {\n this.setInputValue(highlightedOptionIndex);\n }\n } else {\n this.handleMenuChange(true);\n }\n };\n\n // Check if option is selected based on the index of the option\n private isOptionSelected = (index: number) => {\n const menuOptions = this.getMenuOptions();\n\n return this.value\n ? this.value.includes(menuOptions[index][this.valueField])\n : false;\n };\n\n // Deselect currently selected options when shift pressed, but keep certain options selected\n private deselectSelectedOptions = (optionsToKeepSelected: number[]) => {\n const menuOptions = this.getMenuOptions();\n\n if (this.value) {\n const selectedOptionIndexes = (this.value as string[]).map((value) => {\n return menuOptions.findIndex(\n (option) => option[this.valueField] === value\n );\n });\n\n // Call setInputValue (which toggles the selected state) on options that need to be deselected\n selectedOptionIndexes.forEach(\n (index) =>\n !optionsToKeepSelected.includes(index) && this.setInputValue(index)\n );\n }\n };\n\n // Determines keyboard behaviour when selection is manual (i.e. when you have to press Enter to select an option)\n private manualSetInputValueKeyboardOpen = (event: KeyboardEvent) => {\n const menuOptions = this.getMenuOptions();\n\n // For preventing focus disappearing on currently focused option when Shift / Cmd / Ctrl pressed\n // (i.e. when user is likely in the middle of executing a keyboard combination to select options)\n const isKeyboardCombination =\n event.shiftKey || event.metaKey || event.ctrlKey;\n\n const highlightedOptionIndex = this.getOptionHighlightedIndex();\n\n const clickedMultiOptionIndex = menuOptions.findIndex(\n (option) => option[this.valueField] === this.multiOptionClicked\n );\n\n const getOptionId = (index: number): string =>\n Array.from(this.host.querySelectorAll(\"li\"))[index]?.id;\n\n // Space press should be equivalent to Enter when multi-select\n if (event.key === \" \" && this.multiSelect) {\n this.handleOptionSelect(event, highlightedOptionIndex);\n } else {\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the top of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n } else {\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex,\n menuOptions\n );\n\n if (highlightedOptionIndex < menuOptions.length - 1) {\n this.setHighlightedOption(highlightedOptionIndex + 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex + 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex + 1,\n menuOptions\n );\n } else {\n this.setHighlightedOption(0);\n this.menuOptionId.emit({\n optionId: getOptionId(0),\n });\n\n this.handleSingleShiftSelect(event, 0, menuOptions);\n }\n\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the bottom of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n } else {\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex,\n menuOptions\n );\n\n if (\n highlightedOptionIndex <= 0 ||\n highlightedOptionIndex > menuOptions.length + 1\n ) {\n this.setHighlightedOption(menuOptions.length - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(menuOptions.length - 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n menuOptions.length - 1,\n menuOptions\n );\n } else {\n this.setHighlightedOption(highlightedOptionIndex - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex - 1),\n });\n\n this.handleSingleShiftSelect(\n event,\n highlightedOptionIndex - 1,\n menuOptions\n );\n }\n\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"Home\": {\n const startOptionIndex = 0;\n\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(startOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(startOptionIndex),\n });\n\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(startOptionIndex);\n }\n\n this.lastOptionFocused = startOptionIndex;\n this.lastOptionSelected = startOptionIndex;\n break;\n }\n case \"End\": {\n const endOptionIndex = menuOptions.length - 1;\n\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(endOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(endOptionIndex),\n });\n\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(endOptionIndex);\n }\n\n this.lastOptionFocused = endOptionIndex;\n this.lastOptionSelected = endOptionIndex;\n break;\n }\n case \" \":\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n if (this.searchBar || this.searchableSelect) {\n break;\n } else {\n if ((event.target as HTMLElement).id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n }\n break;\n case \"Enter\":\n event.preventDefault();\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.handleOptionSelect(event, highlightedOptionIndex);\n break;\n case \"Escape\":\n if (this.open) {\n event.stopImmediatePropagation();\n }\n this.handleMenuChange(false);\n this.menuOptionId.emit({ optionId: undefined });\n break;\n case \"a\":\n // Checks if Cmd (meta) key is pressed if Mac device (while excluding meta key on Windows)\n // Otherwise, if a different OS, checks Ctrl key\n if (\n (isMacDevice() && event.metaKey) ||\n (!isMacDevice() && event.ctrlKey)\n ) {\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n break;\n case \"Shift\":\n case \"Tab\":\n if (event.key === \"Shift\") {\n this.shiftPressed = true;\n }\n if (this.searchBar) {\n this.keyboardNav = true;\n }\n if (this.multiSelect) {\n if (this.open && !event.shiftKey && this.selectAllButton) {\n event.preventDefault();\n this.selectAllButton.focus(); // Move focus to select all button instead of focused option\n this.preventMenuFocus = true;\n this.preventClickOpen = true;\n this.optionHighlighted = undefined; // Stop any option focus states showing when focus moved to select all button\n }\n } else {\n this.preventIncorrectTabOrder = true;\n }\n break;\n default:\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex);\n }\n }\n };\n\n private setInputValue = (highlightedOptionIndex: number) => {\n const menuOptions = this.getMenuOptions();\n\n if (menuOptions[highlightedOptionIndex] !== undefined) {\n this.menuOptionSelect.emit({\n value: menuOptions[highlightedOptionIndex][this.valueField],\n });\n\n if (this.closeOnSelect) {\n this.optionHighlighted = undefined;\n this.menuOptionId.emit({ optionId: undefined });\n }\n }\n\n if (this.closeOnSelect) {\n if (!this.hasTimedOut) {\n this.handleMenuChange(false);\n } else {\n (this.parentEl as HTMLIcSearchBarElement).setFocus();\n }\n }\n };\n\n private handleOptionClick = (event: MouseEvent): void => {\n const { value, label } = (event.target as HTMLLIElement).dataset;\n\n if (this.multiSelect) {\n const menuOptions = this.getMenuOptions();\n const selectedOptionIndex = menuOptions.findIndex(\n (option) => option[this.valueField] === value\n );\n\n this.handleOptionSelect(event, selectedOptionIndex, true);\n this.multiOptionClicked = value || null;\n } else {\n this.menuOptionSelect.emit({ value, label });\n this.handleMenuChange(false);\n }\n\n this.optionHighlighted = undefined;\n };\n\n private handleRetry = (): void => {\n this.retryButtonClicked.emit({ value: this.value });\n };\n\n private handleRetryKeyDown = (ev: KeyboardEvent): void => {\n if (ev.key === \"Enter\" || ev.key === \" \") {\n ev.preventDefault();\n this.retryButtonClicked.emit({ value: this.value, keyPressed: ev.key });\n }\n };\n\n private handleBlur = (event: FocusEvent): void => {\n if (event.relatedTarget !== this.inputEl) {\n if (event.relatedTarget === this.selectAllButton) {\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n }\n\n if (\n !(\n this.menu?.contains(event.relatedTarget as HTMLElement) ||\n event.relatedTarget === this.selectAllButton\n )\n ) {\n this.handleMenuChange(false, this.hasPreviouslyBlurred);\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n } else {\n this.handleMenuChange(false);\n this.preventClickOpen = true;\n this.menu?.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n if (!this.searchBar) this.hasPreviouslyBlurred = !!event.relatedTarget;\n };\n\n private handleMouseDown = (event: Event): void => {\n event.preventDefault();\n };\n\n private handleMenuKeyDown = (event: KeyboardEvent) => {\n if (this.activationType === \"automatic\") {\n this.autoSetValueOnMenuKeyDown(event);\n } else if (this.activationType === \"manual\" && !this.searchBar) {\n this.manualSetInputValueKeyboardOpen(event);\n }\n };\n\n private handleMenuKeyUp = (event: KeyboardEvent): void => {\n if (event.key === \"Tab\" && event.shiftKey) {\n this.preventClickOpen = false;\n }\n if (event.key === \"Enter\" && this.disabledOptionSelected) {\n this.disabledOptionSelected = false;\n event.stopImmediatePropagation();\n }\n\n if (event.key === \"Shift\") {\n this.shiftPressed = false;\n }\n };\n\n private handleSelectAllClick = () => {\n this.keyboardNav = false;\n this.menu?.focus();\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n\n private handleSelectAllBlur = (event: FocusEvent) => {\n this.host.classList.remove(\"ic-select-select-all-focused\");\n if (!this.menu?.contains(event.relatedTarget as HTMLElement)) {\n this.handleMenuChange(false, false);\n }\n };\n\n private handleSelectAllFocus = () => {\n this.host.classList.add(\"ic-select-select-all-focused\");\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n\n // Fix for Safari - select all button click was causing menu to close\n private handleSelectAllMouseDown = (event: Event) => {\n event.preventDefault();\n };\n\n // When shift key is being used to select contiguous options one by one on a multi-select\n // I.e. holding shift and pressing up and down arrow keys\n private handleSingleShiftSelect = (\n event: KeyboardEvent,\n optionToSelectIndex: number,\n options: IcMenuOption[]\n ) => {\n if (\n this.multiSelect &&\n event.shiftKey &&\n !this.isOptionSelected(optionToSelectIndex)\n ) {\n this.selectHighlightedOption(options, optionToSelectIndex);\n this.lastOptionSelected = optionToSelectIndex;\n }\n };\n\n // When shift key is being used to select multiple options at once on a multi-select\n // I.e. holding shift when selecting another option\n private handleMultipleShiftSelect = (\n lastOptionInSelection: number,\n useFocusForSelection = false,\n firstOptionSelected: number | null = null\n ) => {\n this.shiftPressed = false;\n\n const firstOptionInSelection =\n firstOptionSelected === null\n ? this.getFirstOptionInSelection(useFocusForSelection)\n : firstOptionSelected;\n if (firstOptionInSelection !== null) {\n const optionsToSelect = [];\n\n if (firstOptionInSelection < lastOptionInSelection) {\n for (\n let i = firstOptionInSelection;\n i < lastOptionInSelection + 1;\n i++\n ) {\n optionsToSelect.push(i);\n }\n } else {\n for (\n let i = firstOptionInSelection;\n i > lastOptionInSelection - 1;\n i--\n ) {\n optionsToSelect.push(i);\n }\n }\n\n optionsToSelect.forEach(\n (optionIndex) =>\n !this.isOptionSelected(optionIndex) && this.setInputValue(optionIndex)\n );\n this.deselectSelectedOptions(optionsToSelect);\n }\n };\n\n private handleOptionSelect = (\n event: KeyboardEvent | MouseEvent,\n optionIndex: number,\n useFocusForSelection = false\n ) => {\n const menuOptions = this.getMenuOptions();\n const firstOptionInSelection =\n this.getFirstOptionInSelection(useFocusForSelection);\n if (event.shiftKey && firstOptionInSelection !== null) {\n this.handleMultipleShiftSelect(\n optionIndex,\n useFocusForSelection,\n firstOptionInSelection\n );\n } else {\n this.selectHighlightedOption(menuOptions, optionIndex);\n }\n\n this.lastOptionFocused = optionIndex;\n this.lastOptionSelected = optionIndex;\n };\n\n private getFirstOptionInSelection = (\n useFocusForSelection: boolean\n ): number | null => {\n return useFocusForSelection && this.lastOptionFocused !== null\n ? this.lastOptionFocused\n : this.lastOptionSelected !== null\n ? this.lastOptionSelected\n : null;\n };\n\n private emitSelectAllEvents = () => {\n // Select all if there is either no value or not all options are selected\n // 'true' means select all, 'false' means clear all\n this.menuOptionSelectAll.emit({\n select:\n !this.value || !(this.value?.length === this.ungroupedOptions.length),\n });\n // Emit clear event if all options are selected\n if (this.value?.length === this.ungroupedOptions.length) {\n this.icClear.emit();\n }\n };\n\n private emitMenuKeyPress = (isNavKey: boolean, key: string) => {\n this.menuKeyPress.emit({ isNavKey: isNavKey, key: key });\n };\n\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is focused\n private autoSetValueOnMenuKeyDown = (event: KeyboardEvent): void => {\n event.cancelBubble = true;\n const selectedOptionIndex = this.ungroupedOptions.findIndex(\n (option) => option[this.valueField] === this.value\n );\n\n const isSearchableSelect =\n !!this.inputEl && this.inputEl.tagName === \"INPUT\";\n\n this.keyboardNav = false;\n\n switch (event.key) {\n case \" \":\n event.preventDefault();\n break;\n case \"ArrowUp\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setPreviousOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"ArrowDown\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setNextOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"Home\":\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n });\n this.keyboardNav = true;\n break;\n case \"End\":\n this.menuOptionSelect.emit({\n value:\n this.ungroupedOptions[this.ungroupedOptions.length - 1][\n this.valueField\n ],\n });\n this.keyboardNav = true;\n break;\n case \"Enter\":\n !this.hasTimedOut && this.handleMenuChange(false);\n break;\n case \"Escape\":\n this.handleMenuChange(false);\n break;\n case \"Backspace\":\n if (isSearchableSelect) {\n this.inputEl?.focus();\n }\n break;\n case \"Shift\":\n break;\n default:\n if (isSearchableSelect && event.key !== \"Tab\" && !this.hasTimedOut) {\n this.inputEl?.focus();\n }\n if (event.key.length === 1) {\n this.keyboardNav = true;\n }\n break;\n }\n this.emitMenuKeyPress(this.keyboardNav, event.key);\n };\n\n private getOptionId = (value: string): string => {\n return `${this.menuId}-${value}`;\n };\n\n private getOptionAriaLabel = (\n option: IcMenuOption,\n parentOption?: IcMenuOption\n ): string => {\n let ariaLabel = option[this.labelField];\n\n if (option.description) {\n ariaLabel = `${ariaLabel}, ${option.description}`;\n }\n\n if (option.element) {\n ariaLabel = `${ariaLabel}, ${option.element.ariaLabel}`;\n }\n\n if (parentOption) {\n return `${ariaLabel}, ${parentOption[this.labelField]} group`;\n } else {\n return ariaLabel;\n }\n };\n\n private getSortedOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n let sorted: IcMenuOption[] = [];\n if (options.sort) {\n sorted = options.sort((optionA, optionB) =>\n optionA.recommended && !optionB.recommended ? -1 : 0\n );\n }\n return sorted;\n };\n\n private getOptionHighlightedIndex = () => {\n const menuOptions = this.getMenuOptions();\n\n return menuOptions.findIndex(\n (option) => option[this.valueField] === this.optionHighlighted\n );\n };\n\n private isManualMode = this.activationType === \"manual\";\n\n private scrollToSelected = (menu: HTMLUListElement) => {\n const selectedOption = this.selectOnEnter\n ? (this.host.querySelector(\n `li[data-value=\"${this.optionHighlighted}\"]`\n ) as HTMLElement)\n : (menu.querySelector(\".option[aria-selected='true']\") as HTMLElement);\n\n if (selectedOption) {\n const elTop = selectedOption.offsetTop + selectedOption.offsetHeight;\n if (\n elTop > menu.scrollTop + menu.offsetHeight ||\n elTop < menu.scrollTop + menu.offsetHeight\n ) {\n menu.scrollTop = selectedOption.offsetTop;\n }\n // 'aria-activedescendant' affects screen reader focus\n // https://www.w3.org/TR/2017/WD-wai-aria-practices-1.1-20170628/#kbd_focus_activedescendant\n this.menu?.setAttribute(this.ACTIVE_DESCENDANT, selectedOption.id);\n selectedOption.focus();\n }\n };\n\n // Set 'ungroupedOptions' variable and emit its value\n // - this is all the options with disabled options and group titles removed\n private loadUngroupedOptions = () => {\n if (this.options.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (option.children) {\n option.children.map(\n (option) => !option.disabled && this.ungroupedOptions.push(option)\n );\n } else if (!option.disabled) {\n this.ungroupedOptions.push(option);\n }\n });\n }\n this.ungroupedOptions = this.getSortedOptions(this.ungroupedOptions);\n this.ungroupedOptionsSet.emit({ options: this.ungroupedOptions });\n };\n\n private setMenuScrollbar = () => {\n let optionsHeight = 0;\n this.host\n .querySelectorAll(\".option, .option-group-title\")\n .forEach((option) => (optionsHeight += option.clientHeight));\n\n if (optionsHeight >= 320) {\n this.menu?.classList.add(\"menu-scroll\");\n }\n };\n\n private handleTimeoutBlur = (ev: FocusEvent) => {\n this.timeoutBlur.emit({ ev });\n };\n\n private focusOnSearchOrSelectInput(\n menuOptions: IcMenuOption[],\n highlightedOptionIndex: number\n ) {\n if (!menuOptions[highlightedOptionIndex]) return;\n\n if (this.searchBar) {\n (this.parentEl as HTMLIcSearchBarElement).setFocus();\n if (this.searchMode === \"navigation\") this.setHighlightedOption(0);\n }\n\n if (this.searchableSelect) {\n (this.parentEl as HTMLIcSelectElement).setFocus();\n }\n\n this.focusFromSearchKeypress = true;\n }\n\n private optionContent = (option: IcMenuOption, selected: boolean) => {\n const showCheckIcon =\n !!option[this.valueField] &&\n !!this.value &&\n selected &&\n this.parentEl?.tagName !== this.SEARCH_BAR_TAG;\n\n return (\n <Fragment>\n {option.loading && <ic-loading-indicator size=\"icon\" />}\n <div\n class={{\n \"option-text-container\": true,\n \"show-check-icon\": showCheckIcon,\n }}\n >\n {(option.icon || !option.hideLabel) && (\n <div class=\"option-label\">\n {option.icon && (\n <div\n class=\"option-icon\"\n innerHTML={sanitizeHTMLIconString(option.icon)}\n aria-hidden=\"true\"\n ></div>\n )}\n {!option.hideLabel && (\n <ic-typography variant=\"body\" aria-hidden=\"true\">\n {option[this.labelField]}\n </ic-typography>\n )}\n </div>\n )}\n {option.description && (\n <ic-typography\n id={`${this.getOptionId(option[this.valueField])}-description`}\n class=\"option-description\"\n variant=\"caption\"\n aria-hidden=\"true\"\n >\n <p>{option.description}</p>\n </ic-typography>\n )}\n {option.element && (\n <div\n class={{\n \"option-element\":\n option.icon || !option.hideLabel || option.description,\n }}\n innerHTML={sanitizeHTMLString(option.element.component)}\n aria-hidden=\"true\"\n ></div>\n )}\n </div>\n {showCheckIcon && <span class=\"check-icon\" innerHTML={Check} />}\n </Fragment>\n );\n };\n\n private displayOption = (\n option: IcMenuOption,\n selected: boolean,\n index: number,\n parentOption?: IcMenuOption\n ): HTMLLIElement => {\n const {\n open,\n keyboardNav,\n isManualMode,\n initialOptionsListRender,\n optionHighlighted,\n options,\n } = this;\n\n return (\n <li\n id={this.getOptionId(option[this.valueField])}\n class={{\n option: true,\n \"focused-option\": isManualMode\n ? (keyboardNav || initialOptionsListRender) &&\n option[this.valueField] === optionHighlighted\n : keyboardNav && selected,\n \"last-recommended-option\": !!(\n option.recommended &&\n options[index + 1] &&\n !options[index + 1].recommended\n ),\n \"disabled-option\": !!option.disabled,\n \"loading-option\": !!option.loading,\n timeout: !!option.timedOut,\n }}\n role=\"option\"\n tabindex={\n open &&\n (selected || option[this.valueField] === optionHighlighted) &&\n keyboardNav\n ? \"0\"\n : \"-1\"\n }\n aria-label={this.getOptionAriaLabel(option, parentOption)}\n aria-selected={selected ? \"true\" : \"false\"}\n aria-disabled={option.disabled ? \"true\" : \"false\"}\n onClick={\n !option.timedOut && !option.loading\n ? this.handleOptionClick\n : undefined\n }\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n data-value={option[this.valueField]}\n data-label={option[this.labelField]}\n {...(option.htmlProps ?? {})}\n >\n {option.timedOut ? (\n <Fragment>\n <div class=\"loading-error-info\">\n <svg\n class=\"error-icon-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"#000000\"\n >\n <title>Error</title>\n <g>\n <path d=\"M8.77 3L3.5 8.27V15.73L8.77 21H16.23L21.5 15.73V8.27L16.23 3M8.91 7L12.5 10.59L16.09 7L17.5 8.41L13.91 12L17.5 15.59L16.09 17L12.5 13.41L8.91 17L7.5 15.59L11.09 12L7.5 8.41\" />\n </g>\n </svg>\n <ic-typography variant=\"label\">\n {option[this.labelField]}\n </ic-typography>\n </div>\n <ic-button\n size=\"small\"\n variant=\"tertiary\"\n onClick={this.handleRetry}\n onKeyDown={this.handleRetryKeyDown}\n onBlur={this.handleTimeoutBlur}\n id=\"retry-button\"\n >\n Retry\n </ic-button>\n </Fragment>\n ) : (\n this.optionContent(option, selected)\n )}\n </li>\n );\n };\n\n render() {\n const {\n inputLabel,\n options,\n menuId,\n value,\n fullWidth,\n hasTimedOut,\n isLoading,\n size,\n open,\n inputEl,\n keyboardNav,\n parentEl,\n SEARCH_BAR_TAG,\n multiSelect,\n } = this;\n\n const selectAllButtonText = `${\n value?.length === this.ungroupedOptions.length ? \"Clear\" : \"Select\"\n } all`;\n\n const hasNoResults = this.host.classList.contains(\"no-results\");\n\n return (\n <Host\n class={{\n \"ic-menu-full-width\": !!fullWidth,\n \"ic-menu-no-focus\":\n (inputEl?.tagName === \"INPUT\" &&\n parentEl?.tagName !== SEARCH_BAR_TAG) ||\n hasTimedOut ||\n isLoading,\n [`ic-menu-${size}`]: true,\n \"ic-menu-open\": open && options.length !== 0,\n \"ic-menu-multiple\": multiSelect,\n }}\n >\n {options.length !== 0 && (\n <ul\n id={menuId}\n class=\"menu\"\n role=\"listbox\"\n aria-label={`${inputLabel} pop-up`}\n aria-multiselectable={multiSelect ? \"true\" : \"false\"}\n tabindex={\n open &&\n !keyboardNav &&\n (inputEl?.tagName !== \"INPUT\" ||\n parentEl?.tagName === SEARCH_BAR_TAG)\n ? \"0\"\n : \"-1\"\n }\n ref={(el) => (this.menu = el)}\n onKeyDown={this.handleMenuKeyDown}\n onKeyUp={this.handleMenuKeyUp}\n onBlur={this.handleBlur}\n >\n {this.getSortedOptions(options).map((option, index) => {\n if (option.children) {\n if (option.children.length > 0) {\n return (\n <div>\n <ic-typography\n class=\"option-group-title\"\n role=\"presentation\"\n variant=\"subtitle-small\"\n >\n <p>{option[this.labelField]}</p>\n </ic-typography>\n {option.children.map(\n (childOption) =>\n childOption[this.labelField] &&\n this.displayOption(\n childOption,\n multiSelect\n ? value?.includes(childOption[this.valueField])\n : childOption[this.valueField] === value,\n index,\n option\n )\n )}\n </div>\n );\n } else {\n return null;\n }\n } else {\n // Display option only if it has a label (rather than displaying an empty space)\n return (\n option[this.labelField] &&\n this.displayOption(\n option,\n multiSelect\n ? value?.includes(option[this.valueField])\n : option[this.valueField] === value,\n index\n )\n );\n }\n })}\n </ul>\n )}\n {options.length !== 0 &&\n multiSelect &&\n !isLoading &&\n !hasTimedOut &&\n !hasNoResults && (\n <div class=\"option-bar\">\n <ic-typography>\n <p>{`${\n value ? value.length : 0\n }/${getOptionsWithoutGroupTitlesCount(\n this.options\n )} selected`}</p>\n </ic-typography>\n <ic-button\n class=\"select-all-button\"\n aria-label={`${selectAllButtonText} options for ${inputLabel}`}\n ref={(el) => (this.selectAllButton = el)}\n variant=\"tertiary\"\n onClick={this.handleSelectAllClick}\n onMouseDown={this.handleSelectAllMouseDown}\n onBlur={this.handleSelectAllBlur}\n onFocus={this.handleSelectAllFocus}\n size={size === \"small\" ? \"small\" : \"medium\"}\n >\n {selectAllButtonText}\n </ic-button>\n </div>\n )}\n </Host>\n );\n }\n}\n"]}
@@ -494,6 +494,8 @@ svg {
494
494
  transition: var(--ic-easing-transition-fast);
495
495
  position: relative;
496
496
  white-space: nowrap;
497
+
498
+ --ic-typography-color: var(--navigation-link-colour);
497
499
  }
498
500
 
499
501
  :host(.navigation-item) ::slotted(a) {
@@ -593,6 +595,13 @@ svg {
593
595
  fill: var(--ic-color-text-primary);
594
596
  }
595
597
 
598
+ :host(.navigation-item-top-nav-child) .link,
599
+ :host(.navigation-item-top-nav-child) ::slotted(a) {
600
+ color: var(--ic-color-text-primary);
601
+
602
+ --ic-typography-color: var(--ic-color-text-primary);
603
+ }
604
+
596
605
  :host(.navigation-item-side-menu) ::slotted(a) {
597
606
  font: var(--ic-font-body) !important;
598
607
  letter-spacing: var(--ic-font-letter-spacing-0pt005) !important;
@@ -474,6 +474,10 @@ header.tabs {
474
474
  margin-bottom: var(--ic-space-md);
475
475
  }
476
476
 
477
+ ::slotted(ic-navigation-item) {
478
+ --navigation-link-colour: var(--ic-color-text-primary);
479
+ }
480
+
477
481
  .main-content {
478
482
  display: grid;
479
483
  grid-template-columns: auto 1fr;
@@ -515,6 +515,52 @@ export const Recommended = {
515
515
  name: "Recommended",
516
516
  };
517
517
 
518
+ export const HiddenMenuOptionLabels = {
519
+ render: () =>
520
+ html`<ic-select
521
+ id="hidden-menu-opts-select"
522
+ label="What is your favourite coffee size?"
523
+ ></ic-select>
524
+ <script>
525
+ var select = document.querySelector("#hidden-menu-opts-select");
526
+ select.options = [
527
+ {
528
+ label: "Small",
529
+ value: "s",
530
+ element: {
531
+ component: \`<ic-chip label="Small" size="small"></ic-chip>\`,
532
+ ariaLabel: "small chip",
533
+ },
534
+ hideLabel: true,
535
+ },
536
+ {
537
+ label: "Medium size",
538
+ value: "m",
539
+ element: {
540
+ component: \`<ic-chip label="Medium"></ic-chip>\`,
541
+ ariaLabel: "medium chip",
542
+ },
543
+ hideLabel: true,
544
+ },
545
+ {
546
+ label: "Large",
547
+ value: "l",
548
+ element: {
549
+ component: \`<ic-chip label="Large" size="large"></ic-chip>\`,
550
+ ariaLabel: "large chip",
551
+ },
552
+ hideLabel: true,
553
+ },
554
+ {
555
+ label: "Extra Large",
556
+ value: "xl",
557
+ },
558
+ ];
559
+ </script>`,
560
+
561
+ name: "Hidden menu option labels",
562
+ };
563
+
518
564
  export const Validation = {
519
565
  render: () =>
520
566
  html`<ic-select
@@ -576,7 +622,7 @@ export const Validation = {
576
622
  };
577
623
 
578
624
  export const AriaLiveBehaviour = {
579
- render: (args) =>
625
+ render: () =>
580
626
  html`<ic-select
581
627
  id="field-1"
582
628
  label="What is your favourite coffee?"
@@ -775,6 +821,33 @@ export const EmittingIcOptionSelectOnEnter = {
775
821
  name: "Emitting icOptionSelect on enter",
776
822
  };
777
823
 
824
+ export const CustomPropsOnLiElements = {
825
+ render: () =>
826
+ html`<ic-select
827
+ id="select-custom-li-props"
828
+ label="What is your favourite coffee?"
829
+ ></ic-select>
830
+ <br />
831
+ <p>
832
+ <code>lang="it"</code> has been set on each
833
+ <code>&lt;li&gt;</code> element. This can be tested using a screen
834
+ reader.
835
+ </p>
836
+ <script>
837
+ var select = document.querySelector("#select-custom-li-props");
838
+ select.options = [
839
+ { label: "Cappuccino", value: "Cap", htmlProps: { lang: "it" } },
840
+ { label: "Latte", value: "Lat", htmlProps: { lang: "it" } },
841
+ { label: "Americano", value: "Ame", htmlProps: { lang: "it" } },
842
+ ];
843
+ select.addEventListener("icChange", function (event) {
844
+ console.log("icChange: " + event.detail.value);
845
+ });
846
+ </script>`,
847
+
848
+ name: "Custom props on <li>s",
849
+ };
850
+
778
851
  const inlineRadioSelector = "inline-radio";
779
852
 
780
853
  export const Playground = {
@@ -523,11 +523,8 @@ video {
523
523
  }
524
524
 
525
525
  @media (forced-colors: active) {
526
- .tag {
527
- border: var(--ic-border-hc);
526
+ :host {
528
527
  -ms-high-contrast-adjust: none;
529
528
  forced-color-adjust: none;
530
-
531
- --ic-typography-color: var(--ic-status-tag-text);
532
529
  }
533
530
  }