@purpur/library 9.8.1 → 9.9.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 (939) hide show
  1. package/CHANGELOG.json +57 -0
  2. package/CHANGELOG.md +23 -1
  3. package/dist/{autocomplete-CcVDJbwS.js → autocomplete-C6FXaaAT.js} +2 -2
  4. package/dist/{autocomplete-CcVDJbwS.js.map → autocomplete-C6FXaaAT.js.map} +1 -1
  5. package/dist/{autocomplete-DF17Zm7Q.mjs → autocomplete-q4ObPRfM.mjs} +2 -2
  6. package/dist/{autocomplete-DF17Zm7Q.mjs.map → autocomplete-q4ObPRfM.mjs.map} +1 -1
  7. package/dist/autocomplete.cjs.js +1 -1
  8. package/dist/autocomplete.es.js +1 -1
  9. package/dist/button-4-yWOgtD.mjs.map +1 -1
  10. package/dist/button-DmybVApa.js.map +1 -1
  11. package/dist/{comparison-table-DQJL1IVC.mjs → comparison-table-D1evE0ri.mjs} +77 -77
  12. package/dist/{comparison-table-DQJL1IVC.mjs.map → comparison-table-D1evE0ri.mjs.map} +1 -1
  13. package/dist/{comparison-table-DHFpydbq.js → comparison-table-Dtqxz8vL.js} +2 -2
  14. package/dist/{comparison-table-DHFpydbq.js.map → comparison-table-Dtqxz8vL.js.map} +1 -1
  15. package/dist/comparison-table.cjs.js +1 -1
  16. package/dist/comparison-table.es.js +1 -1
  17. package/dist/components/button/src/button.d.ts +3 -22
  18. package/dist/components/button/src/button.d.ts.map +1 -1
  19. package/dist/components/counter-badge/src/counter-badge.visual.fixtures.d.ts +13 -0
  20. package/dist/components/counter-badge/src/counter-badge.visual.fixtures.d.ts.map +1 -0
  21. package/dist/components/cta-link/src/cta-link.d.ts +6 -4
  22. package/dist/components/cta-link/src/cta-link.d.ts.map +1 -1
  23. package/dist/components/cta-link/src/cta-link.visual.fixtures.d.ts +14 -0
  24. package/dist/components/cta-link/src/cta-link.visual.fixtures.d.ts.map +1 -0
  25. package/dist/components/date-field/src/date-field.visual.fixtures.d.ts +14 -0
  26. package/dist/components/date-field/src/date-field.visual.fixtures.d.ts.map +1 -0
  27. package/dist/components/icon/src/all-icon-components.d.ts +3 -0
  28. package/dist/components/icon/src/all-icon-components.d.ts.map +1 -1
  29. package/dist/components/icon/src/all-icons.d.ts +3 -0
  30. package/dist/components/icon/src/all-icons.d.ts.map +1 -1
  31. package/dist/components/icon/src/assets/moon.d.ts +7 -0
  32. package/dist/components/icon/src/assets/moon.d.ts.map +1 -0
  33. package/dist/components/icon/src/assets/sun.d.ts +7 -0
  34. package/dist/components/icon/src/assets/sun.d.ts.map +1 -0
  35. package/dist/components/icon/src/assets/unpin.d.ts +7 -0
  36. package/dist/components/icon/src/assets/unpin.d.ts.map +1 -0
  37. package/dist/components/icon/src/components/moon.d.ts +7 -0
  38. package/dist/components/icon/src/components/moon.d.ts.map +1 -0
  39. package/dist/components/icon/src/components/sun.d.ts +7 -0
  40. package/dist/components/icon/src/components/sun.d.ts.map +1 -0
  41. package/dist/components/icon/src/components/unpin.d.ts +7 -0
  42. package/dist/components/icon/src/components/unpin.d.ts.map +1 -0
  43. package/dist/components/icon/src/icon-imports.d.ts +18 -0
  44. package/dist/components/icon/src/icon-imports.d.ts.map +1 -1
  45. package/dist/components/illustrative-icon/src/all-animated-illustrative-icon-components.d.ts +34 -0
  46. package/dist/components/illustrative-icon/src/all-animated-illustrative-icon-components.d.ts.map +1 -1
  47. package/dist/components/illustrative-icon/src/all-static-illustrative-icon-components.d.ts +36 -0
  48. package/dist/components/illustrative-icon/src/all-static-illustrative-icon-components.d.ts.map +1 -1
  49. package/dist/components/illustrative-icon/src/assets/accessories-duocolor-static.d.ts +4 -0
  50. package/dist/components/illustrative-icon/src/assets/accessories-duocolor-static.d.ts.map +1 -0
  51. package/dist/components/illustrative-icon/src/assets/accessories-offblack-static.d.ts +4 -0
  52. package/dist/components/illustrative-icon/src/assets/accessories-offblack-static.d.ts.map +1 -0
  53. package/dist/components/illustrative-icon/src/assets/bag-duocolor-static.d.ts +4 -0
  54. package/dist/components/illustrative-icon/src/assets/bag-duocolor-static.d.ts.map +1 -0
  55. package/dist/components/illustrative-icon/src/assets/bag-offblack-static.d.ts +4 -0
  56. package/dist/components/illustrative-icon/src/assets/bag-offblack-static.d.ts.map +1 -0
  57. package/dist/components/illustrative-icon/src/assets/bag-plus-duocolor-static.d.ts +4 -0
  58. package/dist/components/illustrative-icon/src/assets/bag-plus-duocolor-static.d.ts.map +1 -0
  59. package/dist/components/illustrative-icon/src/assets/bag-plus-offblack-static.d.ts +4 -0
  60. package/dist/components/illustrative-icon/src/assets/bag-plus-offblack-static.d.ts.map +1 -0
  61. package/dist/components/illustrative-icon/src/assets/box-sync-duocolor-static.d.ts +4 -0
  62. package/dist/components/illustrative-icon/src/assets/box-sync-duocolor-static.d.ts.map +1 -0
  63. package/dist/components/illustrative-icon/src/assets/box-sync-offblack-static.d.ts +4 -0
  64. package/dist/components/illustrative-icon/src/assets/box-sync-offblack-static.d.ts.map +1 -0
  65. package/dist/components/illustrative-icon/src/assets/display-protection-duocolor-static.d.ts +4 -0
  66. package/dist/components/illustrative-icon/src/assets/display-protection-duocolor-static.d.ts.map +1 -0
  67. package/dist/components/illustrative-icon/src/assets/display-protection-offblack-static.d.ts +4 -0
  68. package/dist/components/illustrative-icon/src/assets/display-protection-offblack-static.d.ts.map +1 -0
  69. package/dist/components/illustrative-icon/src/assets/enrollment-duocolor-static.d.ts +4 -0
  70. package/dist/components/illustrative-icon/src/assets/enrollment-duocolor-static.d.ts.map +1 -0
  71. package/dist/components/illustrative-icon/src/assets/enrollment-offblack-static.d.ts +4 -0
  72. package/dist/components/illustrative-icon/src/assets/enrollment-offblack-static.d.ts.map +1 -0
  73. package/dist/components/illustrative-icon/src/assets/gift-box-duocolor-static.d.ts +4 -0
  74. package/dist/components/illustrative-icon/src/assets/gift-box-duocolor-static.d.ts.map +1 -0
  75. package/dist/components/illustrative-icon/src/assets/gift-box-offblack-static.d.ts +4 -0
  76. package/dist/components/illustrative-icon/src/assets/gift-box-offblack-static.d.ts.map +1 -0
  77. package/dist/components/illustrative-icon/src/assets/gift-box-plus-duocolor-static.d.ts +4 -0
  78. package/dist/components/illustrative-icon/src/assets/gift-box-plus-duocolor-static.d.ts.map +1 -0
  79. package/dist/components/illustrative-icon/src/assets/gift-box-plus-offblack-static.d.ts +4 -0
  80. package/dist/components/illustrative-icon/src/assets/gift-box-plus-offblack-static.d.ts.map +1 -0
  81. package/dist/components/illustrative-icon/src/assets/info-letter-duocolor-static.d.ts +4 -0
  82. package/dist/components/illustrative-icon/src/assets/info-letter-duocolor-static.d.ts.map +1 -0
  83. package/dist/components/illustrative-icon/src/assets/info-letter-offblack-static.d.ts +4 -0
  84. package/dist/components/illustrative-icon/src/assets/info-letter-offblack-static.d.ts.map +1 -0
  85. package/dist/components/illustrative-icon/src/assets/leaf-duocolor-static.d.ts +4 -0
  86. package/dist/components/illustrative-icon/src/assets/leaf-duocolor-static.d.ts.map +1 -0
  87. package/dist/components/illustrative-icon/src/assets/leaf-offblack-static.d.ts +4 -0
  88. package/dist/components/illustrative-icon/src/assets/leaf-offblack-static.d.ts.map +1 -0
  89. package/dist/components/illustrative-icon/src/assets/number-tranfer-duocolor-static.d.ts +4 -0
  90. package/dist/components/illustrative-icon/src/assets/number-tranfer-duocolor-static.d.ts.map +1 -0
  91. package/dist/components/illustrative-icon/src/assets/number-tranfer-offblack-static.d.ts +4 -0
  92. package/dist/components/illustrative-icon/src/assets/number-tranfer-offblack-static.d.ts.map +1 -0
  93. package/dist/components/illustrative-icon/src/assets/page-duocolor-static.d.ts +4 -0
  94. package/dist/components/illustrative-icon/src/assets/page-duocolor-static.d.ts.map +1 -0
  95. package/dist/components/illustrative-icon/src/assets/page-offblack-static.d.ts +4 -0
  96. package/dist/components/illustrative-icon/src/assets/page-offblack-static.d.ts.map +1 -0
  97. package/dist/components/illustrative-icon/src/assets/phone-repair-duocolor-static.d.ts +4 -0
  98. package/dist/components/illustrative-icon/src/assets/phone-repair-duocolor-static.d.ts.map +1 -0
  99. package/dist/components/illustrative-icon/src/assets/phone-repair-offblack-static.d.ts +4 -0
  100. package/dist/components/illustrative-icon/src/assets/phone-repair-offblack-static.d.ts.map +1 -0
  101. package/dist/components/illustrative-icon/src/assets/phone-settings-duocolor-static.d.ts +4 -0
  102. package/dist/components/illustrative-icon/src/assets/phone-settings-duocolor-static.d.ts.map +1 -0
  103. package/dist/components/illustrative-icon/src/assets/phone-settings-offblack-static.d.ts +4 -0
  104. package/dist/components/illustrative-icon/src/assets/phone-settings-offblack-static.d.ts.map +1 -0
  105. package/dist/components/illustrative-icon/src/assets/return-label-duocolor-static.d.ts +4 -0
  106. package/dist/components/illustrative-icon/src/assets/return-label-duocolor-static.d.ts.map +1 -0
  107. package/dist/components/illustrative-icon/src/assets/return-label-offblack-static.d.ts +4 -0
  108. package/dist/components/illustrative-icon/src/assets/return-label-offblack-static.d.ts.map +1 -0
  109. package/dist/components/illustrative-icon/src/assets/settings-pen-duocolor-static.d.ts +4 -0
  110. package/dist/components/illustrative-icon/src/assets/settings-pen-duocolor-static.d.ts.map +1 -0
  111. package/dist/components/illustrative-icon/src/assets/settings-pen-offblack-static.d.ts +4 -0
  112. package/dist/components/illustrative-icon/src/assets/settings-pen-offblack-static.d.ts.map +1 -0
  113. package/dist/components/illustrative-icon/src/assets/shield-time-duocolor-static.d.ts +4 -0
  114. package/dist/components/illustrative-icon/src/assets/shield-time-duocolor-static.d.ts.map +1 -0
  115. package/dist/components/illustrative-icon/src/assets/shield-time-offblack-static.d.ts +4 -0
  116. package/dist/components/illustrative-icon/src/assets/shield-time-offblack-static.d.ts.map +1 -0
  117. package/dist/components/illustrative-icon/src/assets/user-duocolor-static.d.ts +4 -0
  118. package/dist/components/illustrative-icon/src/assets/user-duocolor-static.d.ts.map +1 -0
  119. package/dist/components/illustrative-icon/src/assets/user-offblack-static.d.ts +4 -0
  120. package/dist/components/illustrative-icon/src/assets/user-offblack-static.d.ts.map +1 -0
  121. package/dist/components/illustrative-icon/src/components/accessories-duocolor-animated.d.ts +7 -0
  122. package/dist/components/illustrative-icon/src/components/accessories-duocolor-animated.d.ts.map +1 -0
  123. package/dist/components/illustrative-icon/src/components/accessories-duocolor-static.d.ts +7 -0
  124. package/dist/components/illustrative-icon/src/components/accessories-duocolor-static.d.ts.map +1 -0
  125. package/dist/components/illustrative-icon/src/components/accessories-offblack-animated.d.ts +7 -0
  126. package/dist/components/illustrative-icon/src/components/accessories-offblack-animated.d.ts.map +1 -0
  127. package/dist/components/illustrative-icon/src/components/accessories-offblack-static.d.ts +7 -0
  128. package/dist/components/illustrative-icon/src/components/accessories-offblack-static.d.ts.map +1 -0
  129. package/dist/components/illustrative-icon/src/components/bag-duocolor-animated.d.ts +7 -0
  130. package/dist/components/illustrative-icon/src/components/bag-duocolor-animated.d.ts.map +1 -0
  131. package/dist/components/illustrative-icon/src/components/bag-duocolor-static.d.ts +7 -0
  132. package/dist/components/illustrative-icon/src/components/bag-duocolor-static.d.ts.map +1 -0
  133. package/dist/components/illustrative-icon/src/components/bag-offblack-animated.d.ts +7 -0
  134. package/dist/components/illustrative-icon/src/components/bag-offblack-animated.d.ts.map +1 -0
  135. package/dist/components/illustrative-icon/src/components/bag-offblack-static.d.ts +7 -0
  136. package/dist/components/illustrative-icon/src/components/bag-offblack-static.d.ts.map +1 -0
  137. package/dist/components/illustrative-icon/src/components/bag-plus-duocolor-animated.d.ts +7 -0
  138. package/dist/components/illustrative-icon/src/components/bag-plus-duocolor-animated.d.ts.map +1 -0
  139. package/dist/components/illustrative-icon/src/components/bag-plus-duocolor-static.d.ts +7 -0
  140. package/dist/components/illustrative-icon/src/components/bag-plus-duocolor-static.d.ts.map +1 -0
  141. package/dist/components/illustrative-icon/src/components/bag-plus-offblack-animated.d.ts +7 -0
  142. package/dist/components/illustrative-icon/src/components/bag-plus-offblack-animated.d.ts.map +1 -0
  143. package/dist/components/illustrative-icon/src/components/bag-plus-offblack-static.d.ts +7 -0
  144. package/dist/components/illustrative-icon/src/components/bag-plus-offblack-static.d.ts.map +1 -0
  145. package/dist/components/illustrative-icon/src/components/box-sync-duocolor-animated.d.ts +7 -0
  146. package/dist/components/illustrative-icon/src/components/box-sync-duocolor-animated.d.ts.map +1 -0
  147. package/dist/components/illustrative-icon/src/components/box-sync-duocolor-static.d.ts +7 -0
  148. package/dist/components/illustrative-icon/src/components/box-sync-duocolor-static.d.ts.map +1 -0
  149. package/dist/components/illustrative-icon/src/components/box-sync-offblack-animated.d.ts +7 -0
  150. package/dist/components/illustrative-icon/src/components/box-sync-offblack-animated.d.ts.map +1 -0
  151. package/dist/components/illustrative-icon/src/components/box-sync-offblack-static.d.ts +7 -0
  152. package/dist/components/illustrative-icon/src/components/box-sync-offblack-static.d.ts.map +1 -0
  153. package/dist/components/illustrative-icon/src/components/display-protection-duocolor-animated.d.ts +7 -0
  154. package/dist/components/illustrative-icon/src/components/display-protection-duocolor-animated.d.ts.map +1 -0
  155. package/dist/components/illustrative-icon/src/components/display-protection-duocolor-static.d.ts +7 -0
  156. package/dist/components/illustrative-icon/src/components/display-protection-duocolor-static.d.ts.map +1 -0
  157. package/dist/components/illustrative-icon/src/components/display-protection-offblack-animated.d.ts +7 -0
  158. package/dist/components/illustrative-icon/src/components/display-protection-offblack-animated.d.ts.map +1 -0
  159. package/dist/components/illustrative-icon/src/components/display-protection-offblack-static.d.ts +7 -0
  160. package/dist/components/illustrative-icon/src/components/display-protection-offblack-static.d.ts.map +1 -0
  161. package/dist/components/illustrative-icon/src/components/enrollment-duocolor-animated.d.ts +7 -0
  162. package/dist/components/illustrative-icon/src/components/enrollment-duocolor-animated.d.ts.map +1 -0
  163. package/dist/components/illustrative-icon/src/components/enrollment-duocolor-static.d.ts +7 -0
  164. package/dist/components/illustrative-icon/src/components/enrollment-duocolor-static.d.ts.map +1 -0
  165. package/dist/components/illustrative-icon/src/components/enrollment-offblack-animated.d.ts +7 -0
  166. package/dist/components/illustrative-icon/src/components/enrollment-offblack-animated.d.ts.map +1 -0
  167. package/dist/components/illustrative-icon/src/components/enrollment-offblack-static.d.ts +7 -0
  168. package/dist/components/illustrative-icon/src/components/enrollment-offblack-static.d.ts.map +1 -0
  169. package/dist/components/illustrative-icon/src/components/gift-box-duocolor-animated.d.ts +7 -0
  170. package/dist/components/illustrative-icon/src/components/gift-box-duocolor-animated.d.ts.map +1 -0
  171. package/dist/components/illustrative-icon/src/components/gift-box-duocolor-static.d.ts +7 -0
  172. package/dist/components/illustrative-icon/src/components/gift-box-duocolor-static.d.ts.map +1 -0
  173. package/dist/components/illustrative-icon/src/components/gift-box-offblack-animated.d.ts +7 -0
  174. package/dist/components/illustrative-icon/src/components/gift-box-offblack-animated.d.ts.map +1 -0
  175. package/dist/components/illustrative-icon/src/components/gift-box-offblack-static.d.ts +7 -0
  176. package/dist/components/illustrative-icon/src/components/gift-box-offblack-static.d.ts.map +1 -0
  177. package/dist/components/illustrative-icon/src/components/gift-box-plus-duocolor-animated.d.ts +7 -0
  178. package/dist/components/illustrative-icon/src/components/gift-box-plus-duocolor-animated.d.ts.map +1 -0
  179. package/dist/components/illustrative-icon/src/components/gift-box-plus-duocolor-static.d.ts +7 -0
  180. package/dist/components/illustrative-icon/src/components/gift-box-plus-duocolor-static.d.ts.map +1 -0
  181. package/dist/components/illustrative-icon/src/components/gift-box-plus-offblack-animated.d.ts +7 -0
  182. package/dist/components/illustrative-icon/src/components/gift-box-plus-offblack-animated.d.ts.map +1 -0
  183. package/dist/components/illustrative-icon/src/components/gift-box-plus-offblack-static.d.ts +7 -0
  184. package/dist/components/illustrative-icon/src/components/gift-box-plus-offblack-static.d.ts.map +1 -0
  185. package/dist/components/illustrative-icon/src/components/info-letter-duocolor-animated.d.ts +7 -0
  186. package/dist/components/illustrative-icon/src/components/info-letter-duocolor-animated.d.ts.map +1 -0
  187. package/dist/components/illustrative-icon/src/components/info-letter-duocolor-static.d.ts +7 -0
  188. package/dist/components/illustrative-icon/src/components/info-letter-duocolor-static.d.ts.map +1 -0
  189. package/dist/components/illustrative-icon/src/components/info-letter-offblack-animated.d.ts +7 -0
  190. package/dist/components/illustrative-icon/src/components/info-letter-offblack-animated.d.ts.map +1 -0
  191. package/dist/components/illustrative-icon/src/components/info-letter-offblack-static.d.ts +7 -0
  192. package/dist/components/illustrative-icon/src/components/info-letter-offblack-static.d.ts.map +1 -0
  193. package/dist/components/illustrative-icon/src/components/leaf-duocolor-animated.d.ts +7 -0
  194. package/dist/components/illustrative-icon/src/components/leaf-duocolor-animated.d.ts.map +1 -0
  195. package/dist/components/illustrative-icon/src/components/leaf-duocolor-static.d.ts +7 -0
  196. package/dist/components/illustrative-icon/src/components/leaf-duocolor-static.d.ts.map +1 -0
  197. package/dist/components/illustrative-icon/src/components/leaf-offblack-animated.d.ts +7 -0
  198. package/dist/components/illustrative-icon/src/components/leaf-offblack-animated.d.ts.map +1 -0
  199. package/dist/components/illustrative-icon/src/components/leaf-offblack-static.d.ts +7 -0
  200. package/dist/components/illustrative-icon/src/components/leaf-offblack-static.d.ts.map +1 -0
  201. package/dist/components/illustrative-icon/src/components/number-tranfer-duocolor-static.d.ts +7 -0
  202. package/dist/components/illustrative-icon/src/components/number-tranfer-duocolor-static.d.ts.map +1 -0
  203. package/dist/components/illustrative-icon/src/components/number-tranfer-offblack-static.d.ts +7 -0
  204. package/dist/components/illustrative-icon/src/components/number-tranfer-offblack-static.d.ts.map +1 -0
  205. package/dist/components/illustrative-icon/src/components/number-transfer-duocolor-animated.d.ts +7 -0
  206. package/dist/components/illustrative-icon/src/components/number-transfer-duocolor-animated.d.ts.map +1 -0
  207. package/dist/components/illustrative-icon/src/components/number-transfer-offblack-animated.d.ts +7 -0
  208. package/dist/components/illustrative-icon/src/components/number-transfer-offblack-animated.d.ts.map +1 -0
  209. package/dist/components/illustrative-icon/src/components/page-duocolor-static.d.ts +7 -0
  210. package/dist/components/illustrative-icon/src/components/page-duocolor-static.d.ts.map +1 -0
  211. package/dist/components/illustrative-icon/src/components/page-offblack-static.d.ts +7 -0
  212. package/dist/components/illustrative-icon/src/components/page-offblack-static.d.ts.map +1 -0
  213. package/dist/components/illustrative-icon/src/components/phone-repair-duocolor-animated.d.ts +7 -0
  214. package/dist/components/illustrative-icon/src/components/phone-repair-duocolor-animated.d.ts.map +1 -0
  215. package/dist/components/illustrative-icon/src/components/phone-repair-duocolor-static.d.ts +7 -0
  216. package/dist/components/illustrative-icon/src/components/phone-repair-duocolor-static.d.ts.map +1 -0
  217. package/dist/components/illustrative-icon/src/components/phone-repair-offblack-animated.d.ts +7 -0
  218. package/dist/components/illustrative-icon/src/components/phone-repair-offblack-animated.d.ts.map +1 -0
  219. package/dist/components/illustrative-icon/src/components/phone-repair-offblack-static.d.ts +7 -0
  220. package/dist/components/illustrative-icon/src/components/phone-repair-offblack-static.d.ts.map +1 -0
  221. package/dist/components/illustrative-icon/src/components/phone-settings-duocolor-animated.d.ts +7 -0
  222. package/dist/components/illustrative-icon/src/components/phone-settings-duocolor-animated.d.ts.map +1 -0
  223. package/dist/components/illustrative-icon/src/components/phone-settings-duocolor-static.d.ts +7 -0
  224. package/dist/components/illustrative-icon/src/components/phone-settings-duocolor-static.d.ts.map +1 -0
  225. package/dist/components/illustrative-icon/src/components/phone-settings-offblack-animated.d.ts +7 -0
  226. package/dist/components/illustrative-icon/src/components/phone-settings-offblack-animated.d.ts.map +1 -0
  227. package/dist/components/illustrative-icon/src/components/phone-settings-offblack-static.d.ts +7 -0
  228. package/dist/components/illustrative-icon/src/components/phone-settings-offblack-static.d.ts.map +1 -0
  229. package/dist/components/illustrative-icon/src/components/return-label-duocolor-animated.d.ts +7 -0
  230. package/dist/components/illustrative-icon/src/components/return-label-duocolor-animated.d.ts.map +1 -0
  231. package/dist/components/illustrative-icon/src/components/return-label-duocolor-static.d.ts +7 -0
  232. package/dist/components/illustrative-icon/src/components/return-label-duocolor-static.d.ts.map +1 -0
  233. package/dist/components/illustrative-icon/src/components/return-label-offblack-animated.d.ts +7 -0
  234. package/dist/components/illustrative-icon/src/components/return-label-offblack-animated.d.ts.map +1 -0
  235. package/dist/components/illustrative-icon/src/components/return-label-offblack-static.d.ts +7 -0
  236. package/dist/components/illustrative-icon/src/components/return-label-offblack-static.d.ts.map +1 -0
  237. package/dist/components/illustrative-icon/src/components/settings-pen-duocolor-animated.d.ts +7 -0
  238. package/dist/components/illustrative-icon/src/components/settings-pen-duocolor-animated.d.ts.map +1 -0
  239. package/dist/components/illustrative-icon/src/components/settings-pen-duocolor-static.d.ts +7 -0
  240. package/dist/components/illustrative-icon/src/components/settings-pen-duocolor-static.d.ts.map +1 -0
  241. package/dist/components/illustrative-icon/src/components/settings-pen-offblack-animated.d.ts +7 -0
  242. package/dist/components/illustrative-icon/src/components/settings-pen-offblack-animated.d.ts.map +1 -0
  243. package/dist/components/illustrative-icon/src/components/settings-pen-offblack-static.d.ts +7 -0
  244. package/dist/components/illustrative-icon/src/components/settings-pen-offblack-static.d.ts.map +1 -0
  245. package/dist/components/illustrative-icon/src/components/shield-time-duocolor-animated.d.ts +7 -0
  246. package/dist/components/illustrative-icon/src/components/shield-time-duocolor-animated.d.ts.map +1 -0
  247. package/dist/components/illustrative-icon/src/components/shield-time-duocolor-static.d.ts +7 -0
  248. package/dist/components/illustrative-icon/src/components/shield-time-duocolor-static.d.ts.map +1 -0
  249. package/dist/components/illustrative-icon/src/components/shield-time-offblack-animated.d.ts +7 -0
  250. package/dist/components/illustrative-icon/src/components/shield-time-offblack-animated.d.ts.map +1 -0
  251. package/dist/components/illustrative-icon/src/components/shield-time-offblack-static.d.ts +7 -0
  252. package/dist/components/illustrative-icon/src/components/shield-time-offblack-static.d.ts.map +1 -0
  253. package/dist/components/illustrative-icon/src/components/user-duocolor-animated.d.ts +7 -0
  254. package/dist/components/illustrative-icon/src/components/user-duocolor-animated.d.ts.map +1 -0
  255. package/dist/components/illustrative-icon/src/components/user-duocolor-static.d.ts +7 -0
  256. package/dist/components/illustrative-icon/src/components/user-duocolor-static.d.ts.map +1 -0
  257. package/dist/components/illustrative-icon/src/components/user-offblack-animated.d.ts +7 -0
  258. package/dist/components/illustrative-icon/src/components/user-offblack-animated.d.ts.map +1 -0
  259. package/dist/components/illustrative-icon/src/components/user-offblack-static.d.ts +7 -0
  260. package/dist/components/illustrative-icon/src/components/user-offblack-static.d.ts.map +1 -0
  261. package/dist/components/label/src/label.visual.fixtures.d.ts +14 -0
  262. package/dist/components/label/src/label.visual.fixtures.d.ts.map +1 -0
  263. package/dist/components/listbox/src/listbox.visual.fixtures.d.ts +13 -0
  264. package/dist/components/listbox/src/listbox.visual.fixtures.d.ts.map +1 -0
  265. package/dist/components/select/src/select.d.ts.map +1 -1
  266. package/dist/components/select/src/select.visual.fixtures.d.ts +14 -0
  267. package/dist/components/select/src/select.visual.fixtures.d.ts.map +1 -0
  268. package/dist/components/table/src/story-utils/column-def.d.ts.map +1 -1
  269. package/dist/components/table/src/table-column-header-cell.d.ts +3 -10
  270. package/dist/components/table/src/table-column-header-cell.d.ts.map +1 -1
  271. package/dist/components/table/src/table-headers.d.ts +2 -4
  272. package/dist/components/table/src/table-headers.d.ts.map +1 -1
  273. package/dist/components/table/src/table-toolbar.d.ts.map +1 -1
  274. package/dist/components/table/src/table.d.ts +2 -2
  275. package/dist/components/table/src/table.d.ts.map +1 -1
  276. package/dist/components/table/src/test-utils/helpers.d.ts +0 -5
  277. package/dist/components/table/src/test-utils/helpers.d.ts.map +1 -1
  278. package/dist/components/table/src/types.d.ts +8 -8
  279. package/dist/components/table/src/types.d.ts.map +1 -1
  280. package/dist/components/table/src/use-drag-handle.hook.d.ts.map +1 -1
  281. package/dist/components/text-field/src/text-field-base.d.ts.map +1 -1
  282. package/dist/components-metadata.js +456 -0
  283. package/dist/{date-field-HEFdHIxk.mjs → date-field-DOCLv_xS.mjs} +2 -2
  284. package/dist/{date-field-HEFdHIxk.mjs.map → date-field-DOCLv_xS.mjs.map} +1 -1
  285. package/dist/{date-field-CKxEWHG3.js → date-field-uN87mgbH.js} +2 -2
  286. package/dist/{date-field-CKxEWHG3.js.map → date-field-uN87mgbH.js.map} +1 -1
  287. package/dist/date-field.cjs.js +1 -1
  288. package/dist/date-field.es.js +1 -1
  289. package/dist/{date-picker-cQewKIMN.mjs → date-picker-BtEuRtAu.mjs} +3 -3
  290. package/dist/{date-picker-cQewKIMN.mjs.map → date-picker-BtEuRtAu.mjs.map} +1 -1
  291. package/dist/{date-picker-CDBwkAJI.js → date-picker-X8b9wDfp.js} +2 -2
  292. package/dist/{date-picker-CDBwkAJI.js.map → date-picker-X8b9wDfp.js.map} +1 -1
  293. package/dist/date-picker.cjs.js +1 -1
  294. package/dist/date-picker.es.js +1 -1
  295. package/dist/{date-range-field-_WctWD29.mjs → date-range-field-B6gP8w2w.mjs} +2 -2
  296. package/dist/{date-range-field-_WctWD29.mjs.map → date-range-field-B6gP8w2w.mjs.map} +1 -1
  297. package/dist/{date-range-field-D7Hn9FGN.js → date-range-field-DLt6q5TQ.js} +2 -2
  298. package/dist/{date-range-field-D7Hn9FGN.js.map → date-range-field-DLt6q5TQ.js.map} +1 -1
  299. package/dist/date-range-field.cjs.js +1 -1
  300. package/dist/date-range-field.es.js +1 -1
  301. package/dist/{footer-CS6ZfztM.js → footer-Cn1-zG1v.js} +2 -2
  302. package/dist/{footer-CS6ZfztM.js.map → footer-Cn1-zG1v.js.map} +1 -1
  303. package/dist/{footer-OJXbTn1e.mjs → footer-D-2b7UIB.mjs} +2 -2
  304. package/dist/{footer-OJXbTn1e.mjs.map → footer-D-2b7UIB.mjs.map} +1 -1
  305. package/dist/footer.cjs.js +1 -1
  306. package/dist/footer.es.js +1 -1
  307. package/dist/icon/all-icon-components.d.ts +3 -0
  308. package/dist/icon/all-icon-components.d.ts.map +1 -1
  309. package/dist/icon/all-icons.cjs.js +1 -1
  310. package/dist/icon/all-icons.cjs.js.map +1 -1
  311. package/dist/icon/all-icons.d.ts +3 -0
  312. package/dist/icon/all-icons.d.ts.map +1 -1
  313. package/dist/icon/all-icons.es.js +395 -377
  314. package/dist/icon/all-icons.es.js.map +1 -1
  315. package/dist/icon/assets/moon.cjs.js +2 -0
  316. package/dist/icon/assets/moon.cjs.js.map +1 -0
  317. package/dist/icon/assets/moon.d.ts +7 -0
  318. package/dist/icon/assets/moon.d.ts.map +1 -0
  319. package/dist/icon/assets/moon.es.js +10 -0
  320. package/dist/icon/assets/moon.es.js.map +1 -0
  321. package/dist/icon/assets/sun.cjs.js +2 -0
  322. package/dist/icon/assets/sun.cjs.js.map +1 -0
  323. package/dist/icon/assets/sun.d.ts +7 -0
  324. package/dist/icon/assets/sun.d.ts.map +1 -0
  325. package/dist/icon/assets/sun.es.js +10 -0
  326. package/dist/icon/assets/sun.es.js.map +1 -0
  327. package/dist/icon/assets/unpin.cjs.js +2 -0
  328. package/dist/icon/assets/unpin.cjs.js.map +1 -0
  329. package/dist/icon/assets/unpin.d.ts +7 -0
  330. package/dist/icon/assets/unpin.d.ts.map +1 -0
  331. package/dist/icon/assets/unpin.es.js +10 -0
  332. package/dist/icon/assets/unpin.es.js.map +1 -0
  333. package/dist/icon/components/moon.cjs.js +2 -0
  334. package/dist/icon/components/moon.cjs.js.map +1 -0
  335. package/dist/icon/components/moon.d.ts +7 -0
  336. package/dist/icon/components/moon.d.ts.map +1 -0
  337. package/dist/icon/components/moon.es.js +13 -0
  338. package/dist/icon/components/moon.es.js.map +1 -0
  339. package/dist/icon/components/sun.cjs.js +2 -0
  340. package/dist/icon/components/sun.cjs.js.map +1 -0
  341. package/dist/icon/components/sun.d.ts +7 -0
  342. package/dist/icon/components/sun.d.ts.map +1 -0
  343. package/dist/icon/components/sun.es.js +13 -0
  344. package/dist/icon/components/sun.es.js.map +1 -0
  345. package/dist/icon/components/unpin.cjs.js +2 -0
  346. package/dist/icon/components/unpin.cjs.js.map +1 -0
  347. package/dist/icon/components/unpin.d.ts +7 -0
  348. package/dist/icon/components/unpin.d.ts.map +1 -0
  349. package/dist/icon/components/unpin.es.js +13 -0
  350. package/dist/icon/components/unpin.es.js.map +1 -0
  351. package/dist/icon/components-metadata.js +24 -0
  352. package/dist/icon/dynamic-icon.cjs.js +1 -1
  353. package/dist/icon/dynamic-icon.cjs.js.map +1 -1
  354. package/dist/icon/dynamic-icon.es.js +1 -1
  355. package/dist/icon/dynamic-icon.es.js.map +1 -1
  356. package/dist/icon/icon-imports.d.ts +18 -0
  357. package/dist/icon/icon-imports.d.ts.map +1 -1
  358. package/dist/icon/moon.svg +1 -0
  359. package/dist/icon/sun.svg +1 -0
  360. package/dist/icon/unpin.svg +1 -0
  361. package/dist/illustrative-icon/all-animated-illustrative-icon-components.d.ts +34 -0
  362. package/dist/illustrative-icon/all-animated-illustrative-icon-components.d.ts.map +1 -1
  363. package/dist/illustrative-icon/all-static-illustrative-icon-components.d.ts +36 -0
  364. package/dist/illustrative-icon/all-static-illustrative-icon-components.d.ts.map +1 -1
  365. package/dist/illustrative-icon/assets/accessories-duocolor-static.d.ts +4 -0
  366. package/dist/illustrative-icon/assets/accessories-duocolor-static.d.ts.map +1 -0
  367. package/dist/illustrative-icon/assets/accessories-offblack-static.d.ts +4 -0
  368. package/dist/illustrative-icon/assets/accessories-offblack-static.d.ts.map +1 -0
  369. package/dist/illustrative-icon/assets/bag-duocolor-static.d.ts +4 -0
  370. package/dist/illustrative-icon/assets/bag-duocolor-static.d.ts.map +1 -0
  371. package/dist/illustrative-icon/assets/bag-offblack-static.d.ts +4 -0
  372. package/dist/illustrative-icon/assets/bag-offblack-static.d.ts.map +1 -0
  373. package/dist/illustrative-icon/assets/bag-plus-duocolor-static.d.ts +4 -0
  374. package/dist/illustrative-icon/assets/bag-plus-duocolor-static.d.ts.map +1 -0
  375. package/dist/illustrative-icon/assets/bag-plus-offblack-static.d.ts +4 -0
  376. package/dist/illustrative-icon/assets/bag-plus-offblack-static.d.ts.map +1 -0
  377. package/dist/illustrative-icon/assets/box-sync-duocolor-static.d.ts +4 -0
  378. package/dist/illustrative-icon/assets/box-sync-duocolor-static.d.ts.map +1 -0
  379. package/dist/illustrative-icon/assets/box-sync-offblack-static.d.ts +4 -0
  380. package/dist/illustrative-icon/assets/box-sync-offblack-static.d.ts.map +1 -0
  381. package/dist/illustrative-icon/assets/display-protection-duocolor-static.d.ts +4 -0
  382. package/dist/illustrative-icon/assets/display-protection-duocolor-static.d.ts.map +1 -0
  383. package/dist/illustrative-icon/assets/display-protection-offblack-static.d.ts +4 -0
  384. package/dist/illustrative-icon/assets/display-protection-offblack-static.d.ts.map +1 -0
  385. package/dist/illustrative-icon/assets/enrollment-duocolor-static.d.ts +4 -0
  386. package/dist/illustrative-icon/assets/enrollment-duocolor-static.d.ts.map +1 -0
  387. package/dist/illustrative-icon/assets/enrollment-offblack-static.d.ts +4 -0
  388. package/dist/illustrative-icon/assets/enrollment-offblack-static.d.ts.map +1 -0
  389. package/dist/illustrative-icon/assets/gift-box-duocolor-static.d.ts +4 -0
  390. package/dist/illustrative-icon/assets/gift-box-duocolor-static.d.ts.map +1 -0
  391. package/dist/illustrative-icon/assets/gift-box-offblack-static.d.ts +4 -0
  392. package/dist/illustrative-icon/assets/gift-box-offblack-static.d.ts.map +1 -0
  393. package/dist/illustrative-icon/assets/gift-box-plus-duocolor-static.d.ts +4 -0
  394. package/dist/illustrative-icon/assets/gift-box-plus-duocolor-static.d.ts.map +1 -0
  395. package/dist/illustrative-icon/assets/gift-box-plus-offblack-static.d.ts +4 -0
  396. package/dist/illustrative-icon/assets/gift-box-plus-offblack-static.d.ts.map +1 -0
  397. package/dist/illustrative-icon/assets/info-letter-duocolor-static.d.ts +4 -0
  398. package/dist/illustrative-icon/assets/info-letter-duocolor-static.d.ts.map +1 -0
  399. package/dist/illustrative-icon/assets/info-letter-offblack-static.d.ts +4 -0
  400. package/dist/illustrative-icon/assets/info-letter-offblack-static.d.ts.map +1 -0
  401. package/dist/illustrative-icon/assets/json/accessories-duocolor-animated.json.d.ts +3 -0
  402. package/dist/illustrative-icon/assets/json/accessories-offblack-animated.json.d.ts +3 -0
  403. package/dist/illustrative-icon/assets/json/bag-duocolor-animated.json.d.ts +3 -0
  404. package/dist/illustrative-icon/assets/json/bag-offblack-animated.json.d.ts +3 -0
  405. package/dist/illustrative-icon/assets/json/bag-plus-duocolor-animated.json.d.ts +3 -0
  406. package/dist/illustrative-icon/assets/json/bag-plus-offblack-animated.json.d.ts +3 -0
  407. package/dist/illustrative-icon/assets/json/box-sync-duocolor-animated.json.d.ts +3 -0
  408. package/dist/illustrative-icon/assets/json/box-sync-offblack-animated.json.d.ts +3 -0
  409. package/dist/illustrative-icon/assets/json/display-protection-duocolor-animated.json.d.ts +3 -0
  410. package/dist/illustrative-icon/assets/json/display-protection-offblack-animated.json.d.ts +3 -0
  411. package/dist/illustrative-icon/assets/json/enrollment-duocolor-animated.json.d.ts +3 -0
  412. package/dist/illustrative-icon/assets/json/enrollment-offblack-animated.json.d.ts +3 -0
  413. package/dist/illustrative-icon/assets/json/gift-box-duocolor-animated.json.d.ts +3 -0
  414. package/dist/illustrative-icon/assets/json/gift-box-offblack-animated.json.d.ts +3 -0
  415. package/dist/illustrative-icon/assets/json/gift-box-plus-duocolor-animated.json.d.ts +3 -0
  416. package/dist/illustrative-icon/assets/json/gift-box-plus-offblack-animated.json.d.ts +3 -0
  417. package/dist/illustrative-icon/assets/json/info-letter-duocolor-animated.json.d.ts +3 -0
  418. package/dist/illustrative-icon/assets/json/info-letter-offblack-animated.json.d.ts +3 -0
  419. package/dist/illustrative-icon/assets/json/leaf-duocolor-animated.json.d.ts +3 -0
  420. package/dist/illustrative-icon/assets/json/leaf-offblack-animated.json.d.ts +3 -0
  421. package/dist/illustrative-icon/assets/json/number-transfer-duocolor-animated.json.d.ts +3 -0
  422. package/dist/illustrative-icon/assets/json/number-transfer-offblack-animated.json.d.ts +3 -0
  423. package/dist/illustrative-icon/assets/json/phone-repair-duocolor-animated.json.d.ts +3 -0
  424. package/dist/illustrative-icon/assets/json/phone-repair-offblack-animated.json.d.ts +3 -0
  425. package/dist/illustrative-icon/assets/json/phone-settings-duocolor-animated.json.d.ts +3 -0
  426. package/dist/illustrative-icon/assets/json/phone-settings-offblack-animated.json.d.ts +3 -0
  427. package/dist/illustrative-icon/assets/json/return-label-duocolor-animated.json.d.ts +3 -0
  428. package/dist/illustrative-icon/assets/json/return-label-offblack-animated.json.d.ts +3 -0
  429. package/dist/illustrative-icon/assets/json/settings-pen-duocolor-animated.json.d.ts +3 -0
  430. package/dist/illustrative-icon/assets/json/settings-pen-offblack-animated.json.d.ts +3 -0
  431. package/dist/illustrative-icon/assets/json/shield-time-duocolor-animated.json.d.ts +3 -0
  432. package/dist/illustrative-icon/assets/json/shield-time-offblack-animated.json.d.ts +3 -0
  433. package/dist/illustrative-icon/assets/json/user-duocolor-animated.json.d.ts +3 -0
  434. package/dist/illustrative-icon/assets/json/user-offblack-animated.json.d.ts +3 -0
  435. package/dist/illustrative-icon/assets/leaf-duocolor-static.d.ts +4 -0
  436. package/dist/illustrative-icon/assets/leaf-duocolor-static.d.ts.map +1 -0
  437. package/dist/illustrative-icon/assets/leaf-offblack-static.d.ts +4 -0
  438. package/dist/illustrative-icon/assets/leaf-offblack-static.d.ts.map +1 -0
  439. package/dist/illustrative-icon/assets/number-tranfer-duocolor-static.d.ts +4 -0
  440. package/dist/illustrative-icon/assets/number-tranfer-duocolor-static.d.ts.map +1 -0
  441. package/dist/illustrative-icon/assets/number-tranfer-offblack-static.d.ts +4 -0
  442. package/dist/illustrative-icon/assets/number-tranfer-offblack-static.d.ts.map +1 -0
  443. package/dist/illustrative-icon/assets/page-duocolor-static.d.ts +4 -0
  444. package/dist/illustrative-icon/assets/page-duocolor-static.d.ts.map +1 -0
  445. package/dist/illustrative-icon/assets/page-offblack-static.d.ts +4 -0
  446. package/dist/illustrative-icon/assets/page-offblack-static.d.ts.map +1 -0
  447. package/dist/illustrative-icon/assets/phone-repair-duocolor-static.d.ts +4 -0
  448. package/dist/illustrative-icon/assets/phone-repair-duocolor-static.d.ts.map +1 -0
  449. package/dist/illustrative-icon/assets/phone-repair-offblack-static.d.ts +4 -0
  450. package/dist/illustrative-icon/assets/phone-repair-offblack-static.d.ts.map +1 -0
  451. package/dist/illustrative-icon/assets/phone-settings-duocolor-static.d.ts +4 -0
  452. package/dist/illustrative-icon/assets/phone-settings-duocolor-static.d.ts.map +1 -0
  453. package/dist/illustrative-icon/assets/phone-settings-offblack-static.d.ts +4 -0
  454. package/dist/illustrative-icon/assets/phone-settings-offblack-static.d.ts.map +1 -0
  455. package/dist/illustrative-icon/assets/return-label-duocolor-static.d.ts +4 -0
  456. package/dist/illustrative-icon/assets/return-label-duocolor-static.d.ts.map +1 -0
  457. package/dist/illustrative-icon/assets/return-label-offblack-static.d.ts +4 -0
  458. package/dist/illustrative-icon/assets/return-label-offblack-static.d.ts.map +1 -0
  459. package/dist/illustrative-icon/assets/settings-pen-duocolor-static.d.ts +4 -0
  460. package/dist/illustrative-icon/assets/settings-pen-duocolor-static.d.ts.map +1 -0
  461. package/dist/illustrative-icon/assets/settings-pen-offblack-static.d.ts +4 -0
  462. package/dist/illustrative-icon/assets/settings-pen-offblack-static.d.ts.map +1 -0
  463. package/dist/illustrative-icon/assets/shield-time-duocolor-static.d.ts +4 -0
  464. package/dist/illustrative-icon/assets/shield-time-duocolor-static.d.ts.map +1 -0
  465. package/dist/illustrative-icon/assets/shield-time-offblack-static.d.ts +4 -0
  466. package/dist/illustrative-icon/assets/shield-time-offblack-static.d.ts.map +1 -0
  467. package/dist/illustrative-icon/assets/user-duocolor-static.d.ts +4 -0
  468. package/dist/illustrative-icon/assets/user-duocolor-static.d.ts.map +1 -0
  469. package/dist/illustrative-icon/assets/user-offblack-static.d.ts +4 -0
  470. package/dist/illustrative-icon/assets/user-offblack-static.d.ts.map +1 -0
  471. package/dist/illustrative-icon/components/accessories-duocolor-animated.cjs.js +2 -0
  472. package/dist/illustrative-icon/components/accessories-duocolor-animated.cjs.js.map +1 -0
  473. package/dist/illustrative-icon/components/accessories-duocolor-animated.d.ts +7 -0
  474. package/dist/illustrative-icon/components/accessories-duocolor-animated.d.ts.map +1 -0
  475. package/dist/illustrative-icon/components/accessories-duocolor-animated.es.js +20 -0
  476. package/dist/illustrative-icon/components/accessories-duocolor-animated.es.js.map +1 -0
  477. package/dist/illustrative-icon/components/accessories-duocolor-static.cjs.js +2 -0
  478. package/dist/illustrative-icon/components/accessories-duocolor-static.cjs.js.map +1 -0
  479. package/dist/illustrative-icon/components/accessories-duocolor-static.d.ts +7 -0
  480. package/dist/illustrative-icon/components/accessories-duocolor-static.d.ts.map +1 -0
  481. package/dist/illustrative-icon/components/accessories-duocolor-static.es.js +10 -0
  482. package/dist/illustrative-icon/components/accessories-duocolor-static.es.js.map +1 -0
  483. package/dist/illustrative-icon/components/accessories-offblack-animated.cjs.js +2 -0
  484. package/dist/illustrative-icon/components/accessories-offblack-animated.cjs.js.map +1 -0
  485. package/dist/illustrative-icon/components/accessories-offblack-animated.d.ts +7 -0
  486. package/dist/illustrative-icon/components/accessories-offblack-animated.d.ts.map +1 -0
  487. package/dist/illustrative-icon/components/accessories-offblack-animated.es.js +20 -0
  488. package/dist/illustrative-icon/components/accessories-offblack-animated.es.js.map +1 -0
  489. package/dist/illustrative-icon/components/accessories-offblack-static.cjs.js +2 -0
  490. package/dist/illustrative-icon/components/accessories-offblack-static.cjs.js.map +1 -0
  491. package/dist/illustrative-icon/components/accessories-offblack-static.d.ts +7 -0
  492. package/dist/illustrative-icon/components/accessories-offblack-static.d.ts.map +1 -0
  493. package/dist/illustrative-icon/components/accessories-offblack-static.es.js +10 -0
  494. package/dist/illustrative-icon/components/accessories-offblack-static.es.js.map +1 -0
  495. package/dist/illustrative-icon/components/bag-duocolor-animated.cjs.js +2 -0
  496. package/dist/illustrative-icon/components/bag-duocolor-animated.cjs.js.map +1 -0
  497. package/dist/illustrative-icon/components/bag-duocolor-animated.d.ts +7 -0
  498. package/dist/illustrative-icon/components/bag-duocolor-animated.d.ts.map +1 -0
  499. package/dist/illustrative-icon/components/bag-duocolor-animated.es.js +20 -0
  500. package/dist/illustrative-icon/components/bag-duocolor-animated.es.js.map +1 -0
  501. package/dist/illustrative-icon/components/bag-duocolor-static.cjs.js +2 -0
  502. package/dist/illustrative-icon/components/bag-duocolor-static.cjs.js.map +1 -0
  503. package/dist/illustrative-icon/components/bag-duocolor-static.d.ts +7 -0
  504. package/dist/illustrative-icon/components/bag-duocolor-static.d.ts.map +1 -0
  505. package/dist/illustrative-icon/components/bag-duocolor-static.es.js +10 -0
  506. package/dist/illustrative-icon/components/bag-duocolor-static.es.js.map +1 -0
  507. package/dist/illustrative-icon/components/bag-offblack-animated.cjs.js +2 -0
  508. package/dist/illustrative-icon/components/bag-offblack-animated.cjs.js.map +1 -0
  509. package/dist/illustrative-icon/components/bag-offblack-animated.d.ts +7 -0
  510. package/dist/illustrative-icon/components/bag-offblack-animated.d.ts.map +1 -0
  511. package/dist/illustrative-icon/components/bag-offblack-animated.es.js +20 -0
  512. package/dist/illustrative-icon/components/bag-offblack-animated.es.js.map +1 -0
  513. package/dist/illustrative-icon/components/bag-offblack-static.cjs.js +2 -0
  514. package/dist/illustrative-icon/components/bag-offblack-static.cjs.js.map +1 -0
  515. package/dist/illustrative-icon/components/bag-offblack-static.d.ts +7 -0
  516. package/dist/illustrative-icon/components/bag-offblack-static.d.ts.map +1 -0
  517. package/dist/illustrative-icon/components/bag-offblack-static.es.js +10 -0
  518. package/dist/illustrative-icon/components/bag-offblack-static.es.js.map +1 -0
  519. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.cjs.js +2 -0
  520. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.cjs.js.map +1 -0
  521. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.d.ts +7 -0
  522. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.d.ts.map +1 -0
  523. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.es.js +20 -0
  524. package/dist/illustrative-icon/components/bag-plus-duocolor-animated.es.js.map +1 -0
  525. package/dist/illustrative-icon/components/bag-plus-duocolor-static.cjs.js +2 -0
  526. package/dist/illustrative-icon/components/bag-plus-duocolor-static.cjs.js.map +1 -0
  527. package/dist/illustrative-icon/components/bag-plus-duocolor-static.d.ts +7 -0
  528. package/dist/illustrative-icon/components/bag-plus-duocolor-static.d.ts.map +1 -0
  529. package/dist/illustrative-icon/components/bag-plus-duocolor-static.es.js +10 -0
  530. package/dist/illustrative-icon/components/bag-plus-duocolor-static.es.js.map +1 -0
  531. package/dist/illustrative-icon/components/bag-plus-offblack-animated.cjs.js +2 -0
  532. package/dist/illustrative-icon/components/bag-plus-offblack-animated.cjs.js.map +1 -0
  533. package/dist/illustrative-icon/components/bag-plus-offblack-animated.d.ts +7 -0
  534. package/dist/illustrative-icon/components/bag-plus-offblack-animated.d.ts.map +1 -0
  535. package/dist/illustrative-icon/components/bag-plus-offblack-animated.es.js +20 -0
  536. package/dist/illustrative-icon/components/bag-plus-offblack-animated.es.js.map +1 -0
  537. package/dist/illustrative-icon/components/bag-plus-offblack-static.cjs.js +2 -0
  538. package/dist/illustrative-icon/components/bag-plus-offblack-static.cjs.js.map +1 -0
  539. package/dist/illustrative-icon/components/bag-plus-offblack-static.d.ts +7 -0
  540. package/dist/illustrative-icon/components/bag-plus-offblack-static.d.ts.map +1 -0
  541. package/dist/illustrative-icon/components/bag-plus-offblack-static.es.js +10 -0
  542. package/dist/illustrative-icon/components/bag-plus-offblack-static.es.js.map +1 -0
  543. package/dist/illustrative-icon/components/box-sync-duocolor-animated.cjs.js +2 -0
  544. package/dist/illustrative-icon/components/box-sync-duocolor-animated.cjs.js.map +1 -0
  545. package/dist/illustrative-icon/components/box-sync-duocolor-animated.d.ts +7 -0
  546. package/dist/illustrative-icon/components/box-sync-duocolor-animated.d.ts.map +1 -0
  547. package/dist/illustrative-icon/components/box-sync-duocolor-animated.es.js +20 -0
  548. package/dist/illustrative-icon/components/box-sync-duocolor-animated.es.js.map +1 -0
  549. package/dist/illustrative-icon/components/box-sync-duocolor-static.cjs.js +2 -0
  550. package/dist/illustrative-icon/components/box-sync-duocolor-static.cjs.js.map +1 -0
  551. package/dist/illustrative-icon/components/box-sync-duocolor-static.d.ts +7 -0
  552. package/dist/illustrative-icon/components/box-sync-duocolor-static.d.ts.map +1 -0
  553. package/dist/illustrative-icon/components/box-sync-duocolor-static.es.js +10 -0
  554. package/dist/illustrative-icon/components/box-sync-duocolor-static.es.js.map +1 -0
  555. package/dist/illustrative-icon/components/box-sync-offblack-animated.cjs.js +2 -0
  556. package/dist/illustrative-icon/components/box-sync-offblack-animated.cjs.js.map +1 -0
  557. package/dist/illustrative-icon/components/box-sync-offblack-animated.d.ts +7 -0
  558. package/dist/illustrative-icon/components/box-sync-offblack-animated.d.ts.map +1 -0
  559. package/dist/illustrative-icon/components/box-sync-offblack-animated.es.js +20 -0
  560. package/dist/illustrative-icon/components/box-sync-offblack-animated.es.js.map +1 -0
  561. package/dist/illustrative-icon/components/box-sync-offblack-static.cjs.js +2 -0
  562. package/dist/illustrative-icon/components/box-sync-offblack-static.cjs.js.map +1 -0
  563. package/dist/illustrative-icon/components/box-sync-offblack-static.d.ts +7 -0
  564. package/dist/illustrative-icon/components/box-sync-offblack-static.d.ts.map +1 -0
  565. package/dist/illustrative-icon/components/box-sync-offblack-static.es.js +10 -0
  566. package/dist/illustrative-icon/components/box-sync-offblack-static.es.js.map +1 -0
  567. package/dist/illustrative-icon/components/display-protection-duocolor-animated.cjs.js +2 -0
  568. package/dist/illustrative-icon/components/display-protection-duocolor-animated.cjs.js.map +1 -0
  569. package/dist/illustrative-icon/components/display-protection-duocolor-animated.d.ts +7 -0
  570. package/dist/illustrative-icon/components/display-protection-duocolor-animated.d.ts.map +1 -0
  571. package/dist/illustrative-icon/components/display-protection-duocolor-animated.es.js +20 -0
  572. package/dist/illustrative-icon/components/display-protection-duocolor-animated.es.js.map +1 -0
  573. package/dist/illustrative-icon/components/display-protection-duocolor-static.cjs.js +2 -0
  574. package/dist/illustrative-icon/components/display-protection-duocolor-static.cjs.js.map +1 -0
  575. package/dist/illustrative-icon/components/display-protection-duocolor-static.d.ts +7 -0
  576. package/dist/illustrative-icon/components/display-protection-duocolor-static.d.ts.map +1 -0
  577. package/dist/illustrative-icon/components/display-protection-duocolor-static.es.js +10 -0
  578. package/dist/illustrative-icon/components/display-protection-duocolor-static.es.js.map +1 -0
  579. package/dist/illustrative-icon/components/display-protection-offblack-animated.cjs.js +2 -0
  580. package/dist/illustrative-icon/components/display-protection-offblack-animated.cjs.js.map +1 -0
  581. package/dist/illustrative-icon/components/display-protection-offblack-animated.d.ts +7 -0
  582. package/dist/illustrative-icon/components/display-protection-offblack-animated.d.ts.map +1 -0
  583. package/dist/illustrative-icon/components/display-protection-offblack-animated.es.js +20 -0
  584. package/dist/illustrative-icon/components/display-protection-offblack-animated.es.js.map +1 -0
  585. package/dist/illustrative-icon/components/display-protection-offblack-static.cjs.js +2 -0
  586. package/dist/illustrative-icon/components/display-protection-offblack-static.cjs.js.map +1 -0
  587. package/dist/illustrative-icon/components/display-protection-offblack-static.d.ts +7 -0
  588. package/dist/illustrative-icon/components/display-protection-offblack-static.d.ts.map +1 -0
  589. package/dist/illustrative-icon/components/display-protection-offblack-static.es.js +10 -0
  590. package/dist/illustrative-icon/components/display-protection-offblack-static.es.js.map +1 -0
  591. package/dist/illustrative-icon/components/enrollment-duocolor-animated.cjs.js +2 -0
  592. package/dist/illustrative-icon/components/enrollment-duocolor-animated.cjs.js.map +1 -0
  593. package/dist/illustrative-icon/components/enrollment-duocolor-animated.d.ts +7 -0
  594. package/dist/illustrative-icon/components/enrollment-duocolor-animated.d.ts.map +1 -0
  595. package/dist/illustrative-icon/components/enrollment-duocolor-animated.es.js +20 -0
  596. package/dist/illustrative-icon/components/enrollment-duocolor-animated.es.js.map +1 -0
  597. package/dist/illustrative-icon/components/enrollment-duocolor-static.cjs.js +2 -0
  598. package/dist/illustrative-icon/components/enrollment-duocolor-static.cjs.js.map +1 -0
  599. package/dist/illustrative-icon/components/enrollment-duocolor-static.d.ts +7 -0
  600. package/dist/illustrative-icon/components/enrollment-duocolor-static.d.ts.map +1 -0
  601. package/dist/illustrative-icon/components/enrollment-duocolor-static.es.js +10 -0
  602. package/dist/illustrative-icon/components/enrollment-duocolor-static.es.js.map +1 -0
  603. package/dist/illustrative-icon/components/enrollment-offblack-animated.cjs.js +2 -0
  604. package/dist/illustrative-icon/components/enrollment-offblack-animated.cjs.js.map +1 -0
  605. package/dist/illustrative-icon/components/enrollment-offblack-animated.d.ts +7 -0
  606. package/dist/illustrative-icon/components/enrollment-offblack-animated.d.ts.map +1 -0
  607. package/dist/illustrative-icon/components/enrollment-offblack-animated.es.js +20 -0
  608. package/dist/illustrative-icon/components/enrollment-offblack-animated.es.js.map +1 -0
  609. package/dist/illustrative-icon/components/enrollment-offblack-static.cjs.js +2 -0
  610. package/dist/illustrative-icon/components/enrollment-offblack-static.cjs.js.map +1 -0
  611. package/dist/illustrative-icon/components/enrollment-offblack-static.d.ts +7 -0
  612. package/dist/illustrative-icon/components/enrollment-offblack-static.d.ts.map +1 -0
  613. package/dist/illustrative-icon/components/enrollment-offblack-static.es.js +10 -0
  614. package/dist/illustrative-icon/components/enrollment-offblack-static.es.js.map +1 -0
  615. package/dist/illustrative-icon/components/gift-box-duocolor-animated.cjs.js +2 -0
  616. package/dist/illustrative-icon/components/gift-box-duocolor-animated.cjs.js.map +1 -0
  617. package/dist/illustrative-icon/components/gift-box-duocolor-animated.d.ts +7 -0
  618. package/dist/illustrative-icon/components/gift-box-duocolor-animated.d.ts.map +1 -0
  619. package/dist/illustrative-icon/components/gift-box-duocolor-animated.es.js +20 -0
  620. package/dist/illustrative-icon/components/gift-box-duocolor-animated.es.js.map +1 -0
  621. package/dist/illustrative-icon/components/gift-box-duocolor-static.cjs.js +2 -0
  622. package/dist/illustrative-icon/components/gift-box-duocolor-static.cjs.js.map +1 -0
  623. package/dist/illustrative-icon/components/gift-box-duocolor-static.d.ts +7 -0
  624. package/dist/illustrative-icon/components/gift-box-duocolor-static.d.ts.map +1 -0
  625. package/dist/illustrative-icon/components/gift-box-duocolor-static.es.js +10 -0
  626. package/dist/illustrative-icon/components/gift-box-duocolor-static.es.js.map +1 -0
  627. package/dist/illustrative-icon/components/gift-box-offblack-animated.cjs.js +2 -0
  628. package/dist/illustrative-icon/components/gift-box-offblack-animated.cjs.js.map +1 -0
  629. package/dist/illustrative-icon/components/gift-box-offblack-animated.d.ts +7 -0
  630. package/dist/illustrative-icon/components/gift-box-offblack-animated.d.ts.map +1 -0
  631. package/dist/illustrative-icon/components/gift-box-offblack-animated.es.js +20 -0
  632. package/dist/illustrative-icon/components/gift-box-offblack-animated.es.js.map +1 -0
  633. package/dist/illustrative-icon/components/gift-box-offblack-static.cjs.js +2 -0
  634. package/dist/illustrative-icon/components/gift-box-offblack-static.cjs.js.map +1 -0
  635. package/dist/illustrative-icon/components/gift-box-offblack-static.d.ts +7 -0
  636. package/dist/illustrative-icon/components/gift-box-offblack-static.d.ts.map +1 -0
  637. package/dist/illustrative-icon/components/gift-box-offblack-static.es.js +10 -0
  638. package/dist/illustrative-icon/components/gift-box-offblack-static.es.js.map +1 -0
  639. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.cjs.js +2 -0
  640. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.cjs.js.map +1 -0
  641. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.d.ts +7 -0
  642. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.d.ts.map +1 -0
  643. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.es.js +20 -0
  644. package/dist/illustrative-icon/components/gift-box-plus-duocolor-animated.es.js.map +1 -0
  645. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.cjs.js +2 -0
  646. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.cjs.js.map +1 -0
  647. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.d.ts +7 -0
  648. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.d.ts.map +1 -0
  649. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.es.js +10 -0
  650. package/dist/illustrative-icon/components/gift-box-plus-duocolor-static.es.js.map +1 -0
  651. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.cjs.js +2 -0
  652. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.cjs.js.map +1 -0
  653. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.d.ts +7 -0
  654. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.d.ts.map +1 -0
  655. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.es.js +20 -0
  656. package/dist/illustrative-icon/components/gift-box-plus-offblack-animated.es.js.map +1 -0
  657. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.cjs.js +2 -0
  658. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.cjs.js.map +1 -0
  659. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.d.ts +7 -0
  660. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.d.ts.map +1 -0
  661. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.es.js +10 -0
  662. package/dist/illustrative-icon/components/gift-box-plus-offblack-static.es.js.map +1 -0
  663. package/dist/illustrative-icon/components/info-letter-duocolor-animated.cjs.js +2 -0
  664. package/dist/illustrative-icon/components/info-letter-duocolor-animated.cjs.js.map +1 -0
  665. package/dist/illustrative-icon/components/info-letter-duocolor-animated.d.ts +7 -0
  666. package/dist/illustrative-icon/components/info-letter-duocolor-animated.d.ts.map +1 -0
  667. package/dist/illustrative-icon/components/info-letter-duocolor-animated.es.js +20 -0
  668. package/dist/illustrative-icon/components/info-letter-duocolor-animated.es.js.map +1 -0
  669. package/dist/illustrative-icon/components/info-letter-duocolor-static.cjs.js +2 -0
  670. package/dist/illustrative-icon/components/info-letter-duocolor-static.cjs.js.map +1 -0
  671. package/dist/illustrative-icon/components/info-letter-duocolor-static.d.ts +7 -0
  672. package/dist/illustrative-icon/components/info-letter-duocolor-static.d.ts.map +1 -0
  673. package/dist/illustrative-icon/components/info-letter-duocolor-static.es.js +10 -0
  674. package/dist/illustrative-icon/components/info-letter-duocolor-static.es.js.map +1 -0
  675. package/dist/illustrative-icon/components/info-letter-offblack-animated.cjs.js +2 -0
  676. package/dist/illustrative-icon/components/info-letter-offblack-animated.cjs.js.map +1 -0
  677. package/dist/illustrative-icon/components/info-letter-offblack-animated.d.ts +7 -0
  678. package/dist/illustrative-icon/components/info-letter-offblack-animated.d.ts.map +1 -0
  679. package/dist/illustrative-icon/components/info-letter-offblack-animated.es.js +20 -0
  680. package/dist/illustrative-icon/components/info-letter-offblack-animated.es.js.map +1 -0
  681. package/dist/illustrative-icon/components/info-letter-offblack-static.cjs.js +2 -0
  682. package/dist/illustrative-icon/components/info-letter-offblack-static.cjs.js.map +1 -0
  683. package/dist/illustrative-icon/components/info-letter-offblack-static.d.ts +7 -0
  684. package/dist/illustrative-icon/components/info-letter-offblack-static.d.ts.map +1 -0
  685. package/dist/illustrative-icon/components/info-letter-offblack-static.es.js +10 -0
  686. package/dist/illustrative-icon/components/info-letter-offblack-static.es.js.map +1 -0
  687. package/dist/illustrative-icon/components/leaf-duocolor-animated.cjs.js +2 -0
  688. package/dist/illustrative-icon/components/leaf-duocolor-animated.cjs.js.map +1 -0
  689. package/dist/illustrative-icon/components/leaf-duocolor-animated.d.ts +7 -0
  690. package/dist/illustrative-icon/components/leaf-duocolor-animated.d.ts.map +1 -0
  691. package/dist/illustrative-icon/components/leaf-duocolor-animated.es.js +20 -0
  692. package/dist/illustrative-icon/components/leaf-duocolor-animated.es.js.map +1 -0
  693. package/dist/illustrative-icon/components/leaf-duocolor-static.cjs.js +2 -0
  694. package/dist/illustrative-icon/components/leaf-duocolor-static.cjs.js.map +1 -0
  695. package/dist/illustrative-icon/components/leaf-duocolor-static.d.ts +7 -0
  696. package/dist/illustrative-icon/components/leaf-duocolor-static.d.ts.map +1 -0
  697. package/dist/illustrative-icon/components/leaf-duocolor-static.es.js +10 -0
  698. package/dist/illustrative-icon/components/leaf-duocolor-static.es.js.map +1 -0
  699. package/dist/illustrative-icon/components/leaf-offblack-animated.cjs.js +2 -0
  700. package/dist/illustrative-icon/components/leaf-offblack-animated.cjs.js.map +1 -0
  701. package/dist/illustrative-icon/components/leaf-offblack-animated.d.ts +7 -0
  702. package/dist/illustrative-icon/components/leaf-offblack-animated.d.ts.map +1 -0
  703. package/dist/illustrative-icon/components/leaf-offblack-animated.es.js +20 -0
  704. package/dist/illustrative-icon/components/leaf-offblack-animated.es.js.map +1 -0
  705. package/dist/illustrative-icon/components/leaf-offblack-static.cjs.js +2 -0
  706. package/dist/illustrative-icon/components/leaf-offblack-static.cjs.js.map +1 -0
  707. package/dist/illustrative-icon/components/leaf-offblack-static.d.ts +7 -0
  708. package/dist/illustrative-icon/components/leaf-offblack-static.d.ts.map +1 -0
  709. package/dist/illustrative-icon/components/leaf-offblack-static.es.js +10 -0
  710. package/dist/illustrative-icon/components/leaf-offblack-static.es.js.map +1 -0
  711. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.cjs.js +2 -0
  712. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.cjs.js.map +1 -0
  713. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.d.ts +7 -0
  714. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.d.ts.map +1 -0
  715. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.es.js +10 -0
  716. package/dist/illustrative-icon/components/number-tranfer-duocolor-static.es.js.map +1 -0
  717. package/dist/illustrative-icon/components/number-tranfer-offblack-static.cjs.js +2 -0
  718. package/dist/illustrative-icon/components/number-tranfer-offblack-static.cjs.js.map +1 -0
  719. package/dist/illustrative-icon/components/number-tranfer-offblack-static.d.ts +7 -0
  720. package/dist/illustrative-icon/components/number-tranfer-offblack-static.d.ts.map +1 -0
  721. package/dist/illustrative-icon/components/number-tranfer-offblack-static.es.js +10 -0
  722. package/dist/illustrative-icon/components/number-tranfer-offblack-static.es.js.map +1 -0
  723. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.cjs.js +2 -0
  724. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.cjs.js.map +1 -0
  725. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.d.ts +7 -0
  726. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.d.ts.map +1 -0
  727. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.es.js +20 -0
  728. package/dist/illustrative-icon/components/number-transfer-duocolor-animated.es.js.map +1 -0
  729. package/dist/illustrative-icon/components/number-transfer-offblack-animated.cjs.js +2 -0
  730. package/dist/illustrative-icon/components/number-transfer-offblack-animated.cjs.js.map +1 -0
  731. package/dist/illustrative-icon/components/number-transfer-offblack-animated.d.ts +7 -0
  732. package/dist/illustrative-icon/components/number-transfer-offblack-animated.d.ts.map +1 -0
  733. package/dist/illustrative-icon/components/number-transfer-offblack-animated.es.js +20 -0
  734. package/dist/illustrative-icon/components/number-transfer-offblack-animated.es.js.map +1 -0
  735. package/dist/illustrative-icon/components/page-duocolor-static.cjs.js +2 -0
  736. package/dist/illustrative-icon/components/page-duocolor-static.cjs.js.map +1 -0
  737. package/dist/illustrative-icon/components/page-duocolor-static.d.ts +7 -0
  738. package/dist/illustrative-icon/components/page-duocolor-static.d.ts.map +1 -0
  739. package/dist/illustrative-icon/components/page-duocolor-static.es.js +10 -0
  740. package/dist/illustrative-icon/components/page-duocolor-static.es.js.map +1 -0
  741. package/dist/illustrative-icon/components/page-offblack-static.cjs.js +2 -0
  742. package/dist/illustrative-icon/components/page-offblack-static.cjs.js.map +1 -0
  743. package/dist/illustrative-icon/components/page-offblack-static.d.ts +7 -0
  744. package/dist/illustrative-icon/components/page-offblack-static.d.ts.map +1 -0
  745. package/dist/illustrative-icon/components/page-offblack-static.es.js +10 -0
  746. package/dist/illustrative-icon/components/page-offblack-static.es.js.map +1 -0
  747. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.cjs.js +2 -0
  748. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.cjs.js.map +1 -0
  749. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.d.ts +7 -0
  750. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.d.ts.map +1 -0
  751. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.es.js +20 -0
  752. package/dist/illustrative-icon/components/phone-repair-duocolor-animated.es.js.map +1 -0
  753. package/dist/illustrative-icon/components/phone-repair-duocolor-static.cjs.js +2 -0
  754. package/dist/illustrative-icon/components/phone-repair-duocolor-static.cjs.js.map +1 -0
  755. package/dist/illustrative-icon/components/phone-repair-duocolor-static.d.ts +7 -0
  756. package/dist/illustrative-icon/components/phone-repair-duocolor-static.d.ts.map +1 -0
  757. package/dist/illustrative-icon/components/phone-repair-duocolor-static.es.js +10 -0
  758. package/dist/illustrative-icon/components/phone-repair-duocolor-static.es.js.map +1 -0
  759. package/dist/illustrative-icon/components/phone-repair-offblack-animated.cjs.js +2 -0
  760. package/dist/illustrative-icon/components/phone-repair-offblack-animated.cjs.js.map +1 -0
  761. package/dist/illustrative-icon/components/phone-repair-offblack-animated.d.ts +7 -0
  762. package/dist/illustrative-icon/components/phone-repair-offblack-animated.d.ts.map +1 -0
  763. package/dist/illustrative-icon/components/phone-repair-offblack-animated.es.js +20 -0
  764. package/dist/illustrative-icon/components/phone-repair-offblack-animated.es.js.map +1 -0
  765. package/dist/illustrative-icon/components/phone-repair-offblack-static.cjs.js +2 -0
  766. package/dist/illustrative-icon/components/phone-repair-offblack-static.cjs.js.map +1 -0
  767. package/dist/illustrative-icon/components/phone-repair-offblack-static.d.ts +7 -0
  768. package/dist/illustrative-icon/components/phone-repair-offblack-static.d.ts.map +1 -0
  769. package/dist/illustrative-icon/components/phone-repair-offblack-static.es.js +10 -0
  770. package/dist/illustrative-icon/components/phone-repair-offblack-static.es.js.map +1 -0
  771. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.cjs.js +2 -0
  772. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.cjs.js.map +1 -0
  773. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.d.ts +7 -0
  774. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.d.ts.map +1 -0
  775. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.es.js +20 -0
  776. package/dist/illustrative-icon/components/phone-settings-duocolor-animated.es.js.map +1 -0
  777. package/dist/illustrative-icon/components/phone-settings-duocolor-static.cjs.js +2 -0
  778. package/dist/illustrative-icon/components/phone-settings-duocolor-static.cjs.js.map +1 -0
  779. package/dist/illustrative-icon/components/phone-settings-duocolor-static.d.ts +7 -0
  780. package/dist/illustrative-icon/components/phone-settings-duocolor-static.d.ts.map +1 -0
  781. package/dist/illustrative-icon/components/phone-settings-duocolor-static.es.js +10 -0
  782. package/dist/illustrative-icon/components/phone-settings-duocolor-static.es.js.map +1 -0
  783. package/dist/illustrative-icon/components/phone-settings-offblack-animated.cjs.js +2 -0
  784. package/dist/illustrative-icon/components/phone-settings-offblack-animated.cjs.js.map +1 -0
  785. package/dist/illustrative-icon/components/phone-settings-offblack-animated.d.ts +7 -0
  786. package/dist/illustrative-icon/components/phone-settings-offblack-animated.d.ts.map +1 -0
  787. package/dist/illustrative-icon/components/phone-settings-offblack-animated.es.js +20 -0
  788. package/dist/illustrative-icon/components/phone-settings-offblack-animated.es.js.map +1 -0
  789. package/dist/illustrative-icon/components/phone-settings-offblack-static.cjs.js +2 -0
  790. package/dist/illustrative-icon/components/phone-settings-offblack-static.cjs.js.map +1 -0
  791. package/dist/illustrative-icon/components/phone-settings-offblack-static.d.ts +7 -0
  792. package/dist/illustrative-icon/components/phone-settings-offblack-static.d.ts.map +1 -0
  793. package/dist/illustrative-icon/components/phone-settings-offblack-static.es.js +10 -0
  794. package/dist/illustrative-icon/components/phone-settings-offblack-static.es.js.map +1 -0
  795. package/dist/illustrative-icon/components/return-label-duocolor-animated.cjs.js +2 -0
  796. package/dist/illustrative-icon/components/return-label-duocolor-animated.cjs.js.map +1 -0
  797. package/dist/illustrative-icon/components/return-label-duocolor-animated.d.ts +7 -0
  798. package/dist/illustrative-icon/components/return-label-duocolor-animated.d.ts.map +1 -0
  799. package/dist/illustrative-icon/components/return-label-duocolor-animated.es.js +20 -0
  800. package/dist/illustrative-icon/components/return-label-duocolor-animated.es.js.map +1 -0
  801. package/dist/illustrative-icon/components/return-label-duocolor-static.cjs.js +2 -0
  802. package/dist/illustrative-icon/components/return-label-duocolor-static.cjs.js.map +1 -0
  803. package/dist/illustrative-icon/components/return-label-duocolor-static.d.ts +7 -0
  804. package/dist/illustrative-icon/components/return-label-duocolor-static.d.ts.map +1 -0
  805. package/dist/illustrative-icon/components/return-label-duocolor-static.es.js +10 -0
  806. package/dist/illustrative-icon/components/return-label-duocolor-static.es.js.map +1 -0
  807. package/dist/illustrative-icon/components/return-label-offblack-animated.cjs.js +2 -0
  808. package/dist/illustrative-icon/components/return-label-offblack-animated.cjs.js.map +1 -0
  809. package/dist/illustrative-icon/components/return-label-offblack-animated.d.ts +7 -0
  810. package/dist/illustrative-icon/components/return-label-offblack-animated.d.ts.map +1 -0
  811. package/dist/illustrative-icon/components/return-label-offblack-animated.es.js +20 -0
  812. package/dist/illustrative-icon/components/return-label-offblack-animated.es.js.map +1 -0
  813. package/dist/illustrative-icon/components/return-label-offblack-static.cjs.js +2 -0
  814. package/dist/illustrative-icon/components/return-label-offblack-static.cjs.js.map +1 -0
  815. package/dist/illustrative-icon/components/return-label-offblack-static.d.ts +7 -0
  816. package/dist/illustrative-icon/components/return-label-offblack-static.d.ts.map +1 -0
  817. package/dist/illustrative-icon/components/return-label-offblack-static.es.js +10 -0
  818. package/dist/illustrative-icon/components/return-label-offblack-static.es.js.map +1 -0
  819. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.cjs.js +2 -0
  820. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.cjs.js.map +1 -0
  821. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.d.ts +7 -0
  822. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.d.ts.map +1 -0
  823. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.es.js +20 -0
  824. package/dist/illustrative-icon/components/settings-pen-duocolor-animated.es.js.map +1 -0
  825. package/dist/illustrative-icon/components/settings-pen-duocolor-static.cjs.js +2 -0
  826. package/dist/illustrative-icon/components/settings-pen-duocolor-static.cjs.js.map +1 -0
  827. package/dist/illustrative-icon/components/settings-pen-duocolor-static.d.ts +7 -0
  828. package/dist/illustrative-icon/components/settings-pen-duocolor-static.d.ts.map +1 -0
  829. package/dist/illustrative-icon/components/settings-pen-duocolor-static.es.js +10 -0
  830. package/dist/illustrative-icon/components/settings-pen-duocolor-static.es.js.map +1 -0
  831. package/dist/illustrative-icon/components/settings-pen-offblack-animated.cjs.js +2 -0
  832. package/dist/illustrative-icon/components/settings-pen-offblack-animated.cjs.js.map +1 -0
  833. package/dist/illustrative-icon/components/settings-pen-offblack-animated.d.ts +7 -0
  834. package/dist/illustrative-icon/components/settings-pen-offblack-animated.d.ts.map +1 -0
  835. package/dist/illustrative-icon/components/settings-pen-offblack-animated.es.js +20 -0
  836. package/dist/illustrative-icon/components/settings-pen-offblack-animated.es.js.map +1 -0
  837. package/dist/illustrative-icon/components/settings-pen-offblack-static.cjs.js +2 -0
  838. package/dist/illustrative-icon/components/settings-pen-offblack-static.cjs.js.map +1 -0
  839. package/dist/illustrative-icon/components/settings-pen-offblack-static.d.ts +7 -0
  840. package/dist/illustrative-icon/components/settings-pen-offblack-static.d.ts.map +1 -0
  841. package/dist/illustrative-icon/components/settings-pen-offblack-static.es.js +10 -0
  842. package/dist/illustrative-icon/components/settings-pen-offblack-static.es.js.map +1 -0
  843. package/dist/illustrative-icon/components/shield-time-duocolor-animated.cjs.js +2 -0
  844. package/dist/illustrative-icon/components/shield-time-duocolor-animated.cjs.js.map +1 -0
  845. package/dist/illustrative-icon/components/shield-time-duocolor-animated.d.ts +7 -0
  846. package/dist/illustrative-icon/components/shield-time-duocolor-animated.d.ts.map +1 -0
  847. package/dist/illustrative-icon/components/shield-time-duocolor-animated.es.js +20 -0
  848. package/dist/illustrative-icon/components/shield-time-duocolor-animated.es.js.map +1 -0
  849. package/dist/illustrative-icon/components/shield-time-duocolor-static.cjs.js +2 -0
  850. package/dist/illustrative-icon/components/shield-time-duocolor-static.cjs.js.map +1 -0
  851. package/dist/illustrative-icon/components/shield-time-duocolor-static.d.ts +7 -0
  852. package/dist/illustrative-icon/components/shield-time-duocolor-static.d.ts.map +1 -0
  853. package/dist/illustrative-icon/components/shield-time-duocolor-static.es.js +10 -0
  854. package/dist/illustrative-icon/components/shield-time-duocolor-static.es.js.map +1 -0
  855. package/dist/illustrative-icon/components/shield-time-offblack-animated.cjs.js +2 -0
  856. package/dist/illustrative-icon/components/shield-time-offblack-animated.cjs.js.map +1 -0
  857. package/dist/illustrative-icon/components/shield-time-offblack-animated.d.ts +7 -0
  858. package/dist/illustrative-icon/components/shield-time-offblack-animated.d.ts.map +1 -0
  859. package/dist/illustrative-icon/components/shield-time-offblack-animated.es.js +20 -0
  860. package/dist/illustrative-icon/components/shield-time-offblack-animated.es.js.map +1 -0
  861. package/dist/illustrative-icon/components/shield-time-offblack-static.cjs.js +2 -0
  862. package/dist/illustrative-icon/components/shield-time-offblack-static.cjs.js.map +1 -0
  863. package/dist/illustrative-icon/components/shield-time-offblack-static.d.ts +7 -0
  864. package/dist/illustrative-icon/components/shield-time-offblack-static.d.ts.map +1 -0
  865. package/dist/illustrative-icon/components/shield-time-offblack-static.es.js +10 -0
  866. package/dist/illustrative-icon/components/shield-time-offblack-static.es.js.map +1 -0
  867. package/dist/illustrative-icon/components/user-duocolor-animated.cjs.js +2 -0
  868. package/dist/illustrative-icon/components/user-duocolor-animated.cjs.js.map +1 -0
  869. package/dist/illustrative-icon/components/user-duocolor-animated.d.ts +7 -0
  870. package/dist/illustrative-icon/components/user-duocolor-animated.d.ts.map +1 -0
  871. package/dist/illustrative-icon/components/user-duocolor-animated.es.js +20 -0
  872. package/dist/illustrative-icon/components/user-duocolor-animated.es.js.map +1 -0
  873. package/dist/illustrative-icon/components/user-duocolor-static.cjs.js +2 -0
  874. package/dist/illustrative-icon/components/user-duocolor-static.cjs.js.map +1 -0
  875. package/dist/illustrative-icon/components/user-duocolor-static.d.ts +7 -0
  876. package/dist/illustrative-icon/components/user-duocolor-static.d.ts.map +1 -0
  877. package/dist/illustrative-icon/components/user-duocolor-static.es.js +10 -0
  878. package/dist/illustrative-icon/components/user-duocolor-static.es.js.map +1 -0
  879. package/dist/illustrative-icon/components/user-offblack-animated.cjs.js +2 -0
  880. package/dist/illustrative-icon/components/user-offblack-animated.cjs.js.map +1 -0
  881. package/dist/illustrative-icon/components/user-offblack-animated.d.ts +7 -0
  882. package/dist/illustrative-icon/components/user-offblack-animated.d.ts.map +1 -0
  883. package/dist/illustrative-icon/components/user-offblack-animated.es.js +20 -0
  884. package/dist/illustrative-icon/components/user-offblack-animated.es.js.map +1 -0
  885. package/dist/illustrative-icon/components/user-offblack-static.cjs.js +2 -0
  886. package/dist/illustrative-icon/components/user-offblack-static.cjs.js.map +1 -0
  887. package/dist/illustrative-icon/components/user-offblack-static.d.ts +7 -0
  888. package/dist/illustrative-icon/components/user-offblack-static.d.ts.map +1 -0
  889. package/dist/illustrative-icon/components/user-offblack-static.es.js +10 -0
  890. package/dist/illustrative-icon/components/user-offblack-static.es.js.map +1 -0
  891. package/dist/illustrative-icon/components-metadata.js +280 -0
  892. package/dist/libraries/action/src/action.d.ts +2 -1
  893. package/dist/libraries/action/src/action.d.ts.map +1 -1
  894. package/dist/library.cjs.js +1 -1
  895. package/dist/library.es.js +12 -12
  896. package/dist/{pagination-BDfaybj3.js → pagination-C1rYXq9I.js} +2 -2
  897. package/dist/{pagination-BDfaybj3.js.map → pagination-C1rYXq9I.js.map} +1 -1
  898. package/dist/{pagination-Bm38GKga.mjs → pagination-CS1AMyBl.mjs} +2 -2
  899. package/dist/{pagination-Bm38GKga.mjs.map → pagination-CS1AMyBl.mjs.map} +1 -1
  900. package/dist/pagination.cjs.js +1 -1
  901. package/dist/pagination.es.js +1 -1
  902. package/dist/purpur.css +1 -1
  903. package/dist/{quantity-selector-B4YnfmNb.mjs → quantity-selector-COtqc-Iy.mjs} +2 -2
  904. package/dist/{quantity-selector-B4YnfmNb.mjs.map → quantity-selector-COtqc-Iy.mjs.map} +1 -1
  905. package/dist/{quantity-selector-CTBoxiPO.js → quantity-selector-CwxuBsVC.js} +2 -2
  906. package/dist/{quantity-selector-CTBoxiPO.js.map → quantity-selector-CwxuBsVC.js.map} +1 -1
  907. package/dist/quantity-selector.cjs.js +1 -1
  908. package/dist/quantity-selector.es.js +1 -1
  909. package/dist/{search-field-BPLzy3RR.mjs → search-field-BMC3WG2H.mjs} +2 -2
  910. package/dist/{search-field-BPLzy3RR.mjs.map → search-field-BMC3WG2H.mjs.map} +1 -1
  911. package/dist/{search-field-Dx4qCcrh.js → search-field-b1_QCs3U.js} +2 -2
  912. package/dist/{search-field-Dx4qCcrh.js.map → search-field-b1_QCs3U.js.map} +1 -1
  913. package/dist/search-field.cjs.js +1 -1
  914. package/dist/search-field.es.js +1 -1
  915. package/dist/select-D6R7I5b5.js +2 -0
  916. package/dist/select-D6R7I5b5.js.map +1 -0
  917. package/dist/{select-BEmu_fh9.mjs → select-XNPtpZhh.mjs} +59 -63
  918. package/dist/select-XNPtpZhh.mjs.map +1 -0
  919. package/dist/select.cjs.js +1 -1
  920. package/dist/select.es.js +1 -1
  921. package/dist/table-CR2Wj-O9.js +9 -0
  922. package/dist/{table-rS3hITtj.js.map → table-CR2Wj-O9.js.map} +1 -1
  923. package/dist/{table-D9MKkbPO.mjs → table-jvrz_ulj.mjs} +2315 -2337
  924. package/dist/{table-D9MKkbPO.mjs.map → table-jvrz_ulj.mjs.map} +1 -1
  925. package/dist/table.cjs.js +1 -1
  926. package/dist/table.es.js +1 -1
  927. package/dist/{text-field-D8MMa6ij.mjs → text-field-AsvqJh6P.mjs} +135 -135
  928. package/dist/text-field-AsvqJh6P.mjs.map +1 -0
  929. package/dist/{text-field-C2W13n15.js → text-field-CthxpKsp.js} +2 -2
  930. package/dist/text-field-CthxpKsp.js.map +1 -0
  931. package/dist/text-field.cjs.js +1 -1
  932. package/dist/text-field.es.js +1 -1
  933. package/package.json +25 -25
  934. package/dist/select-BEmu_fh9.mjs.map +0 -1
  935. package/dist/select-DOqTJgTj.js +0 -2
  936. package/dist/select-DOqTJgTj.js.map +0 -1
  937. package/dist/table-rS3hITtj.js +0 -9
  938. package/dist/text-field-C2W13n15.js.map +0 -1
  939. package/dist/text-field-D8MMa6ij.mjs.map +0 -1
package/CHANGELOG.json CHANGED
@@ -1,6 +1,63 @@
1
1
  {
2
2
  "name": "@purpur/library",
3
3
  "entries": [
4
+ {
5
+ "version": "9.9.0",
6
+ "tag": "@purpur/library_v9.9.0",
7
+ "date": "Fri, 03 Jul 2026 08:42:32 GMT",
8
+ "comments": {
9
+ "none": [
10
+ {
11
+ "comment": "ComparisonTable: Fix styling bugs for rich text descriptions"
12
+ },
13
+ {
14
+ "comment": "Label: Add visual regression tests"
15
+ },
16
+ {
17
+ "comment": "Icon: Add 3 new icons - sun, moon and unpin"
18
+ },
19
+ {
20
+ "comment": "IllustrativeIcon: Add 18 static and 17 animated illustrative icons"
21
+ },
22
+ {
23
+ "comment": "CounterBadge: Update Figma URL"
24
+ },
25
+ {
26
+ "comment": "Table: Fix a11y issue - remove misleading aria-label and aria-controls from the Expand/Minimize button"
27
+ },
28
+ {
29
+ "comment": "Table: Drag handles are proper buttons instead of a div with button role, for better semantics as suggested by a11y audit"
30
+ },
31
+ {
32
+ "comment": "Table: Mitigate a11y issue on table text filters, by using filterPlaceholder as aria-label if filterAriaLabel has not been set."
33
+ },
34
+ {
35
+ "comment": "Action: Do not require ariaLabel when iconOnly is explicitly set to false"
36
+ },
37
+ {
38
+ "comment": "Table: Fix a11y issue with aria-labels on column headings. This causes the sortingAriaLabels to become unused (kept as deprecated in public types for backwards compatibility)."
39
+ },
40
+ {
41
+ "comment": "Fix CVEs"
42
+ },
43
+ {
44
+ "comment": "CounterBadge: Add visual regression tests"
45
+ },
46
+ {
47
+ "comment": "Select: Add visual regression tests"
48
+ },
49
+ {
50
+ "comment": "CtaLink: Add visual regression tests for cta-link component"
51
+ },
52
+ {
53
+ "comment": "DateField: Add visual regression tests"
54
+ },
55
+ {
56
+ "comment": "Listbox: Add visual regression tests"
57
+ }
58
+ ]
59
+ }
60
+ },
4
61
  {
5
62
  "version": "9.8.1",
6
63
  "tag": "@purpur/library_v9.8.1",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,28 @@
1
1
  # Change Log - @purpur/library
2
2
 
3
- This log was last generated on Thu, 18 Jun 2026 08:35:11 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 03 Jul 2026 08:42:32 GMT and should not be manually modified.
4
+
5
+ ## 9.9.0
6
+ Fri, 03 Jul 2026 08:42:32 GMT
7
+
8
+ ### Updates
9
+
10
+ - ComparisonTable: Fix styling bugs for rich text descriptions
11
+ - Label: Add visual regression tests
12
+ - Icon: Add 3 new icons - sun, moon and unpin
13
+ - IllustrativeIcon: Add 18 static and 17 animated illustrative icons
14
+ - CounterBadge: Update Figma URL
15
+ - Table: Fix a11y issue - remove misleading aria-label and aria-controls from the Expand/Minimize button
16
+ - Table: Drag handles are proper buttons instead of a div with button role, for better semantics as suggested by a11y audit
17
+ - Table: Mitigate a11y issue on table text filters, by using filterPlaceholder as aria-label if filterAriaLabel has not been set.
18
+ - Action: Do not require ariaLabel when iconOnly is explicitly set to false
19
+ - Table: Fix a11y issue with aria-labels on column headings. This causes the sortingAriaLabels to become unused (kept as deprecated in public types for backwards compatibility).
20
+ - Fix CVEs
21
+ - CounterBadge: Add visual regression tests
22
+ - Select: Add visual regression tests
23
+ - CtaLink: Add visual regression tests for cta-link component
24
+ - DateField: Add visual regression tests
25
+ - Listbox: Add visual regression tests
4
26
 
5
27
  ## 9.8.1
6
28
  Thu, 18 Jun 2026 08:35:11 GMT
@@ -1,2 +1,2 @@
1
- "use strict";const p=require("react/jsx-runtime"),r=require("react"),de=require("./chevron-down.es-BMjgiS3F.js"),M=require("./listbox-lXO21cJV.js"),pe=require("./text-field-C2W13n15.js"),be=require("./bind-DeUYJ6m9.js"),me={"purpur-autocomplete":"_purpur-autocomplete_dgjyz_1","purpur-autocomplete__listbox":"_purpur-autocomplete__listbox_dgjyz_4","purpur-autocomplete__chevron-button":"_purpur-autocomplete__chevron-button_dgjyz_9","purpur-autocomplete__chevron-icon":"_purpur-autocomplete__chevron-icon_dgjyz_15","purpur-autocomplete__chevron-icon--up":"_purpur-autocomplete__chevron-icon--up_dgjyz_20"},fe=i=>r.useRef(i),xe=(i,x)=>{const n=r.useCallback(_=>{i&&!i.contains(_.target)&&x()},[x,i]);r.useEffect(()=>(document.addEventListener("mousedown",n),()=>{document.removeEventListener("mousedown",n)}),[n])},Z=({combobox:i,comboboxButtonAriaLabel:x,highlightFirstOption:n,defaultInputValue:_,inputValue:u,filterOption:R,id:l,listboxLabel:S,listboxMaxHeight:b,onInputBlur:h,onInputChange:L,onInputFocus:D,onInputKeyDown:k,onInputMouseDown:$,openOnFocus:A,noOptionsText:E,onSelect:T,options:a,selectedOption:t,["data-testid"]:y})=>{const[C,K]=r.useState(((typeof u=="string"?u:_)||t?.label)??""),F=typeof u=="string"?u:C,[c,v]=r.useState(n?a[0]:void 0),B=r.useRef(null),U=fe(null),N=r.useRef(null),O=r.useRef({}),[V,Y]=r.useState(!1);function q(e){return y?`${y}-${e}`:void 0}const w=()=>{Y(!1),v(void 0)};xe(U.current,w);const g=({eventType:e})=>{Y(!0),t&&requestAnimationFrame(()=>{v({...t,isSetByClickEvent:e==="CLICK"}),z(O.current[t.id])})},ee=e=>{if(R)return a.filter(s=>R(e,s));if(!e)return a;const o=e.toUpperCase().split(" ")||[];return a.filter(s=>o.every(f=>(s.value||s.label).toUpperCase().includes(f)))},G=e=>t&&t?.label===e?a:ee(e),d=G(F),P=e=>{L?.(e),K(e)},z=e=>{if(e){const o=e.getBoundingClientRect(),s=N.current?.getBoundingClientRect()||{top:0,bottom:0};(o.top<s.top||o.bottom>s.bottom)&&e.scrollIntoView({block:"nearest"})}},J=e=>{e&&(B.current?.focus(),P(e.label),T?.(e)),w()},te=e=>{const o=n&&!c?0:d.findIndex(f=>f&&c?.id===f.id),s=d.length;return e==="ArrowDown"?d[(o??-1)+1]||d[0]:d[(o??s)-1]||d[s-1]},m=V&&(!!d.length||!!E),oe=e=>{!m&&g({eventType:"KEYBOARD"});const o=te(e);v(o),o&&z(O.current[o.id])},ne=e=>{switch(k?.(e),e.key){case"ArrowUp":case"ArrowDown":e.preventDefault(),oe(e.key);break;case"Enter":{const o=c||(n?a[0]:void 0);m&&J(o),!m&&g({eventType:"KEYBOARD"});break}case"Escape":case"Tab":w();break}},se=e=>{const o=G(e.target.value);P(e.target.value),v(void 0),!m&&g({eventType:"KEYBOARD"}),n&&o[0]&&z(O.current[o[0].id])},ce=e=>{$?.(e),m?w():g({eventType:"CLICK"})},re=e=>{D?.(e),!V&&A&&g({eventType:"KEYBOARD"}),B.current?.select()},ie=e=>{h?.(e),setTimeout(()=>{!B.current?.contains(document.activeElement)&&!N.current?.contains(document.activeElement)&&(w(),i&&P(t?t.label:""))})},ue={maxHeight:typeof b=="number"?`${b}px`:b},Q={"aria-label":S,"aria-expanded":m,"data-testid":q("listbox"),id:`${l}-listbox`,ref:N,onMouseLeave:()=>v(void 0),style:b?ue:void 0},W=e=>`${l}-listbox-item-${e.id}`,le=(e,o)=>{const s=()=>e.id!==c?.id&&v({...e,isSetByClickEvent:!0}),f=(e.id===c?.id||!!n&&!c&&o===0)&&!c?.isSetByClickEvent;return{"data-testid":q(`listbox-item-${e.id}`),id:W(e),key:e.id,onMouseMove:s,onMouseUp:()=>J(e),ref:X=>{X&&(O.current[e.id]=X)},tabIndex:-1,selected:e.id===t?.id,disabled:e.disabled,highlighted:f,hovered:e.id===c?.id&&!!c?.isSetByClickEvent}},ae={"aria-activedescendant":c?W(c):void 0,"aria-autocomplete":"list","aria-controls":Q.id,"data-testid":q("input"),autoComplete:"off",id:`${l}-input`,onChange:se,onMouseDown:ce,onFocus:re,onKeyDown:ne,onBlur:ie,ref:B,role:"combobox",value:F};return{id:l,inputProps:ae,internalRef:U,optionsToShow:d,showListbox:m,noOptionsText:E,combobox:i,comboboxButtonAriaLabel:x,getListBoxItemProps:le,listboxProps:Q}},j=be.c.bind(me),I="purpur-autocomplete",ve=({className:i,renderInput:x,renderOption:n,..._},u)=>{const{id:R,inputProps:l,internalRef:S,optionsToShow:b,showListbox:h,noOptionsText:L,combobox:D,comboboxButtonAriaLabel:k,getListBoxItemProps:$,listboxProps:A}=Z(_),E=(t,y)=>{const{key:C,...K}=$(t,y);return p.jsx(M.Listbox.Item,{...K,children:n?n?.(t):t.label},C)},T=t=>{S.current=t,typeof u=="function"?u(t):u&&(u.current=t)},a=()=>{const t=x(l);if(D&&k&&L&&t&&pe.isTextField(t)){const C=p.jsxs(p.Fragment,{children:[t.props.endAdornment,p.jsx("button",{"data-testid":"chevron button",type:"button",className:j(`${I}__chevron-button`),onClick:()=>{l.onFocus(void 0),l.onMouseDown(void 0)},"aria-label":k,"aria-expanded":h,"aria-controls":A.id,children:p.jsx(de.l,{size:"sm",className:j(`${I}__chevron-icon`,{[`${I}__chevron-icon--up`]:h})})})]});return r.cloneElement(t,{endAdornment:C})}return t};return p.jsxs("div",{id:R,ref:T,className:j([I,i]),children:[a(),h&&p.jsx(M.Listbox,{...A,className:j(`${I}__listbox`),children:b.length?b.filter(t=>!!t).map(E):p.jsx(M.Listbox.Item,{noninteractive:!0,children:L})})]})},H=r.forwardRef(ve);H.displayName="Autocomplete";exports.Autocomplete=H;exports.useAutocomplete=Z;
2
- //# sourceMappingURL=autocomplete-CcVDJbwS.js.map
1
+ "use strict";const p=require("react/jsx-runtime"),r=require("react"),de=require("./chevron-down.es-BMjgiS3F.js"),M=require("./listbox-lXO21cJV.js"),pe=require("./text-field-CthxpKsp.js"),be=require("./bind-DeUYJ6m9.js"),me={"purpur-autocomplete":"_purpur-autocomplete_dgjyz_1","purpur-autocomplete__listbox":"_purpur-autocomplete__listbox_dgjyz_4","purpur-autocomplete__chevron-button":"_purpur-autocomplete__chevron-button_dgjyz_9","purpur-autocomplete__chevron-icon":"_purpur-autocomplete__chevron-icon_dgjyz_15","purpur-autocomplete__chevron-icon--up":"_purpur-autocomplete__chevron-icon--up_dgjyz_20"},fe=i=>r.useRef(i),xe=(i,x)=>{const n=r.useCallback(_=>{i&&!i.contains(_.target)&&x()},[x,i]);r.useEffect(()=>(document.addEventListener("mousedown",n),()=>{document.removeEventListener("mousedown",n)}),[n])},Z=({combobox:i,comboboxButtonAriaLabel:x,highlightFirstOption:n,defaultInputValue:_,inputValue:u,filterOption:R,id:l,listboxLabel:S,listboxMaxHeight:b,onInputBlur:h,onInputChange:L,onInputFocus:D,onInputKeyDown:k,onInputMouseDown:$,openOnFocus:A,noOptionsText:E,onSelect:T,options:a,selectedOption:t,["data-testid"]:y})=>{const[C,K]=r.useState(((typeof u=="string"?u:_)||t?.label)??""),F=typeof u=="string"?u:C,[c,v]=r.useState(n?a[0]:void 0),B=r.useRef(null),U=fe(null),N=r.useRef(null),O=r.useRef({}),[V,Y]=r.useState(!1);function q(e){return y?`${y}-${e}`:void 0}const w=()=>{Y(!1),v(void 0)};xe(U.current,w);const g=({eventType:e})=>{Y(!0),t&&requestAnimationFrame(()=>{v({...t,isSetByClickEvent:e==="CLICK"}),z(O.current[t.id])})},ee=e=>{if(R)return a.filter(s=>R(e,s));if(!e)return a;const o=e.toUpperCase().split(" ")||[];return a.filter(s=>o.every(f=>(s.value||s.label).toUpperCase().includes(f)))},G=e=>t&&t?.label===e?a:ee(e),d=G(F),P=e=>{L?.(e),K(e)},z=e=>{if(e){const o=e.getBoundingClientRect(),s=N.current?.getBoundingClientRect()||{top:0,bottom:0};(o.top<s.top||o.bottom>s.bottom)&&e.scrollIntoView({block:"nearest"})}},J=e=>{e&&(B.current?.focus(),P(e.label),T?.(e)),w()},te=e=>{const o=n&&!c?0:d.findIndex(f=>f&&c?.id===f.id),s=d.length;return e==="ArrowDown"?d[(o??-1)+1]||d[0]:d[(o??s)-1]||d[s-1]},m=V&&(!!d.length||!!E),oe=e=>{!m&&g({eventType:"KEYBOARD"});const o=te(e);v(o),o&&z(O.current[o.id])},ne=e=>{switch(k?.(e),e.key){case"ArrowUp":case"ArrowDown":e.preventDefault(),oe(e.key);break;case"Enter":{const o=c||(n?a[0]:void 0);m&&J(o),!m&&g({eventType:"KEYBOARD"});break}case"Escape":case"Tab":w();break}},se=e=>{const o=G(e.target.value);P(e.target.value),v(void 0),!m&&g({eventType:"KEYBOARD"}),n&&o[0]&&z(O.current[o[0].id])},ce=e=>{$?.(e),m?w():g({eventType:"CLICK"})},re=e=>{D?.(e),!V&&A&&g({eventType:"KEYBOARD"}),B.current?.select()},ie=e=>{h?.(e),setTimeout(()=>{!B.current?.contains(document.activeElement)&&!N.current?.contains(document.activeElement)&&(w(),i&&P(t?t.label:""))})},ue={maxHeight:typeof b=="number"?`${b}px`:b},Q={"aria-label":S,"aria-expanded":m,"data-testid":q("listbox"),id:`${l}-listbox`,ref:N,onMouseLeave:()=>v(void 0),style:b?ue:void 0},W=e=>`${l}-listbox-item-${e.id}`,le=(e,o)=>{const s=()=>e.id!==c?.id&&v({...e,isSetByClickEvent:!0}),f=(e.id===c?.id||!!n&&!c&&o===0)&&!c?.isSetByClickEvent;return{"data-testid":q(`listbox-item-${e.id}`),id:W(e),key:e.id,onMouseMove:s,onMouseUp:()=>J(e),ref:X=>{X&&(O.current[e.id]=X)},tabIndex:-1,selected:e.id===t?.id,disabled:e.disabled,highlighted:f,hovered:e.id===c?.id&&!!c?.isSetByClickEvent}},ae={"aria-activedescendant":c?W(c):void 0,"aria-autocomplete":"list","aria-controls":Q.id,"data-testid":q("input"),autoComplete:"off",id:`${l}-input`,onChange:se,onMouseDown:ce,onFocus:re,onKeyDown:ne,onBlur:ie,ref:B,role:"combobox",value:F};return{id:l,inputProps:ae,internalRef:U,optionsToShow:d,showListbox:m,noOptionsText:E,combobox:i,comboboxButtonAriaLabel:x,getListBoxItemProps:le,listboxProps:Q}},j=be.c.bind(me),I="purpur-autocomplete",ve=({className:i,renderInput:x,renderOption:n,..._},u)=>{const{id:R,inputProps:l,internalRef:S,optionsToShow:b,showListbox:h,noOptionsText:L,combobox:D,comboboxButtonAriaLabel:k,getListBoxItemProps:$,listboxProps:A}=Z(_),E=(t,y)=>{const{key:C,...K}=$(t,y);return p.jsx(M.Listbox.Item,{...K,children:n?n?.(t):t.label},C)},T=t=>{S.current=t,typeof u=="function"?u(t):u&&(u.current=t)},a=()=>{const t=x(l);if(D&&k&&L&&t&&pe.isTextField(t)){const C=p.jsxs(p.Fragment,{children:[t.props.endAdornment,p.jsx("button",{"data-testid":"chevron button",type:"button",className:j(`${I}__chevron-button`),onClick:()=>{l.onFocus(void 0),l.onMouseDown(void 0)},"aria-label":k,"aria-expanded":h,"aria-controls":A.id,children:p.jsx(de.l,{size:"sm",className:j(`${I}__chevron-icon`,{[`${I}__chevron-icon--up`]:h})})})]});return r.cloneElement(t,{endAdornment:C})}return t};return p.jsxs("div",{id:R,ref:T,className:j([I,i]),children:[a(),h&&p.jsx(M.Listbox,{...A,className:j(`${I}__listbox`),children:b.length?b.filter(t=>!!t).map(E):p.jsx(M.Listbox.Item,{noninteractive:!0,children:L})})]})},H=r.forwardRef(ve);H.displayName="Autocomplete";exports.Autocomplete=H;exports.useAutocomplete=Z;
2
+ //# sourceMappingURL=autocomplete-C6FXaaAT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-CcVDJbwS.js","sources":["../../../components/autocomplete/src/utils.ts","../../../components/autocomplete/src/useAutocomplete.ts","../../../components/autocomplete/src/autocomplete.tsx"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n// Used to \"merge\" \"intersection types\". Used to get comments on the props to the docs.\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport const useRefObject = <T>(value: T): RefObject<T> => {\n return useRef<T>(value) as RefObject<T>;\n};\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, ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport { useOnClickOutside, useRefObject } from \"./utils\";\n\nexport type AutocompleteOption = {\n label: string;\n id: string;\n value?: string;\n disabled?: boolean;\n};\n\nexport type InputProps = Omit<BaseProps<\"input\">, \"onFocus\" | \"onMouseDown\"> & {\n onFocus: (event: React.FocusEvent<HTMLInputElement> | undefined) => void;\n onMouseDown: (event: React.MouseEvent<HTMLInputElement> | undefined) => void;\n};\n\ntype ComboboxProps = {\n /*\n * Set to get combobox features. Use in combination with `noOptionsText`, `comboboxButtonAriaLabel` and Purpur TextField.\n */\n combobox: true;\n /**\n * An accessible label for the button that toggles the list of options for a combobox.\n * */\n comboboxButtonAriaLabel: string;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText: ReactNode;\n};\n\ntype NoComboboxProps = {\n combobox?: never;\n comboboxButtonAriaLabel?: never;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText?: ReactNode;\n};\n\nexport type UseAutocompleteResult<T extends AutocompleteOption> = {\n /*\n * Set to highlight the first option in the listbox when the input is focused.\n */\n highlightFirstOption?: boolean;\n /*\n * The default input value. Only to use when the input is uncontrolled.\n */\n defaultInputValue?: string;\n /*\n * The input value. Use this to control the input value.\n */\n inputValue?: string;\n /*\n * Invoked for each option. Use to control which options are shown.\n */\n filterOption?: (inputValue: string | undefined, option: T) => boolean;\n /*\n * Id will be used to prefix id:s of all elements.\n */\n id: string;\n /*\n * The label of the listbox (dropdown) displaying the options.\n */\n listboxLabel: string;\n /*\n * The height of the listbox. Number will be interpreted as px value. defaults to `calc(2 * var(--purpur-spacing-1200))`.\n */\n listboxMaxHeight?: string | number;\n /*\n * NOTE! Always use this instead of onBlur directly on the input element. Event handler invoked on input blur.\n */\n onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onChange directly on the input element. Event handler invoked when the input value changes.\n */\n onInputChange?: (value: string) => void;\n /*\n * NOTE! Always use this instead of onFocus directly on the input element. Event handler invoked on input focus.\n */\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * NOTE! Always use this instead of onKeyDown directly on the input element. Event handler invoked on input key down.\n */\n onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onMouseDown directly on the input element. Event handler invoked on input mouse down.\n */\n onInputMouseDown?: (event: React.MouseEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * Set to open the listbox when input gets focus.\n */\n openOnFocus?: boolean;\n /*\n * Event handler invoked when an option is selected.\n */\n onSelect?: (option: T | undefined) => void;\n /*\n * The list of options. Could include custom props.\n */\n options: T[];\n /*\n * The selected option.\n */\n selectedOption?: T;\n [\"data-testid\"]?: string;\n} & (ComboboxProps | NoComboboxProps);\n\nexport const useAutocomplete = <T extends AutocompleteOption>({\n combobox,\n comboboxButtonAriaLabel,\n highlightFirstOption,\n defaultInputValue,\n inputValue,\n filterOption,\n id,\n listboxLabel,\n listboxMaxHeight,\n onInputBlur,\n onInputChange,\n onInputFocus,\n onInputKeyDown,\n onInputMouseDown,\n openOnFocus,\n noOptionsText,\n onSelect,\n options,\n selectedOption,\n [\"data-testid\"]: dataTestid,\n}: UseAutocompleteResult<T>) => {\n const [internalInputValue, setInternalInputValue] = useState(\n ((typeof inputValue === \"string\" ? inputValue : defaultInputValue) || selectedOption?.label) ??\n \"\"\n );\n const definiteInputValue = typeof inputValue === \"string\" ? inputValue : internalInputValue;\n const [highlightedOption, setHighlightedOption] = useState<\n (T & { isSetByClickEvent?: false }) | undefined\n >(highlightFirstOption ? options[0] : undefined);\n const inputRef = useRef<HTMLInputElement>(null);\n const internalRef = useRefObject<HTMLDivElement | null>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n const [listboxIsOpen, setListboxIsOpen] = useState(false);\n\n function getTestId(name: string) {\n return dataTestid ? `${dataTestid}-${name}` : undefined;\n }\n\n const closeListbox = () => {\n setListboxIsOpen(false);\n setHighlightedOption(undefined);\n };\n\n useOnClickOutside(internalRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setListboxIsOpen(true);\n if (selectedOption) {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...selectedOption, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[selectedOption.id]);\n });\n }\n };\n\n const filterOptions = (searchTerm: string | undefined) => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n\n if (!searchTerm) {\n return options;\n }\n\n const searchTermChunks = searchTerm.toUpperCase().split(\" \") || [];\n return options.filter((option) =>\n searchTermChunks.every((chunk) =>\n (option.value || option.label).toUpperCase().includes(chunk)\n )\n );\n };\n\n const getOptionsToShow = (searchTerm: string | undefined): (T | undefined)[] => {\n return selectedOption && selectedOption?.label === searchTerm\n ? options\n : filterOptions(searchTerm);\n };\n\n const optionsToShow = getOptionsToShow(definiteInputValue);\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n const scrollOptionIntoView = (option: HTMLLIElement | undefined) => {\n if (option) {\n const optionRect = option.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOptionOutsideView =\n optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOptionOutsideView) {\n option.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const selectOption = (option: T | undefined) => {\n if (option) {\n inputRef.current?.focus();\n populateInputField(option.label);\n onSelect?.(option);\n }\n closeListbox();\n };\n\n const findNextOption = (key: \"ArrowUp\" | \"ArrowDown\"): T | undefined => {\n const index =\n highlightFirstOption && !highlightedOption\n ? 0\n : optionsToShow.findIndex((option) => option && highlightedOption?.id === option.id);\n\n const optionsLength = optionsToShow.length;\n\n return key === \"ArrowDown\"\n ? optionsToShow[(index ?? -1) + 1] || optionsToShow[0]\n : optionsToShow[(index ?? optionsLength) - 1] || optionsToShow[optionsLength - 1];\n };\n\n const showListbox = listboxIsOpen && (!!optionsToShow.length || !!noOptionsText);\n\n const highlightNextOption = (key: \"ArrowUp\" | \"ArrowDown\") => {\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n const nextOption = findNextOption(key);\n\n setHighlightedOption(nextOption);\n nextOption && scrollOptionIntoView(optionRefs.current[nextOption.id]);\n };\n\n const handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n onInputKeyDown?.(event);\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault(); // Preventing default to not move cursor in input\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n const optionToSelect = highlightedOption || (highlightFirstOption ? options[0] : undefined);\n showListbox && selectOption(optionToSelect);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n break;\n }\n case \"Escape\":\n case \"Tab\":\n closeListbox();\n break;\n }\n };\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const nextOptionsToShow = getOptionsToShow(e.target.value);\n populateInputField(e.target.value);\n setHighlightedOption(undefined);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n highlightFirstOption &&\n nextOptionsToShow[0] &&\n scrollOptionIntoView(optionRefs.current[nextOptionsToShow[0].id]);\n };\n\n const handleOnMouseDown = (event: React.MouseEvent<HTMLInputElement> | undefined) => {\n onInputMouseDown?.(event);\n showListbox ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleOnFocus = (event: React.FocusEvent<HTMLInputElement> | undefined) => {\n onInputFocus?.(event);\n !listboxIsOpen && openOnFocus && openListbox({ eventType: \"KEYBOARD\" });\n inputRef.current?.select();\n };\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = (event) => {\n onInputBlur?.(event);\n // Use a timeout to allow click events on the listbox to fire before this check\n setTimeout(() => {\n if (\n !inputRef.current?.contains(document.activeElement) &&\n !listboxRef.current?.contains(document.activeElement)\n ) {\n closeListbox();\n\n // If the blur happened due to a click inside the listbox for a combobox, don't reset the value\n if (combobox) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n const listboxStyle: CSSProperties = {\n maxHeight: typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n };\n\n const listboxProps: ListboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: `${id}-listbox`,\n ref: listboxRef,\n onMouseLeave: () => setHighlightedOption(undefined),\n style: listboxMaxHeight ? listboxStyle : undefined,\n };\n\n const createListboxItemId = (option: T) => `${id}-listbox-item-${option.id}`;\n\n const getListBoxItemProps = (option: T, index: number): ListboxItemProps => {\n const handleOnMouseMove = () =>\n option.id !== highlightedOption?.id &&\n setHighlightedOption({ ...option, isSetByClickEvent: true });\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: handleOnMouseMove,\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) {\n optionRefs.current[option.id] = el;\n }\n },\n tabIndex: -1,\n selected: option.id === selectedOption?.id,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n };\n };\n\n const inputProps: InputProps = {\n \"aria-activedescendant\": highlightedOption ? createListboxItemId(highlightedOption) : undefined,\n \"aria-autocomplete\": \"list\",\n \"aria-controls\": listboxProps.id,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n onChange: handleOnChange,\n onMouseDown: handleOnMouseDown,\n onFocus: handleOnFocus,\n onKeyDown: handleOnKeyDown,\n onBlur: handleOnBlur,\n ref: inputRef,\n role: \"combobox\",\n value: definiteInputValue,\n };\n\n return {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n };\n};\n","import type { ComponentPropsWithRef, ForwardedRef, ReactNode } from \"react\";\nimport React, { cloneElement, forwardRef } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { isTextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./autocomplete.module.scss\";\nimport type { AutocompleteOption, UseAutocompleteResult } from \"./useAutocomplete\";\nimport { useAutocomplete } from \"./useAutocomplete\";\nimport type { Prettify } from \"./utils\";\n\nconst cx = c.bind(styles);\n\ntype AutocompleteProps<T extends AutocompleteOption> = Prettify<\n UseAutocompleteResult<T> & {\n className?: string;\n /**\n * Render the input. `props` are native input props\n */\n renderInput: (props: ComponentPropsWithRef<\"input\">) => ReactNode;\n /**\n * Invoked for each given option. Use to customize the rendering of the options\n */\n renderOption?: (option: T) => ReactNode;\n }\n>;\n\nconst rootClassName = \"purpur-autocomplete\";\n\nconst AutocompleteComponent = <T extends AutocompleteOption>(\n { className, renderInput, renderOption, ...useAutocompleteProps }: AutocompleteProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n } = useAutocomplete(useAutocompleteProps);\n\n const renderListboxItem = (option: T, index: number) => {\n const { key, ...listboxItemProps } = getListBoxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {renderOption ? renderOption?.(option) : option.label}\n </Listbox.Item>\n );\n };\n\n const setRootRef = (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const getInputComponent = () => {\n const input = renderInput(inputProps);\n const isCombobox =\n combobox && comboboxButtonAriaLabel && noOptionsText && input && isTextField(input);\n\n if (isCombobox) {\n const endAdornment = (\n <>\n {input.props.endAdornment}\n <button\n data-testid=\"chevron button\"\n type=\"button\"\n className={cx(`${rootClassName}__chevron-button`)}\n onClick={() => {\n inputProps.onFocus(undefined);\n inputProps.onMouseDown(undefined);\n }}\n aria-label={comboboxButtonAriaLabel}\n aria-expanded={showListbox}\n aria-controls={listboxProps.id}\n >\n <IconChevronDown\n size=\"sm\"\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--up`]: showListbox,\n })}\n />\n </button>\n </>\n );\n\n return cloneElement(input, { endAdornment });\n }\n\n return input;\n };\n\n return (\n <div id={id} ref={setRootRef} className={cx([rootClassName, className])}>\n {getInputComponent()}\n {showListbox && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {!optionsToShow.length ? (\n <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>\n ) : (\n optionsToShow.filter((option): option is T => !!option).map(renderListboxItem)\n )}\n </Listbox>\n )}\n </div>\n );\n};\n\n/* @deprecated use `Dropdown` or `SearchField` instead, this is only exported for backwards compatibility and will be removed in a future release */\nexport const Autocomplete = forwardRef(AutocompleteComponent);\nAutocomplete.displayName = \"Autocomplete\";\n\nexport type {\n AutocompleteOption,\n UseAutocompleteResult as UseAutocompleteOptions,\n} from \"./useAutocomplete\";\nexport { useAutocomplete } from \"./useAutocomplete\";\n"],"names":["useRefObject","value","useRef","useOnClickOutside","element","callback","handleClickOutside","useCallback","event","useEffect","useAutocomplete","combobox","comboboxButtonAriaLabel","highlightFirstOption","defaultInputValue","inputValue","filterOption","id","listboxLabel","listboxMaxHeight","onInputBlur","onInputChange","onInputFocus","onInputKeyDown","onInputMouseDown","openOnFocus","noOptionsText","onSelect","options","selectedOption","dataTestid","internalInputValue","setInternalInputValue","useState","definiteInputValue","highlightedOption","setHighlightedOption","inputRef","internalRef","listboxRef","optionRefs","listboxIsOpen","setListboxIsOpen","getTestId","name","closeListbox","openListbox","eventType","scrollOptionIntoView","filterOptions","searchTerm","option","searchTermChunks","chunk","getOptionsToShow","optionsToShow","populateInputField","optionRect","listboxRect","selectOption","findNextOption","key","index","optionsLength","showListbox","highlightNextOption","nextOption","handleOnKeyDown","optionToSelect","handleOnChange","nextOptionsToShow","handleOnMouseDown","handleOnFocus","handleOnBlur","listboxStyle","listboxProps","createListboxItemId","getListBoxItemProps","handleOnMouseMove","highlighted","el","inputProps","cx","c","styles","rootClassName","AutocompleteComponent","className","renderInput","renderOption","useAutocompleteProps","ref","renderListboxItem","listboxItemProps","jsx","Listbox","setRootRef","node","getInputComponent","input","isTextField","endAdornment","jsxs","Fragment","IconChevronDown","cloneElement","Autocomplete","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-C6FXaaAT.js","sources":["../../../components/autocomplete/src/utils.ts","../../../components/autocomplete/src/useAutocomplete.ts","../../../components/autocomplete/src/autocomplete.tsx"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n// Used to \"merge\" \"intersection types\". Used to get comments on the props to the docs.\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport const useRefObject = <T>(value: T): RefObject<T> => {\n return useRef<T>(value) as RefObject<T>;\n};\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, ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport { useOnClickOutside, useRefObject } from \"./utils\";\n\nexport type AutocompleteOption = {\n label: string;\n id: string;\n value?: string;\n disabled?: boolean;\n};\n\nexport type InputProps = Omit<BaseProps<\"input\">, \"onFocus\" | \"onMouseDown\"> & {\n onFocus: (event: React.FocusEvent<HTMLInputElement> | undefined) => void;\n onMouseDown: (event: React.MouseEvent<HTMLInputElement> | undefined) => void;\n};\n\ntype ComboboxProps = {\n /*\n * Set to get combobox features. Use in combination with `noOptionsText`, `comboboxButtonAriaLabel` and Purpur TextField.\n */\n combobox: true;\n /**\n * An accessible label for the button that toggles the list of options for a combobox.\n * */\n comboboxButtonAriaLabel: string;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText: ReactNode;\n};\n\ntype NoComboboxProps = {\n combobox?: never;\n comboboxButtonAriaLabel?: never;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText?: ReactNode;\n};\n\nexport type UseAutocompleteResult<T extends AutocompleteOption> = {\n /*\n * Set to highlight the first option in the listbox when the input is focused.\n */\n highlightFirstOption?: boolean;\n /*\n * The default input value. Only to use when the input is uncontrolled.\n */\n defaultInputValue?: string;\n /*\n * The input value. Use this to control the input value.\n */\n inputValue?: string;\n /*\n * Invoked for each option. Use to control which options are shown.\n */\n filterOption?: (inputValue: string | undefined, option: T) => boolean;\n /*\n * Id will be used to prefix id:s of all elements.\n */\n id: string;\n /*\n * The label of the listbox (dropdown) displaying the options.\n */\n listboxLabel: string;\n /*\n * The height of the listbox. Number will be interpreted as px value. defaults to `calc(2 * var(--purpur-spacing-1200))`.\n */\n listboxMaxHeight?: string | number;\n /*\n * NOTE! Always use this instead of onBlur directly on the input element. Event handler invoked on input blur.\n */\n onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onChange directly on the input element. Event handler invoked when the input value changes.\n */\n onInputChange?: (value: string) => void;\n /*\n * NOTE! Always use this instead of onFocus directly on the input element. Event handler invoked on input focus.\n */\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * NOTE! Always use this instead of onKeyDown directly on the input element. Event handler invoked on input key down.\n */\n onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onMouseDown directly on the input element. Event handler invoked on input mouse down.\n */\n onInputMouseDown?: (event: React.MouseEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * Set to open the listbox when input gets focus.\n */\n openOnFocus?: boolean;\n /*\n * Event handler invoked when an option is selected.\n */\n onSelect?: (option: T | undefined) => void;\n /*\n * The list of options. Could include custom props.\n */\n options: T[];\n /*\n * The selected option.\n */\n selectedOption?: T;\n [\"data-testid\"]?: string;\n} & (ComboboxProps | NoComboboxProps);\n\nexport const useAutocomplete = <T extends AutocompleteOption>({\n combobox,\n comboboxButtonAriaLabel,\n highlightFirstOption,\n defaultInputValue,\n inputValue,\n filterOption,\n id,\n listboxLabel,\n listboxMaxHeight,\n onInputBlur,\n onInputChange,\n onInputFocus,\n onInputKeyDown,\n onInputMouseDown,\n openOnFocus,\n noOptionsText,\n onSelect,\n options,\n selectedOption,\n [\"data-testid\"]: dataTestid,\n}: UseAutocompleteResult<T>) => {\n const [internalInputValue, setInternalInputValue] = useState(\n ((typeof inputValue === \"string\" ? inputValue : defaultInputValue) || selectedOption?.label) ??\n \"\"\n );\n const definiteInputValue = typeof inputValue === \"string\" ? inputValue : internalInputValue;\n const [highlightedOption, setHighlightedOption] = useState<\n (T & { isSetByClickEvent?: false }) | undefined\n >(highlightFirstOption ? options[0] : undefined);\n const inputRef = useRef<HTMLInputElement>(null);\n const internalRef = useRefObject<HTMLDivElement | null>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n const [listboxIsOpen, setListboxIsOpen] = useState(false);\n\n function getTestId(name: string) {\n return dataTestid ? `${dataTestid}-${name}` : undefined;\n }\n\n const closeListbox = () => {\n setListboxIsOpen(false);\n setHighlightedOption(undefined);\n };\n\n useOnClickOutside(internalRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setListboxIsOpen(true);\n if (selectedOption) {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...selectedOption, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[selectedOption.id]);\n });\n }\n };\n\n const filterOptions = (searchTerm: string | undefined) => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n\n if (!searchTerm) {\n return options;\n }\n\n const searchTermChunks = searchTerm.toUpperCase().split(\" \") || [];\n return options.filter((option) =>\n searchTermChunks.every((chunk) =>\n (option.value || option.label).toUpperCase().includes(chunk)\n )\n );\n };\n\n const getOptionsToShow = (searchTerm: string | undefined): (T | undefined)[] => {\n return selectedOption && selectedOption?.label === searchTerm\n ? options\n : filterOptions(searchTerm);\n };\n\n const optionsToShow = getOptionsToShow(definiteInputValue);\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n const scrollOptionIntoView = (option: HTMLLIElement | undefined) => {\n if (option) {\n const optionRect = option.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOptionOutsideView =\n optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOptionOutsideView) {\n option.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const selectOption = (option: T | undefined) => {\n if (option) {\n inputRef.current?.focus();\n populateInputField(option.label);\n onSelect?.(option);\n }\n closeListbox();\n };\n\n const findNextOption = (key: \"ArrowUp\" | \"ArrowDown\"): T | undefined => {\n const index =\n highlightFirstOption && !highlightedOption\n ? 0\n : optionsToShow.findIndex((option) => option && highlightedOption?.id === option.id);\n\n const optionsLength = optionsToShow.length;\n\n return key === \"ArrowDown\"\n ? optionsToShow[(index ?? -1) + 1] || optionsToShow[0]\n : optionsToShow[(index ?? optionsLength) - 1] || optionsToShow[optionsLength - 1];\n };\n\n const showListbox = listboxIsOpen && (!!optionsToShow.length || !!noOptionsText);\n\n const highlightNextOption = (key: \"ArrowUp\" | \"ArrowDown\") => {\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n const nextOption = findNextOption(key);\n\n setHighlightedOption(nextOption);\n nextOption && scrollOptionIntoView(optionRefs.current[nextOption.id]);\n };\n\n const handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n onInputKeyDown?.(event);\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault(); // Preventing default to not move cursor in input\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n const optionToSelect = highlightedOption || (highlightFirstOption ? options[0] : undefined);\n showListbox && selectOption(optionToSelect);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n break;\n }\n case \"Escape\":\n case \"Tab\":\n closeListbox();\n break;\n }\n };\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const nextOptionsToShow = getOptionsToShow(e.target.value);\n populateInputField(e.target.value);\n setHighlightedOption(undefined);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n highlightFirstOption &&\n nextOptionsToShow[0] &&\n scrollOptionIntoView(optionRefs.current[nextOptionsToShow[0].id]);\n };\n\n const handleOnMouseDown = (event: React.MouseEvent<HTMLInputElement> | undefined) => {\n onInputMouseDown?.(event);\n showListbox ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleOnFocus = (event: React.FocusEvent<HTMLInputElement> | undefined) => {\n onInputFocus?.(event);\n !listboxIsOpen && openOnFocus && openListbox({ eventType: \"KEYBOARD\" });\n inputRef.current?.select();\n };\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = (event) => {\n onInputBlur?.(event);\n // Use a timeout to allow click events on the listbox to fire before this check\n setTimeout(() => {\n if (\n !inputRef.current?.contains(document.activeElement) &&\n !listboxRef.current?.contains(document.activeElement)\n ) {\n closeListbox();\n\n // If the blur happened due to a click inside the listbox for a combobox, don't reset the value\n if (combobox) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n const listboxStyle: CSSProperties = {\n maxHeight: typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n };\n\n const listboxProps: ListboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: `${id}-listbox`,\n ref: listboxRef,\n onMouseLeave: () => setHighlightedOption(undefined),\n style: listboxMaxHeight ? listboxStyle : undefined,\n };\n\n const createListboxItemId = (option: T) => `${id}-listbox-item-${option.id}`;\n\n const getListBoxItemProps = (option: T, index: number): ListboxItemProps => {\n const handleOnMouseMove = () =>\n option.id !== highlightedOption?.id &&\n setHighlightedOption({ ...option, isSetByClickEvent: true });\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: handleOnMouseMove,\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) {\n optionRefs.current[option.id] = el;\n }\n },\n tabIndex: -1,\n selected: option.id === selectedOption?.id,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n };\n };\n\n const inputProps: InputProps = {\n \"aria-activedescendant\": highlightedOption ? createListboxItemId(highlightedOption) : undefined,\n \"aria-autocomplete\": \"list\",\n \"aria-controls\": listboxProps.id,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n onChange: handleOnChange,\n onMouseDown: handleOnMouseDown,\n onFocus: handleOnFocus,\n onKeyDown: handleOnKeyDown,\n onBlur: handleOnBlur,\n ref: inputRef,\n role: \"combobox\",\n value: definiteInputValue,\n };\n\n return {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n };\n};\n","import type { ComponentPropsWithRef, ForwardedRef, ReactNode } from \"react\";\nimport React, { cloneElement, forwardRef } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { isTextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./autocomplete.module.scss\";\nimport type { AutocompleteOption, UseAutocompleteResult } from \"./useAutocomplete\";\nimport { useAutocomplete } from \"./useAutocomplete\";\nimport type { Prettify } from \"./utils\";\n\nconst cx = c.bind(styles);\n\ntype AutocompleteProps<T extends AutocompleteOption> = Prettify<\n UseAutocompleteResult<T> & {\n className?: string;\n /**\n * Render the input. `props` are native input props\n */\n renderInput: (props: ComponentPropsWithRef<\"input\">) => ReactNode;\n /**\n * Invoked for each given option. Use to customize the rendering of the options\n */\n renderOption?: (option: T) => ReactNode;\n }\n>;\n\nconst rootClassName = \"purpur-autocomplete\";\n\nconst AutocompleteComponent = <T extends AutocompleteOption>(\n { className, renderInput, renderOption, ...useAutocompleteProps }: AutocompleteProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n } = useAutocomplete(useAutocompleteProps);\n\n const renderListboxItem = (option: T, index: number) => {\n const { key, ...listboxItemProps } = getListBoxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {renderOption ? renderOption?.(option) : option.label}\n </Listbox.Item>\n );\n };\n\n const setRootRef = (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const getInputComponent = () => {\n const input = renderInput(inputProps);\n const isCombobox =\n combobox && comboboxButtonAriaLabel && noOptionsText && input && isTextField(input);\n\n if (isCombobox) {\n const endAdornment = (\n <>\n {input.props.endAdornment}\n <button\n data-testid=\"chevron button\"\n type=\"button\"\n className={cx(`${rootClassName}__chevron-button`)}\n onClick={() => {\n inputProps.onFocus(undefined);\n inputProps.onMouseDown(undefined);\n }}\n aria-label={comboboxButtonAriaLabel}\n aria-expanded={showListbox}\n aria-controls={listboxProps.id}\n >\n <IconChevronDown\n size=\"sm\"\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--up`]: showListbox,\n })}\n />\n </button>\n </>\n );\n\n return cloneElement(input, { endAdornment });\n }\n\n return input;\n };\n\n return (\n <div id={id} ref={setRootRef} className={cx([rootClassName, className])}>\n {getInputComponent()}\n {showListbox && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {!optionsToShow.length ? (\n <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>\n ) : (\n optionsToShow.filter((option): option is T => !!option).map(renderListboxItem)\n )}\n </Listbox>\n )}\n </div>\n );\n};\n\n/* @deprecated use `Dropdown` or `SearchField` instead, this is only exported for backwards compatibility and will be removed in a future release */\nexport const Autocomplete = forwardRef(AutocompleteComponent);\nAutocomplete.displayName = \"Autocomplete\";\n\nexport type {\n AutocompleteOption,\n UseAutocompleteResult as UseAutocompleteOptions,\n} from \"./useAutocomplete\";\nexport { useAutocomplete } from \"./useAutocomplete\";\n"],"names":["useRefObject","value","useRef","useOnClickOutside","element","callback","handleClickOutside","useCallback","event","useEffect","useAutocomplete","combobox","comboboxButtonAriaLabel","highlightFirstOption","defaultInputValue","inputValue","filterOption","id","listboxLabel","listboxMaxHeight","onInputBlur","onInputChange","onInputFocus","onInputKeyDown","onInputMouseDown","openOnFocus","noOptionsText","onSelect","options","selectedOption","dataTestid","internalInputValue","setInternalInputValue","useState","definiteInputValue","highlightedOption","setHighlightedOption","inputRef","internalRef","listboxRef","optionRefs","listboxIsOpen","setListboxIsOpen","getTestId","name","closeListbox","openListbox","eventType","scrollOptionIntoView","filterOptions","searchTerm","option","searchTermChunks","chunk","getOptionsToShow","optionsToShow","populateInputField","optionRect","listboxRect","selectOption","findNextOption","key","index","optionsLength","showListbox","highlightNextOption","nextOption","handleOnKeyDown","optionToSelect","handleOnChange","nextOptionsToShow","handleOnMouseDown","handleOnFocus","handleOnBlur","listboxStyle","listboxProps","createListboxItemId","getListBoxItemProps","handleOnMouseMove","highlighted","el","inputProps","cx","c","styles","rootClassName","AutocompleteComponent","className","renderInput","renderOption","useAutocompleteProps","ref","renderListboxItem","listboxItemProps","jsx","Listbox","setRootRef","node","getInputComponent","input","isTextField","endAdornment","jsxs","Fragment","IconChevronDown","cloneElement","Autocomplete","forwardRef"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as H, jsx as g, Fragment as de } from "react/jsx-runtime";
2
2
  import { useRef as D, useCallback as pe, useEffect as me, useState as U, forwardRef as be, cloneElement as fe } from "react";
3
3
  import { l as ve } from "./chevron-down.es-PCIIj6oG.mjs";
4
4
  import { L as V } from "./listbox-CtV-Vcmy.mjs";
5
- import { i as _e } from "./text-field-D8MMa6ij.mjs";
5
+ import { i as _e } from "./text-field-AsvqJh6P.mjs";
6
6
  import { c as xe } from "./bind-CU-R61T-.mjs";
7
7
  const he = {
8
8
  "purpur-autocomplete": "_purpur-autocomplete_dgjyz_1",
@@ -225,4 +225,4 @@ export {
225
225
  Ie as A,
226
226
  ge as u
227
227
  };
228
- //# sourceMappingURL=autocomplete-DF17Zm7Q.mjs.map
228
+ //# sourceMappingURL=autocomplete-q4ObPRfM.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-DF17Zm7Q.mjs","sources":["../../../components/autocomplete/src/utils.ts","../../../components/autocomplete/src/useAutocomplete.ts","../../../components/autocomplete/src/autocomplete.tsx"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n// Used to \"merge\" \"intersection types\". Used to get comments on the props to the docs.\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport const useRefObject = <T>(value: T): RefObject<T> => {\n return useRef<T>(value) as RefObject<T>;\n};\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, ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport { useOnClickOutside, useRefObject } from \"./utils\";\n\nexport type AutocompleteOption = {\n label: string;\n id: string;\n value?: string;\n disabled?: boolean;\n};\n\nexport type InputProps = Omit<BaseProps<\"input\">, \"onFocus\" | \"onMouseDown\"> & {\n onFocus: (event: React.FocusEvent<HTMLInputElement> | undefined) => void;\n onMouseDown: (event: React.MouseEvent<HTMLInputElement> | undefined) => void;\n};\n\ntype ComboboxProps = {\n /*\n * Set to get combobox features. Use in combination with `noOptionsText`, `comboboxButtonAriaLabel` and Purpur TextField.\n */\n combobox: true;\n /**\n * An accessible label for the button that toggles the list of options for a combobox.\n * */\n comboboxButtonAriaLabel: string;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText: ReactNode;\n};\n\ntype NoComboboxProps = {\n combobox?: never;\n comboboxButtonAriaLabel?: never;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText?: ReactNode;\n};\n\nexport type UseAutocompleteResult<T extends AutocompleteOption> = {\n /*\n * Set to highlight the first option in the listbox when the input is focused.\n */\n highlightFirstOption?: boolean;\n /*\n * The default input value. Only to use when the input is uncontrolled.\n */\n defaultInputValue?: string;\n /*\n * The input value. Use this to control the input value.\n */\n inputValue?: string;\n /*\n * Invoked for each option. Use to control which options are shown.\n */\n filterOption?: (inputValue: string | undefined, option: T) => boolean;\n /*\n * Id will be used to prefix id:s of all elements.\n */\n id: string;\n /*\n * The label of the listbox (dropdown) displaying the options.\n */\n listboxLabel: string;\n /*\n * The height of the listbox. Number will be interpreted as px value. defaults to `calc(2 * var(--purpur-spacing-1200))`.\n */\n listboxMaxHeight?: string | number;\n /*\n * NOTE! Always use this instead of onBlur directly on the input element. Event handler invoked on input blur.\n */\n onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onChange directly on the input element. Event handler invoked when the input value changes.\n */\n onInputChange?: (value: string) => void;\n /*\n * NOTE! Always use this instead of onFocus directly on the input element. Event handler invoked on input focus.\n */\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * NOTE! Always use this instead of onKeyDown directly on the input element. Event handler invoked on input key down.\n */\n onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onMouseDown directly on the input element. Event handler invoked on input mouse down.\n */\n onInputMouseDown?: (event: React.MouseEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * Set to open the listbox when input gets focus.\n */\n openOnFocus?: boolean;\n /*\n * Event handler invoked when an option is selected.\n */\n onSelect?: (option: T | undefined) => void;\n /*\n * The list of options. Could include custom props.\n */\n options: T[];\n /*\n * The selected option.\n */\n selectedOption?: T;\n [\"data-testid\"]?: string;\n} & (ComboboxProps | NoComboboxProps);\n\nexport const useAutocomplete = <T extends AutocompleteOption>({\n combobox,\n comboboxButtonAriaLabel,\n highlightFirstOption,\n defaultInputValue,\n inputValue,\n filterOption,\n id,\n listboxLabel,\n listboxMaxHeight,\n onInputBlur,\n onInputChange,\n onInputFocus,\n onInputKeyDown,\n onInputMouseDown,\n openOnFocus,\n noOptionsText,\n onSelect,\n options,\n selectedOption,\n [\"data-testid\"]: dataTestid,\n}: UseAutocompleteResult<T>) => {\n const [internalInputValue, setInternalInputValue] = useState(\n ((typeof inputValue === \"string\" ? inputValue : defaultInputValue) || selectedOption?.label) ??\n \"\"\n );\n const definiteInputValue = typeof inputValue === \"string\" ? inputValue : internalInputValue;\n const [highlightedOption, setHighlightedOption] = useState<\n (T & { isSetByClickEvent?: false }) | undefined\n >(highlightFirstOption ? options[0] : undefined);\n const inputRef = useRef<HTMLInputElement>(null);\n const internalRef = useRefObject<HTMLDivElement | null>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n const [listboxIsOpen, setListboxIsOpen] = useState(false);\n\n function getTestId(name: string) {\n return dataTestid ? `${dataTestid}-${name}` : undefined;\n }\n\n const closeListbox = () => {\n setListboxIsOpen(false);\n setHighlightedOption(undefined);\n };\n\n useOnClickOutside(internalRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setListboxIsOpen(true);\n if (selectedOption) {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...selectedOption, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[selectedOption.id]);\n });\n }\n };\n\n const filterOptions = (searchTerm: string | undefined) => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n\n if (!searchTerm) {\n return options;\n }\n\n const searchTermChunks = searchTerm.toUpperCase().split(\" \") || [];\n return options.filter((option) =>\n searchTermChunks.every((chunk) =>\n (option.value || option.label).toUpperCase().includes(chunk)\n )\n );\n };\n\n const getOptionsToShow = (searchTerm: string | undefined): (T | undefined)[] => {\n return selectedOption && selectedOption?.label === searchTerm\n ? options\n : filterOptions(searchTerm);\n };\n\n const optionsToShow = getOptionsToShow(definiteInputValue);\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n const scrollOptionIntoView = (option: HTMLLIElement | undefined) => {\n if (option) {\n const optionRect = option.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOptionOutsideView =\n optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOptionOutsideView) {\n option.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const selectOption = (option: T | undefined) => {\n if (option) {\n inputRef.current?.focus();\n populateInputField(option.label);\n onSelect?.(option);\n }\n closeListbox();\n };\n\n const findNextOption = (key: \"ArrowUp\" | \"ArrowDown\"): T | undefined => {\n const index =\n highlightFirstOption && !highlightedOption\n ? 0\n : optionsToShow.findIndex((option) => option && highlightedOption?.id === option.id);\n\n const optionsLength = optionsToShow.length;\n\n return key === \"ArrowDown\"\n ? optionsToShow[(index ?? -1) + 1] || optionsToShow[0]\n : optionsToShow[(index ?? optionsLength) - 1] || optionsToShow[optionsLength - 1];\n };\n\n const showListbox = listboxIsOpen && (!!optionsToShow.length || !!noOptionsText);\n\n const highlightNextOption = (key: \"ArrowUp\" | \"ArrowDown\") => {\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n const nextOption = findNextOption(key);\n\n setHighlightedOption(nextOption);\n nextOption && scrollOptionIntoView(optionRefs.current[nextOption.id]);\n };\n\n const handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n onInputKeyDown?.(event);\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault(); // Preventing default to not move cursor in input\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n const optionToSelect = highlightedOption || (highlightFirstOption ? options[0] : undefined);\n showListbox && selectOption(optionToSelect);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n break;\n }\n case \"Escape\":\n case \"Tab\":\n closeListbox();\n break;\n }\n };\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const nextOptionsToShow = getOptionsToShow(e.target.value);\n populateInputField(e.target.value);\n setHighlightedOption(undefined);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n highlightFirstOption &&\n nextOptionsToShow[0] &&\n scrollOptionIntoView(optionRefs.current[nextOptionsToShow[0].id]);\n };\n\n const handleOnMouseDown = (event: React.MouseEvent<HTMLInputElement> | undefined) => {\n onInputMouseDown?.(event);\n showListbox ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleOnFocus = (event: React.FocusEvent<HTMLInputElement> | undefined) => {\n onInputFocus?.(event);\n !listboxIsOpen && openOnFocus && openListbox({ eventType: \"KEYBOARD\" });\n inputRef.current?.select();\n };\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = (event) => {\n onInputBlur?.(event);\n // Use a timeout to allow click events on the listbox to fire before this check\n setTimeout(() => {\n if (\n !inputRef.current?.contains(document.activeElement) &&\n !listboxRef.current?.contains(document.activeElement)\n ) {\n closeListbox();\n\n // If the blur happened due to a click inside the listbox for a combobox, don't reset the value\n if (combobox) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n const listboxStyle: CSSProperties = {\n maxHeight: typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n };\n\n const listboxProps: ListboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: `${id}-listbox`,\n ref: listboxRef,\n onMouseLeave: () => setHighlightedOption(undefined),\n style: listboxMaxHeight ? listboxStyle : undefined,\n };\n\n const createListboxItemId = (option: T) => `${id}-listbox-item-${option.id}`;\n\n const getListBoxItemProps = (option: T, index: number): ListboxItemProps => {\n const handleOnMouseMove = () =>\n option.id !== highlightedOption?.id &&\n setHighlightedOption({ ...option, isSetByClickEvent: true });\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: handleOnMouseMove,\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) {\n optionRefs.current[option.id] = el;\n }\n },\n tabIndex: -1,\n selected: option.id === selectedOption?.id,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n };\n };\n\n const inputProps: InputProps = {\n \"aria-activedescendant\": highlightedOption ? createListboxItemId(highlightedOption) : undefined,\n \"aria-autocomplete\": \"list\",\n \"aria-controls\": listboxProps.id,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n onChange: handleOnChange,\n onMouseDown: handleOnMouseDown,\n onFocus: handleOnFocus,\n onKeyDown: handleOnKeyDown,\n onBlur: handleOnBlur,\n ref: inputRef,\n role: \"combobox\",\n value: definiteInputValue,\n };\n\n return {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n };\n};\n","import type { ComponentPropsWithRef, ForwardedRef, ReactNode } from \"react\";\nimport React, { cloneElement, forwardRef } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { isTextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./autocomplete.module.scss\";\nimport type { AutocompleteOption, UseAutocompleteResult } from \"./useAutocomplete\";\nimport { useAutocomplete } from \"./useAutocomplete\";\nimport type { Prettify } from \"./utils\";\n\nconst cx = c.bind(styles);\n\ntype AutocompleteProps<T extends AutocompleteOption> = Prettify<\n UseAutocompleteResult<T> & {\n className?: string;\n /**\n * Render the input. `props` are native input props\n */\n renderInput: (props: ComponentPropsWithRef<\"input\">) => ReactNode;\n /**\n * Invoked for each given option. Use to customize the rendering of the options\n */\n renderOption?: (option: T) => ReactNode;\n }\n>;\n\nconst rootClassName = \"purpur-autocomplete\";\n\nconst AutocompleteComponent = <T extends AutocompleteOption>(\n { className, renderInput, renderOption, ...useAutocompleteProps }: AutocompleteProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n } = useAutocomplete(useAutocompleteProps);\n\n const renderListboxItem = (option: T, index: number) => {\n const { key, ...listboxItemProps } = getListBoxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {renderOption ? renderOption?.(option) : option.label}\n </Listbox.Item>\n );\n };\n\n const setRootRef = (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const getInputComponent = () => {\n const input = renderInput(inputProps);\n const isCombobox =\n combobox && comboboxButtonAriaLabel && noOptionsText && input && isTextField(input);\n\n if (isCombobox) {\n const endAdornment = (\n <>\n {input.props.endAdornment}\n <button\n data-testid=\"chevron button\"\n type=\"button\"\n className={cx(`${rootClassName}__chevron-button`)}\n onClick={() => {\n inputProps.onFocus(undefined);\n inputProps.onMouseDown(undefined);\n }}\n aria-label={comboboxButtonAriaLabel}\n aria-expanded={showListbox}\n aria-controls={listboxProps.id}\n >\n <IconChevronDown\n size=\"sm\"\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--up`]: showListbox,\n })}\n />\n </button>\n </>\n );\n\n return cloneElement(input, { endAdornment });\n }\n\n return input;\n };\n\n return (\n <div id={id} ref={setRootRef} className={cx([rootClassName, className])}>\n {getInputComponent()}\n {showListbox && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {!optionsToShow.length ? (\n <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>\n ) : (\n optionsToShow.filter((option): option is T => !!option).map(renderListboxItem)\n )}\n </Listbox>\n )}\n </div>\n );\n};\n\n/* @deprecated use `Dropdown` or `SearchField` instead, this is only exported for backwards compatibility and will be removed in a future release */\nexport const Autocomplete = forwardRef(AutocompleteComponent);\nAutocomplete.displayName = \"Autocomplete\";\n\nexport type {\n AutocompleteOption,\n UseAutocompleteResult as UseAutocompleteOptions,\n} from \"./useAutocomplete\";\nexport { useAutocomplete } from \"./useAutocomplete\";\n"],"names":["useRefObject","value","useRef","useOnClickOutside","element","callback","handleClickOutside","useCallback","event","useEffect","useAutocomplete","combobox","comboboxButtonAriaLabel","highlightFirstOption","defaultInputValue","inputValue","filterOption","id","listboxLabel","listboxMaxHeight","onInputBlur","onInputChange","onInputFocus","onInputKeyDown","onInputMouseDown","openOnFocus","noOptionsText","onSelect","options","selectedOption","dataTestid","internalInputValue","setInternalInputValue","useState","definiteInputValue","highlightedOption","setHighlightedOption","inputRef","internalRef","listboxRef","optionRefs","listboxIsOpen","setListboxIsOpen","getTestId","name","closeListbox","openListbox","eventType","scrollOptionIntoView","filterOptions","searchTerm","option","searchTermChunks","chunk","getOptionsToShow","optionsToShow","populateInputField","optionRect","listboxRect","selectOption","findNextOption","key","index","optionsLength","showListbox","highlightNextOption","nextOption","handleOnKeyDown","optionToSelect","handleOnChange","nextOptionsToShow","handleOnMouseDown","handleOnFocus","handleOnBlur","listboxStyle","listboxProps","createListboxItemId","getListBoxItemProps","handleOnMouseMove","highlighted","el","inputProps","cx","c","styles","rootClassName","AutocompleteComponent","className","renderInput","renderOption","useAutocompleteProps","ref","renderListboxItem","listboxItemProps","jsx","Listbox","setRootRef","node","getInputComponent","input","isTextField","endAdornment","jsxs","Fragment","IconChevronDown","cloneElement","Autocomplete","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-q4ObPRfM.mjs","sources":["../../../components/autocomplete/src/utils.ts","../../../components/autocomplete/src/useAutocomplete.ts","../../../components/autocomplete/src/autocomplete.tsx"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n// Used to \"merge\" \"intersection types\". Used to get comments on the props to the docs.\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport const useRefObject = <T>(value: T): RefObject<T> => {\n return useRef<T>(value) as RefObject<T>;\n};\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, ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ListboxItemProps, ListboxProps } from \"@purpur/listbox\";\n\nimport { useOnClickOutside, useRefObject } from \"./utils\";\n\nexport type AutocompleteOption = {\n label: string;\n id: string;\n value?: string;\n disabled?: boolean;\n};\n\nexport type InputProps = Omit<BaseProps<\"input\">, \"onFocus\" | \"onMouseDown\"> & {\n onFocus: (event: React.FocusEvent<HTMLInputElement> | undefined) => void;\n onMouseDown: (event: React.MouseEvent<HTMLInputElement> | undefined) => void;\n};\n\ntype ComboboxProps = {\n /*\n * Set to get combobox features. Use in combination with `noOptionsText`, `comboboxButtonAriaLabel` and Purpur TextField.\n */\n combobox: true;\n /**\n * An accessible label for the button that toggles the list of options for a combobox.\n * */\n comboboxButtonAriaLabel: string;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText: ReactNode;\n};\n\ntype NoComboboxProps = {\n combobox?: never;\n comboboxButtonAriaLabel?: never;\n /*\n * Shown when there are no options to show. Will be displayed inside a listbox item.\n */\n noOptionsText?: ReactNode;\n};\n\nexport type UseAutocompleteResult<T extends AutocompleteOption> = {\n /*\n * Set to highlight the first option in the listbox when the input is focused.\n */\n highlightFirstOption?: boolean;\n /*\n * The default input value. Only to use when the input is uncontrolled.\n */\n defaultInputValue?: string;\n /*\n * The input value. Use this to control the input value.\n */\n inputValue?: string;\n /*\n * Invoked for each option. Use to control which options are shown.\n */\n filterOption?: (inputValue: string | undefined, option: T) => boolean;\n /*\n * Id will be used to prefix id:s of all elements.\n */\n id: string;\n /*\n * The label of the listbox (dropdown) displaying the options.\n */\n listboxLabel: string;\n /*\n * The height of the listbox. Number will be interpreted as px value. defaults to `calc(2 * var(--purpur-spacing-1200))`.\n */\n listboxMaxHeight?: string | number;\n /*\n * NOTE! Always use this instead of onBlur directly on the input element. Event handler invoked on input blur.\n */\n onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onChange directly on the input element. Event handler invoked when the input value changes.\n */\n onInputChange?: (value: string) => void;\n /*\n * NOTE! Always use this instead of onFocus directly on the input element. Event handler invoked on input focus.\n */\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * NOTE! Always use this instead of onKeyDown directly on the input element. Event handler invoked on input key down.\n */\n onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;\n /*\n * NOTE! Always use this instead of onMouseDown directly on the input element. Event handler invoked on input mouse down.\n */\n onInputMouseDown?: (event: React.MouseEvent<HTMLInputElement> | undefined) => undefined;\n /*\n * Set to open the listbox when input gets focus.\n */\n openOnFocus?: boolean;\n /*\n * Event handler invoked when an option is selected.\n */\n onSelect?: (option: T | undefined) => void;\n /*\n * The list of options. Could include custom props.\n */\n options: T[];\n /*\n * The selected option.\n */\n selectedOption?: T;\n [\"data-testid\"]?: string;\n} & (ComboboxProps | NoComboboxProps);\n\nexport const useAutocomplete = <T extends AutocompleteOption>({\n combobox,\n comboboxButtonAriaLabel,\n highlightFirstOption,\n defaultInputValue,\n inputValue,\n filterOption,\n id,\n listboxLabel,\n listboxMaxHeight,\n onInputBlur,\n onInputChange,\n onInputFocus,\n onInputKeyDown,\n onInputMouseDown,\n openOnFocus,\n noOptionsText,\n onSelect,\n options,\n selectedOption,\n [\"data-testid\"]: dataTestid,\n}: UseAutocompleteResult<T>) => {\n const [internalInputValue, setInternalInputValue] = useState(\n ((typeof inputValue === \"string\" ? inputValue : defaultInputValue) || selectedOption?.label) ??\n \"\"\n );\n const definiteInputValue = typeof inputValue === \"string\" ? inputValue : internalInputValue;\n const [highlightedOption, setHighlightedOption] = useState<\n (T & { isSetByClickEvent?: false }) | undefined\n >(highlightFirstOption ? options[0] : undefined);\n const inputRef = useRef<HTMLInputElement>(null);\n const internalRef = useRefObject<HTMLDivElement | null>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n const optionRefs = useRef<Record<string, HTMLLIElement>>({});\n const [listboxIsOpen, setListboxIsOpen] = useState(false);\n\n function getTestId(name: string) {\n return dataTestid ? `${dataTestid}-${name}` : undefined;\n }\n\n const closeListbox = () => {\n setListboxIsOpen(false);\n setHighlightedOption(undefined);\n };\n\n useOnClickOutside(internalRef.current, closeListbox);\n\n const openListbox = ({ eventType }: { eventType: \"CLICK\" | \"KEYBOARD\" }) => {\n setListboxIsOpen(true);\n if (selectedOption) {\n requestAnimationFrame(() => {\n const isSetByClickEvent = eventType === \"CLICK\";\n setHighlightedOption({ ...selectedOption, isSetByClickEvent });\n scrollOptionIntoView(optionRefs.current[selectedOption.id]);\n });\n }\n };\n\n const filterOptions = (searchTerm: string | undefined) => {\n if (filterOption) {\n return options.filter((option) => filterOption(searchTerm, option));\n }\n\n if (!searchTerm) {\n return options;\n }\n\n const searchTermChunks = searchTerm.toUpperCase().split(\" \") || [];\n return options.filter((option) =>\n searchTermChunks.every((chunk) =>\n (option.value || option.label).toUpperCase().includes(chunk)\n )\n );\n };\n\n const getOptionsToShow = (searchTerm: string | undefined): (T | undefined)[] => {\n return selectedOption && selectedOption?.label === searchTerm\n ? options\n : filterOptions(searchTerm);\n };\n\n const optionsToShow = getOptionsToShow(definiteInputValue);\n\n const populateInputField = (value: string) => {\n onInputChange?.(value);\n setInternalInputValue(value);\n };\n\n const scrollOptionIntoView = (option: HTMLLIElement | undefined) => {\n if (option) {\n const optionRect = option.getBoundingClientRect();\n const listboxRect = listboxRef.current?.getBoundingClientRect() || { top: 0, bottom: 0 };\n const isOptionOutsideView =\n optionRect.top < listboxRect.top || optionRect.bottom > listboxRect.bottom;\n if (isOptionOutsideView) {\n option.scrollIntoView({ block: \"nearest\" });\n }\n }\n };\n\n const selectOption = (option: T | undefined) => {\n if (option) {\n inputRef.current?.focus();\n populateInputField(option.label);\n onSelect?.(option);\n }\n closeListbox();\n };\n\n const findNextOption = (key: \"ArrowUp\" | \"ArrowDown\"): T | undefined => {\n const index =\n highlightFirstOption && !highlightedOption\n ? 0\n : optionsToShow.findIndex((option) => option && highlightedOption?.id === option.id);\n\n const optionsLength = optionsToShow.length;\n\n return key === \"ArrowDown\"\n ? optionsToShow[(index ?? -1) + 1] || optionsToShow[0]\n : optionsToShow[(index ?? optionsLength) - 1] || optionsToShow[optionsLength - 1];\n };\n\n const showListbox = listboxIsOpen && (!!optionsToShow.length || !!noOptionsText);\n\n const highlightNextOption = (key: \"ArrowUp\" | \"ArrowDown\") => {\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n const nextOption = findNextOption(key);\n\n setHighlightedOption(nextOption);\n nextOption && scrollOptionIntoView(optionRefs.current[nextOption.id]);\n };\n\n const handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n onInputKeyDown?.(event);\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault(); // Preventing default to not move cursor in input\n highlightNextOption(event.key);\n break;\n case \"Enter\": {\n const optionToSelect = highlightedOption || (highlightFirstOption ? options[0] : undefined);\n showListbox && selectOption(optionToSelect);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n break;\n }\n case \"Escape\":\n case \"Tab\":\n closeListbox();\n break;\n }\n };\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const nextOptionsToShow = getOptionsToShow(e.target.value);\n populateInputField(e.target.value);\n setHighlightedOption(undefined);\n !showListbox && openListbox({ eventType: \"KEYBOARD\" });\n highlightFirstOption &&\n nextOptionsToShow[0] &&\n scrollOptionIntoView(optionRefs.current[nextOptionsToShow[0].id]);\n };\n\n const handleOnMouseDown = (event: React.MouseEvent<HTMLInputElement> | undefined) => {\n onInputMouseDown?.(event);\n showListbox ? closeListbox() : openListbox({ eventType: \"CLICK\" });\n };\n\n const handleOnFocus = (event: React.FocusEvent<HTMLInputElement> | undefined) => {\n onInputFocus?.(event);\n !listboxIsOpen && openOnFocus && openListbox({ eventType: \"KEYBOARD\" });\n inputRef.current?.select();\n };\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = (event) => {\n onInputBlur?.(event);\n // Use a timeout to allow click events on the listbox to fire before this check\n setTimeout(() => {\n if (\n !inputRef.current?.contains(document.activeElement) &&\n !listboxRef.current?.contains(document.activeElement)\n ) {\n closeListbox();\n\n // If the blur happened due to a click inside the listbox for a combobox, don't reset the value\n if (combobox) {\n populateInputField(selectedOption ? selectedOption.label : \"\");\n }\n }\n });\n };\n\n const listboxStyle: CSSProperties = {\n maxHeight: typeof listboxMaxHeight === \"number\" ? `${listboxMaxHeight}px` : listboxMaxHeight,\n };\n\n const listboxProps: ListboxProps = {\n \"aria-label\": listboxLabel,\n \"aria-expanded\": showListbox,\n \"data-testid\": getTestId(\"listbox\"),\n id: `${id}-listbox`,\n ref: listboxRef,\n onMouseLeave: () => setHighlightedOption(undefined),\n style: listboxMaxHeight ? listboxStyle : undefined,\n };\n\n const createListboxItemId = (option: T) => `${id}-listbox-item-${option.id}`;\n\n const getListBoxItemProps = (option: T, index: number): ListboxItemProps => {\n const handleOnMouseMove = () =>\n option.id !== highlightedOption?.id &&\n setHighlightedOption({ ...option, isSetByClickEvent: true });\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: handleOnMouseMove,\n onMouseUp: () => selectOption(option),\n ref: (el) => {\n if (el) {\n optionRefs.current[option.id] = el;\n }\n },\n tabIndex: -1,\n selected: option.id === selectedOption?.id,\n disabled: option.disabled,\n highlighted,\n hovered: option.id === highlightedOption?.id && !!highlightedOption?.isSetByClickEvent,\n };\n };\n\n const inputProps: InputProps = {\n \"aria-activedescendant\": highlightedOption ? createListboxItemId(highlightedOption) : undefined,\n \"aria-autocomplete\": \"list\",\n \"aria-controls\": listboxProps.id,\n \"data-testid\": getTestId(\"input\"),\n autoComplete: \"off\",\n id: `${id}-input`,\n onChange: handleOnChange,\n onMouseDown: handleOnMouseDown,\n onFocus: handleOnFocus,\n onKeyDown: handleOnKeyDown,\n onBlur: handleOnBlur,\n ref: inputRef,\n role: \"combobox\",\n value: definiteInputValue,\n };\n\n return {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n };\n};\n","import type { ComponentPropsWithRef, ForwardedRef, ReactNode } from \"react\";\nimport React, { cloneElement, forwardRef } from \"react\";\nimport { IconChevronDown } from \"@purpur/icon/chevron-down\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { isTextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./autocomplete.module.scss\";\nimport type { AutocompleteOption, UseAutocompleteResult } from \"./useAutocomplete\";\nimport { useAutocomplete } from \"./useAutocomplete\";\nimport type { Prettify } from \"./utils\";\n\nconst cx = c.bind(styles);\n\ntype AutocompleteProps<T extends AutocompleteOption> = Prettify<\n UseAutocompleteResult<T> & {\n className?: string;\n /**\n * Render the input. `props` are native input props\n */\n renderInput: (props: ComponentPropsWithRef<\"input\">) => ReactNode;\n /**\n * Invoked for each given option. Use to customize the rendering of the options\n */\n renderOption?: (option: T) => ReactNode;\n }\n>;\n\nconst rootClassName = \"purpur-autocomplete\";\n\nconst AutocompleteComponent = <T extends AutocompleteOption>(\n { className, renderInput, renderOption, ...useAutocompleteProps }: AutocompleteProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const {\n id,\n inputProps,\n internalRef,\n optionsToShow,\n showListbox,\n noOptionsText,\n combobox,\n comboboxButtonAriaLabel,\n getListBoxItemProps,\n listboxProps,\n } = useAutocomplete(useAutocompleteProps);\n\n const renderListboxItem = (option: T, index: number) => {\n const { key, ...listboxItemProps } = getListBoxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {renderOption ? renderOption?.(option) : option.label}\n </Listbox.Item>\n );\n };\n\n const setRootRef = (node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const getInputComponent = () => {\n const input = renderInput(inputProps);\n const isCombobox =\n combobox && comboboxButtonAriaLabel && noOptionsText && input && isTextField(input);\n\n if (isCombobox) {\n const endAdornment = (\n <>\n {input.props.endAdornment}\n <button\n data-testid=\"chevron button\"\n type=\"button\"\n className={cx(`${rootClassName}__chevron-button`)}\n onClick={() => {\n inputProps.onFocus(undefined);\n inputProps.onMouseDown(undefined);\n }}\n aria-label={comboboxButtonAriaLabel}\n aria-expanded={showListbox}\n aria-controls={listboxProps.id}\n >\n <IconChevronDown\n size=\"sm\"\n className={cx(`${rootClassName}__chevron-icon`, {\n [`${rootClassName}__chevron-icon--up`]: showListbox,\n })}\n />\n </button>\n </>\n );\n\n return cloneElement(input, { endAdornment });\n }\n\n return input;\n };\n\n return (\n <div id={id} ref={setRootRef} className={cx([rootClassName, className])}>\n {getInputComponent()}\n {showListbox && (\n <Listbox {...listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {!optionsToShow.length ? (\n <Listbox.Item noninteractive>{noOptionsText}</Listbox.Item>\n ) : (\n optionsToShow.filter((option): option is T => !!option).map(renderListboxItem)\n )}\n </Listbox>\n )}\n </div>\n );\n};\n\n/* @deprecated use `Dropdown` or `SearchField` instead, this is only exported for backwards compatibility and will be removed in a future release */\nexport const Autocomplete = forwardRef(AutocompleteComponent);\nAutocomplete.displayName = \"Autocomplete\";\n\nexport type {\n AutocompleteOption,\n UseAutocompleteResult as UseAutocompleteOptions,\n} from \"./useAutocomplete\";\nexport { useAutocomplete } from \"./useAutocomplete\";\n"],"names":["useRefObject","value","useRef","useOnClickOutside","element","callback","handleClickOutside","useCallback","event","useEffect","useAutocomplete","combobox","comboboxButtonAriaLabel","highlightFirstOption","defaultInputValue","inputValue","filterOption","id","listboxLabel","listboxMaxHeight","onInputBlur","onInputChange","onInputFocus","onInputKeyDown","onInputMouseDown","openOnFocus","noOptionsText","onSelect","options","selectedOption","dataTestid","internalInputValue","setInternalInputValue","useState","definiteInputValue","highlightedOption","setHighlightedOption","inputRef","internalRef","listboxRef","optionRefs","listboxIsOpen","setListboxIsOpen","getTestId","name","closeListbox","openListbox","eventType","scrollOptionIntoView","filterOptions","searchTerm","option","searchTermChunks","chunk","getOptionsToShow","optionsToShow","populateInputField","optionRect","listboxRect","selectOption","findNextOption","key","index","optionsLength","showListbox","highlightNextOption","nextOption","handleOnKeyDown","optionToSelect","handleOnChange","nextOptionsToShow","handleOnMouseDown","handleOnFocus","handleOnBlur","listboxStyle","listboxProps","createListboxItemId","getListBoxItemProps","handleOnMouseMove","highlighted","el","inputProps","cx","c","styles","rootClassName","AutocompleteComponent","className","renderInput","renderOption","useAutocompleteProps","ref","renderListboxItem","listboxItemProps","jsx","Listbox","setRootRef","node","getInputComponent","input","isTextField","endAdornment","jsxs","Fragment","IconChevronDown","cloneElement","Autocomplete","forwardRef"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./autocomplete-CcVDJbwS.js");exports.Autocomplete=e.Autocomplete;exports.useAutocomplete=e.useAutocomplete;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./autocomplete-C6FXaaAT.js");exports.Autocomplete=e.Autocomplete;exports.useAutocomplete=e.useAutocomplete;
2
2
  //# sourceMappingURL=autocomplete.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { A as t, u } from "./autocomplete-DF17Zm7Q.mjs";
1
+ import { A as t, u } from "./autocomplete-q4ObPRfM.mjs";
2
2
  export {
3
3
  t as Autocomplete,
4
4
  u as useAutocomplete
@@ -1 +1 @@
1
- {"version":3,"file":"button-4-yWOgtD.mjs","sources":["../../action/src/action.tsx","../../../components/button/src/button.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\n\nexport const VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n EXPRESSIVE: \"expressive\",\n} as const;\n\nexport const variants = Object.values(VARIANT);\nexport type Variant = (typeof VARIANT)[keyof typeof VARIANT];\n\nexport const SIZE = {\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport const sizes = Object.values(SIZE);\nexport type Size = (typeof SIZE)[keyof typeof SIZE];\n\ntype DefaultProps<TVariant, T = object> = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n className?: string;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n variant: TVariant | Variant;\n} & T;\n\nexport type UnionParams<TVariant> =\n | DefaultProps<TVariant, { iconOnly: boolean; [\"aria-label\"]: string }>\n | DefaultProps<TVariant, { [\"aria-label\"]?: string }>;\n\ntype UnionKeys<T> = T extends T ? keyof T : never;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype StrictUnionHelper<T, TAll> = T extends any\n ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>>\n : never;\n\ntype StrictUnion<T> = StrictUnionHelper<T, T>;\n\nexport type ActionProps<TVariant extends string = Variant> = StrictUnion<UnionParams<TVariant>>;\n","import React, { type ButtonHTMLAttributes, forwardRef, type MouseEvent } from \"react\";\nimport { type ActionProps, SIZE, VARIANT } from \"@purpur/action\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TEXT: \"text\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-button\";\n\ntype ButtonType = Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"type\">[\"type\"];\nexport const BUTTON_TYPES: ButtonType[] = [\"button\", \"submit\", \"reset\"] as const;\n\ntype ButtonBaseProps = BaseProps<\"button\"> & { ai?: boolean; loading?: boolean };\n\nexport type ButtonProps =\n | (ActionProps<ButtonVariant> & ButtonBaseProps & { iconOnly?: false | undefined })\n | (ActionProps<Exclude<ButtonVariant, \"destructive\">> & ButtonBaseProps & { iconOnly: true });\n\ntype DistributiveOmit<T, K extends keyof never> = T extends unknown ? Omit<T, K> : never;\n\nconst shouldRenderChildren = ({ iconOnly, loading }: Pick<ButtonProps, \"iconOnly\" | \"loading\">) =>\n !(iconOnly && loading);\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n DistributiveOmit<ButtonProps, \"type\"> & { type?: ButtonType }\n>(\n (\n {\n ai = false,\n children,\n className,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n negative = false,\n onClick,\n size = \"md\",\n variant,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n if (iconOnly && variant === (\"destructive\" as string)) {\n return null;\n }\n\n const variantClass = `${variant}${ai ? \"-ai\" : \"\"}${negative ? \"-negative\" : \"\"}`;\n\n const classes = cx(\n [rootClassName, `${rootClassName}--${variantClass}`, `${rootClassName}--${size}`],\n {\n [`${rootClassName}--icon-only`]: iconOnly,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--disabled`]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const _disabled = Boolean(props[\"aria-disabled\"]) || disabled || loading;\n const renderChildren = shouldRenderChildren({ iconOnly, loading });\n\n return (\n <button\n className={classes}\n type={type}\n ref={ref}\n aria-disabled={_disabled}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === SIZE.LG ? \"xs\" : \"xxs\"}\n negative={negative}\n disabled={_disabled}\n className={cx(`${rootClassName}__spinner`)}\n />\n )}\n {renderChildren ? children : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["VARIANT","SIZE","BUTTON_VARIANT","buttonVariants","cx","c","styles","rootClassName","BUTTON_TYPES","shouldRenderChildren","iconOnly","loading","Button","forwardRef","ai","children","className","disabled","fullWidth","negative","onClick","size","variant","type","props","ref","variantClass","classes","handleClick","e","_disabled","renderChildren","jsxs","jsx","Spinner"],"mappings":";;;;AAEO,MAAMA,IAAU;AAAA,EACrB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AACd,GAKaC,IAAO;AAAA,EAIlB,IAAI;AACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCRaC,IAAiB;AAAA,EAC5B,GAAGF;AAAA,EACH,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,MAAM;AACR,GAEaG,IAAiB,OAAO,OAAOD,CAAc,GAGpDE,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,iBAGTC,IAA6B,CAAC,UAAU,UAAU,OAAO,GAUhEC,IAAuB,CAAC,EAAE,UAAAC,GAAU,SAAAC,EAAA,MACxC,EAAED,KAAYC,IAEHC,IAASC;AAAA,EAIpB,CACE;AAAA,IACE,IAAAC,IAAK;AAAA,IACL,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,UAAAR;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,UAAAQ,IAAW;AAAA,IACX,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,QAAIf,KAAYY,MAAa;AAC3B,aAAO;AAGT,UAAMI,IAAe,GAAGJ,CAAO,GAAGR,IAAK,QAAQ,EAAE,GAAGK,IAAW,cAAc,EAAE,IAEzEQ,IAAUvB;AAAA,MACd,CAACG,GAAe,GAAGA,CAAa,KAAKmB,CAAY,IAAI,GAAGnB,CAAa,KAAKc,CAAI,EAAE;AAAA,MAChF;AAAA,QACE,CAAC,GAAGd,CAAa,aAAa,GAAGG;AAAA,QACjC,CAAC,GAAGH,CAAa,YAAY,GAAGY;AAAA,QAChC,CAAC,GAAGZ,CAAa,cAAc,GAAGW;AAAA,QAClC,CAAC,GAAGX,CAAa,YAAY,GAAGU,KAAYN;AAAA,MAAA;AAAA,MAE9CK;AAAA,IAAA,GAGIY,IAAc,CAACC,MAAqC;AACxD,MAAIZ,KAAYN,IACdkB,EAAE,eAAA,IACOT,KACTA,EAAQS,CAAC;AAAA,IAEb,GAEMC,IAAY,EAAQN,EAAM,eAAe,KAAMP,KAAYN,GAC3DoB,IAAiBtB,EAAqB,EAAE,UAAAC,GAAU,SAAAC,GAAS;AAEjE,WACE,gBAAAqB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWL;AAAA,QACX,MAAAJ;AAAA,QACA,KAAAE;AAAA,QACA,iBAAeK;AAAA,QACf,SAASF;AAAA,QACR,GAAGJ;AAAA,QAEH,UAAA;AAAA,UAAAb,KACC,gBAAAsB;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,MAAMb,MAASpB,EAAK,KAAK,OAAO;AAAA,cAChC,UAAAkB;AAAA,cACA,UAAUW;AAAA,cACV,WAAW1B,EAAG,GAAGG,CAAa,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAG5CwB,IAAiBhB,IAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGnC;AACF;AAEAH,EAAO,cAAc;"}
1
+ {"version":3,"file":"button-4-yWOgtD.mjs","sources":["../../action/src/action.tsx","../../../components/button/src/button.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\n\nexport const VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n EXPRESSIVE: \"expressive\",\n} as const;\n\nexport const variants = Object.values(VARIANT);\nexport type Variant = (typeof VARIANT)[keyof typeof VARIANT];\n\nexport const SIZE = {\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport const sizes = Object.values(SIZE);\nexport type Size = (typeof SIZE)[keyof typeof SIZE];\n\ntype DefaultProps<TVariant, T = object> = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n className?: string;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n variant: TVariant | Variant;\n} & T;\n\nexport type UnionParams<TVariant> =\n | DefaultProps<TVariant, { iconOnly: true; [\"aria-label\"]: string }>\n | DefaultProps<TVariant, { iconOnly?: false; [\"aria-label\"]?: string }>;\n\ntype UnionKeys<T> = T extends T ? keyof T : never;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype StrictUnionHelper<T, TAll> = T extends any\n ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>>\n : never;\n\ntype StrictUnion<T> = StrictUnionHelper<T, T>;\n\nexport type ActionProps<TVariant extends string = Variant> = StrictUnion<UnionParams<TVariant>>;\n","import React, { type ButtonHTMLAttributes, forwardRef, type MouseEvent } from \"react\";\nimport { type ActionProps, SIZE, VARIANT } from \"@purpur/action\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TEXT: \"text\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-button\";\n\ntype ButtonType = Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"type\">[\"type\"];\nexport const BUTTON_TYPES: ButtonType[] = [\"button\", \"submit\", \"reset\"] as const;\n\ntype ButtonBaseProps = BaseProps<\"button\"> & { ai?: boolean; loading?: boolean };\n\nexport type ButtonProps =\n | (ActionProps<ButtonVariant> & ButtonBaseProps & { iconOnly?: false | undefined })\n | (ActionProps<Exclude<ButtonVariant, \"destructive\">> & ButtonBaseProps & { iconOnly: true });\n\ntype DistributiveOmit<T, K extends keyof never> = T extends unknown ? Omit<T, K> : never;\n\nconst shouldRenderChildren = ({ iconOnly, loading }: Pick<ButtonProps, \"iconOnly\" | \"loading\">) =>\n !(iconOnly && loading);\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n DistributiveOmit<ButtonProps, \"type\"> & { type?: ButtonType }\n>(\n (\n {\n ai = false,\n children,\n className,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n negative = false,\n onClick,\n size = \"md\",\n variant,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n if (iconOnly && variant === (\"destructive\" as string)) {\n return null;\n }\n\n const variantClass = `${variant}${ai ? \"-ai\" : \"\"}${negative ? \"-negative\" : \"\"}`;\n\n const classes = cx(\n [rootClassName, `${rootClassName}--${variantClass}`, `${rootClassName}--${size}`],\n {\n [`${rootClassName}--icon-only`]: iconOnly,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--disabled`]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const _disabled = Boolean(props[\"aria-disabled\"]) || disabled || loading;\n const renderChildren = shouldRenderChildren({ iconOnly, loading });\n\n return (\n <button\n className={classes}\n type={type}\n ref={ref}\n aria-disabled={_disabled}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === SIZE.LG ? \"xs\" : \"xxs\"}\n negative={negative}\n disabled={_disabled}\n className={cx(`${rootClassName}__spinner`)}\n />\n )}\n {renderChildren ? children : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["VARIANT","SIZE","BUTTON_VARIANT","buttonVariants","cx","c","styles","rootClassName","BUTTON_TYPES","shouldRenderChildren","iconOnly","loading","Button","forwardRef","ai","children","className","disabled","fullWidth","negative","onClick","size","variant","type","props","ref","variantClass","classes","handleClick","e","_disabled","renderChildren","jsxs","jsx","Spinner"],"mappings":";;;;AAEO,MAAMA,IAAU;AAAA,EACrB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AACd,GAKaC,IAAO;AAAA,EAIlB,IAAI;AACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCRaC,IAAiB;AAAA,EAC5B,GAAGF;AAAA,EACH,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,MAAM;AACR,GAEaG,IAAiB,OAAO,OAAOD,CAAc,GAGpDE,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,iBAGTC,IAA6B,CAAC,UAAU,UAAU,OAAO,GAUhEC,IAAuB,CAAC,EAAE,UAAAC,GAAU,SAAAC,EAAA,MACxC,EAAED,KAAYC,IAEHC,IAASC;AAAA,EAIpB,CACE;AAAA,IACE,IAAAC,IAAK;AAAA,IACL,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,UAAAR;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,UAAAQ,IAAW;AAAA,IACX,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,QAAIf,KAAYY,MAAa;AAC3B,aAAO;AAGT,UAAMI,IAAe,GAAGJ,CAAO,GAAGR,IAAK,QAAQ,EAAE,GAAGK,IAAW,cAAc,EAAE,IAEzEQ,IAAUvB;AAAA,MACd,CAACG,GAAe,GAAGA,CAAa,KAAKmB,CAAY,IAAI,GAAGnB,CAAa,KAAKc,CAAI,EAAE;AAAA,MAChF;AAAA,QACE,CAAC,GAAGd,CAAa,aAAa,GAAGG;AAAA,QACjC,CAAC,GAAGH,CAAa,YAAY,GAAGY;AAAA,QAChC,CAAC,GAAGZ,CAAa,cAAc,GAAGW;AAAA,QAClC,CAAC,GAAGX,CAAa,YAAY,GAAGU,KAAYN;AAAA,MAAA;AAAA,MAE9CK;AAAA,IAAA,GAGIY,IAAc,CAACC,MAAqC;AACxD,MAAIZ,KAAYN,IACdkB,EAAE,eAAA,IACOT,KACTA,EAAQS,CAAC;AAAA,IAEb,GAEMC,IAAY,EAAQN,EAAM,eAAe,KAAMP,KAAYN,GAC3DoB,IAAiBtB,EAAqB,EAAE,UAAAC,GAAU,SAAAC,GAAS;AAEjE,WACE,gBAAAqB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWL;AAAA,QACX,MAAAJ;AAAA,QACA,KAAAE;AAAA,QACA,iBAAeK;AAAA,QACf,SAASF;AAAA,QACR,GAAGJ;AAAA,QAEH,UAAA;AAAA,UAAAb,KACC,gBAAAsB;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,MAAMb,MAASpB,EAAK,KAAK,OAAO;AAAA,cAChC,UAAAkB;AAAA,cACA,UAAUW;AAAA,cACV,WAAW1B,EAAG,GAAGG,CAAa,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAG5CwB,IAAiBhB,IAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGnC;AACF;AAEAH,EAAO,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"button-DmybVApa.js","sources":["../../action/src/action.tsx","../../../components/button/src/button.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\n\nexport const VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n EXPRESSIVE: \"expressive\",\n} as const;\n\nexport const variants = Object.values(VARIANT);\nexport type Variant = (typeof VARIANT)[keyof typeof VARIANT];\n\nexport const SIZE = {\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport const sizes = Object.values(SIZE);\nexport type Size = (typeof SIZE)[keyof typeof SIZE];\n\ntype DefaultProps<TVariant, T = object> = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n className?: string;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n variant: TVariant | Variant;\n} & T;\n\nexport type UnionParams<TVariant> =\n | DefaultProps<TVariant, { iconOnly: boolean; [\"aria-label\"]: string }>\n | DefaultProps<TVariant, { [\"aria-label\"]?: string }>;\n\ntype UnionKeys<T> = T extends T ? keyof T : never;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype StrictUnionHelper<T, TAll> = T extends any\n ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>>\n : never;\n\ntype StrictUnion<T> = StrictUnionHelper<T, T>;\n\nexport type ActionProps<TVariant extends string = Variant> = StrictUnion<UnionParams<TVariant>>;\n","import React, { type ButtonHTMLAttributes, forwardRef, type MouseEvent } from \"react\";\nimport { type ActionProps, SIZE, VARIANT } from \"@purpur/action\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TEXT: \"text\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-button\";\n\ntype ButtonType = Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"type\">[\"type\"];\nexport const BUTTON_TYPES: ButtonType[] = [\"button\", \"submit\", \"reset\"] as const;\n\ntype ButtonBaseProps = BaseProps<\"button\"> & { ai?: boolean; loading?: boolean };\n\nexport type ButtonProps =\n | (ActionProps<ButtonVariant> & ButtonBaseProps & { iconOnly?: false | undefined })\n | (ActionProps<Exclude<ButtonVariant, \"destructive\">> & ButtonBaseProps & { iconOnly: true });\n\ntype DistributiveOmit<T, K extends keyof never> = T extends unknown ? Omit<T, K> : never;\n\nconst shouldRenderChildren = ({ iconOnly, loading }: Pick<ButtonProps, \"iconOnly\" | \"loading\">) =>\n !(iconOnly && loading);\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n DistributiveOmit<ButtonProps, \"type\"> & { type?: ButtonType }\n>(\n (\n {\n ai = false,\n children,\n className,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n negative = false,\n onClick,\n size = \"md\",\n variant,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n if (iconOnly && variant === (\"destructive\" as string)) {\n return null;\n }\n\n const variantClass = `${variant}${ai ? \"-ai\" : \"\"}${negative ? \"-negative\" : \"\"}`;\n\n const classes = cx(\n [rootClassName, `${rootClassName}--${variantClass}`, `${rootClassName}--${size}`],\n {\n [`${rootClassName}--icon-only`]: iconOnly,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--disabled`]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const _disabled = Boolean(props[\"aria-disabled\"]) || disabled || loading;\n const renderChildren = shouldRenderChildren({ iconOnly, loading });\n\n return (\n <button\n className={classes}\n type={type}\n ref={ref}\n aria-disabled={_disabled}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === SIZE.LG ? \"xs\" : \"xxs\"}\n negative={negative}\n disabled={_disabled}\n className={cx(`${rootClassName}__spinner`)}\n />\n )}\n {renderChildren ? children : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["VARIANT","SIZE","BUTTON_VARIANT","buttonVariants","cx","c","styles","rootClassName","BUTTON_TYPES","shouldRenderChildren","iconOnly","loading","Button","forwardRef","ai","children","className","disabled","fullWidth","negative","onClick","size","variant","type","props","ref","variantClass","classes","handleClick","e","_disabled","renderChildren","jsxs","jsx","Spinner"],"mappings":"wIAEaA,EAAU,CACrB,QAAS,UACT,UAAW,YACX,WAAY,YACd,EAKaC,EAAO,CAIlB,GAAI,IACN,uhECRaC,EAAiB,CAC5B,GAAGF,EACH,YAAa,cACb,gBAAiB,kBACjB,KAAM,MACR,EAEaG,EAAiB,OAAO,OAAOD,CAAc,EAGpDE,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,gBAGTC,EAA6B,CAAC,SAAU,SAAU,OAAO,EAUhEC,EAAuB,CAAC,CAAE,SAAAC,EAAU,QAAAC,CAAA,IACxC,EAAED,GAAYC,GAEHC,EAASC,EAAAA,WAIpB,CACE,CACE,GAAAC,EAAK,GACL,SAAAC,EACA,UAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,GACZ,SAAAR,EACA,QAAAC,EAAU,GACV,SAAAQ,EAAW,GACX,QAAAC,EACA,KAAAC,EAAO,KACP,QAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CAAA,EAELC,IACG,CACH,GAAIf,GAAYY,IAAa,cAC3B,OAAO,KAGT,MAAMI,EAAe,GAAGJ,CAAO,GAAGR,EAAK,MAAQ,EAAE,GAAGK,EAAW,YAAc,EAAE,GAEzEQ,EAAUvB,EACd,CAACG,EAAe,GAAGA,CAAa,KAAKmB,CAAY,GAAI,GAAGnB,CAAa,KAAKc,CAAI,EAAE,EAChF,CACE,CAAC,GAAGd,CAAa,aAAa,EAAGG,EACjC,CAAC,GAAGH,CAAa,YAAY,EAAGY,EAChC,CAAC,GAAGZ,CAAa,cAAc,EAAGW,EAClC,CAAC,GAAGX,CAAa,YAAY,EAAGU,GAAYN,CAAA,EAE9CK,CAAA,EAGIY,EAAeC,GAAqC,CACpDZ,GAAYN,EACdkB,EAAE,eAAA,EACOT,GACTA,EAAQS,CAAC,CAEb,EAEMC,EAAY,EAAQN,EAAM,eAAe,GAAMP,GAAYN,EAC3DoB,EAAiBtB,EAAqB,CAAE,SAAAC,EAAU,QAAAC,EAAS,EAEjE,OACEqB,EAAAA,KAAC,SAAA,CACC,UAAWL,EACX,KAAAJ,EACA,IAAAE,EACA,gBAAeK,EACf,QAASF,EACR,GAAGJ,EAEH,SAAA,CAAAb,GACCsB,EAAAA,IAACC,EAAAA,QAAA,CACC,KAAMb,IAASpB,EAAK,GAAK,KAAO,MAChC,SAAAkB,EACA,SAAUW,EACV,UAAW1B,EAAG,GAAGG,CAAa,WAAW,CAAA,CAAA,EAG5CwB,EAAiBhB,EAAW,IAAA,CAAA,CAAA,CAGnC,CACF,EAEAH,EAAO,YAAc"}
1
+ {"version":3,"file":"button-DmybVApa.js","sources":["../../action/src/action.tsx","../../../components/button/src/button.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\n\nexport const VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n EXPRESSIVE: \"expressive\",\n} as const;\n\nexport const variants = Object.values(VARIANT);\nexport type Variant = (typeof VARIANT)[keyof typeof VARIANT];\n\nexport const SIZE = {\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n} as const;\n\nexport const sizes = Object.values(SIZE);\nexport type Size = (typeof SIZE)[keyof typeof SIZE];\n\ntype DefaultProps<TVariant, T = object> = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n className?: string;\n fullWidth?: boolean;\n negative?: boolean;\n size?: Size;\n variant: TVariant | Variant;\n} & T;\n\nexport type UnionParams<TVariant> =\n | DefaultProps<TVariant, { iconOnly: true; [\"aria-label\"]: string }>\n | DefaultProps<TVariant, { iconOnly?: false; [\"aria-label\"]?: string }>;\n\ntype UnionKeys<T> = T extends T ? keyof T : never;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype StrictUnionHelper<T, TAll> = T extends any\n ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>>\n : never;\n\ntype StrictUnion<T> = StrictUnionHelper<T, T>;\n\nexport type ActionProps<TVariant extends string = Variant> = StrictUnion<UnionParams<TVariant>>;\n","import React, { type ButtonHTMLAttributes, forwardRef, type MouseEvent } from \"react\";\nimport { type ActionProps, SIZE, VARIANT } from \"@purpur/action\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TEXT: \"text\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-button\";\n\ntype ButtonType = Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"type\">[\"type\"];\nexport const BUTTON_TYPES: ButtonType[] = [\"button\", \"submit\", \"reset\"] as const;\n\ntype ButtonBaseProps = BaseProps<\"button\"> & { ai?: boolean; loading?: boolean };\n\nexport type ButtonProps =\n | (ActionProps<ButtonVariant> & ButtonBaseProps & { iconOnly?: false | undefined })\n | (ActionProps<Exclude<ButtonVariant, \"destructive\">> & ButtonBaseProps & { iconOnly: true });\n\ntype DistributiveOmit<T, K extends keyof never> = T extends unknown ? Omit<T, K> : never;\n\nconst shouldRenderChildren = ({ iconOnly, loading }: Pick<ButtonProps, \"iconOnly\" | \"loading\">) =>\n !(iconOnly && loading);\n\nexport const Button = forwardRef<\n HTMLButtonElement,\n DistributiveOmit<ButtonProps, \"type\"> & { type?: ButtonType }\n>(\n (\n {\n ai = false,\n children,\n className,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n negative = false,\n onClick,\n size = \"md\",\n variant,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n if (iconOnly && variant === (\"destructive\" as string)) {\n return null;\n }\n\n const variantClass = `${variant}${ai ? \"-ai\" : \"\"}${negative ? \"-negative\" : \"\"}`;\n\n const classes = cx(\n [rootClassName, `${rootClassName}--${variantClass}`, `${rootClassName}--${size}`],\n {\n [`${rootClassName}--icon-only`]: iconOnly,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--disabled`]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const _disabled = Boolean(props[\"aria-disabled\"]) || disabled || loading;\n const renderChildren = shouldRenderChildren({ iconOnly, loading });\n\n return (\n <button\n className={classes}\n type={type}\n ref={ref}\n aria-disabled={_disabled}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === SIZE.LG ? \"xs\" : \"xxs\"}\n negative={negative}\n disabled={_disabled}\n className={cx(`${rootClassName}__spinner`)}\n />\n )}\n {renderChildren ? children : null}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["VARIANT","SIZE","BUTTON_VARIANT","buttonVariants","cx","c","styles","rootClassName","BUTTON_TYPES","shouldRenderChildren","iconOnly","loading","Button","forwardRef","ai","children","className","disabled","fullWidth","negative","onClick","size","variant","type","props","ref","variantClass","classes","handleClick","e","_disabled","renderChildren","jsxs","jsx","Spinner"],"mappings":"wIAEaA,EAAU,CACrB,QAAS,UACT,UAAW,YACX,WAAY,YACd,EAKaC,EAAO,CAIlB,GAAI,IACN,uhECRaC,EAAiB,CAC5B,GAAGF,EACH,YAAa,cACb,gBAAiB,kBACjB,KAAM,MACR,EAEaG,EAAiB,OAAO,OAAOD,CAAc,EAGpDE,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,gBAGTC,EAA6B,CAAC,SAAU,SAAU,OAAO,EAUhEC,EAAuB,CAAC,CAAE,SAAAC,EAAU,QAAAC,CAAA,IACxC,EAAED,GAAYC,GAEHC,EAASC,EAAAA,WAIpB,CACE,CACE,GAAAC,EAAK,GACL,SAAAC,EACA,UAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,GACZ,SAAAR,EACA,QAAAC,EAAU,GACV,SAAAQ,EAAW,GACX,QAAAC,EACA,KAAAC,EAAO,KACP,QAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CAAA,EAELC,IACG,CACH,GAAIf,GAAYY,IAAa,cAC3B,OAAO,KAGT,MAAMI,EAAe,GAAGJ,CAAO,GAAGR,EAAK,MAAQ,EAAE,GAAGK,EAAW,YAAc,EAAE,GAEzEQ,EAAUvB,EACd,CAACG,EAAe,GAAGA,CAAa,KAAKmB,CAAY,GAAI,GAAGnB,CAAa,KAAKc,CAAI,EAAE,EAChF,CACE,CAAC,GAAGd,CAAa,aAAa,EAAGG,EACjC,CAAC,GAAGH,CAAa,YAAY,EAAGY,EAChC,CAAC,GAAGZ,CAAa,cAAc,EAAGW,EAClC,CAAC,GAAGX,CAAa,YAAY,EAAGU,GAAYN,CAAA,EAE9CK,CAAA,EAGIY,EAAeC,GAAqC,CACpDZ,GAAYN,EACdkB,EAAE,eAAA,EACOT,GACTA,EAAQS,CAAC,CAEb,EAEMC,EAAY,EAAQN,EAAM,eAAe,GAAMP,GAAYN,EAC3DoB,EAAiBtB,EAAqB,CAAE,SAAAC,EAAU,QAAAC,EAAS,EAEjE,OACEqB,EAAAA,KAAC,SAAA,CACC,UAAWL,EACX,KAAAJ,EACA,IAAAE,EACA,gBAAeK,EACf,QAASF,EACR,GAAGJ,EAEH,SAAA,CAAAb,GACCsB,EAAAA,IAACC,EAAAA,QAAA,CACC,KAAMb,IAASpB,EAAK,GAAK,KAAO,MAChC,SAAAkB,EACA,SAAUW,EACV,UAAW1B,EAAG,GAAGG,CAAa,WAAW,CAAA,CAAA,EAG5CwB,EAAiBhB,EAAW,IAAA,CAAA,CAAA,CAGnC,CACF,EAEAH,EAAO,YAAc"}