@purpur/library 9.2.2 → 9.3.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 (302) hide show
  1. package/CHANGELOG.json +42 -0
  2. package/CHANGELOG.md +21 -1
  3. package/dist/LICENSE.txt +1 -1
  4. package/dist/{RichText-Bi51HE6X.mjs → RichText-jZ-sHV-u.mjs} +2 -2
  5. package/dist/{RichText-Bi51HE6X.mjs.map → RichText-jZ-sHV-u.mjs.map} +1 -1
  6. package/dist/{RichText-DNroJJXv.js → RichText-yobCUjTD.js} +2 -2
  7. package/dist/{RichText-DNroJJXv.js.map → RichText-yobCUjTD.js.map} +1 -1
  8. package/dist/{ThemeProvider-bkyFCeo6.mjs → ThemeProvider-CkX-BNWN.mjs} +2 -2
  9. package/dist/ThemeProvider-CkX-BNWN.mjs.map +1 -0
  10. package/dist/{ThemeProvider-5r7lDX-h.js → ThemeProvider-Dy771oix.js} +2 -2
  11. package/dist/ThemeProvider-Dy771oix.js.map +1 -0
  12. package/dist/{accordion-OtFSShSB.mjs → accordion-CIU4U8-4.mjs} +3 -3
  13. package/dist/accordion-CIU4U8-4.mjs.map +1 -0
  14. package/dist/{accordion-OsA0HvdA.js → accordion-DyhOG54L.js} +2 -2
  15. package/dist/accordion-DyhOG54L.js.map +1 -0
  16. package/dist/accordion.cjs.js +1 -1
  17. package/dist/accordion.es.js +3 -3
  18. package/dist/{autocomplete-D9uCJzjY.js → autocomplete-3kV1btuI.js} +2 -2
  19. package/dist/{autocomplete-D9uCJzjY.js.map → autocomplete-3kV1btuI.js.map} +1 -1
  20. package/dist/{autocomplete-BipmyKf0.mjs → autocomplete-BEGRn-Wh.mjs} +2 -2
  21. package/dist/{autocomplete-BipmyKf0.mjs.map → autocomplete-BEGRn-Wh.mjs.map} +1 -1
  22. package/dist/autocomplete.cjs.js +1 -1
  23. package/dist/autocomplete.es.js +1 -1
  24. package/dist/{card-DR2hvxjZ.mjs → card-C2mdp-ur.mjs} +2 -2
  25. package/dist/{card-DR2hvxjZ.mjs.map → card-C2mdp-ur.mjs.map} +1 -1
  26. package/dist/{card-CRHXm5NR.js → card-DFdUs5RG.js} +2 -2
  27. package/dist/{card-CRHXm5NR.js.map → card-DFdUs5RG.js.map} +1 -1
  28. package/dist/card.cjs.js +1 -1
  29. package/dist/card.es.js +1 -1
  30. package/dist/{carousel-BkxojLwn.mjs → carousel-DLkTL9sj.mjs} +29 -29
  31. package/dist/{carousel-BkxojLwn.mjs.map → carousel-DLkTL9sj.mjs.map} +1 -1
  32. package/dist/{carousel-BCw-5u92.js → carousel-DXrtxRz5.js} +2 -2
  33. package/dist/{carousel-BCw-5u92.js.map → carousel-DXrtxRz5.js.map} +1 -1
  34. package/dist/carousel.cjs.js +1 -1
  35. package/dist/carousel.es.js +1 -1
  36. package/dist/checkbox-BHTx89JQ.mjs +236 -0
  37. package/dist/checkbox-BHTx89JQ.mjs.map +1 -0
  38. package/dist/checkbox-CDNcNv6d.js +2 -0
  39. package/dist/checkbox-CDNcNv6d.js.map +1 -0
  40. package/dist/checkbox.cjs.js +1 -1
  41. package/dist/checkbox.es.js +1 -1
  42. package/dist/{comparison-table-B8w65g43.js → comparison-table-CitEzX7h.js} +2 -2
  43. package/dist/comparison-table-CitEzX7h.js.map +1 -0
  44. package/dist/{comparison-table-D1zJpdLL.mjs → comparison-table-Dmbjsqyg.mjs} +52 -52
  45. package/dist/comparison-table-Dmbjsqyg.mjs.map +1 -0
  46. package/dist/comparison-table.cjs.js +1 -1
  47. package/dist/comparison-table.es.js +1 -1
  48. package/dist/components/accordion/src/accordion.d.ts +1 -1
  49. package/dist/components/accordion/src/accordion.d.ts.map +1 -1
  50. package/dist/components/checkbox/src/checkbox.d.ts +4 -0
  51. package/dist/components/checkbox/src/checkbox.d.ts.map +1 -1
  52. package/dist/components/comparison-table/src/comparison-table.d.ts +1 -1
  53. package/dist/components/comparison-table/src/comparison-table.d.ts.map +1 -1
  54. package/dist/components/dismissable-chip-group/src/dismissable-chip-group-item.d.ts.map +1 -1
  55. package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +4 -2
  56. package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts.map +1 -1
  57. package/dist/components/drawer/src/drawer-header.d.ts.map +1 -1
  58. package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -1
  59. package/dist/components/dropdown/src/dropdown-select.d.ts.map +1 -1
  60. package/dist/components/dropdown/src/dropdown-shared.d.ts +3 -2
  61. package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -1
  62. package/dist/components/dropdown/src/useDropdown.d.ts +2 -1
  63. package/dist/components/dropdown/src/useDropdown.d.ts.map +1 -1
  64. package/dist/components/listbox/src/listbox-item.d.ts +2 -2
  65. package/dist/components/listbox/src/listbox-item.d.ts.map +1 -1
  66. package/dist/components/listbox/src/listbox.d.ts +4 -1
  67. package/dist/components/listbox/src/listbox.d.ts.map +1 -1
  68. package/dist/components/modal/src/modal-content.d.ts.map +1 -1
  69. package/dist/components/toggle/src/toggle.d.ts +1 -0
  70. package/dist/components/toggle/src/toggle.d.ts.map +1 -1
  71. package/dist/components-metadata.js +4 -2
  72. package/dist/{content-block-Dm3L4g8w.mjs → content-block-CakKeJtN.mjs} +2 -2
  73. package/dist/{content-block-Dm3L4g8w.mjs.map → content-block-CakKeJtN.mjs.map} +1 -1
  74. package/dist/{content-block-CDRUH0pg.js → content-block-CrekbIfe.js} +2 -2
  75. package/dist/{content-block-CDRUH0pg.js.map → content-block-CrekbIfe.js.map} +1 -1
  76. package/dist/content-block.cjs.js +1 -1
  77. package/dist/content-block.es.js +1 -1
  78. package/dist/{countdown-DZ4IwkNy.mjs → countdown-BsLsEZBv.mjs} +2 -2
  79. package/dist/{countdown-DZ4IwkNy.mjs.map → countdown-BsLsEZBv.mjs.map} +1 -1
  80. package/dist/{countdown-CqYsZigV.js → countdown-hYrFLmRg.js} +2 -2
  81. package/dist/{countdown-CqYsZigV.js.map → countdown-hYrFLmRg.js.map} +1 -1
  82. package/dist/countdown.cjs.js +1 -1
  83. package/dist/countdown.es.js +1 -1
  84. package/dist/{date-picker-D3uJGCjl.js → date-picker-DVrcu2QU.js} +2 -2
  85. package/dist/{date-picker-D3uJGCjl.js.map → date-picker-DVrcu2QU.js.map} +1 -1
  86. package/dist/{date-picker-CpDZ0gK9.mjs → date-picker-DwFDRL5Z.mjs} +2 -2
  87. package/dist/{date-picker-CpDZ0gK9.mjs.map → date-picker-DwFDRL5Z.mjs.map} +1 -1
  88. package/dist/date-picker.cjs.js +1 -1
  89. package/dist/date-picker.es.js +1 -1
  90. package/dist/dismissable-chip-group-2updhyuR.js +2 -0
  91. package/dist/dismissable-chip-group-2updhyuR.js.map +1 -0
  92. package/dist/dismissable-chip-group-Cfs2s2BH.mjs +94 -0
  93. package/dist/dismissable-chip-group-Cfs2s2BH.mjs.map +1 -0
  94. package/dist/dismissable-chip-group.cjs.js +1 -1
  95. package/dist/dismissable-chip-group.es.js +6 -5
  96. package/dist/{drawer-BJ8xwriz.mjs → drawer-Db2Mujc6.mjs} +208 -205
  97. package/dist/drawer-Db2Mujc6.mjs.map +1 -0
  98. package/dist/drawer-DlwagnO4.js +2 -0
  99. package/dist/drawer-DlwagnO4.js.map +1 -0
  100. package/dist/drawer.cjs.js +1 -1
  101. package/dist/drawer.es.js +1 -1
  102. package/dist/dropdown-CMO_VD5e.mjs +916 -0
  103. package/dist/dropdown-CMO_VD5e.mjs.map +1 -0
  104. package/dist/dropdown-DJKNQnuo.js +2 -0
  105. package/dist/dropdown-DJKNQnuo.js.map +1 -0
  106. package/dist/dropdown.cjs.js +1 -1
  107. package/dist/dropdown.es.js +1 -1
  108. package/dist/{footer-BXs8uzTA.mjs → footer-BLPlXaZK.mjs} +4 -4
  109. package/dist/{footer-BXs8uzTA.mjs.map → footer-BLPlXaZK.mjs.map} +1 -1
  110. package/dist/{footer-DF9adlni.js → footer-D9AcPwlH.js} +2 -2
  111. package/dist/{footer-DF9adlni.js.map → footer-D9AcPwlH.js.map} +1 -1
  112. package/dist/footer.cjs.js +1 -1
  113. package/dist/footer.es.js +1 -1
  114. package/dist/{hero-banner-BfxclVFT.js → hero-banner-D1A-_qou.js} +2 -2
  115. package/dist/{hero-banner-BfxclVFT.js.map → hero-banner-D1A-_qou.js.map} +1 -1
  116. package/dist/{hero-banner-CxPvhXD2.mjs → hero-banner-DkC_BqM7.mjs} +3 -3
  117. package/dist/{hero-banner-CxPvhXD2.mjs.map → hero-banner-DkC_BqM7.mjs.map} +1 -1
  118. package/dist/hero-banner.cjs.js +1 -1
  119. package/dist/hero-banner.es.js +1 -1
  120. package/dist/libraries/theme/src/theme-props.d.ts +1 -0
  121. package/dist/libraries/theme/src/theme-props.d.ts.map +1 -1
  122. package/dist/libraries/tokens/dist/color/variables.d.ts +1 -0
  123. package/dist/libraries/tokens/dist/color/variables.dark.d.ts +1 -0
  124. package/dist/library.cjs.js +1 -1
  125. package/dist/library.es.js +593 -590
  126. package/dist/listbox-ATP4hOWF.js +2 -0
  127. package/dist/listbox-ATP4hOWF.js.map +1 -0
  128. package/dist/listbox-i6BQQ-NZ.mjs +73 -0
  129. package/dist/listbox-i6BQQ-NZ.mjs.map +1 -0
  130. package/dist/listbox.cjs.js +1 -1
  131. package/dist/listbox.es.js +3 -2
  132. package/dist/modal-Baisuc6m.js +2 -0
  133. package/dist/modal-Baisuc6m.js.map +1 -0
  134. package/dist/modal-COZ1POGG.mjs +211 -0
  135. package/dist/modal-COZ1POGG.mjs.map +1 -0
  136. package/dist/modal.cjs.js +1 -1
  137. package/dist/modal.es.js +1 -1
  138. package/dist/{notification-BqjaT4E7.js → notification-B5bNNq86.js} +2 -2
  139. package/dist/{notification-BqjaT4E7.js.map → notification-B5bNNq86.js.map} +1 -1
  140. package/dist/{notification-DdRS5BF2.mjs → notification-BbQCmsnY.mjs} +2 -2
  141. package/dist/{notification-DdRS5BF2.mjs.map → notification-BbQCmsnY.mjs.map} +1 -1
  142. package/dist/notification.cjs.js +1 -1
  143. package/dist/notification.es.js +1 -1
  144. package/dist/{pagination-CVYUacXN.mjs → pagination-Cc_4zCQA.mjs} +2 -2
  145. package/dist/{pagination-CVYUacXN.mjs.map → pagination-Cc_4zCQA.mjs.map} +1 -1
  146. package/dist/{pagination-Bwlkvqye.js → pagination-rFRdkHII.js} +2 -2
  147. package/dist/{pagination-Bwlkvqye.js.map → pagination-rFRdkHII.js.map} +1 -1
  148. package/dist/pagination.cjs.js +1 -1
  149. package/dist/pagination.es.js +1 -1
  150. package/dist/paragraph-By4jMjnH.js +2 -0
  151. package/dist/{paragraph-BsI53OR0.js.map → paragraph-By4jMjnH.js.map} +1 -1
  152. package/dist/{paragraph-Ci50OF1u.mjs → paragraph-DSxXmX_0.mjs} +23 -23
  153. package/dist/{paragraph-Ci50OF1u.mjs.map → paragraph-DSxXmX_0.mjs.map} +1 -1
  154. package/dist/paragraph.cjs.js +1 -1
  155. package/dist/paragraph.es.js +1 -1
  156. package/dist/{popover-XCUa2GfC.js → popover-B0XJZ5mj.js} +2 -2
  157. package/dist/{popover-XCUa2GfC.js.map → popover-B0XJZ5mj.js.map} +1 -1
  158. package/dist/{popover-Dwqs1wGH.mjs → popover-_xJATlhN.mjs} +2 -2
  159. package/dist/{popover-Dwqs1wGH.mjs.map → popover-_xJATlhN.mjs.map} +1 -1
  160. package/dist/popover.cjs.js +1 -1
  161. package/dist/popover.es.js +1 -1
  162. package/dist/{product-card-BfB82XpS.mjs → product-card-C3_N0t-R.mjs} +3 -3
  163. package/dist/{product-card-BfB82XpS.mjs.map → product-card-C3_N0t-R.mjs.map} +1 -1
  164. package/dist/{product-card-bVQ7JhHj.js → product-card-CoY1KggV.js} +2 -2
  165. package/dist/{product-card-bVQ7JhHj.js.map → product-card-CoY1KggV.js.map} +1 -1
  166. package/dist/product-card.cjs.js +1 -1
  167. package/dist/product-card.es.js +1 -1
  168. package/dist/{promotion-card-DqBBt2sz.js → promotion-card-Bag64gqP.js} +2 -2
  169. package/dist/{promotion-card-DqBBt2sz.js.map → promotion-card-Bag64gqP.js.map} +1 -1
  170. package/dist/{promotion-card-BhNw94sC.mjs → promotion-card-BiHnQvhn.mjs} +4 -4
  171. package/dist/{promotion-card-BhNw94sC.mjs.map → promotion-card-BiHnQvhn.mjs.map} +1 -1
  172. package/dist/promotion-card.cjs.js +1 -1
  173. package/dist/promotion-card.es.js +1 -1
  174. package/dist/purpur.css +1 -1
  175. package/dist/quantity-selector-CDSfcTb1.js +2 -0
  176. package/dist/{quantity-selector-8AkKNDik.js.map → quantity-selector-CDSfcTb1.js.map} +1 -1
  177. package/dist/{quantity-selector-C23kU1hF.mjs → quantity-selector-CvBvnMeB.mjs} +35 -35
  178. package/dist/{quantity-selector-C23kU1hF.mjs.map → quantity-selector-CvBvnMeB.mjs.map} +1 -1
  179. package/dist/quantity-selector.cjs.js +1 -1
  180. package/dist/quantity-selector.es.js +1 -1
  181. package/dist/{radio-card-group-BlRZBa-9.mjs → radio-card-group-CneOprGY.mjs} +2 -2
  182. package/dist/{radio-card-group-BlRZBa-9.mjs.map → radio-card-group-CneOprGY.mjs.map} +1 -1
  183. package/dist/{radio-card-group-sYcfDPJq.js → radio-card-group-Ctuvg61o.js} +2 -2
  184. package/dist/{radio-card-group-sYcfDPJq.js.map → radio-card-group-Ctuvg61o.js.map} +1 -1
  185. package/dist/radio-card-group.cjs.js +1 -1
  186. package/dist/radio-card-group.es.js +1 -1
  187. package/dist/rich-text.cjs.js +1 -1
  188. package/dist/rich-text.es.js +1 -1
  189. package/dist/{search-field-CMBDkydb.mjs → search-field-CpkHGIYi.mjs} +57 -57
  190. package/dist/{search-field-CMBDkydb.mjs.map → search-field-CpkHGIYi.mjs.map} +1 -1
  191. package/dist/search-field-Z0PqDARl.js +2 -0
  192. package/dist/{search-field-CU_tsmHb.js.map → search-field-Z0PqDARl.js.map} +1 -1
  193. package/dist/search-field.cjs.js +1 -1
  194. package/dist/search-field.es.js +1 -1
  195. package/dist/{stepper-uBfDdIju.mjs → stepper-CNnx_NiR.mjs} +2 -2
  196. package/dist/{stepper-uBfDdIju.mjs.map → stepper-CNnx_NiR.mjs.map} +1 -1
  197. package/dist/{stepper-w-raIwqJ.js → stepper-Df4X7DDR.js} +2 -2
  198. package/dist/{stepper-w-raIwqJ.js.map → stepper-Df4X7DDR.js.map} +1 -1
  199. package/dist/stepper.cjs.js +1 -1
  200. package/dist/stepper.es.js +1 -1
  201. package/dist/{table-BVSBvTYG.js → table-DRYW0yw4.js} +2 -2
  202. package/dist/{table-BVSBvTYG.js.map → table-DRYW0yw4.js.map} +1 -1
  203. package/dist/{table-CuV3Gda_.mjs → table-DUY8kQfE.mjs} +6 -6
  204. package/dist/{table-CuV3Gda_.mjs.map → table-DUY8kQfE.mjs.map} +1 -1
  205. package/dist/table.cjs.js +1 -1
  206. package/dist/table.es.js +1 -1
  207. package/dist/{text-area-DDZ_GQPW.mjs → text-area-kJvg6cFp.mjs} +3 -3
  208. package/dist/{text-area-DDZ_GQPW.mjs.map → text-area-kJvg6cFp.mjs.map} +1 -1
  209. package/dist/{text-area-C6W0fDiQ.js → text-area-peNKG7g4.js} +2 -2
  210. package/dist/{text-area-C6W0fDiQ.js.map → text-area-peNKG7g4.js.map} +1 -1
  211. package/dist/text-area.cjs.js +1 -1
  212. package/dist/text-area.es.js +1 -1
  213. package/dist/theme.cjs.js +1 -1
  214. package/dist/theme.es.js +2 -2
  215. package/dist/toggle-B8ZLUVar.js +2 -0
  216. package/dist/{toggle-C8IwTbX8.js.map → toggle-B8ZLUVar.js.map} +1 -1
  217. package/dist/toggle-CY3J8BRX.mjs +302 -0
  218. package/dist/{toggle-D23x1wWk.mjs.map → toggle-CY3J8BRX.mjs.map} +1 -1
  219. package/dist/toggle.cjs.js +1 -1
  220. package/dist/toggle.es.js +1 -1
  221. package/dist/tokens/color/variables.css +1 -0
  222. package/dist/tokens/color/variables.d.ts +1 -0
  223. package/dist/tokens/color/variables.dark.css +1 -0
  224. package/dist/tokens/color/variables.dark.d.ts +1 -0
  225. package/dist/tokens/color/variables.dark.js +1 -0
  226. package/dist/tokens/color/variables.dark.json +2 -1
  227. package/dist/tokens/color/variables.dark.scss +1 -0
  228. package/dist/tokens/color/variables.js +1 -0
  229. package/dist/tokens/color/variables.json +2 -1
  230. package/dist/tokens/color/variables.scss +1 -0
  231. package/dist/tokens.cjs.js +1 -1
  232. package/dist/tokens.es.js +76 -75
  233. package/dist/{tooltip-0pLBlDG3.js → tooltip-C8Zxnqdb.js} +2 -2
  234. package/dist/{tooltip-0pLBlDG3.js.map → tooltip-C8Zxnqdb.js.map} +1 -1
  235. package/dist/{tooltip-Kom0VfOC.mjs → tooltip-VlURN8H3.mjs} +2 -2
  236. package/dist/{tooltip-Kom0VfOC.mjs.map → tooltip-VlURN8H3.mjs.map} +1 -1
  237. package/dist/tooltip.cjs.js +1 -1
  238. package/dist/tooltip.es.js +1 -1
  239. package/dist/use-autocomplete.es-BwAzMcau.js +2 -0
  240. package/dist/use-autocomplete.es-BwAzMcau.js.map +1 -0
  241. package/dist/{use-autocomplete.es-CVv3z8t6.mjs → use-autocomplete.es-CKb0RHKG.mjs} +37 -35
  242. package/dist/use-autocomplete.es-CKb0RHKG.mjs.map +1 -0
  243. package/dist/useColorScheme-DNyjsWX9.js +2 -0
  244. package/dist/{useColorScheme-0GMDl2GF.js.map → useColorScheme-DNyjsWX9.js.map} +1 -1
  245. package/dist/{useColorScheme-Di_Q0JR4.mjs → useColorScheme-tAkY9LHt.mjs} +2 -2
  246. package/dist/{useColorScheme-Di_Q0JR4.mjs.map → useColorScheme-tAkY9LHt.mjs.map} +1 -1
  247. package/dist/{variables-CKp4o9Tn.mjs → variables-B5hbV0Uy.mjs} +128 -127
  248. package/dist/variables-B5hbV0Uy.mjs.map +1 -0
  249. package/dist/variables-DoI78zZc.js +2 -0
  250. package/dist/variables-DoI78zZc.js.map +1 -0
  251. package/package.json +11 -11
  252. package/tokens/color/variables.css +1 -0
  253. package/tokens/color/variables.d.ts +1 -0
  254. package/tokens/color/variables.dark.css +1 -0
  255. package/tokens/color/variables.dark.d.ts +1 -0
  256. package/tokens/color/variables.dark.js +1 -0
  257. package/tokens/color/variables.dark.json +2 -1
  258. package/tokens/color/variables.dark.scss +1 -0
  259. package/tokens/color/variables.js +1 -0
  260. package/tokens/color/variables.json +2 -1
  261. package/tokens/color/variables.scss +1 -0
  262. package/dist/ThemeProvider-5r7lDX-h.js.map +0 -1
  263. package/dist/ThemeProvider-bkyFCeo6.mjs.map +0 -1
  264. package/dist/accordion-OsA0HvdA.js.map +0 -1
  265. package/dist/accordion-OtFSShSB.mjs.map +0 -1
  266. package/dist/checkbox-D6qWgpWR.mjs +0 -231
  267. package/dist/checkbox-D6qWgpWR.mjs.map +0 -1
  268. package/dist/checkbox-Dk3bZkZ3.js +0 -2
  269. package/dist/checkbox-Dk3bZkZ3.js.map +0 -1
  270. package/dist/comparison-table-B8w65g43.js.map +0 -1
  271. package/dist/comparison-table-D1zJpdLL.mjs.map +0 -1
  272. package/dist/dismissable-chip-group-Cd23yjBa.js +0 -2
  273. package/dist/dismissable-chip-group-Cd23yjBa.js.map +0 -1
  274. package/dist/dismissable-chip-group-D-gD93ON.mjs +0 -89
  275. package/dist/dismissable-chip-group-D-gD93ON.mjs.map +0 -1
  276. package/dist/drawer-BJ8xwriz.mjs.map +0 -1
  277. package/dist/drawer-CNs9K8Ca.js +0 -2
  278. package/dist/drawer-CNs9K8Ca.js.map +0 -1
  279. package/dist/dropdown-BsqVnd7z.js +0 -2
  280. package/dist/dropdown-BsqVnd7z.js.map +0 -1
  281. package/dist/dropdown-TO3Mh0bk.mjs +0 -910
  282. package/dist/dropdown-TO3Mh0bk.mjs.map +0 -1
  283. package/dist/listbox-COBHLRtB.js +0 -2
  284. package/dist/listbox-COBHLRtB.js.map +0 -1
  285. package/dist/listbox-DG4KmQP_.mjs +0 -66
  286. package/dist/listbox-DG4KmQP_.mjs.map +0 -1
  287. package/dist/modal-DCfN6q8I.mjs +0 -201
  288. package/dist/modal-DCfN6q8I.mjs.map +0 -1
  289. package/dist/modal-DZIdw9xy.js +0 -2
  290. package/dist/modal-DZIdw9xy.js.map +0 -1
  291. package/dist/paragraph-BsI53OR0.js +0 -2
  292. package/dist/quantity-selector-8AkKNDik.js +0 -2
  293. package/dist/search-field-CU_tsmHb.js +0 -2
  294. package/dist/toggle-C8IwTbX8.js +0 -2
  295. package/dist/toggle-D23x1wWk.mjs +0 -287
  296. package/dist/use-autocomplete.es-BHDgQLae.js +0 -2
  297. package/dist/use-autocomplete.es-BHDgQLae.js.map +0 -1
  298. package/dist/use-autocomplete.es-CVv3z8t6.mjs.map +0 -1
  299. package/dist/useColorScheme-0GMDl2GF.js +0 -2
  300. package/dist/variables-CKp4o9Tn.mjs.map +0 -1
  301. package/dist/variables-DH61hVNE.js +0 -2
  302. package/dist/variables-DH61hVNE.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-TO3Mh0bk.mjs","sources":["../../../components/dropdown/src/dropdown-shared.tsx","../../../components/dropdown/src/useDropdownFilter.ts","../../../components/dropdown/src/useDropdownInput.ts","../../../components/dropdown/src/dropdown-combobox.tsx","../../../components/dropdown/src/useDropdownHighlight.ts","../../../components/dropdown/src/useOnClickOutside.ts","../../../components/dropdown/src/useDropdown.ts","../../../components/dropdown/src/dropdown-select.tsx","../../../components/dropdown/src/dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport type { CheckedState } from \"@purpur/checkbox\";\nimport { Checkbox } from \"@purpur/checkbox\";\nimport { DismissableChipGroup } from \"@purpur/dismissable-chip-group\";\nimport { FieldErrorText } from \"@purpur/field-error-text\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { IconCheckCircleFilled } from \"@purpur/icon/check-circle-filled\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Label } from \"@purpur/label\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./dropdown.module.scss\";\nimport type { DropdownOption } from \"./dropdown.types\";\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-dropdown\";\n\ntype GetTestId = (name: string) => string | undefined;\n\ntype DropdownLabelProps = {\n fieldId: string;\n htmlForSuffix?: string;\n label?: string;\n getTestId: GetTestId;\n disabled: boolean;\n negative: boolean;\n required: boolean;\n};\n\nexport const DropdownLabel = ({\n fieldId,\n htmlForSuffix,\n label,\n getTestId,\n disabled,\n negative,\n required,\n}: DropdownLabelProps) => {\n if (!label) return null;\n\n return (\n <Label\n htmlFor={htmlForSuffix ? `${fieldId}-${htmlForSuffix}` : fieldId}\n className={cx(`${rootClassName}__label`)}\n data-testid={getTestId(\"label\")}\n disabled={disabled}\n negative={negative}\n >\n {required && <span aria-hidden>*</span>}\n {label}\n </Label>\n );\n};\n\ntype DropdownEndAdornmentsProps = {\n getTestId: GetTestId;\n loading?: boolean;\n disabled: boolean;\n negative: boolean;\n isValid: boolean;\n isOpen?: boolean;\n readOnly?: boolean;\n showChevronOpen: boolean;\n};\n\nexport const DropdownEndAdornments = ({\n getTestId,\n loading,\n disabled,\n negative,\n isValid,\n isOpen,\n readOnly,\n showChevronOpen,\n}: DropdownEndAdornmentsProps) => (\n <span className={cx(`${rootClassName}__end-adornments`)}>\n {loading ? (\n <Spinner\n disabled={disabled}\n size=\"xxs\"\n negative={negative}\n data-testid={getTestId(\"spinner\")}\n />\n ) : (\n <>\n {isValid && (\n <IconCheckCircleFilled\n data-testid={getTestId(\"valid-icon\")}\n className={cx(`${rootClassName}__valid-icon`)}\n />\n )}\n <IconChevronDown\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--open`]: showChevronOpen && isOpen,\n [`${rootClassName}__chevron-icon--disabled`]: disabled,\n [`${rootClassName}__chevron-icon--readonly`]: readOnly && !disabled,\n [`${rootClassName}__chevron-icon--is-valid`]: isValid,\n [`${rootClassName}__chevron-icon--negative`]: negative,\n })}\n data-testid={getTestId(\"dropdown-icon\")}\n size=\"sm\"\n />\n </>\n )}\n </span>\n);\n\ntype DropdownTagsProps = {\n selectedItems: DropdownOption[];\n getTestId: GetTestId;\n disabled: boolean;\n negative: boolean;\n onRemove: (option: DropdownOption) => void;\n isSelect?: boolean;\n};\n\nexport const DropdownTags = ({\n selectedItems,\n getTestId,\n disabled,\n onRemove,\n isSelect,\n}: DropdownTagsProps) => {\n if (!selectedItems.length) return null;\n\n return (\n <DismissableChipGroup\n className={cx(`${rootClassName}__chip-group`, {\n [`${rootClassName}__chip-group--select`]: isSelect,\n })}\n data-testid={getTestId(\"tags\")}\n size=\"sm\"\n >\n {selectedItems.map((item) => (\n <DismissableChipGroup.Item\n key={item.id}\n id={item.id}\n data-testid={getTestId(`tag-${item.id}`)}\n aria-label={`Remove ${item.label}`}\n onDismiss={() => {\n onRemove(item);\n }}\n disabled={disabled || item.disabled}\n >\n {item.label}\n </DismissableChipGroup.Item>\n ))}\n </DismissableChipGroup>\n );\n};\n\ntype DropdownFooterProps = {\n errorText?: string;\n helperText?: string;\n helperTextId: string;\n negative: boolean;\n};\n\nexport const DropdownFooter = ({\n errorText,\n helperText,\n helperTextId,\n negative,\n}: DropdownFooterProps) => (\n <>\n {errorText && <FieldErrorText negative={negative}>{errorText}</FieldErrorText>}\n {helperText && !errorText && (\n <FieldHelperText id={helperTextId} negative={negative}>\n {helperText}\n </FieldHelperText>\n )}\n </>\n);\n\nexport const SELECT_ALL_OPTION_ID = \"__purpur-dropdown-select-all__\";\n\ntype ShouldShowSelectAllArgs = {\n selectAllLabel?: string;\n multiple?: boolean;\n options: DropdownOption[];\n selectedItems: DropdownOption[];\n};\n\nexport const shouldShowSelectAll = ({\n selectAllLabel,\n multiple,\n options,\n selectedItems,\n}: ShouldShowSelectAllArgs): boolean => {\n if (!selectAllLabel || !multiple) return false;\n const enabledOptions = options.filter((o) => !o.disabled);\n if (enabledOptions.length === 0) return false;\n const disabledOptions = options.filter((o) => o.disabled);\n const hasDisabledUnselected = disabledOptions.some(\n (o) => !selectedItems.some((s) => s.id === o.id)\n );\n // Hide \"All\" when a disabled option is not selected (can't select everything)\n return !hasDisabledUnselected;\n};\n\ntype DropdownListboxItemsProps = {\n optionsToShow: DropdownOption[];\n getListboxItemProps: (option: DropdownOption, index: number) => Record<string, unknown>;\n multiple?: boolean;\n fieldId: string;\n noOptionsText?: React.ReactNode;\n selectAllLabel?: string;\n selectedItems?: DropdownOption[];\n};\n\nexport const DropdownListboxItems = ({\n optionsToShow,\n getListboxItemProps,\n multiple,\n fieldId,\n noOptionsText,\n selectAllLabel,\n selectedItems = [],\n}: DropdownListboxItemsProps) => {\n if (noOptionsText !== undefined && !optionsToShow.length) {\n return <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>;\n }\n\n const hasSelectAll = optionsToShow[0]?.id === SELECT_ALL_OPTION_ID;\n\n let selectAllCheckedState: CheckedState = false;\n if (hasSelectAll) {\n const realOptions = optionsToShow.filter((o) => o.id !== SELECT_ALL_OPTION_ID);\n const enabledOptions = realOptions.filter((o) => !o.disabled);\n const enabledSelectedCount = enabledOptions.filter((o) =>\n selectedItems.some((s) => s.id === o.id)\n ).length;\n const allEnabledSelected =\n enabledOptions.length > 0 && enabledSelectedCount === enabledOptions.length;\n const someSelected = selectedItems.length > 0;\n selectAllCheckedState = allEnabledSelected ? true : someSelected ? \"indeterminate\" : false;\n }\n\n return optionsToShow.map((option, index) => {\n const { key, selected, ...itemProps } = getListboxItemProps(option, index);\n\n if (option.id === SELECT_ALL_OPTION_ID) {\n return (\n <Listbox.Item\n key={key as string}\n {...itemProps}\n aria-selected={selectAllCheckedState === true}\n className={cx(\n `${rootClassName}__checkbox-item-multiple`,\n `${rootClassName}__select-all-item`\n )}\n hideSelectedIcon\n >\n <span className={cx(`${rootClassName}__checkbox-container`)}>\n <Checkbox\n id={`${fieldId}-checkbox-select-all`}\n checked={selectAllCheckedState}\n aria-hidden\n />\n {selectAllLabel}\n </span>\n </Listbox.Item>\n );\n }\n\n if (multiple) {\n return (\n <Listbox.Item\n key={key as string}\n {...itemProps}\n className={cx(`${rootClassName}__checkbox-item-multiple`, {\n [`${rootClassName}__select-all-child`]: hasSelectAll,\n })}\n selected={!!selected}\n hideSelectedIcon\n >\n <span\n className={cx(`${rootClassName}__checkbox-container`, {\n [`${rootClassName}__checkbox-container--disabled`]: option.disabled,\n })}\n >\n <Checkbox\n id={`${fieldId}-checkbox-${option.id}`}\n checked={!!selected}\n aria-hidden\n disabled={option.disabled}\n />\n {option.label}\n </span>\n </Listbox.Item>\n );\n }\n\n return (\n <Listbox.Item key={key as string} {...itemProps} selected={!!selected}>\n <span>{option.label}</span>\n </Listbox.Item>\n );\n });\n};\n\nexport { cx };\n","import type { DropdownOption } from \"./dropdown.types\";\n\nconst filterOptions = (\n options: DropdownOption[],\n searchTerm: string | undefined,\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean\n): DropdownOption[] => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n if (!searchTerm) return options;\n const chunks = searchTerm.toUpperCase().split(\" \");\n return options.filter((option) =>\n chunks.every((chunk) => (option.value || option.label).toUpperCase().includes(chunk))\n );\n};\n\nexport const getFilteredOptions = ({\n options,\n searchTerm,\n filterOption,\n selectedOption,\n multiple,\n}: {\n options: DropdownOption[];\n searchTerm: string | undefined;\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean;\n selectedOption?: DropdownOption;\n multiple: boolean;\n}): DropdownOption[] => {\n if (!multiple && selectedOption && selectedOption.label === searchTerm) {\n return options;\n }\n return filterOptions(options, searchTerm, filterOption);\n};\n","import { useState } from \"react\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\n\nexport type UseDropdownInputParams = {\n controlledInputValue?: string;\n defaultInputValue?: string;\n selectedOption?: DropdownOption;\n onInputChange?: (value: string) => void;\n};\n\nexport const useDropdownInput = ({\n controlledInputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n}: UseDropdownInputParams) => {\n const [internalInputValue, setInternalInputValue] = useState(\n (typeof controlledInputValue === \"string\"\n ? controlledInputValue\n : defaultInputValue ?? selectedOption?.label) ?? \"\"\n );\n\n const displayInputValue =\n typeof controlledInputValue === \"string\" ? controlledInputValue : internalInputValue;\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n return {\n displayInputValue,\n populateInputField,\n };\n};\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { useAutocomplete } from \"@purpur/use-autocomplete\";\n\nimport type { DropdownComboboxProps, DropdownOption } from \"./dropdown.types\";\nimport {\n cx,\n DropdownEndAdornments,\n DropdownFooter,\n DropdownLabel,\n DropdownListboxItems,\n DropdownTags,\n rootClassName,\n SELECT_ALL_OPTION_ID,\n shouldShowSelectAll,\n} from \"./dropdown-shared\";\nimport { getFilteredOptions } from \"./useDropdownFilter\";\nimport { useDropdownInput } from \"./useDropdownInput\";\n\nexport const DropdownCombobox = forwardRef<HTMLDivElement, DropdownComboboxProps>((props, ref) => {\n const {\n id: propId,\n label,\n options,\n className,\n errorText,\n helperText,\n placeholder,\n negative = false,\n readOnly = false,\n disabled = false,\n required = false,\n valid,\n loading,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n openOnFocus = false,\n listboxMaxHeight,\n listboxLabel,\n filterOption,\n inputValue,\n defaultInputValue,\n onInputChange,\n noOptionsText,\n highlightFirstOption = false,\n selectAllLabel,\n [\"data-testid\"]: dataTestId,\n } = props;\n\n const randomId = useId();\n const fieldId = propId ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = !!valid && !errorText;\n const helperTextId = `${fieldId}-helper-text`;\n\n const selectedItems = multiple ? selectedOptions : selectedOption ? [selectedOption] : [];\n\n const { displayInputValue, populateInputField } = useDropdownInput({\n controlledInputValue: inputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n });\n\n const optionsToShow = getFilteredOptions({\n options,\n searchTerm: displayInputValue,\n filterOption,\n selectedOption,\n multiple,\n });\n\n const showSelectAll = shouldShowSelectAll({\n selectAllLabel,\n multiple,\n options,\n selectedItems,\n });\n\n // Hide \"Select all\" when the user is actively searching/filtering.\n const selectAllMatchesSearch = showSelectAll && !displayInputValue;\n\n // Inject a virtual \"Select all\" option so it participates in keyboard navigation.\n const optionsWithSelectAll =\n showSelectAll && selectAllMatchesSearch\n ? [{ id: SELECT_ALL_OPTION_ID, label: selectAllLabel as string }, ...optionsToShow]\n : optionsToShow;\n\n const handleSelectAll = () => {\n const enabledOptions = options.filter((o) => !o.disabled);\n const allEnabledSelected = enabledOptions.every((o) =>\n selectedItems.some((s) => s.id === o.id)\n );\n if (allEnabledSelected) {\n const next = selectedItems.filter((o) => o.disabled);\n onSelect?.(undefined, next);\n } else {\n const disabledSelected = selectedItems.filter((o) => o.disabled);\n const next = [...disabledSelected, ...enabledOptions];\n onSelect?.(undefined, next);\n }\n populateInputField(\"\");\n };\n\n const handleAutocompleteSelect = (option: DropdownOption) => {\n if (option.id === SELECT_ALL_OPTION_ID) {\n handleSelectAll();\n return;\n }\n if (multiple) {\n const isAlreadySelected = selectedItems.some((o) => o.id === option.id);\n const next = isAlreadySelected\n ? selectedItems.filter((o) => o.id !== option.id)\n : [...selectedItems, option];\n onSelect?.(option, next);\n populateInputField(\"\");\n } else {\n onSelect?.(option, [option]);\n populateInputField(option.label);\n }\n };\n\n const {\n rootRef,\n inputRef,\n inputProps,\n listboxProps,\n getListboxItemProps,\n isOpen,\n openListbox,\n anchorStyle,\n } = useAutocomplete({\n id: fieldId,\n options: optionsWithSelectAll,\n listboxLabel: listboxLabel || label || \"Options\",\n selectedOption: multiple ? undefined : selectedOption,\n disabled,\n readOnly,\n openOnFocus,\n listboxMaxHeight,\n highlightFirstOption,\n closeOnSelect: !multiple,\n noOptionsText,\n onSelect: handleAutocompleteSelect,\n [\"data-testid\"]: dataTestId,\n });\n\n const setRootRef = (node: HTMLDivElement | null) => {\n (rootRef as React.RefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.RefObject<HTMLDivElement | null>).current = node;\n };\n\n // For multi-select the hook doesn't know about selectedOptions, so inject\n // the correct `selected` state here based on selectedItems.\n const getListboxItemPropsWithSelection = (option: DropdownOption, index: number) => {\n const props = getListboxItemProps(option, index);\n if (multiple) {\n const isSelected = selectedItems.some((o) => o.id === option.id);\n return { ...props, selected: isSelected, \"aria-selected\": isSelected };\n }\n return props;\n };\n\n const handleRemoveTag = (option: DropdownOption) => {\n const next = selectedItems.filter((o) => o.id !== option.id);\n onSelect?.(option, next);\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (\n multiple &&\n event.key === \"Backspace\" &&\n event.currentTarget.value === \"\" &&\n selectedItems.length > 0\n ) {\n // Find the last non-disabled chip to remove; disabled chips cannot be removed.\n for (let i = selectedItems.length - 1; i >= 0; i--) {\n if (!selectedItems[i].disabled) {\n handleRemoveTag(selectedItems[i]);\n break;\n }\n }\n }\n (inputProps as React.InputHTMLAttributes<HTMLInputElement>)?.onKeyDown?.(event);\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n populateInputField(e.target.value);\n if (!isOpen) {\n openListbox();\n }\n };\n\n const handleContainerClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (disabled || readOnly) return;\n\n const target = event.target as HTMLElement;\n // Ignore clicks on the input (it has its own mousedown handler) or chip dismiss buttons.\n if (\n target === (inputRef as React.RefObject<HTMLInputElement>).current ||\n target.closest(\"button\")\n ) {\n return;\n }\n\n const input = (inputRef as React.RefObject<HTMLInputElement>).current;\n input?.dispatchEvent(new MouseEvent(\"mousedown\", { bubbles: true }));\n input?.focus();\n };\n\n // True when every option (enabled and disabled) is currently selected and a\n // `selectAllLabel` is configured. In that case the field shows the label\n // text instead of a list of chips.\n const allEnabledSelected =\n multiple &&\n !!selectAllLabel &&\n options.length > 0 &&\n options.every((o) => selectedItems.some((s) => s.id === o.id));\n\n const wrapperClassName = cx(rootClassName, className, {\n [`${rootClassName}--negative`]: negative,\n });\n\n return (\n <div ref={setRootRef} className={wrapperClassName}>\n <DropdownLabel\n fieldId={fieldId}\n htmlForSuffix=\"input\"\n label={label}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n required={required}\n />\n <div className={cx(`${rootClassName}__field-row`)}>\n {/* disable eslint rules for this div since it is just visual container and the input inside is still accessible and has its own handlers.*/}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div\n className={cx(`${rootClassName}__combobox-container`, {\n [`${rootClassName}__combobox-container--error`]: !!errorText,\n [`${rootClassName}__combobox-container--is-valid`]: isValid,\n [`${rootClassName}__combobox-container--negative`]: negative,\n [`${rootClassName}__combobox-container--disabled`]: disabled,\n [`${rootClassName}__combobox-container--readonly`]: readOnly && !disabled,\n })}\n style={anchorStyle}\n onClick={handleContainerClick}\n >\n {multiple && !allEnabledSelected && (\n <DropdownTags\n selectedItems={selectedItems}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n onRemove={handleRemoveTag}\n />\n )}\n <input\n {...(inputProps as React.InputHTMLAttributes<HTMLInputElement>)}\n ref={inputRef as React.RefObject<HTMLInputElement>}\n id={`${fieldId}-input`}\n data-testid={getTestId(\"input\")}\n onKeyDown={handleInputKeyDown}\n onChange={handleInputChange}\n value={allEnabledSelected && !displayInputValue ? selectAllLabel : displayInputValue}\n placeholder={placeholder}\n className={cx(`${rootClassName}__input`, {\n [`${rootClassName}__input--negative`]: negative,\n })}\n aria-describedby={helperTextId}\n aria-invalid={!!errorText}\n disabled={disabled}\n readOnly={readOnly}\n />\n <DropdownEndAdornments\n getTestId={getTestId}\n loading={loading}\n disabled={disabled}\n negative={negative}\n isValid={isValid}\n isOpen={isOpen}\n showChevronOpen\n />\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n </div>\n </div>\n {isOpen && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {DropdownListboxItems({\n optionsToShow: optionsWithSelectAll,\n getListboxItemProps: getListboxItemPropsWithSelection,\n multiple,\n fieldId,\n noOptionsText,\n selectAllLabel,\n selectedItems,\n })}\n </Listbox>\n )}\n <DropdownFooter\n errorText={errorText}\n helperText={helperText}\n helperTextId={helperTextId}\n negative={negative}\n />\n </div>\n );\n});\n\nDropdownCombobox.displayName = \"DropdownCombobox\";\n","import { useRef, useState } from \"react\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\n\nexport type HighlightedOption = DropdownOption & { isSetByClickEvent?: boolean };\n\nexport type UseDropdownHighlightParams = {\n options: DropdownOption[];\n highlightFirstOption: boolean;\n};\n\nexport const useDropdownHighlight = ({\n options,\n highlightFirstOption,\n}: UseDropdownHighlightParams) => {\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n\n const [highlightedOption, setHighlightedOption] = useState<HighlightedOption | undefined>(\n highlightFirstOption ? options[0] : undefined\n );\n\n const scrollOptionIntoView = (optionEl: HTMLLIElement | undefined) => {\n if (optionEl) {\n const optionRect = optionEl.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOutside = optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOutside) {\n optionEl.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const findNextOption = (\n direction: \"ArrowUp\" | \"ArrowDown\",\n optionsToShow: DropdownOption[]\n ): DropdownOption | undefined => {\n const enabledList = optionsToShow.filter((o) => !o.disabled);\n if (!enabledList.length) return undefined;\n\n const currentIndex = highlightedOption\n ? enabledList.findIndex((o) => o.id === highlightedOption.id)\n : -1;\n\n if (direction === \"ArrowDown\") {\n return enabledList[(currentIndex + 1) % enabledList.length];\n }\n return enabledList[(currentIndex - 1 + enabledList.length) % enabledList.length];\n };\n\n const highlightOption = (option: DropdownOption | undefined) => {\n setHighlightedOption(option ? { ...option } : undefined);\n if (option) scrollOptionIntoView(optionRefs.current[option.id]);\n };\n\n const highlightByClick = (option: DropdownOption) => {\n if (option.id !== highlightedOption?.id) {\n setHighlightedOption({ ...option, isSetByClickEvent: true });\n }\n };\n\n const highlightSelected = (option: DropdownOption, eventType: \"CLICK\" | \"KEYBOARD\") => {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...option, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[option.id]);\n });\n };\n\n const resetHighlight = () => {\n setHighlightedOption(undefined);\n };\n\n return {\n highlightedOption,\n listboxRef,\n optionRefs,\n findNextOption,\n highlightOption,\n highlightByClick,\n highlightSelected,\n resetHighlight,\n };\n};\n","import { useCallback, useEffect } from \"react\";\n\nexport const useOnClickOutside = (element: HTMLElement | null, callback: () => void) => {\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (element && !element.contains(event.target as Node)) {\n callback();\n }\n },\n [callback, element]\n );\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [handleClickOutside]);\n};\n","import type { CSSProperties } from \"react\";\nimport { useCallback, useId, useRef, useState } from \"react\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport type { DropdownOption } from \"./dropdown.types\";\nimport { getFilteredOptions } from \"./useDropdownFilter\";\nimport { useDropdownHighlight } from \"./useDropdownHighlight\";\nimport { useDropdownInput } from \"./useDropdownInput\";\nimport { useOnClickOutside } from \"./useOnClickOutside\";\n\n// ── Hook params ────────────────────────────────────────────────────────\n\nexport type UseDropdownParams = {\n id: string;\n variant: \"select\" | \"combobox\";\n options: DropdownOption[];\n listboxLabel: string;\n multiple?: boolean;\n\n // Selection\n selectedOption?: DropdownOption;\n selectedOptions?: DropdownOption[];\n onSelect?: (toggledOption: DropdownOption | undefined, selectedOptions: DropdownOption[]) => void;\n\n // Combobox-specific\n filterOption?: (inputValue: string | undefined, option: DropdownOption) => boolean;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n noOptionsText?: React.ReactNode;\n highlightFirstOption?: boolean;\n\n // Shared behaviour\n openOnFocus?: boolean;\n listboxMaxHeight?: string | number;\n disabled?: boolean;\n readOnly?: boolean;\n\n [\"data-testid\"]?: string;\n};\n\n// ── Return type ────────────────────────────────────────────────────────\n\nexport type UseDropdownReturn = {\n rootRef: React.RefObject<HTMLDivElement | null>;\n triggerContainerProps: Record<string, unknown> | null;\n triggerProps: Record<string, unknown>;\n inputProps: Record<string, unknown> | null;\n listboxProps: ListboxProps;\n getListboxItemProps: (option: DropdownOption, index: number) => ListboxItemProps;\n optionsToShow: DropdownOption[];\n isOpen: boolean;\n highlightedOption: DropdownOption | undefined;\n selectedItems: DropdownOption[];\n anchorStyle: CSSProperties;\n};\n\n// ── Hook ───────────────────────────────────────────────────────────────\n\nexport const useDropdown = ({\n id,\n variant,\n options,\n listboxLabel,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n filterOption,\n inputValue: controlledInputValue,\n defaultInputValue,\n onInputChange,\n noOptionsText,\n highlightFirstOption = false,\n openOnFocus = false,\n listboxMaxHeight,\n disabled = false,\n readOnly = false,\n [\"data-testid\"]: dataTestId,\n}: UseDropdownParams): UseDropdownReturn => {\n const isCombobox = variant === \"combobox\";\n const uniqueId = useId();\n\n // ── Refs ─────────────────────────────────────────────────────────────\n const rootRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // ── Sub-hooks ────────────────────────────────────────────────────────\n const highlight = useDropdownHighlight({ options, highlightFirstOption });\n const { displayInputValue, populateInputField } = useDropdownInput({\n controlledInputValue,\n defaultInputValue,\n selectedOption,\n onInputChange,\n });\n\n // ── Open / close ────────────────────────────────────────────────────\n const [isOpen, setIsOpen] = useState(false);\n\n const closeListbox = () => {\n setIsOpen(false);\n highlight.resetHighlight();\n };\n\n useOnClickOutside(rootRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setIsOpen(true);\n const current = multiple ? undefined : selectedOption;\n if (current) {\n highlight.highlightSelected(current, eventType);\n }\n };\n\n // ── Derived state ───────────────────────────────────────────────────\n const resolvedSelected = multiple ? selectedOptions : selectedOption ? [selectedOption] : [];\n\n const optionsToShow = isCombobox\n ? getFilteredOptions({\n options,\n searchTerm: displayInputValue,\n filterOption,\n selectedOption,\n multiple,\n })\n : options;\n\n const showListbox = isOpen && (!!optionsToShow.length || !!noOptionsText);\n\n // ── Helpers ──────────────────────────────────────────────────────────\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n\n // ── Selection ────────────────────────────────────────────────────────\n const selectOption = (option: DropdownOption | undefined) => {\n if (!option || option.disabled) return;\n\n if (multiple) {\n const isAlreadySelected = resolvedSelected.some((o) => o.id === option.id);\n const next = isAlreadySelected\n ? resolvedSelected.filter((o) => o.id !== option.id)\n : [...resolvedSelected, option];\n onSelect?.(option, next);\n if (isCombobox) {\n populateInputField(\"\");\n inputRef.current?.focus();\n }\n } else {\n onSelect?.(option, [option]);\n if (isCombobox) {\n populateInputField(option.label);\n }\n closeListbox();\n (isCombobox ? inputRef : triggerRef).current?.focus();\n }\n };\n\n // ── Navigation ───────────────────────────────────────────────────────\n const highlightNextOption = (direction: \"ArrowUp\" | \"ArrowDown\") => {\n if (!showListbox) openListbox({ eventType: \"KEYBOARD\" });\n const next = highlight.findNextOption(direction, optionsToShow);\n highlight.highlightOption(next);\n };\n\n // ── Keyboard ─────────────────────────────────────────────────────────\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled || readOnly) return;\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n event.preventDefault();\n if (showListbox && highlight.highlightedOption) {\n selectOption(highlight.highlightedOption);\n } else if (!showListbox) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n break;\n }\n case \" \": {\n if (!isCombobox) {\n event.preventDefault();\n if (showListbox && highlight.highlightedOption) {\n selectOption(highlight.highlightedOption);\n } else if (!showListbox) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n }\n break;\n }\n case \"Escape\":\n event.preventDefault();\n closeListbox();\n break;\n case \"Tab\":\n closeListbox();\n break;\n case \"Home\":\n case \"End\":\n if (isCombobox) closeListbox();\n break;\n }\n };\n\n // ── Combobox input handlers ─────────────────────────────────────────\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n populateInputField(e.target.value);\n highlight.resetHighlight();\n if (!isOpen) openListbox({ eventType: \"KEYBOARD\" });\n };\n\n const handleInputMouseDown = () => {\n if (disabled || readOnly) return;\n isOpen ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleInputFocus = () => {\n if (!isOpen && openOnFocus && !disabled && !readOnly) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n inputRef.current?.select();\n };\n\n const handleInputBlur = () => {\n setTimeout(() => {\n const activeEl = document.activeElement;\n // Only close when focus has moved to a real element outside the dropdown.\n // Guarding against document.body prevents a false-positive close when a\n // screen reader navigates with its virtual cursor: the input blurs but no\n // DOM element receives physical focus (activeElement falls back to body).\n if (\n activeEl !== document.body &&\n !inputRef.current?.contains(activeEl) &&\n !highlight.listboxRef.current?.contains(activeEl) &&\n !rootRef.current?.contains(activeEl)\n ) {\n closeListbox();\n if (isCombobox && !multiple) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n // ── Select trigger handlers ─────────────────────────────────────────\n const handleTriggerClick = () => {\n if (disabled || readOnly) return;\n isOpen ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleTriggerContainerClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (disabled || readOnly) return;\n\n const clickedButton = (event.target as HTMLElement).closest(\"button\");\n if (clickedButton && clickedButton !== triggerRef.current) {\n return;\n }\n\n handleTriggerClick();\n };\n\n const handleTriggerFocus = () => {\n if (!isOpen && openOnFocus && !disabled && !readOnly) {\n openListbox({ eventType: \"KEYBOARD\" });\n }\n };\n\n // ── Build props ──────────────────────────────────────────────────────\n const listboxId = `${id}-listbox`;\n const createListboxItemId = (option: DropdownOption) => `${id}-listbox-item-${option.id}`;\n const anchorName = `--purpur-dropdown-${uniqueId.replace(/:/g, \"\")}`;\n const anchorStyle = { anchorName } as CSSProperties;\n const triggerContainerProps: Record<string, unknown> | null = isCombobox\n ? null\n : {\n onClick: handleTriggerContainerClick,\n };\n\n // ── Popover sync ────────────────────────────────────────────────────\n const listboxCallbackRef = useCallback(\n (node: HTMLUListElement | null) => {\n (highlight.listboxRef as React.MutableRefObject<HTMLUListElement | null>).current = node;\n if (node && typeof node.showPopover === \"function\") {\n try {\n node.showPopover();\n } catch {\n // Popover not supported or already open\n }\n }\n },\n [highlight.listboxRef]\n );\n\n const listboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: listboxId,\n ref: listboxCallbackRef,\n onMouseLeave: () => highlight.resetHighlight(),\n popover: \"manual\",\n style: {\n ...(listboxMaxHeight\n ? {\n maxHeight:\n typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n }\n : {}),\n positionAnchor: anchorName,\n } as CSSProperties,\n } as ListboxProps;\n\n const getListboxItemProps = (option: DropdownOption, index: number): ListboxItemProps => {\n const isSelected = resolvedSelected.some((o) => o.id === option.id);\n const { highlightedOption } = highlight;\n\n const highlighted =\n (option.id === highlightedOption?.id ||\n (highlightFirstOption && !highlightedOption && index === 0)) &&\n !highlightedOption?.isSetByClickEvent;\n\n return {\n \"data-testid\": getTestId(`listbox-item-${option.id}`),\n id: createListboxItemId(option),\n key: option.id,\n onMouseMove: () => highlight.highlightByClick(option),\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) highlight.optionRefs.current[option.id] = el;\n },\n tabIndex: -1,\n selected: isSelected,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n \"aria-selected\": isSelected,\n };\n };\n\n const triggerProps: Record<string, unknown> = isCombobox\n ? {}\n : {\n ref: triggerRef,\n type: \"button\" as const,\n role: \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": showListbox,\n \"aria-controls\": listboxId,\n \"aria-disabled\": disabled,\n \"data-testid\": getTestId(\"trigger\"),\n id: `${id}-trigger`,\n onKeyDown: handleKeyDown,\n onFocus: handleTriggerFocus,\n disabled,\n tabIndex: disabled ? -1 : 0,\n style: anchorStyle,\n };\n\n const inputProps: Record<string, unknown> | null = isCombobox\n ? {\n ref: inputRef,\n role: \"combobox\",\n \"aria-autocomplete\": \"list\" as const,\n \"aria-expanded\": showListbox,\n \"aria-controls\": listboxId,\n \"aria-activedescendant\": highlight.highlightedOption\n ? createListboxItemId(highlight.highlightedOption)\n : undefined,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n type: \"text\",\n value: displayInputValue,\n onChange: handleInputChange,\n onMouseDown: handleInputMouseDown,\n onFocus: handleInputFocus,\n onBlur: handleInputBlur,\n onKeyDown: handleKeyDown,\n disabled,\n readOnly,\n }\n : null;\n\n return {\n rootRef,\n triggerContainerProps,\n triggerProps,\n inputProps,\n listboxProps,\n getListboxItemProps,\n optionsToShow,\n isOpen: showListbox,\n highlightedOption: highlight.highlightedOption,\n selectedItems: resolvedSelected,\n anchorStyle,\n };\n};\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\n\nimport type { DropdownOption, DropdownSelectProps } from \"./dropdown.types\";\nimport {\n cx,\n DropdownEndAdornments,\n DropdownFooter,\n DropdownLabel,\n DropdownListboxItems,\n DropdownTags,\n rootClassName,\n SELECT_ALL_OPTION_ID,\n shouldShowSelectAll,\n} from \"./dropdown-shared\";\nimport { useDropdown } from \"./useDropdown\";\n\nexport const DropdownSelect = forwardRef<HTMLDivElement, DropdownSelectProps>((props, ref) => {\n const {\n id: propId,\n label,\n options,\n className,\n errorText,\n helperText,\n placeholder,\n negative = false,\n readOnly = false,\n disabled = false,\n required = false,\n valid = false,\n loading = false,\n multiple = false,\n selectedOption,\n selectedOptions = [],\n onSelect,\n openOnFocus = false,\n listboxMaxHeight,\n listboxLabel,\n selectAllLabel,\n [\"data-testid\"]: dataTestId,\n } = props;\n\n const randomId = useId();\n const fieldId = propId ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = !!valid && !errorText;\n const helperTextId = `${fieldId}-helper-text`;\n\n // Resolve selected items up-front so we can decide whether to show the\n // virtual \"Select all\" option.\n const resolvedSelectedItems = multiple ? selectedOptions : selectedOption ? [selectedOption] : [];\n\n const showSelectAll = shouldShowSelectAll({\n selectAllLabel,\n multiple,\n options,\n selectedItems: resolvedSelectedItems,\n });\n\n const handleSelectAll = () => {\n const enabledOptions = options.filter((o) => !o.disabled);\n const allEnabledSelected = enabledOptions.every((o) =>\n resolvedSelectedItems.some((s) => s.id === o.id)\n );\n if (allEnabledSelected) {\n // Deselect all enabled options, keep disabled+selected as-is\n const next = resolvedSelectedItems.filter((o) => o.disabled);\n onSelect?.(undefined, next);\n } else {\n // Select all enabled, keep disabled+selected as-is\n const disabledSelected = resolvedSelectedItems.filter((o) => o.disabled);\n const next = [...disabledSelected, ...enabledOptions];\n onSelect?.(undefined, next);\n }\n };\n\n // Intercept selection of the virtual \"Select all\" option routed through the\n // hook's keyboard/mouse handlers and redirect to the dedicated handler.\n const handleHookSelect = (\n toggledOption: DropdownOption | undefined,\n nextSelected: DropdownOption[]\n ) => {\n if (toggledOption?.id === SELECT_ALL_OPTION_ID) {\n handleSelectAll();\n return;\n }\n onSelect?.(toggledOption, nextSelected);\n };\n\n const hookOptions = showSelectAll\n ? [{ id: SELECT_ALL_OPTION_ID, label: selectAllLabel as string }, ...options]\n : options;\n\n const dropdown = useDropdown({\n id: fieldId,\n variant: \"select\",\n options: hookOptions,\n listboxLabel: listboxLabel || label || \"Options\",\n multiple,\n selectedOption,\n selectedOptions,\n onSelect: handleHookSelect,\n openOnFocus,\n listboxMaxHeight,\n disabled,\n readOnly,\n [\"data-testid\"]: dataTestId,\n });\n\n const setRootRef = (node: HTMLDivElement | null) => {\n (dropdown.rootRef as React.RefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.RefObject<HTMLDivElement | null>).current = node;\n };\n\n const {\n triggerContainerProps,\n triggerProps,\n listboxProps,\n getListboxItemProps,\n optionsToShow,\n isOpen,\n selectedItems,\n anchorStyle,\n } = dropdown;\n\n const triggerButtonProps = {\n ...(triggerProps as React.ButtonHTMLAttributes<HTMLButtonElement>),\n };\n delete triggerButtonProps.style;\n\n const handleRemoveTag = (option: DropdownOption) => {\n const next = selectedItems.filter((o) => o.id !== option.id);\n onSelect?.(option, next);\n };\n\n // True when every option (enabled and disabled) is currently selected and a\n // `selectAllLabel` is configured. In that case the field shows the label\n // text instead of a list of chips.\n const allEnabledSelected =\n multiple &&\n !!selectAllLabel &&\n options.length > 0 &&\n options.every((o) => selectedItems.some((s) => s.id === o.id));\n\n const displayLabel = multiple\n ? allEnabledSelected\n ? selectAllLabel\n : selectedItems.length === 0\n ? placeholder || \"\"\n : \"\"\n : selectedOption?.label || placeholder || \"\";\n\n const wrapperClassName = cx(rootClassName, className, {\n [`${rootClassName}--negative`]: negative,\n });\n\n return (\n <div ref={setRootRef} className={wrapperClassName}>\n <DropdownLabel\n fieldId={fieldId}\n htmlForSuffix=\"trigger\"\n label={label}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n required={required}\n />\n <div className={cx(`${rootClassName}__field-row`)}>\n <div\n {...(triggerContainerProps as React.HTMLAttributes<HTMLDivElement>)}\n className={cx(`${rootClassName}__trigger-container`, {\n [`${rootClassName}__trigger-container--error`]: !!errorText,\n [`${rootClassName}__trigger-container--is-valid`]: isValid,\n [`${rootClassName}__trigger-container--negative`]: negative,\n [`${rootClassName}__trigger-container--disabled`]: disabled,\n [`${rootClassName}__trigger-container--readonly`]: readOnly && !disabled,\n [`${rootClassName}__trigger-container--has-tags`]:\n multiple && selectedItems.length > 0 && !allEnabledSelected,\n })}\n style={anchorStyle}\n >\n {multiple && !allEnabledSelected && (\n <DropdownTags\n selectedItems={selectedItems}\n getTestId={getTestId}\n disabled={disabled}\n negative={negative}\n onRemove={handleRemoveTag}\n isSelect\n />\n )}\n <button\n {...triggerButtonProps}\n className={cx(`${rootClassName}__trigger`, {\n [`${rootClassName}__trigger--is-valid`]: isValid,\n [`${rootClassName}__trigger--negative`]: negative,\n [`${rootClassName}__trigger--disabled`]: disabled,\n [`${rootClassName}__trigger--readonly`]: readOnly && !disabled,\n [`${rootClassName}__trigger--placeholder`]: !selectedItems.length,\n })}\n aria-describedby={helperTextId}\n >\n <span className={cx(`${rootClassName}__trigger-text`)}>{displayLabel}</span>\n </button>\n <DropdownEndAdornments\n getTestId={getTestId}\n loading={loading}\n disabled={disabled}\n negative={negative}\n isValid={isValid}\n isOpen={isOpen}\n readOnly={readOnly}\n showChevronOpen\n />\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n </div>\n </div>\n {isOpen && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {DropdownListboxItems({\n optionsToShow,\n getListboxItemProps,\n multiple,\n fieldId,\n selectAllLabel,\n selectedItems,\n })}\n </Listbox>\n )}\n <DropdownFooter\n errorText={errorText}\n helperText={helperText}\n helperTextId={helperTextId}\n negative={negative}\n />\n </div>\n );\n});\n\nDropdownSelect.displayName = \"DropdownSelect\";\n","import React, { forwardRef } from \"react\";\n\nimport type { DropdownComboboxProps, DropdownProps, DropdownSelectProps } from \"./dropdown.types\";\nimport { DropdownCombobox } from \"./dropdown-combobox\";\nimport { DropdownSelect } from \"./dropdown-select\";\n\nexport const Dropdown = forwardRef<HTMLDivElement, DropdownProps>((props, ref) => {\n if (props.combobox) {\n return <DropdownCombobox ref={ref} {...(props as DropdownComboboxProps)} />;\n }\n\n return <DropdownSelect ref={ref} {...(props as DropdownSelectProps)} />;\n});\n\nDropdown.displayName = \"Dropdown\";\n\nexport type {\n DropdownComboboxProps,\n DropdownOption,\n DropdownProps,\n DropdownSelectProps,\n} from \"./dropdown.types\";\nexport { useDropdown } from \"./useDropdown\";\n"],"names":["cx","c","styles","rootClassName","DropdownLabel","fieldId","htmlForSuffix","label","getTestId","disabled","negative","required","jsxs","Label","jsx","DropdownEndAdornments","loading","isValid","isOpen","readOnly","showChevronOpen","Spinner","Fragment","IconCheckCircleFilled","IconChevronDown","DropdownTags","selectedItems","onRemove","isSelect","DismissableChipGroup","item","DropdownFooter","errorText","helperText","helperTextId","FieldErrorText","FieldHelperText","SELECT_ALL_OPTION_ID","shouldShowSelectAll","selectAllLabel","multiple","options","o","s","DropdownListboxItems","optionsToShow","getListboxItemProps","noOptionsText","Listbox","hasSelectAll","selectAllCheckedState","enabledOptions","enabledSelectedCount","allEnabledSelected","someSelected","option","index","key","selected","itemProps","Checkbox","filterOptions","searchTerm","filterOption","chunks","chunk","getFilteredOptions","selectedOption","useDropdownInput","controlledInputValue","defaultInputValue","onInputChange","internalInputValue","setInternalInputValue","useState","value","DropdownCombobox","forwardRef","props","ref","propId","className","placeholder","valid","selectedOptions","onSelect","openOnFocus","listboxMaxHeight","listboxLabel","inputValue","highlightFirstOption","dataTestId","randomId","useId","name","displayInputValue","populateInputField","showSelectAll","optionsWithSelectAll","handleSelectAll","next","handleAutocompleteSelect","rootRef","inputRef","inputProps","listboxProps","openListbox","anchorStyle","useAutocomplete","setRootRef","node","getListboxItemPropsWithSelection","isSelected","handleRemoveTag","handleInputKeyDown","event","i","handleInputChange","e","handleContainerClick","target","input","wrapperClassName","useDropdownHighlight","listboxRef","useRef","optionRefs","highlightedOption","setHighlightedOption","scrollOptionIntoView","optionEl","optionRect","listboxRect","direction","enabledList","currentIndex","eventType","useOnClickOutside","element","callback","handleClickOutside","useCallback","useEffect","useDropdown","id","variant","isCombobox","uniqueId","triggerRef","highlight","setIsOpen","closeListbox","current","resolvedSelected","showListbox","selectOption","highlightNextOption","handleKeyDown","handleInputMouseDown","handleInputFocus","handleInputBlur","activeEl","handleTriggerClick","handleTriggerContainerClick","clickedButton","handleTriggerFocus","listboxId","createListboxItemId","anchorName","triggerContainerProps","listboxCallbackRef","highlighted","el","triggerProps","DropdownSelect","resolvedSelectedItems","handleHookSelect","toggledOption","nextSelected","hookOptions","dropdown","triggerButtonProps","displayLabel","Dropdown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgBMA,IAAKC,GAAE,KAAKC,EAAM,GACXC,IAAgB,mBAchBC,KAAgB,CAAC;AAAA,EAC5B,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MACOJ,IAGH,gBAAAK;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,SAASP,IAAgB,GAAGD,CAAO,IAAIC,CAAa,KAAKD;AAAA,IACzD,WAAWL,EAAG,GAAGG,CAAa,SAAS;AAAA,IACvC,eAAaK,EAAU,OAAO;AAAA,IAC9B,UAAAC;AAAA,IACA,UAAAC;AAAA,IAEC,UAAA;AAAA,MAAAC,KAAY,gBAAAG,EAAC,QAAA,EAAK,eAAW,IAAC,UAAA,KAAC;AAAA,MAC/BP;AAAA,IAAA;AAAA,EAAA;AAAA,IAXc,MA2BRQ,KAAwB,CAAC;AAAA,EACpC,WAAAP;AAAA,EACA,SAAAQ;AAAA,EACA,UAAAP;AAAA,EACA,UAAAC;AAAA,EACA,SAAAO;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AACF,MACE,gBAAAN,EAAC,UAAK,WAAWd,EAAG,GAAGG,CAAa,kBAAkB,GACnD,UAAAa,IACC,gBAAAF;AAAA,EAACO;AAAA,EAAA;AAAA,IACC,UAAAZ;AAAA,IACA,MAAK;AAAA,IACL,UAAAC;AAAA,IACA,eAAaF,EAAU,SAAS;AAAA,EAAA;AAClC,IAEA,gBAAAI,EAAAU,IAAA,EACG,UAAA;AAAA,EAAAL,KACC,gBAAAH;AAAA,IAACS;AAAAA,IAAA;AAAA,MACC,eAAaf,EAAU,YAAY;AAAA,MACnC,WAAWR,EAAG,GAAGG,CAAa,cAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGhD,gBAAAW;AAAA,IAACU;AAAAA,IAAA;AAAA,MACC,WAAWxB,EAAG,GAAGG,CAAa,kBAAkB;AAAA,QAC9C,CAAC,GAAGA,CAAa,sBAAsB,GAAGiB,KAAmBF;AAAA,QAC7D,CAAC,GAAGf,CAAa,0BAA0B,GAAGM;AAAA,QAC9C,CAAC,GAAGN,CAAa,0BAA0B,GAAGgB,KAAY,CAACV;AAAA,QAC3D,CAAC,GAAGN,CAAa,0BAA0B,GAAGc;AAAA,QAC9C,CAAC,GAAGd,CAAa,0BAA0B,GAAGO;AAAA,MAAA,CAC/C;AAAA,MACD,eAAaF,EAAU,eAAe;AAAA,MACtC,MAAK;AAAA,IAAA;AAAA,EAAA;AACP,EAAA,CACF,EAAA,CAEJ,GAYWiB,KAAe,CAAC;AAAA,EAC3B,eAAAC;AAAA,EACA,WAAAlB;AAAA,EACA,UAAAC;AAAA,EACA,UAAAkB;AAAA,EACA,UAAAC;AACF,MACOF,EAAc,SAGjB,gBAAAZ;AAAA,EAACe;AAAA,EAAA;AAAA,IACC,WAAW7B,EAAG,GAAGG,CAAa,gBAAgB;AAAA,MAC5C,CAAC,GAAGA,CAAa,sBAAsB,GAAGyB;AAAA,IAAA,CAC3C;AAAA,IACD,eAAapB,EAAU,MAAM;AAAA,IAC7B,MAAK;AAAA,IAEJ,UAAAkB,EAAc,IAAI,CAACI,MAClB,gBAAAhB;AAAA,MAACe,GAAqB;AAAA,MAArB;AAAA,QAEC,IAAIC,EAAK;AAAA,QACT,eAAatB,EAAU,OAAOsB,EAAK,EAAE,EAAE;AAAA,QACvC,cAAY,UAAUA,EAAK,KAAK;AAAA,QAChC,WAAW,MAAM;AACf,UAAAH,EAASG,CAAI;AAAA,QACf;AAAA,QACA,UAAUrB,KAAYqB,EAAK;AAAA,QAE1B,UAAAA,EAAK;AAAA,MAAA;AAAA,MATDA,EAAK;AAAA,IAAA,CAWb;AAAA,EAAA;AAAA,IAvB6B,MAmCvBC,KAAiB,CAAC;AAAA,EAC7B,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAxB;AACF,MACE,gBAAAE,EAAAU,IAAA,EACG,UAAA;AAAA,EAAAU,KAAa,gBAAAlB,EAACqB,IAAA,EAAe,UAAAzB,GAAqB,UAAAsB,GAAU;AAAA,EAC5DC,KAAc,CAACD,KACd,gBAAAlB,EAACsB,MAAgB,IAAIF,GAAc,UAAAxB,GAChC,UAAAuB,EAAA,CACH;AAAA,GAEJ,GAGWI,KAAuB,kCASvBC,KAAsB,CAAC;AAAA,EAClC,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAf;AACF,MACM,CAACa,KAAkB,CAACC,KACDC,EAAQ,OAAO,CAACC,MAAM,CAACA,EAAE,QAAQ,EACrC,WAAW,IAAU,KAMjC,CALiBD,EAAQ,OAAO,CAACC,MAAMA,EAAE,QAAQ,EACV;AAAA,EAC5C,CAACA,MAAM,CAAChB,EAAc,KAAK,CAACiB,MAAMA,EAAE,OAAOD,EAAE,EAAE;AAAA,GAgBtCE,KAAuB,CAAC;AAAA,EACnC,eAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAN;AAAA,EACA,SAAAnC;AAAA,EACA,eAAA0C;AAAA,EACA,gBAAAR;AAAA,EACA,eAAAb,IAAgB,CAAA;AAClB,MAAiC;AAC/B,MAAIqB,MAAkB,UAAa,CAACF,EAAc;AAChD,6BAAQG,GAAQ,MAAR,EAAa,gBAAc,IAAE,UAAAD,GAAc;AAGrD,QAAME,IAAeJ,EAAc,CAAC,GAAG,OAAOR;AAE9C,MAAIa,IAAsC;AAC1C,MAAID,GAAc;AAEhB,UAAME,IADcN,EAAc,OAAO,CAACH,MAAMA,EAAE,OAAOL,EAAoB,EAC1C,OAAO,CAACK,MAAM,CAACA,EAAE,QAAQ,GACtDU,IAAuBD,EAAe;AAAA,MAAO,CAACT,MAClDhB,EAAc,KAAK,CAACiB,MAAMA,EAAE,OAAOD,EAAE,EAAE;AAAA,IAAA,EACvC,QACIW,IACJF,EAAe,SAAS,KAAKC,MAAyBD,EAAe,QACjEG,IAAe5B,EAAc,SAAS;AAC5C,IAAAwB,IAAwBG,IAAqB,KAAOC,IAAe,kBAAkB;AAAA,EACvF;AAEA,SAAOT,EAAc,IAAI,CAACU,GAAQC,MAAU;AAC1C,UAAM,EAAE,KAAAC,GAAK,UAAAC,GAAU,GAAGC,MAAcb,EAAoBS,GAAQC,CAAK;AAEzE,WAAID,EAAO,OAAOlB,KAEd,gBAAAvB;AAAA,MAACkC,GAAQ;AAAA,MAAR;AAAA,QAEE,GAAGW;AAAA,QACJ,iBAAeT,MAA0B;AAAA,QACzC,WAAWlD;AAAA,UACT,GAAGG,CAAa;AAAA,UAChB,GAAGA,CAAa;AAAA,QAAA;AAAA,QAElB,kBAAgB;AAAA,QAEhB,4BAAC,QAAA,EAAK,WAAWH,EAAG,GAAGG,CAAa,sBAAsB,GACxD,UAAA;AAAA,UAAA,gBAAAW;AAAA,YAAC8C;AAAA,YAAA;AAAA,cACC,IAAI,GAAGvD,CAAO;AAAA,cACd,SAAS6C;AAAA,cACT,eAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZX;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,MAhBKkB;AAAA,IAAA,IAqBPjB,IAEA,gBAAA1B;AAAA,MAACkC,GAAQ;AAAA,MAAR;AAAA,QAEE,GAAGW;AAAA,QACJ,WAAW3D,EAAG,GAAGG,CAAa,4BAA4B;AAAA,UACxD,CAAC,GAAGA,CAAa,oBAAoB,GAAG8C;AAAA,QAAA,CACzC;AAAA,QACD,UAAU,CAAC,CAACS;AAAA,QACZ,kBAAgB;AAAA,QAEhB,UAAA,gBAAA9C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWZ,EAAG,GAAGG,CAAa,wBAAwB;AAAA,cACpD,CAAC,GAAGA,CAAa,gCAAgC,GAAGoD,EAAO;AAAA,YAAA,CAC5D;AAAA,YAED,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC8C;AAAA,gBAAA;AAAA,kBACC,IAAI,GAAGvD,CAAO,aAAakD,EAAO,EAAE;AAAA,kBACpC,SAAS,CAAC,CAACG;AAAA,kBACX,eAAW;AAAA,kBACX,UAAUH,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,cAElBA,EAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,MApBKE;AAAA,IAAA,IA0BT,gBAAA3C,EAACkC,GAAQ,MAAR,EAAkC,GAAGW,GAAW,UAAU,CAAC,CAACD,GAC3D,UAAA,gBAAA5C,EAAC,QAAA,EAAM,UAAAyC,EAAO,MAAA,CAAM,KADHE,CAEnB;AAAA,EAEJ,CAAC;AACH,GC3SMI,KAAgB,CACpBpB,GACAqB,GACAC,MACqB;AACrB,MAAIA;AACF,WAAOtB,EAAQ,OAAO,CAACc,MAAWQ,EAAaD,GAAYP,CAAM,CAAC;AAEpE,MAAI,CAACO,EAAY,QAAOrB;AACxB,QAAMuB,IAASF,EAAW,YAAA,EAAc,MAAM,GAAG;AACjD,SAAOrB,EAAQ;AAAA,IAAO,CAACc,MACrBS,EAAO,MAAM,CAACC,OAAWV,EAAO,SAASA,EAAO,OAAO,YAAA,EAAc,SAASU,CAAK,CAAC;AAAA,EAAA;AAExF,GAEaC,KAAqB,CAAC;AAAA,EACjC,SAAAzB;AAAA,EACA,YAAAqB;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAI;AAAA,EACA,UAAA3B;AACF,MAOM,CAACA,KAAY2B,KAAkBA,EAAe,UAAUL,IACnDrB,IAEFoB,GAAcpB,GAASqB,GAAYC,CAAY,GCtB3CK,KAAmB,CAAC;AAAA,EAC/B,sBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,gBAAAH;AAAA,EACA,eAAAI;AACF,MAA8B;AAC5B,QAAM,CAACC,GAAoBC,CAAqB,IAAIC;AAAA,KACjD,OAAOL,KAAyB,WAC7BA,IACAC,KAAqBH,GAAgB,UAAU;AAAA,EAAA;AAWrD,SAAO;AAAA,IACL,mBARA,OAAOE,KAAyB,WAAWA,IAAuBG;AAAA,IASlE,oBAPyB,CAACG,MAAkB;AAC5C,MAAAJ,IAAgBI,CAAK,GACrBF,EAAsBE,CAAK;AAAA,IAC7B;AAAA,EAIE;AAEJ,GChBaC,KAAmBC,GAAkD,CAACC,GAAOC,MAAQ;AAChG,QAAM;AAAA,IACJ,IAAIC;AAAA,IACJ,OAAAzE;AAAA,IACA,SAAAkC;AAAA,IACA,WAAAwC;AAAA,IACA,WAAAjD;AAAA,IACA,YAAAC;AAAA,IACA,aAAAiD;AAAA,IACA,UAAAxE,IAAW;AAAA,IACX,UAAAS,IAAW;AAAA,IACX,UAAAV,IAAW;AAAA,IACX,UAAAE,IAAW;AAAA,IACX,OAAAwE;AAAA,IACA,SAAAnE;AAAA,IACA,UAAAwB,IAAW;AAAA,IACX,gBAAA2B;AAAA,IACA,iBAAAiB,IAAkB,CAAA;AAAA,IAClB,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAzB;AAAA,IACA,YAAA0B;AAAA,IACA,mBAAAnB;AAAA,IACA,eAAAC;AAAA,IACA,eAAAxB;AAAA,IACA,sBAAA2C,IAAuB;AAAA,IACvB,gBAAAnD;AAAA,IACA,CAAC,aAAa,GAAGoD;AAAA,EAAA,IACfb,GAEEc,IAAWC,GAAA,GACXxF,IAAU2E,KAAUY,GACpBpF,IAAY,CAACsF,MAAkBH,IAAa,GAAGA,CAAU,IAAIG,CAAI,KAAK,QACtE7E,IAAU,CAAC,CAACkE,KAAS,CAACnD,GACtBE,IAAe,GAAG7B,CAAO,gBAEzBqB,IAAgBc,IAAW4C,IAAkBjB,IAAiB,CAACA,CAAc,IAAI,CAAA,GAEjF,EAAE,mBAAA4B,GAAmB,oBAAAC,EAAA,IAAuB5B,GAAiB;AAAA,IACjE,sBAAsBqB;AAAA,IACtB,mBAAAnB;AAAA,IACA,gBAAAH;AAAA,IACA,eAAAI;AAAA,EAAA,CACD,GAEK1B,KAAgBqB,GAAmB;AAAA,IACvC,SAAAzB;AAAA,IACA,YAAYsD;AAAA,IACZ,cAAAhC;AAAA,IACA,gBAAAI;AAAA,IACA,UAAA3B;AAAA,EAAA,CACD,GAEKyD,KAAgB3D,GAAoB;AAAA,IACxC,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,eAAAf;AAAA,EAAA,CACD,GAMKwE,KACJD,OAJ6BA,MAAiB,CAACF,KAK3C,CAAC,EAAE,IAAI1D,IAAsB,OAAOE,EAAA,GAA4B,GAAGM,EAAa,IAChFA,IAEAsD,IAAkB,MAAM;AAC5B,UAAMhD,IAAiBV,EAAQ,OAAO,CAACC,MAAM,CAACA,EAAE,QAAQ;AAIxD,QAH2BS,EAAe;AAAA,MAAM,CAACT,MAC/ChB,EAAc,KAAK,CAACiB,MAAMA,EAAE,OAAOD,EAAE,EAAE;AAAA,IAAA,GAEjB;AACtB,YAAM0D,IAAO1E,EAAc,OAAO,CAACgB,MAAMA,EAAE,QAAQ;AACnD,MAAA2C,IAAW,QAAWe,CAAI;AAAA,IAC5B,OAAO;AAEL,YAAMA,IAAO,CAAC,GADW1E,EAAc,OAAO,CAACgB,OAAMA,GAAE,QAAQ,GAC5B,GAAGS,CAAc;AACpD,MAAAkC,IAAW,QAAWe,CAAI;AAAA,IAC5B;AACA,IAAAJ,EAAmB,EAAE;AAAA,EACvB,GAEMK,KAA2B,CAAC9C,MAA2B;AAC3D,QAAIA,EAAO,OAAOlB,IAAsB;AACtC,MAAA8D,EAAA;AACA;AAAA,IACF;AACA,QAAI3D,GAAU;AAEZ,YAAM4D,IADoB1E,EAAc,KAAK,CAACgB,MAAMA,EAAE,OAAOa,EAAO,EAAE,IAElE7B,EAAc,OAAO,CAACgB,MAAMA,EAAE,OAAOa,EAAO,EAAE,IAC9C,CAAC,GAAG7B,GAAe6B,CAAM;AAC7B,MAAA8B,IAAW9B,GAAQ6C,CAAI,GACvBJ,EAAmB,EAAE;AAAA,IACvB;AACE,MAAAX,IAAW9B,GAAQ,CAACA,CAAM,CAAC,GAC3ByC,EAAmBzC,EAAO,KAAK;AAAA,EAEnC,GAEM;AAAA,IACJ,SAAA+C;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,qBAAA3D;AAAA,IACA,QAAA5B;AAAA,IACA,aAAAwF;AAAA,IACA,aAAAC;AAAA,EAAA,IACEC,GAAgB;AAAA,IAClB,IAAIvG;AAAA,IACJ,SAAS6F;AAAA,IACT,cAAcV,MAAgBjF,KAAS;AAAA,IACvC,gBAAgBiC,IAAW,SAAY2B;AAAA,IACvC,UAAA1D;AAAA,IACA,UAAAU;AAAA,IACA,aAAAmE;AAAA,IACA,kBAAAC;AAAA,IACA,sBAAAG;AAAA,IACA,eAAe,CAAClD;AAAA,IAChB,eAAAO;AAAA,IACA,UAAUsD;AAAA,IACT,eAAgBV;AAAA,EAAA,CAClB,GAEKkB,IAAa,CAACC,MAAgC;AACjD,IAAAR,GAAmD,UAAUQ,GAC1D,OAAO/B,KAAQ,aAAYA,EAAI+B,CAAI,IAC9B/B,MAAMA,EAA+C,UAAU+B;AAAA,EAC1E,GAIMC,KAAmC,CAACxD,GAAwBC,MAAkB;AAClF,UAAMsB,IAAQhC,GAAoBS,GAAQC,CAAK;AAC/C,QAAIhB,GAAU;AACZ,YAAMwE,IAAatF,EAAc,KAAK,CAACgB,OAAMA,GAAE,OAAOa,EAAO,EAAE;AAC/D,aAAO,EAAE,GAAGuB,GAAO,UAAUkC,GAAY,iBAAiBA,EAAA;AAAA,IAC5D;AACA,WAAOlC;AAAAA,EACT,GAEMmC,KAAkB,CAAC1D,MAA2B;AAClD,UAAM6C,IAAO1E,EAAc,OAAO,CAACgB,MAAMA,EAAE,OAAOa,EAAO,EAAE;AAC3D,IAAA8B,IAAW9B,GAAQ6C,CAAI;AAAA,EACzB,GAEMc,IAAqB,CAACC,MAAiD;AAC3E,QACE3E,KACA2E,EAAM,QAAQ,eACdA,EAAM,cAAc,UAAU,MAC9BzF,EAAc,SAAS;AAGvB,eAAS0F,IAAI1F,EAAc,SAAS,GAAG0F,KAAK,GAAGA;AAC7C,YAAI,CAAC1F,EAAc0F,CAAC,EAAE,UAAU;AAC9B,UAAAH,GAAgBvF,EAAc0F,CAAC,CAAC;AAChC;AAAA,QACF;AAAA;AAGH,IAAAZ,GAA4D,YAAYW,CAAK;AAAA,EAChF,GAEME,IAAgE,CAACC,MAAM;AAC3E,IAAAtB,EAAmBsB,EAAE,OAAO,KAAK,GAC5BpG,KACHwF,EAAA;AAAA,EAEJ,GAEMa,KAAgE,CAACJ,MAAU;AAC/E,QAAI1G,KAAYU,EAAU;AAE1B,UAAMqG,IAASL,EAAM;AAErB,QACEK,MAAYjB,EAA+C,WAC3DiB,EAAO,QAAQ,QAAQ;AAEvB;AAGF,UAAMC,IAASlB,EAA+C;AAC9D,IAAAkB,GAAO,cAAc,IAAI,WAAW,aAAa,EAAE,SAAS,GAAA,CAAM,CAAC,GACnEA,GAAO,MAAA;AAAA,EACT,GAKMpE,IACJb,KACA,CAAC,CAACD,KACFE,EAAQ,SAAS,KACjBA,EAAQ,MAAM,CAACC,MAAMhB,EAAc,KAAK,CAACiB,MAAMA,EAAE,OAAOD,EAAE,EAAE,CAAC,GAEzDgF,KAAmB1H,EAAGG,GAAe8E,GAAW;AAAA,IACpD,CAAC,GAAG9E,CAAa,YAAY,GAAGO;AAAA,EAAA,CACjC;AAED,SACE,gBAAAE,EAAC,OAAA,EAAI,KAAKiG,GAAY,WAAWa,IAC/B,UAAA;AAAA,IAAA,gBAAA5G;AAAA,MAACV;AAAA,MAAA;AAAA,QACC,SAAAC;AAAA,QACA,eAAc;AAAA,QACd,OAAAE;AAAA,QACA,WAAAC;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,sBAED,OAAA,EAAI,WAAWX,EAAG,GAAGG,CAAa,aAAa,GAG9C,UAAA,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWZ,EAAG,GAAGG,CAAa,wBAAwB;AAAA,UACpD,CAAC,GAAGA,CAAa,6BAA6B,GAAG,CAAC,CAAC6B;AAAA,UACnD,CAAC,GAAG7B,CAAa,gCAAgC,GAAGc;AAAA,UACpD,CAAC,GAAGd,CAAa,gCAAgC,GAAGO;AAAA,UACpD,CAAC,GAAGP,CAAa,gCAAgC,GAAGM;AAAA,UACpD,CAAC,GAAGN,CAAa,gCAAgC,GAAGgB,KAAY,CAACV;AAAA,QAAA,CAClE;AAAA,QACD,OAAOkG;AAAA,QACP,SAASY;AAAA,QAER,UAAA;AAAA,UAAA/E,KAAY,CAACa,KACZ,gBAAAvC;AAAA,YAACW;AAAA,YAAA;AAAA,cACC,eAAAC;AAAA,cACA,WAAAlB;AAAA,cACA,UAAAC;AAAA,cACA,UAAAC;AAAA,cACA,UAAUuG;AAAA,YAAA;AAAA,UAAA;AAAA,UAGd,gBAAAnG;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAI0F;AAAA,cACL,KAAKD;AAAA,cACL,IAAI,GAAGlG,CAAO;AAAA,cACd,eAAaG,EAAU,OAAO;AAAA,cAC9B,WAAW0G;AAAA,cACX,UAAUG;AAAA,cACV,OAAOhE,KAAsB,CAAC0C,IAAoBxD,IAAiBwD;AAAA,cACnE,aAAAb;AAAA,cACA,WAAWlF,EAAG,GAAGG,CAAa,WAAW;AAAA,gBACvC,CAAC,GAAGA,CAAa,mBAAmB,GAAGO;AAAA,cAAA,CACxC;AAAA,cACD,oBAAkBwB;AAAA,cAClB,gBAAc,CAAC,CAACF;AAAA,cAChB,UAAAvB;AAAA,cACA,UAAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAL;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,WAAAP;AAAA,cACA,SAAAQ;AAAA,cACA,UAAAP;AAAA,cACA,UAAAC;AAAA,cACA,SAAAO;AAAA,cACA,QAAAC;AAAA,cACA,iBAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjB,gBAAAJ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd,EAAG,GAAGG,CAAa,WAAW;AAAA,gBACvC,CAAC,GAAGA,CAAa,mBAAmB,GAAGO;AAAA,cAAA,CACxC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACCQ,KACC,gBAAAJ,EAACkC,IAAA,EAAS,GAAGyD,IAAc,WAAWzG,EAAG,GAAGG,CAAa,WAAW,GACjE,UAAAyC,GAAqB;AAAA,MACpB,eAAesD;AAAA,MACf,qBAAqBa;AAAA,MACrB,UAAAvE;AAAA,MACA,SAAAnC;AAAA,MACA,eAAA0C;AAAA,MACA,gBAAAR;AAAA,MACA,eAAAb;AAAA,IAAA,CACD,GACH;AAAA,IAEF,gBAAAZ;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,WAAAC;AAAA,QACA,YAAAC;AAAA,QACA,cAAAC;AAAA,QACA,UAAAxB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAEDkE,GAAiB,cAAc;ACjTxB,MAAM+C,KAAuB,CAAC;AAAA,EACnC,SAAAlF;AAAA,EACA,sBAAAiD;AACF,MAAkC;AAChC,QAAMkC,IAAaC,GAAyB,IAAI,GAC1CC,IAAaD,GAAsC,EAAE,GAErD,CAACE,GAAmBC,CAAoB,IAAItD;AAAA,IAChDgB,IAAuBjD,EAAQ,CAAC,IAAI;AAAA,EAAA,GAGhCwF,IAAuB,CAACC,MAAwC;AACpE,QAAIA,GAAU;AACZ,YAAMC,IAAaD,EAAS,sBAAA,GACtBE,IAAcR,EAAW,SAAS,sBAAA,KAA2B,EAAE,KAAK,GAAG,QAAQ,EAAA;AAErF,OADkBO,EAAW,MAAMC,EAAY,OAAOD,EAAW,SAASC,EAAY,WAEpFF,EAAS,eAAe,EAAE,OAAO,UAAA,CAAW;AAAA,IAEhD;AAAA,EACF;AA0CA,SAAO;AAAA,IACL,mBAAAH;AAAA,IACA,YAAAH;AAAA,IACA,YAAAE;AAAA,IACA,gBA5CqB,CACrBO,GACAxF,MAC+B;AAC/B,YAAMyF,IAAczF,EAAc,OAAO,CAACH,MAAM,CAACA,EAAE,QAAQ;AAC3D,UAAI,CAAC4F,EAAY,OAAQ;AAEzB,YAAMC,IAAeR,IACjBO,EAAY,UAAU,CAAC5F,MAAMA,EAAE,OAAOqF,EAAkB,EAAE,IAC1D;AAEJ,aAAIM,MAAc,cACTC,GAAaC,IAAe,KAAKD,EAAY,MAAM,IAErDA,GAAaC,IAAe,IAAID,EAAY,UAAUA,EAAY,MAAM;AAAA,IACjF;AAAA,IA8BE,iBA5BsB,CAAC/E,MAAuC;AAC9D,MAAAyE,EAAqBzE,IAAS,EAAE,GAAGA,EAAA,IAAW,MAAS,GACnDA,KAAQ0E,EAAqBH,EAAW,QAAQvE,EAAO,EAAE,CAAC;AAAA,IAChE;AAAA,IA0BE,kBAxBuB,CAACA,MAA2B;AACnD,MAAIA,EAAO,OAAOwE,GAAmB,MACnCC,EAAqB,EAAE,GAAGzE,GAAQ,mBAAmB,IAAM;AAAA,IAE/D;AAAA,IAqBE,mBAnBwB,CAACA,GAAwBiF,MAAoC;AACrF,4BAAsB,MAAM;AAE1B,QAAAR,EAAqB,EAAE,GAAGzE,GAAQ,mBADRiF,MAAc,SACa,GACrDP,EAAqBH,EAAW,QAAQvE,EAAO,EAAE,CAAC;AAAA,MACpD,CAAC;AAAA,IACH;AAAA,IAcE,gBAZqB,MAAM;AAC3B,MAAAyE,EAAqB,MAAS;AAAA,IAChC;AAAA,EAUE;AAEJ,GCjFaS,KAAoB,CAACC,GAA6BC,MAAyB;AACtF,QAAMC,IAAqBC;AAAA,IACzB,CAAC1B,MAAsB;AACrB,MAAIuB,KAAW,CAACA,EAAQ,SAASvB,EAAM,MAAc,KACnDwB,EAAA;AAAA,IAEJ;AAAA,IACA,CAACA,GAAUD,CAAO;AAAA,EAAA;AAGpB,EAAAI,GAAU,OACR,SAAS,iBAAiB,aAAaF,CAAkB,GAClD,MAAM;AACX,aAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC9D,IACC,CAACA,CAAkB,CAAC;AACzB,GCyCaG,KAAc,CAAC;AAAA,EAC1B,IAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAxG;AAAA,EACA,cAAA+C;AAAA,EACA,UAAAhD,IAAW;AAAA,EACX,gBAAA2B;AAAA,EACA,iBAAAiB,IAAkB,CAAA;AAAA,EAClB,UAAAC;AAAA,EACA,cAAAtB;AAAA,EACA,YAAYM;AAAA,EACZ,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAxB;AAAA,EACA,sBAAA2C,IAAuB;AAAA,EACvB,aAAAJ,IAAc;AAAA,EACd,kBAAAC;AAAA,EACA,UAAA9E,IAAW;AAAA,EACX,UAAAU,IAAW;AAAA,EACX,CAAC,gBAAgBwE;AACnB,MAA4C;AAC1C,QAAMuD,IAAaD,MAAY,YACzBE,KAAWtD,GAAA,GAGXS,KAAUuB,GAA8B,IAAI,GAC5CuB,IAAavB,GAAiC,IAAI,GAClDtB,IAAWsB,GAAgC,IAAI,GAG/CwB,IAAY1B,GAAqB,EAAE,SAAAlF,GAAS,sBAAAiD,GAAsB,GAClE,EAAE,mBAAAK,GAAmB,oBAAAC,EAAA,IAAuB5B,GAAiB;AAAA,IACjE,sBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,gBAAAH;AAAA,IACA,eAAAI;AAAA,EAAA,CACD,GAGK,CAACrD,GAAQoI,CAAS,IAAI5E,GAAS,EAAK,GAEpC6E,IAAe,MAAM;AACzB,IAAAD,EAAU,EAAK,GACfD,EAAU,eAAA;AAAA,EACZ;AAEA,EAAAZ,GAAkBnC,GAAQ,SAASiD,CAAY;AAE/C,QAAM7C,IAAc,CAAC,EAAE,WAAA8B,QAAqD;AAC1E,IAAAc,EAAU,EAAI;AACd,UAAME,IAAUhH,IAAW,SAAY2B;AACvC,IAAIqF,KACFH,EAAU,kBAAkBG,GAAShB,CAAS;AAAA,EAElD,GAGMiB,IAAmBjH,IAAW4C,IAAkBjB,IAAiB,CAACA,CAAc,IAAI,CAAA,GAEpFtB,IAAgBqG,IAClBhF,GAAmB;AAAA,IACjB,SAAAzB;AAAA,IACA,YAAYsD;AAAA,IACZ,cAAAhC;AAAA,IACA,gBAAAI;AAAA,IACA,UAAA3B;AAAA,EAAA,CACD,IACDC,GAEEiH,IAAcxI,MAAW,CAAC,CAAC2B,EAAc,UAAU,CAAC,CAACE,IAGrDvC,IAAY,CAACsF,MAAkBH,IAAa,GAAGA,CAAU,IAAIG,CAAI,KAAK,QAGtE6D,IAAe,CAACpG,MAAuC;AAC3D,QAAI,GAACA,KAAUA,EAAO;AAEtB,UAAIf,GAAU;AAEZ,cAAM4D,KADoBqD,EAAiB,KAAK,CAAC/G,MAAMA,EAAE,OAAOa,EAAO,EAAE,IAErEkG,EAAiB,OAAO,CAAC/G,MAAMA,EAAE,OAAOa,EAAO,EAAE,IACjD,CAAC,GAAGkG,GAAkBlG,CAAM;AAChC,QAAA8B,IAAW9B,GAAQ6C,EAAI,GACnB8C,MACFlD,EAAmB,EAAE,GACrBO,EAAS,SAAS,MAAA;AAAA,MAEtB;AACE,QAAAlB,IAAW9B,GAAQ,CAACA,CAAM,CAAC,GACvB2F,KACFlD,EAAmBzC,EAAO,KAAK,GAEjCgG,EAAA,IACCL,IAAa3C,IAAW6C,GAAY,SAAS,MAAA;AAAA,EAElD,GAGMQ,IAAsB,CAACvB,MAAuC;AAClE,IAAKqB,KAAahD,EAAY,EAAE,WAAW,YAAY;AACvD,UAAMN,IAAOiD,EAAU,eAAehB,GAAWxF,CAAa;AAC9D,IAAAwG,EAAU,gBAAgBjD,CAAI;AAAA,EAChC,GAGMyD,IAAgB,CAAC1C,MAA+B;AACpD,QAAI,EAAA1G,KAAYU;AAEhB,cAAQgG,EAAM,KAAA;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AACH,UAAAA,EAAM,eAAA,GACNyC,EAAoBzC,EAAM,GAAG;AAC7B;AAAA,QACF,KAAK,SAAS;AACZ,UAAAA,EAAM,eAAA,GACFuC,KAAeL,EAAU,oBAC3BM,EAAaN,EAAU,iBAAiB,IAC9BK,KACVhD,EAAY,EAAE,WAAW,YAAY;AAEvC;AAAA,QACF;AAAA,QACA,KAAK,KAAK;AACR,UAAKwC,MACH/B,EAAM,eAAA,GACFuC,KAAeL,EAAU,oBAC3BM,EAAaN,EAAU,iBAAiB,IAC9BK,KACVhD,EAAY,EAAE,WAAW,YAAY;AAGzC;AAAA,QACF;AAAA,QACA,KAAK;AACH,UAAAS,EAAM,eAAA,GACNoC,EAAA;AACA;AAAA,QACF,KAAK;AACH,UAAAA,EAAA;AACA;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAIL,KAAYK,EAAA;AAChB;AAAA,MAAA;AAAA,EAEN,GAGMlC,KAAgE,CAACC,MAAM;AAC3E,IAAAtB,EAAmBsB,EAAE,OAAO,KAAK,GACjC+B,EAAU,eAAA,GACLnI,KAAQwF,EAAY,EAAE,WAAW,YAAY;AAAA,EACpD,GAEMoD,KAAuB,MAAM;AACjC,IAAIrJ,KAAYU,MAChBD,IAASqI,MAAiB7C,EAAY,EAAE,WAAW,SAAS;AAAA,EAC9D,GAEMqD,KAAmB,MAAM;AAC7B,IAAI,CAAC7I,KAAUoE,KAAe,CAAC7E,KAAY,CAACU,KAC1CuF,EAAY,EAAE,WAAW,YAAY,GAEvCH,EAAS,SAAS,OAAA;AAAA,EACpB,GAEMyD,KAAkB,MAAM;AAC5B,eAAW,MAAM;AACf,YAAMC,IAAW,SAAS;AAK1B,MACEA,MAAa,SAAS,QACtB,CAAC1D,EAAS,SAAS,SAAS0D,CAAQ,KACpC,CAACZ,EAAU,WAAW,SAAS,SAASY,CAAQ,KAChD,CAAC3D,GAAQ,SAAS,SAAS2D,CAAQ,MAEnCV,EAAA,GACIL,KAAc,CAAC1G,KACjBwD,EAAmB7B,IAAiBA,EAAe,QAAQ,EAAE;AAAA,IAGnE,CAAC;AAAA,EACH,GAGM+F,IAAqB,MAAM;AAC/B,IAAIzJ,KAAYU,MAChBD,IAASqI,MAAiB7C,EAAY,EAAE,WAAW,SAAS;AAAA,EAC9D,GAEMyD,KAAuE,CAAChD,MAAU;AACtF,QAAI1G,KAAYU,EAAU;AAE1B,UAAMiJ,IAAiBjD,EAAM,OAAuB,QAAQ,QAAQ;AACpE,IAAIiD,KAAiBA,MAAkBhB,EAAW,WAIlDc,EAAA;AAAA,EACF,GAEMG,KAAqB,MAAM;AAC/B,IAAI,CAACnJ,KAAUoE,KAAe,CAAC7E,KAAY,CAACU,KAC1CuF,EAAY,EAAE,WAAW,YAAY;AAAA,EAEzC,GAGM4D,IAAY,GAAGtB,CAAE,YACjBuB,IAAsB,CAAChH,MAA2B,GAAGyF,CAAE,iBAAiBzF,EAAO,EAAE,IACjFiH,KAAa,qBAAqBrB,GAAS,QAAQ,MAAM,EAAE,CAAC,IAC5DxC,KAAc,EAAE,YAAA6D,GAAA,GAChBC,IAAwDvB,IAC1D,OACA;AAAA,IACE,SAASiB;AAAA,EAAA,GAITO,IAAqB7B;AAAA,IACzB,CAAC/B,MAAkC;AAEjC,UADCuC,EAAU,WAA+D,UAAUvC,GAChFA,KAAQ,OAAOA,EAAK,eAAgB;AACtC,YAAI;AACF,UAAAA,EAAK,YAAA;AAAA,QACP,QAAQ;AAAA,QAER;AAAA,IAEJ;AAAA,IACA,CAACuC,EAAU,UAAU;AAAA,EAAA,GAGjB5C,IAAe;AAAA,IACnB,cAAcjB;AAAA,IACd,iBAAiBkE;AAAA,IACjB,eAAelJ,EAAU,SAAS;AAAA,IAClC,IAAI8J;AAAA,IACJ,KAAKI;AAAA,IACL,cAAc,MAAMrB,EAAU,eAAA;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO;AAAA,MACL,GAAI9D,IACA;AAAA,QACE,WACE,OAAOA,KAAqB,WAAW,GAAGA,CAAgB,OAAOA;AAAA,MAAA,IAErE,CAAA;AAAA,MACJ,gBAAgBiF;AAAA,IAAA;AAAA,EAClB,GAGI1H,IAAsB,CAACS,GAAwBC,MAAoC;AACvF,UAAMwD,KAAayC,EAAiB,KAAK,CAAC/G,MAAMA,EAAE,OAAOa,EAAO,EAAE,GAC5D,EAAE,mBAAAwE,MAAsBsB,GAExBsB,MACHpH,EAAO,OAAOwE,GAAmB,MAC/BrC,KAAwB,CAACqC,KAAqBvE,MAAU,MAC3D,CAACuE,GAAmB;AAEtB,WAAO;AAAA,MACL,eAAevH,EAAU,gBAAgB+C,EAAO,EAAE,EAAE;AAAA,MACpD,IAAIgH,EAAoBhH,CAAM;AAAA,MAC9B,KAAKA,EAAO;AAAA,MACZ,aAAa,MAAM8F,EAAU,iBAAiB9F,CAAM;AAAA,MACpD,WAAW,MAAMoG,EAAapG,CAAM;AAAA,MACpC,KAAK,CAACqH,MAAO;AACX,QAAIA,MAAIvB,EAAU,WAAW,QAAQ9F,EAAO,EAAE,IAAIqH;AAAA,MACpD;AAAA,MACA,UAAU;AAAA,MACV,UAAU5D;AAAA,MACV,UAAUzD,EAAO;AAAA,MACjB,aAAAoH;AAAA,MACA,SAASpH,EAAO,OAAOwE,GAAmB,MAAM,CAAC,CAACA,GAAmB;AAAA,MACrE,iBAAiBf;AAAA,IAAA;AAAA,EAErB,GAEM6D,KAAwC3B,IAC1C,KACA;AAAA,IACE,KAAKE;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,iBAAiBM;AAAA,IACjB,iBAAiBY;AAAA,IACjB,iBAAiB7J;AAAA,IACjB,eAAeD,EAAU,SAAS;AAAA,IAClC,IAAI,GAAGwI,CAAE;AAAA,IACT,WAAWa;AAAA,IACX,SAASQ;AAAA,IACT,UAAA5J;AAAA,IACA,UAAUA,IAAW,KAAK;AAAA,IAC1B,OAAOkG;AAAA,EAAA,GAGPH,KAA6C0C,IAC/C;AAAA,IACE,KAAK3C;AAAA,IACL,MAAM;AAAA,IACN,qBAAqB;AAAA,IACrB,iBAAiBmD;AAAA,IACjB,iBAAiBY;AAAA,IACjB,yBAAyBjB,EAAU,oBAC/BkB,EAAoBlB,EAAU,iBAAiB,IAC/C;AAAA,IACJ,eAAe7I,EAAU,OAAO;AAAA,IAChC,cAAc;AAAA,IACd,IAAI,GAAGwI,CAAE;AAAA,IACT,MAAM;AAAA,IACN,OAAOjD;AAAA,IACP,UAAUsB;AAAA,IACV,aAAayC;AAAA,IACb,SAASC;AAAA,IACT,QAAQC;AAAA,IACR,WAAWH;AAAA,IACX,UAAApJ;AAAA,IACA,UAAAU;AAAA,EAAA,IAEF;AAEJ,SAAO;AAAA,IACL,SAAAmF;AAAA,IACA,uBAAAmE;AAAA,IACA,cAAAI;AAAA,IACA,YAAArE;AAAA,IACA,cAAAC;AAAA,IACA,qBAAA3D;AAAA,IACA,eAAAD;AAAA,IACA,QAAQ6G;AAAA,IACR,mBAAmBL,EAAU;AAAA,IAC7B,eAAeI;AAAA,IACf,aAAA9C;AAAA,EAAA;AAEJ,GC/XamE,KAAiBjG,GAAgD,CAACC,GAAOC,MAAQ;AAC5F,QAAM;AAAA,IACJ,IAAIC;AAAA,IACJ,OAAAzE;AAAA,IACA,SAAAkC;AAAA,IACA,WAAAwC;AAAA,IACA,WAAAjD;AAAA,IACA,YAAAC;AAAA,IACA,aAAAiD;AAAA,IACA,UAAAxE,IAAW;AAAA,IACX,UAAAS,IAAW;AAAA,IACX,UAAAV,IAAW;AAAA,IACX,UAAAE,IAAW;AAAA,IACX,OAAAwE,IAAQ;AAAA,IACR,SAAAnE,IAAU;AAAA,IACV,UAAAwB,IAAW;AAAA,IACX,gBAAA2B;AAAA,IACA,iBAAAiB,IAAkB,CAAA;AAAA,IAClB,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAjD;AAAA,IACA,CAAC,aAAa,GAAGoD;AAAA,EAAA,IACfb,GAEEc,IAAWC,GAAA,GACXxF,IAAU2E,KAAUY,GACpBpF,IAAY,CAACsF,MAAkBH,IAAa,GAAGA,CAAU,IAAIG,CAAI,KAAK,QACtE7E,IAAU,CAAC,CAACkE,KAAS,CAACnD,GACtBE,IAAe,GAAG7B,CAAO,gBAIzB0K,IAAwBvI,IAAW4C,IAAkBjB,IAAiB,CAACA,CAAc,IAAI,CAAA,GAEzF8B,IAAgB3D,GAAoB;AAAA,IACxC,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,eAAesI;AAAA,EAAA,CAChB,GAEK5E,IAAkB,MAAM;AAC5B,UAAMhD,IAAiBV,EAAQ,OAAO,CAACC,MAAM,CAACA,EAAE,QAAQ;AAIxD,QAH2BS,EAAe;AAAA,MAAM,CAACT,MAC/CqI,EAAsB,KAAK,CAACpI,MAAMA,EAAE,OAAOD,EAAE,EAAE;AAAA,IAAA,GAEzB;AAEtB,YAAM0D,IAAO2E,EAAsB,OAAO,CAACrI,MAAMA,EAAE,QAAQ;AAC3D,MAAA2C,IAAW,QAAWe,CAAI;AAAA,IAC5B,OAAO;AAGL,YAAMA,IAAO,CAAC,GADW2E,EAAsB,OAAO,CAACrI,OAAMA,GAAE,QAAQ,GACpC,GAAGS,CAAc;AACpD,MAAAkC,IAAW,QAAWe,CAAI;AAAA,IAC5B;AAAA,EACF,GAIM4E,IAAmB,CACvBC,GACAC,MACG;AACH,QAAID,GAAe,OAAO5I,IAAsB;AAC9C,MAAA8D,EAAA;AACA;AAAA,IACF;AACA,IAAAd,IAAW4F,GAAeC,CAAY;AAAA,EACxC,GAEMC,IAAclF,IAChB,CAAC,EAAE,IAAI5D,IAAsB,OAAOE,EAAA,GAA4B,GAAGE,CAAO,IAC1EA,GAEE2I,IAAWrC,GAAY;AAAA,IAC3B,IAAI1I;AAAA,IACJ,SAAS;AAAA,IACT,SAAS8K;AAAA,IACT,cAAc3F,MAAgBjF,KAAS;AAAA,IACvC,UAAAiC;AAAA,IACA,gBAAA2B;AAAA,IACA,iBAAAiB;AAAA,IACA,UAAU4F;AAAA,IACV,aAAA1F;AAAA,IACA,kBAAAC;AAAA,IACA,UAAA9E;AAAA,IACA,UAAAU;AAAA,IACC,eAAgBwE;AAAA,EAAA,CAClB,GAEKkB,IAAa,CAACC,MAAgC;AACjD,IAAAsE,EAAS,QAAmD,UAAUtE,GACnE,OAAO/B,KAAQ,aAAYA,EAAI+B,CAAI,IAC9B/B,MAAMA,EAA+C,UAAU+B;AAAA,EAC1E,GAEM;AAAA,IACJ,uBAAA2D;AAAA,IACA,cAAAI;AAAA,IACA,cAAApE;AAAA,IACA,qBAAA3D;AAAA,IACA,eAAAD;AAAA,IACA,QAAA3B;AAAA,IACA,eAAAQ;AAAA,IACA,aAAAiF;AAAA,EAAA,IACEyE,GAEEC,KAAqB;AAAA,IACzB,GAAIR;AAAA,EAAA;AAEN,SAAOQ,GAAmB;AAE1B,QAAMpE,IAAkB,CAAC1D,MAA2B;AAClD,UAAM6C,IAAO1E,EAAc,OAAO,CAACgB,MAAMA,EAAE,OAAOa,EAAO,EAAE;AAC3D,IAAA8B,IAAW9B,GAAQ6C,CAAI;AAAA,EACzB,GAKM/C,IACJb,KACA,CAAC,CAACD,KACFE,EAAQ,SAAS,KACjBA,EAAQ,MAAM,CAACC,MAAMhB,EAAc,KAAK,CAACiB,MAAMA,EAAE,OAAOD,EAAE,EAAE,CAAC,GAEzD4I,KAAe9I,IACjBa,IACEd,IACAb,EAAc,WAAW,KACzBwD,KAAe,KAEjBf,GAAgB,SAASe,KAAe,IAEtCwC,KAAmB1H,EAAGG,GAAe8E,GAAW;AAAA,IACpD,CAAC,GAAG9E,CAAa,YAAY,GAAGO;AAAA,EAAA,CACjC;AAED,SACE,gBAAAE,EAAC,OAAA,EAAI,KAAKiG,GAAY,WAAWa,IAC/B,UAAA;AAAA,IAAA,gBAAA5G;AAAA,MAACV;AAAA,MAAA;AAAA,QACC,SAAAC;AAAA,QACA,eAAc;AAAA,QACd,OAAAE;AAAA,QACA,WAAAC;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,sBAED,OAAA,EAAI,WAAWX,EAAG,GAAGG,CAAa,aAAa,GAC9C,UAAA,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAI6J;AAAA,QACL,WAAWzK,EAAG,GAAGG,CAAa,uBAAuB;AAAA,UACnD,CAAC,GAAGA,CAAa,4BAA4B,GAAG,CAAC,CAAC6B;AAAA,UAClD,CAAC,GAAG7B,CAAa,+BAA+B,GAAGc;AAAA,UACnD,CAAC,GAAGd,CAAa,+BAA+B,GAAGO;AAAA,UACnD,CAAC,GAAGP,CAAa,+BAA+B,GAAGM;AAAA,UACnD,CAAC,GAAGN,CAAa,+BAA+B,GAAGgB,KAAY,CAACV;AAAA,UAChE,CAAC,GAAGN,CAAa,+BAA+B,GAC9CqC,KAAYd,EAAc,SAAS,KAAK,CAAC2B;AAAA,QAAA,CAC5C;AAAA,QACD,OAAOsD;AAAA,QAEN,UAAA;AAAA,UAAAnE,KAAY,CAACa,KACZ,gBAAAvC;AAAA,YAACW;AAAA,YAAA;AAAA,cACC,eAAAC;AAAA,cACA,WAAAlB;AAAA,cACA,UAAAC;AAAA,cACA,UAAAC;AAAA,cACA,UAAUuG;AAAA,cACV,UAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAGZ,gBAAAnG;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAGuK;AAAA,cACJ,WAAWrL,EAAG,GAAGG,CAAa,aAAa;AAAA,gBACzC,CAAC,GAAGA,CAAa,qBAAqB,GAAGc;AAAA,gBACzC,CAAC,GAAGd,CAAa,qBAAqB,GAAGO;AAAA,gBACzC,CAAC,GAAGP,CAAa,qBAAqB,GAAGM;AAAA,gBACzC,CAAC,GAAGN,CAAa,qBAAqB,GAAGgB,KAAY,CAACV;AAAA,gBACtD,CAAC,GAAGN,CAAa,wBAAwB,GAAG,CAACuB,EAAc;AAAA,cAAA,CAC5D;AAAA,cACD,oBAAkBQ;AAAA,cAElB,UAAA,gBAAApB,EAAC,UAAK,WAAWd,EAAG,GAAGG,CAAa,gBAAgB,GAAI,UAAAmL,GAAA,CAAa;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvE,gBAAAxK;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,WAAAP;AAAA,cACA,SAAAQ;AAAA,cACA,UAAAP;AAAA,cACA,UAAAC;AAAA,cACA,SAAAO;AAAA,cACA,QAAAC;AAAA,cACA,UAAAC;AAAA,cACA,iBAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjB,gBAAAL;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd,EAAG,GAAGG,CAAa,WAAW;AAAA,gBACvC,CAAC,GAAGA,CAAa,mBAAmB,GAAGO;AAAA,cAAA,CACxC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACCQ,MACC,gBAAAJ,EAACkC,IAAA,EAAS,GAAGyD,IAAc,WAAWzG,EAAG,GAAGG,CAAa,WAAW,GACjE,UAAAyC,GAAqB;AAAA,MACpB,eAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,UAAAN;AAAA,MACA,SAAAnC;AAAA,MACA,gBAAAkC;AAAA,MACA,eAAAb;AAAA,IAAA,CACD,GACH;AAAA,IAEF,gBAAAZ;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,WAAAC;AAAA,QACA,YAAAC;AAAA,QACA,cAAAC;AAAA,QACA,UAAAxB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAEDoK,GAAe,cAAc;AC/OtB,MAAMS,KAAW1G,GAA0C,CAACC,GAAOC,MACpED,EAAM,WACD,gBAAAhE,EAAC8D,IAAA,EAAiB,KAAAG,GAAW,GAAID,EAAA,CAAiC,IAGpE,gBAAAhE,EAACgK,IAAA,EAAe,KAAA/F,GAAW,GAAID,EAAA,CAA+B,CACtE;AAEDyG,GAAS,cAAc;"}
@@ -1,2 +0,0 @@
1
- "use strict";const s=require("react/jsx-runtime"),o=require("react"),p=require("./bind-DeUYJ6m9.js"),N=require("./checkmark.es-lYntWFA3.js"),$=require("./paragraph-BsI53OR0.js"),m={"purpur-listbox":"_purpur-listbox_l0zrf_1","purpur-listbox-item":"_purpur-listbox-item_l0zrf_15","purpur-listbox-item--hovered":"_purpur-listbox-item--hovered_l0zrf_29","purpur-listbox-item--highlighted":"_purpur-listbox-item--highlighted_l0zrf_37","purpur-listbox-item--noninteractive":"_purpur-listbox-item--noninteractive_l0zrf_41","purpur-listbox-item--disabled":"_purpur-listbox-item--disabled_l0zrf_44","purpur-listbox-item__icon":"_purpur-listbox-item__icon_l0zrf_51"},u=p.c.bind(m),e="purpur-listbox",c=o.forwardRef((i,t)=>{const{disabled:r,highlighted:d,hovered:x,selected:l,children:a,className:b,noninteractive:_,hideSelectedIcon:h,...f}=i,g=u(`${e}-item`,b,{[`${e}-item--highlighted`]:d,[`${e}-item--selected`]:l,[`${e}-item--hovered`]:x,[`${e}-item--disabled`]:r,[`${e}-item--noninteractive`]:_});return s.jsxs("li",{...f,ref:t,className:g,"aria-selected":!!l,role:"option","aria-disabled":!!r,children:[typeof a=="string"?s.jsx($.Paragraph,{children:a}):a,l&&!h&&s.jsx(N.a,{size:"xs",className:u(`${e}-item__icon`)})]})}),v=i=>o.isValidElement(i)&&i?.type===c;c.displayName="ListBoxItem";const z=p.c.bind(m),y="purpur-listbox",n=o.forwardRef(({children:i,...t},r)=>s.jsx("ul",{...t,ref:r,className:z(y,t.className),role:"listbox",children:o.Children.toArray(i).filter(v)}));n.Item=c;n.displayName="ListBox";exports.Listbox=n;
2
- //# sourceMappingURL=listbox-COBHLRtB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listbox-COBHLRtB.js","sources":["../../../components/listbox/src/listbox-item.tsx","../../../components/listbox/src/listbox.tsx"],"sourcesContent":["import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./listbox.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-listbox\";\n\nexport type ListboxItemProps = Omit<BaseProps<\"li\">, \"role\"> & {\n highlighted?: boolean;\n hovered?: boolean;\n key?: string;\n selected?: boolean;\n disabled?: boolean;\n noninteractive?: boolean;\n /** When true, hides the built-in checkmark icon while preserving `aria-selected`. */\n hideSelectedIcon?: boolean;\n};\n\nexport const ListboxItem = forwardRef<HTMLLIElement, ListboxItemProps>((props, ref) => {\n const {\n disabled,\n highlighted,\n hovered,\n selected,\n children,\n className,\n noninteractive,\n hideSelectedIcon,\n ...liProps\n } = props;\n\n const classes = cx(`${rootClassName}-item`, className, {\n [`${rootClassName}-item--highlighted`]: highlighted,\n [`${rootClassName}-item--selected`]: selected,\n [`${rootClassName}-item--hovered`]: hovered,\n [`${rootClassName}-item--disabled`]: disabled,\n [`${rootClassName}-item--noninteractive`]: noninteractive,\n });\n\n return (\n <li\n {...liProps}\n ref={ref}\n className={classes}\n aria-selected={!!selected}\n role=\"option\"\n aria-disabled={!!disabled}\n >\n {typeof children === \"string\" ? <Paragraph>{children}</Paragraph> : children}\n {selected && !hideSelectedIcon && (\n <IconCheckmark size=\"xs\" className={cx(`${rootClassName}-item__icon`)} />\n )}\n </li>\n );\n});\n\nexport const isListboxItem = (child?: ReactNode): child is ReactElement<ListboxItemProps> =>\n isValidElement<ListboxItemProps>(child) && child?.type === ListboxItem;\n\nListboxItem.displayName = \"ListBoxItem\";\n","import React, {\n Children,\n forwardRef,\n type ForwardRefExoticComponent,\n type PropsWithoutRef,\n} from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./listbox.module.scss\";\nimport { isListboxItem, ListboxItem } from \"./listbox-item\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-listbox\";\n\nexport type ListboxProps = Omit<BaseProps<\"ul\">, \"role\"> & {\n \"aria-label\": NonNullable<BaseProps<\"ul\">[\"aria-label\"]>;\n \"aria-expanded\": NonNullable<BaseProps<\"ul\">[\"aria-expanded\"]>;\n};\n\ntype ListboxStatic = {\n Item: typeof ListboxItem;\n};\n\ntype ListboxComponent = ForwardRefExoticComponent<PropsWithoutRef<ListboxProps>> & ListboxStatic;\n\nexport const Listbox = forwardRef<HTMLUListElement, ListboxProps>(\n ({ children, ...listboxProps }, ref) => (\n <ul\n {...listboxProps}\n ref={ref}\n className={cx(rootClassName, listboxProps.className)}\n role=\"listbox\"\n >\n {Children.toArray(children).filter(isListboxItem)}\n </ul>\n )\n) as ListboxComponent;\n\nexport type { ListboxItemProps } from \"./listbox-item\";\nListbox.Item = ListboxItem;\nListbox.displayName = \"ListBox\";\n"],"names":["cx","c","styles","rootClassName","ListboxItem","forwardRef","props","ref","disabled","highlighted","hovered","selected","children","className","noninteractive","hideSelectedIcon","liProps","classes","jsxs","jsx","Paragraph","IconCheckmark","isListboxItem","child","isValidElement","Listbox","listboxProps","Children"],"mappings":"ipBAQMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAElBC,EAAgB,iBAaTC,EAAcC,EAAAA,WAA4C,CAACC,EAAOC,IAAQ,CACrF,KAAM,CACJ,SAAAC,EACA,YAAAC,EACA,QAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,GAAGC,CAAA,EACDV,EAEEW,EAAUjB,EAAG,GAAGG,CAAa,QAASU,EAAW,CACrD,CAAC,GAAGV,CAAa,oBAAoB,EAAGM,EACxC,CAAC,GAAGN,CAAa,iBAAiB,EAAGQ,EACrC,CAAC,GAAGR,CAAa,gBAAgB,EAAGO,EACpC,CAAC,GAAGP,CAAa,iBAAiB,EAAGK,EACrC,CAAC,GAAGL,CAAa,uBAAuB,EAAGW,CAAA,CAC5C,EAED,OACEI,EAAAA,KAAC,KAAA,CACE,GAAGF,EACJ,IAAAT,EACA,UAAWU,EACX,gBAAe,CAAC,CAACN,EACjB,KAAK,SACL,gBAAe,CAAC,CAACH,EAEhB,SAAA,CAAA,OAAOI,GAAa,SAAWO,EAAAA,IAACC,EAAAA,UAAA,CAAW,SAAAR,EAAS,EAAeA,EACnED,GAAY,CAACI,GACZI,MAACE,EAAAA,EAAA,CAAc,KAAK,KAAK,UAAWrB,EAAG,GAAGG,CAAa,aAAa,CAAA,CAAG,CAAA,CAAA,CAAA,CAI/E,CAAC,EAEYmB,EAAiBC,GAC5BC,EAAAA,eAAiCD,CAAK,GAAKA,GAAO,OAASnB,EAE7DA,EAAY,YAAc,cCpD1B,MAAMJ,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAElBC,EAAgB,iBAaTsB,EAAUpB,EAAAA,WACrB,CAAC,CAAE,SAAAO,EAAU,GAAGc,CAAA,EAAgBnB,IAC9BY,EAAAA,IAAC,KAAA,CACE,GAAGO,EACJ,IAAAnB,EACA,UAAWP,EAAGG,EAAeuB,EAAa,SAAS,EACnD,KAAK,UAEJ,SAAAC,EAAAA,SAAS,QAAQf,CAAQ,EAAE,OAAOU,CAAa,CAAA,CAAA,CAGtD,EAGAG,EAAQ,KAAOrB,EACfqB,EAAQ,YAAc"}
@@ -1,66 +0,0 @@
1
- import { jsxs as N, jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as a, isValidElement as $, Children as v } from "react";
3
- import { c as n } from "./bind-CU-R61T-.mjs";
4
- import { a as z } from "./checkmark.es-DdgIZN2R.mjs";
5
- import { P as y } from "./paragraph-Ci50OF1u.mjs";
6
- const u = {
7
- "purpur-listbox": "_purpur-listbox_l0zrf_1",
8
- "purpur-listbox-item": "_purpur-listbox-item_l0zrf_15",
9
- "purpur-listbox-item--hovered": "_purpur-listbox-item--hovered_l0zrf_29",
10
- "purpur-listbox-item--highlighted": "_purpur-listbox-item--highlighted_l0zrf_37",
11
- "purpur-listbox-item--noninteractive": "_purpur-listbox-item--noninteractive_l0zrf_41",
12
- "purpur-listbox-item--disabled": "_purpur-listbox-item--disabled_l0zrf_44",
13
- "purpur-listbox-item__icon": "_purpur-listbox-item__icon_l0zrf_51"
14
- }, m = n.bind(u), i = "purpur-listbox", p = a((e, t) => {
15
- const {
16
- disabled: r,
17
- highlighted: d,
18
- hovered: x,
19
- selected: s,
20
- children: o,
21
- className: _,
22
- noninteractive: b,
23
- hideSelectedIcon: h,
24
- ...f
25
- } = e, g = m(`${i}-item`, _, {
26
- [`${i}-item--highlighted`]: d,
27
- [`${i}-item--selected`]: s,
28
- [`${i}-item--hovered`]: x,
29
- [`${i}-item--disabled`]: r,
30
- [`${i}-item--noninteractive`]: b
31
- });
32
- return /* @__PURE__ */ N(
33
- "li",
34
- {
35
- ...f,
36
- ref: t,
37
- className: g,
38
- "aria-selected": !!s,
39
- role: "option",
40
- "aria-disabled": !!r,
41
- children: [
42
- typeof o == "string" ? /* @__PURE__ */ l(y, { children: o }) : o,
43
- s && !h && /* @__PURE__ */ l(z, { size: "xs", className: m(`${i}-item__icon`) })
44
- ]
45
- }
46
- );
47
- }), L = (e) => $(e) && e?.type === p;
48
- p.displayName = "ListBoxItem";
49
- const I = n.bind(u), C = "purpur-listbox", c = a(
50
- ({ children: e, ...t }, r) => /* @__PURE__ */ l(
51
- "ul",
52
- {
53
- ...t,
54
- ref: r,
55
- className: I(C, t.className),
56
- role: "listbox",
57
- children: v.toArray(e).filter(L)
58
- }
59
- )
60
- );
61
- c.Item = p;
62
- c.displayName = "ListBox";
63
- export {
64
- c as L
65
- };
66
- //# sourceMappingURL=listbox-DG4KmQP_.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listbox-DG4KmQP_.mjs","sources":["../../../components/listbox/src/listbox-item.tsx","../../../components/listbox/src/listbox.tsx"],"sourcesContent":["import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./listbox.module.scss\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-listbox\";\n\nexport type ListboxItemProps = Omit<BaseProps<\"li\">, \"role\"> & {\n highlighted?: boolean;\n hovered?: boolean;\n key?: string;\n selected?: boolean;\n disabled?: boolean;\n noninteractive?: boolean;\n /** When true, hides the built-in checkmark icon while preserving `aria-selected`. */\n hideSelectedIcon?: boolean;\n};\n\nexport const ListboxItem = forwardRef<HTMLLIElement, ListboxItemProps>((props, ref) => {\n const {\n disabled,\n highlighted,\n hovered,\n selected,\n children,\n className,\n noninteractive,\n hideSelectedIcon,\n ...liProps\n } = props;\n\n const classes = cx(`${rootClassName}-item`, className, {\n [`${rootClassName}-item--highlighted`]: highlighted,\n [`${rootClassName}-item--selected`]: selected,\n [`${rootClassName}-item--hovered`]: hovered,\n [`${rootClassName}-item--disabled`]: disabled,\n [`${rootClassName}-item--noninteractive`]: noninteractive,\n });\n\n return (\n <li\n {...liProps}\n ref={ref}\n className={classes}\n aria-selected={!!selected}\n role=\"option\"\n aria-disabled={!!disabled}\n >\n {typeof children === \"string\" ? <Paragraph>{children}</Paragraph> : children}\n {selected && !hideSelectedIcon && (\n <IconCheckmark size=\"xs\" className={cx(`${rootClassName}-item__icon`)} />\n )}\n </li>\n );\n});\n\nexport const isListboxItem = (child?: ReactNode): child is ReactElement<ListboxItemProps> =>\n isValidElement<ListboxItemProps>(child) && child?.type === ListboxItem;\n\nListboxItem.displayName = \"ListBoxItem\";\n","import React, {\n Children,\n forwardRef,\n type ForwardRefExoticComponent,\n type PropsWithoutRef,\n} from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./listbox.module.scss\";\nimport { isListboxItem, ListboxItem } from \"./listbox-item\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-listbox\";\n\nexport type ListboxProps = Omit<BaseProps<\"ul\">, \"role\"> & {\n \"aria-label\": NonNullable<BaseProps<\"ul\">[\"aria-label\"]>;\n \"aria-expanded\": NonNullable<BaseProps<\"ul\">[\"aria-expanded\"]>;\n};\n\ntype ListboxStatic = {\n Item: typeof ListboxItem;\n};\n\ntype ListboxComponent = ForwardRefExoticComponent<PropsWithoutRef<ListboxProps>> & ListboxStatic;\n\nexport const Listbox = forwardRef<HTMLUListElement, ListboxProps>(\n ({ children, ...listboxProps }, ref) => (\n <ul\n {...listboxProps}\n ref={ref}\n className={cx(rootClassName, listboxProps.className)}\n role=\"listbox\"\n >\n {Children.toArray(children).filter(isListboxItem)}\n </ul>\n )\n) as ListboxComponent;\n\nexport type { ListboxItemProps } from \"./listbox-item\";\nListbox.Item = ListboxItem;\nListbox.displayName = \"ListBox\";\n"],"names":["cx","c","styles","rootClassName","ListboxItem","forwardRef","props","ref","disabled","highlighted","hovered","selected","children","className","noninteractive","hideSelectedIcon","liProps","classes","jsxs","jsx","Paragraph","IconCheckmark","isListboxItem","child","isValidElement","Listbox","listboxProps","Children"],"mappings":";;;;;;;;;;;;;GAQMA,IAAKC,EAAE,KAAKC,CAAM,GAElBC,IAAgB,kBAaTC,IAAcC,EAA4C,CAACC,GAAOC,MAAQ;AACrF,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDV,GAEEW,IAAUjB,EAAG,GAAGG,CAAa,SAASU,GAAW;AAAA,IACrD,CAAC,GAAGV,CAAa,oBAAoB,GAAGM;AAAA,IACxC,CAAC,GAAGN,CAAa,iBAAiB,GAAGQ;AAAA,IACrC,CAAC,GAAGR,CAAa,gBAAgB,GAAGO;AAAA,IACpC,CAAC,GAAGP,CAAa,iBAAiB,GAAGK;AAAA,IACrC,CAAC,GAAGL,CAAa,uBAAuB,GAAGW;AAAA,EAAA,CAC5C;AAED,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGF;AAAA,MACJ,KAAAT;AAAA,MACA,WAAWU;AAAA,MACX,iBAAe,CAAC,CAACN;AAAA,MACjB,MAAK;AAAA,MACL,iBAAe,CAAC,CAACH;AAAA,MAEhB,UAAA;AAAA,QAAA,OAAOI,KAAa,WAAW,gBAAAO,EAACC,GAAA,EAAW,UAAAR,GAAS,IAAeA;AAAA,QACnED,KAAY,CAACI,KACZ,gBAAAI,EAACE,GAAA,EAAc,MAAK,MAAK,WAAWrB,EAAG,GAAGG,CAAa,aAAa,EAAA,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI/E,CAAC,GAEYmB,IAAgB,CAACC,MAC5BC,EAAiCD,CAAK,KAAKA,GAAO,SAASnB;AAE7DA,EAAY,cAAc;ACpD1B,MAAMJ,IAAKC,EAAE,KAAKC,CAAM,GAElBC,IAAgB,kBAaTsB,IAAUpB;AAAA,EACrB,CAAC,EAAE,UAAAO,GAAU,GAAGc,EAAA,GAAgBnB,MAC9B,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGO;AAAA,MACJ,KAAAnB;AAAA,MACA,WAAWP,EAAGG,GAAeuB,EAAa,SAAS;AAAA,MACnD,MAAK;AAAA,MAEJ,UAAAC,EAAS,QAAQf,CAAQ,EAAE,OAAOU,CAAa;AAAA,IAAA;AAAA,EAAA;AAGtD;AAGAG,EAAQ,OAAOrB;AACfqB,EAAQ,cAAc;"}
@@ -1,201 +0,0 @@
1
- import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
- import { P as k, O as q, C as G, T as J, D as O, a as Q, b as X, R as Y } from "./index-CKCTy3ZL.mjs";
3
- import { forwardRef as I, useState as P, useRef as b, useCallback as Z, useEffect as g } from "react";
4
- import { b as tt } from "./button-4-yWOgtD.mjs";
5
- import { H as et } from "./heading-xwBuT_-9.mjs";
6
- import { r as rt } from "./close.es-BPmk2wkU.mjs";
7
- import { P as ot } from "./paragraph-Ci50OF1u.mjs";
8
- import { V as nt } from "./visually-hidden-BYFkJEp1.mjs";
9
- import { c as at } from "./bind-CU-R61T-.mjs";
10
- const st = "_fadeIn_slvdi_1", lt = "_fadeOut_slvdi_1", dt = "_slideUp_slvdi_1", it = "_slideDown_slvdi_1", _t = {
11
- "purpur-modal-content": "_purpur-modal-content_slvdi_1",
12
- fadeIn: st,
13
- fadeOut: lt,
14
- slideUp: dt,
15
- slideDown: it,
16
- "purpur-modal-content__overlay": "_purpur-modal-content__overlay_slvdi_49",
17
- "purpur-modal-content__close-button": "_purpur-modal-content__close-button_slvdi_65",
18
- "purpur-modal-content__wrapper": "_purpur-modal-content__wrapper_slvdi_75",
19
- "purpur-modal-content__wrapper-inner": "_purpur-modal-content__wrapper-inner_slvdi_85",
20
- "purpur-modal-content__image-wrapper": "_purpur-modal-content__image-wrapper_slvdi_89",
21
- "purpur-modal-content__header": "_purpur-modal-content__header_slvdi_112",
22
- "purpur-modal-content__title": "_purpur-modal-content__title_slvdi_125",
23
- "purpur-modal-content__description": "_purpur-modal-content__description_slvdi_128",
24
- "purpur-modal-content__body": "_purpur-modal-content__body_slvdi_131",
25
- "purpur-modal-content__body-inner": "_purpur-modal-content__body-inner_slvdi_139",
26
- "purpur-modal-content__actions-buttons": "_purpur-modal-content__actions-buttons_slvdi_151",
27
- "purpur-modal-content__notification": "_purpur-modal-content__notification_slvdi_169",
28
- "purpur-modal-content--with-image": "_purpur-modal-content--with-image_slvdi_172",
29
- "purpur-modal-content--overflow": "_purpur-modal-content--overflow_slvdi_172",
30
- "purpur-modal-content__actions": "_purpur-modal-content__actions_slvdi_151",
31
- "purpur-modal-content__actions-separator": "_purpur-modal-content__actions-separator_slvdi_203",
32
- "purpur-modal-content--sticky-footer": "_purpur-modal-content--sticky-footer_slvdi_213"
33
- }, R = (o) => o.showCloseButton === !0, r = at.bind(_t), e = "purpur-modal-content", ct = I(
34
- ({
35
- ["data-testid"]: o,
36
- actions: n,
37
- children: a,
38
- className: _,
39
- description: c,
40
- disableCloseOnClickOutside: C,
41
- hideDescription: N,
42
- image: u,
43
- stickyButtons: f = !0,
44
- title: M,
45
- notification: w = void 0,
46
- zIndex: D,
47
- onCloseAutoFocus: E,
48
- ...y
49
- }, S) => {
50
- const { closeButtonAriaLabel: m, showCloseButton: T, ...B } = y, [V, W] = P(!1), [z, A] = P(0), p = b(null), v = b(null), F = r(
51
- e,
52
- { [`${e}--with-image`]: !!u },
53
- { [`${e}--overflow`]: V },
54
- { [`${e}--sticky-footer`]: f },
55
- _
56
- ), d = (s) => o ? `${o} ${s}` : void 0, L = (s) => {
57
- C && s.preventDefault();
58
- }, i = Z(() => {
59
- if (!p.current || !v.current)
60
- return;
61
- const s = window.getComputedStyle(p.current, null), h = parseFloat(s.getPropertyValue("height")), K = v.current.offsetHeight;
62
- W(h < K), A(
63
- (p.current.offsetWidth ?? 0) - (p.current.clientWidth ?? 0)
64
- );
65
- }, []), U = () => {
66
- const s = v.current;
67
- if (s) {
68
- const h = s.querySelector("h2");
69
- h && setTimeout(() => {
70
- h.focus();
71
- });
72
- }
73
- }, j = (s) => {
74
- C && !T && s.preventDefault();
75
- };
76
- return g(() => (window.addEventListener("resize", i), () => {
77
- window.removeEventListener("resize", i);
78
- }), [i]), g(() => {
79
- i();
80
- }, [w, a, i]), /* @__PURE__ */ l(k, { children: [
81
- /* @__PURE__ */ t(q, { className: r(`${e}__overlay`), style: { zIndex: D } }),
82
- /* @__PURE__ */ l(
83
- G,
84
- {
85
- ...B,
86
- className: F,
87
- "data-testid": o,
88
- ref: S,
89
- ...!c && { "aria-describedby": void 0 },
90
- onPointerDownOutside: L,
91
- onOpenAutoFocus: () => {
92
- i(), U();
93
- },
94
- onEscapeKeyDown: j,
95
- onCloseAutoFocus: E,
96
- style: { zIndex: `calc(${D} + 1)` },
97
- children: [
98
- /* @__PURE__ */ l("div", { ref: p, className: r(`${e}__wrapper`), children: [
99
- R(y) && m && u && /* @__PURE__ */ t(
100
- x,
101
- {
102
- "aria-label": m,
103
- hasImage: !0,
104
- scrollbarWidth: z,
105
- "data-testid": d("close-button")
106
- }
107
- ),
108
- /* @__PURE__ */ l("div", { ref: v, className: r(`${e}__wrapper-inner`), children: [
109
- /* @__PURE__ */ l("div", { className: r(`${e}__header`), children: [
110
- R(y) && m && !u && /* @__PURE__ */ t(
111
- x,
112
- {
113
- "aria-label": m,
114
- "data-testid": d("close-button")
115
- }
116
- ),
117
- /* @__PURE__ */ t(
118
- J,
119
- {
120
- asChild: !0,
121
- className: r(`${e}__title`),
122
- "data-testid": d("title"),
123
- children: /* @__PURE__ */ t(et, { tag: "h2", variant: "display-10", tabIndex: -1, children: M })
124
- }
125
- )
126
- ] }),
127
- u && /* @__PURE__ */ t(
128
- "div",
129
- {
130
- className: r(`${e}__image-wrapper`),
131
- "data-testid": d("image"),
132
- children: u
133
- }
134
- ),
135
- /* @__PURE__ */ t("div", { className: r(`${e}__body`), children: /* @__PURE__ */ l("div", { className: r(`${e}__body-inner`), children: [
136
- c && N && /* @__PURE__ */ t(nt, { asChild: !0, children: /* @__PURE__ */ t(O, { "data-testid": d("description"), children: c }) }),
137
- c && !N && /* @__PURE__ */ t(
138
- O,
139
- {
140
- asChild: !0,
141
- className: r(`${e}__description`),
142
- "data-testid": d("description"),
143
- children: /* @__PURE__ */ t(ot, { variant: "paragraph-100", children: c })
144
- }
145
- ),
146
- /* @__PURE__ */ t("div", { children: a }),
147
- !f && /* @__PURE__ */ t(H, { actions: n, notification: w })
148
- ] }) })
149
- ] })
150
- ] }),
151
- f && /* @__PURE__ */ t(H, { actions: n, notification: w })
152
- ]
153
- }
154
- )
155
- ] });
156
- }
157
- ), x = ({
158
- ["aria-label"]: o,
159
- hasImage: n,
160
- scrollbarWidth: a,
161
- ["data-testid"]: _
162
- }) => /* @__PURE__ */ t(Q, { asChild: !0, children: /* @__PURE__ */ t(
163
- tt,
164
- {
165
- variant: n ? "primary" : "tertiary-purple",
166
- negative: n,
167
- size: "sm",
168
- iconOnly: !0,
169
- "aria-label": o,
170
- className: r(`${e}__close-button`),
171
- style: { right: `calc(var(--purpur-spacing-100) + ${a || 0}px)` },
172
- "data-testid": _,
173
- children: /* @__PURE__ */ t(rt, {})
174
- }
175
- ) }), H = ({
176
- actions: o,
177
- notification: n
178
- }) => {
179
- const a = b(null);
180
- return g(() => {
181
- n && a?.current?.scrollIntoView?.(!1);
182
- }, [n]), o ? /* @__PURE__ */ l("div", { className: r(`${e}__actions`), children: [
183
- /* @__PURE__ */ t("div", { className: r(`${e}__actions-buttons`), "data-testid": "modal actions", children: o }),
184
- n && /* @__PURE__ */ t("div", { className: r(`${e}__notification`), ref: a, children: n }),
185
- /* @__PURE__ */ t("span", { className: r(`${e}__actions-separator`) })
186
- ] }) : null;
187
- }, ut = I(
188
- ({ children: o, ...n }, a) => /* @__PURE__ */ t(X, { asChild: !0, ref: a, ...n, children: o })
189
- ), $ = ({
190
- ["data-testid"]: o,
191
- children: n,
192
- open: a,
193
- onOpenChange: _
194
- }) => /* @__PURE__ */ t(Y, { open: a, onOpenChange: _, "data-testid": o, children: n });
195
- $.Trigger = ut;
196
- $.Content = ct;
197
- $.displayName = "Modal";
198
- export {
199
- $ as M
200
- };
201
- //# sourceMappingURL=modal-DCfN6q8I.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal-DCfN6q8I.mjs","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading tag=\"h2\" variant=\"display-10\" tabIndex={-1}>\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("react/jsx-runtime"),d=require("./index-2cFVyGXq.js"),a=require("react"),F=require("./button-DmybVApa.js"),L=require("./heading-drD5ugCC.js"),U=require("./close.es-VL3lKi1O.js"),V=require("./paragraph-BsI53OR0.js"),K=require("./visually-hidden-C2CKovZx.js"),k=require("./bind-DeUYJ6m9.js"),G="_fadeIn_slvdi_1",J="_fadeOut_slvdi_1",Q="_slideUp_slvdi_1",X="_slideDown_slvdi_1",Y={"purpur-modal-content":"_purpur-modal-content_slvdi_1",fadeIn:G,fadeOut:J,slideUp:Q,slideDown:X,"purpur-modal-content__overlay":"_purpur-modal-content__overlay_slvdi_49","purpur-modal-content__close-button":"_purpur-modal-content__close-button_slvdi_65","purpur-modal-content__wrapper":"_purpur-modal-content__wrapper_slvdi_75","purpur-modal-content__wrapper-inner":"_purpur-modal-content__wrapper-inner_slvdi_85","purpur-modal-content__image-wrapper":"_purpur-modal-content__image-wrapper_slvdi_89","purpur-modal-content__header":"_purpur-modal-content__header_slvdi_112","purpur-modal-content__title":"_purpur-modal-content__title_slvdi_125","purpur-modal-content__description":"_purpur-modal-content__description_slvdi_128","purpur-modal-content__body":"_purpur-modal-content__body_slvdi_131","purpur-modal-content__body-inner":"_purpur-modal-content__body-inner_slvdi_139","purpur-modal-content__actions-buttons":"_purpur-modal-content__actions-buttons_slvdi_151","purpur-modal-content__notification":"_purpur-modal-content__notification_slvdi_169","purpur-modal-content--with-image":"_purpur-modal-content--with-image_slvdi_172","purpur-modal-content--overflow":"_purpur-modal-content--overflow_slvdi_172","purpur-modal-content__actions":"_purpur-modal-content__actions_slvdi_151","purpur-modal-content__actions-separator":"_purpur-modal-content__actions-separator_slvdi_203","purpur-modal-content--sticky-footer":"_purpur-modal-content--sticky-footer_slvdi_213"},N=n=>n.showCloseButton===!0,r=k.c.bind(Y),t="purpur-modal-content",Z=a.forwardRef(({["data-testid"]:n,actions:s,children:o,className:u,description:_,disableCloseOnClickOutside:b,hideDescription:g,image:p,stickyButtons:x=!0,title:q,notification:j=void 0,zIndex:$,onCloseAutoFocus:D,...y},O)=>{const{closeButtonAriaLabel:v,showCloseButton:E,...H}=y,[I,M]=a.useState(!1),[P,S]=a.useState(0),m=a.useRef(null),h=a.useRef(null),B=r(t,{[`${t}--with-image`]:!!p},{[`${t}--overflow`]:I},{[`${t}--sticky-footer`]:x},u),i=l=>n?`${n} ${l}`:void 0,T=l=>{b&&l.preventDefault()},c=a.useCallback(()=>{if(!m.current||!h.current)return;const l=window.getComputedStyle(m.current,null),f=parseFloat(l.getPropertyValue("height")),A=h.current.offsetHeight;M(f<A),S((m.current.offsetWidth??0)-(m.current.clientWidth??0))},[]),W=()=>{const l=h.current;if(l){const f=l.querySelector("h2");f&&setTimeout(()=>{f.focus()})}},z=l=>{b&&!E&&l.preventDefault()};return a.useEffect(()=>(window.addEventListener("resize",c),()=>{window.removeEventListener("resize",c)}),[c]),a.useEffect(()=>{c()},[j,o,c]),e.jsxs(d.Portal,{children:[e.jsx(d.Overlay,{className:r(`${t}__overlay`),style:{zIndex:$}}),e.jsxs(d.Content,{...H,className:B,"data-testid":n,ref:O,...!_&&{"aria-describedby":void 0},onPointerDownOutside:T,onOpenAutoFocus:()=>{c(),W()},onEscapeKeyDown:z,onCloseAutoFocus:D,style:{zIndex:`calc(${$} + 1)`},children:[e.jsxs("div",{ref:m,className:r(`${t}__wrapper`),children:[N(y)&&v&&p&&e.jsx(C,{"aria-label":v,hasImage:!0,scrollbarWidth:P,"data-testid":i("close-button")}),e.jsxs("div",{ref:h,className:r(`${t}__wrapper-inner`),children:[e.jsxs("div",{className:r(`${t}__header`),children:[N(y)&&v&&!p&&e.jsx(C,{"aria-label":v,"data-testid":i("close-button")}),e.jsx(d.Title,{asChild:!0,className:r(`${t}__title`),"data-testid":i("title"),children:e.jsx(L.Heading,{tag:"h2",variant:"display-10",tabIndex:-1,children:q})})]}),p&&e.jsx("div",{className:r(`${t}__image-wrapper`),"data-testid":i("image"),children:p}),e.jsx("div",{className:r(`${t}__body`),children:e.jsxs("div",{className:r(`${t}__body-inner`),children:[_&&g&&e.jsx(K.VisuallyHidden,{asChild:!0,children:e.jsx(d.Description,{"data-testid":i("description"),children:_})}),_&&!g&&e.jsx(d.Description,{asChild:!0,className:r(`${t}__description`),"data-testid":i("description"),children:e.jsx(V.Paragraph,{variant:"paragraph-100",children:_})}),e.jsx("div",{children:o}),!x&&e.jsx(R,{actions:s,notification:j})]})})]})]}),x&&e.jsx(R,{actions:s,notification:j})]})]})}),C=({["aria-label"]:n,hasImage:s,scrollbarWidth:o,["data-testid"]:u})=>e.jsx(d.Close,{asChild:!0,children:e.jsx(F.Button,{variant:s?"primary":"tertiary-purple",negative:s,size:"sm",iconOnly:!0,"aria-label":n,className:r(`${t}__close-button`),style:{right:`calc(var(--purpur-spacing-100) + ${o||0}px)`},"data-testid":u,children:e.jsx(U.r,{})})}),R=({actions:n,notification:s})=>{const o=a.useRef(null);return a.useEffect(()=>{s&&o?.current?.scrollIntoView?.(!1)},[s]),n?e.jsxs("div",{className:r(`${t}__actions`),children:[e.jsx("div",{className:r(`${t}__actions-buttons`),"data-testid":"modal actions",children:n}),s&&e.jsx("div",{className:r(`${t}__notification`),ref:o,children:s}),e.jsx("span",{className:r(`${t}__actions-separator`)})]}):null},ee=a.forwardRef(({children:n,...s},o)=>e.jsx(d.Trigger,{asChild:!0,ref:o,...s,children:n})),w=({["data-testid"]:n,children:s,open:o,onOpenChange:u})=>e.jsx(d.Root,{open:o,onOpenChange:u,"data-testid":n,children:s});w.Trigger=ee;w.Content=Z;w.displayName="Modal";exports.Modal=w;
2
- //# sourceMappingURL=modal-DZIdw9xy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal-DZIdw9xy.js","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading tag=\"h2\" variant=\"display-10\" tabIndex={-1}>\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const n=require("react/jsx-runtime"),o=require("./bind-DeUYJ6m9.js"),s={"purpur-paragraph":"_purpur-paragraph_1vz75_1","purpur-paragraph--disabled":"_purpur-paragraph--disabled_1vz75_7","purpur-paragraph--hyphens":"_purpur-paragraph--hyphens_1vz75_10","purpur-paragraph--negative":"_purpur-paragraph--negative_1vz75_13","purpur-paragraph--paragraph-100":"_purpur-paragraph--paragraph-100_1vz75_16","purpur-paragraph--paragraph-100-medium":"_purpur-paragraph--paragraph-100-medium_1vz75_22","purpur-paragraph--paragraph-100-bold":"_purpur-paragraph--paragraph-100-bold_1vz75_29","purpur-paragraph--paragraph-200":"_purpur-paragraph--paragraph-200_1vz75_36","purpur-paragraph--preamble-100":"_purpur-paragraph--preamble-100_1vz75_42","purpur-paragraph--preamble-200":"_purpur-paragraph--preamble-200_1vz75_48","purpur-paragraph--additional-100":"_purpur-paragraph--additional-100_1vz75_54","purpur-paragraph--additional-100-medium":"_purpur-paragraph--additional-100-medium_1vz75_60","purpur-paragraph--additional-100-bold":"_purpur-paragraph--additional-100-bold_1vz75_67","purpur-paragraph--overline-100":"_purpur-paragraph--overline-100_1vz75_74","purpur-paragraph--overline-200":"_purpur-paragraph--overline-200_1vz75_82"},t=o.c.bind(s),r={PARAGRAPH100:"paragraph-100",PARAGRAPH100MEDIUM:"paragraph-100-medium",PARAGRAPH100BOLD:"paragraph-100-bold",PARAGRAPH200:"paragraph-200",PREAMBLE100:"preamble-100",PREAMBLE200:"preamble-200",ADDITIONAL100:"additional-100",ADDITIONAL100MEDIUM:"additional-100-medium",ADDITIONAL100BOLD:"additional-100-bold",OVERLINE100:"overline-100",OVERLINE200:"overline-200"},a="purpur-paragraph",p=({children:u,className:e,disabled:h,enableHyphenation:g=!1,negative:i=!1,variant:_=r.PARAGRAPH100,...d})=>{const l=t(e,a,`${a}--${_}`,{[`${a}--hyphens`]:g,[`${a}--disabled`]:h,[`${a}--negative`]:i});return n.jsx("p",{...d,className:l,children:u})};p.displayName="Paragraph";exports.Paragraph=p;exports.ParagraphVariant=r;
2
- //# sourceMappingURL=paragraph-BsI53OR0.js.map