@economic/taco 1.1.4 → 1.1.5-alpha.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 (372) hide show
  1. package/README.md +82 -82
  2. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  3. package/dist/esm/components/Backdrop/Backdrop.js.map +1 -1
  4. package/dist/esm/components/Badge/Badge.js.map +1 -1
  5. package/dist/esm/components/Banner/Banner.js.map +1 -1
  6. package/dist/esm/components/Banner/util.js +1 -1
  7. package/dist/esm/components/Banner/util.js.map +1 -1
  8. package/dist/esm/components/Button/Button.js.map +1 -1
  9. package/dist/esm/components/Button/util.js +18 -23
  10. package/dist/esm/components/Button/util.js.map +1 -1
  11. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  12. package/dist/esm/components/Card/Card.js.map +1 -1
  13. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  14. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  15. package/dist/esm/components/Combobox/useCombobox.js +67 -87
  16. package/dist/esm/components/Combobox/useCombobox.js.map +1 -1
  17. package/dist/esm/components/Datepicker/Datepicker.js.map +1 -1
  18. package/dist/esm/components/Datepicker/useDatepicker.js +27 -34
  19. package/dist/esm/components/Datepicker/useDatepicker.js.map +1 -1
  20. package/dist/esm/components/Dialog/Context.js +4 -4
  21. package/dist/esm/components/Dialog/Context.js.map +1 -1
  22. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  23. package/dist/esm/components/Dialog/components/Content.js +39 -44
  24. package/dist/esm/components/Dialog/components/Content.js.map +1 -1
  25. package/dist/esm/components/Dialog/components/Drawer.js +3 -3
  26. package/dist/esm/components/Dialog/components/Drawer.js.map +1 -1
  27. package/dist/esm/components/Dialog/components/Extra.js +2 -2
  28. package/dist/esm/components/Dialog/components/Extra.js.map +1 -1
  29. package/dist/esm/components/Dialog/components/Trigger.js +2 -2
  30. package/dist/esm/components/Dialog/components/Trigger.js.map +1 -1
  31. package/dist/esm/components/Field/Field.js.map +1 -1
  32. package/dist/esm/components/Form/Form.js.map +1 -1
  33. package/dist/esm/components/Group/Group.js.map +1 -1
  34. package/dist/esm/components/Hanger/Hanger.js.map +1 -1
  35. package/dist/esm/components/HoverCard/HoverCard.js.map +1 -1
  36. package/dist/esm/components/Icon/Icon.js.map +1 -1
  37. package/dist/esm/components/Icon/components/AccountPreview.js.map +1 -1
  38. package/dist/esm/components/Icon/components/Accounting.js.map +1 -1
  39. package/dist/esm/components/Icon/components/AccountingYear.js.map +1 -1
  40. package/dist/esm/components/Icon/components/AccountingYearCancel.js.map +1 -1
  41. package/dist/esm/components/Icon/components/ArrowBottom.js.map +1 -1
  42. package/dist/esm/components/Icon/components/ArrowDown.js.map +1 -1
  43. package/dist/esm/components/Icon/components/ArrowEnd.js.map +1 -1
  44. package/dist/esm/components/Icon/components/ArrowLeft.js.map +1 -1
  45. package/dist/esm/components/Icon/components/ArrowRight.js.map +1 -1
  46. package/dist/esm/components/Icon/components/ArrowStart.js.map +1 -1
  47. package/dist/esm/components/Icon/components/ArrowTop.js.map +1 -1
  48. package/dist/esm/components/Icon/components/ArrowUp.js.map +1 -1
  49. package/dist/esm/components/Icon/components/Attach.js.map +1 -1
  50. package/dist/esm/components/Icon/components/AttachAuto.js.map +1 -1
  51. package/dist/esm/components/Icon/components/AttachCancel.js.map +1 -1
  52. package/dist/esm/components/Icon/components/Autotext.js.map +1 -1
  53. package/dist/esm/components/Icon/components/AutotextInsert.js.map +1 -1
  54. package/dist/esm/components/Icon/components/Basic.js.map +1 -1
  55. package/dist/esm/components/Icon/components/BasicTabs.js.map +1 -1
  56. package/dist/esm/components/Icon/components/BellSolid.js.map +1 -1
  57. package/dist/esm/components/Icon/components/Book.js.map +1 -1
  58. package/dist/esm/components/Icon/components/Booking.js.map +1 -1
  59. package/dist/esm/components/Icon/components/Budget.js.map +1 -1
  60. package/dist/esm/components/Icon/components/Calendar.js.map +1 -1
  61. package/dist/esm/components/Icon/components/CashAccount.js.map +1 -1
  62. package/dist/esm/components/Icon/components/CashReports.js.map +1 -1
  63. package/dist/esm/components/Icon/components/Chat.js.map +1 -1
  64. package/dist/esm/components/Icon/components/ChatSolid.js.map +1 -1
  65. package/dist/esm/components/Icon/components/ChevronDown.js.map +1 -1
  66. package/dist/esm/components/Icon/components/ChevronDownDouble.js.map +1 -1
  67. package/dist/esm/components/Icon/components/ChevronDownSolid.js.map +1 -1
  68. package/dist/esm/components/Icon/components/ChevronLeft.js.map +1 -1
  69. package/dist/esm/components/Icon/components/ChevronLeftDouble.js.map +1 -1
  70. package/dist/esm/components/Icon/components/ChevronRight.js.map +1 -1
  71. package/dist/esm/components/Icon/components/ChevronRightDouble.js.map +1 -1
  72. package/dist/esm/components/Icon/components/ChevronUp.js.map +1 -1
  73. package/dist/esm/components/Icon/components/ChevronUpDouble.js.map +1 -1
  74. package/dist/esm/components/Icon/components/ChevronUpSolid.js.map +1 -1
  75. package/dist/esm/components/Icon/components/CircleClose.js.map +1 -1
  76. package/dist/esm/components/Icon/components/CircleMinus.js.map +1 -1
  77. package/dist/esm/components/Icon/components/CirclePlus.js.map +1 -1
  78. package/dist/esm/components/Icon/components/CircleTick.js.map +1 -1
  79. package/dist/esm/components/Icon/components/Clamp.js.map +1 -1
  80. package/dist/esm/components/Icon/components/ClampOpen.js.map +1 -1
  81. package/dist/esm/components/Icon/components/Close.js.map +1 -1
  82. package/dist/esm/components/Icon/components/ConnectionEnable.js.map +1 -1
  83. package/dist/esm/components/Icon/components/ConnectionRevoke.js.map +1 -1
  84. package/dist/esm/components/Icon/components/Contacts.js.map +1 -1
  85. package/dist/esm/components/Icon/components/Copy.js.map +1 -1
  86. package/dist/esm/components/Icon/components/Courses.js.map +1 -1
  87. package/dist/esm/components/Icon/components/Credit.js.map +1 -1
  88. package/dist/esm/components/Icon/components/Delete.js.map +1 -1
  89. package/dist/esm/components/Icon/components/DeletePermanently.js.map +1 -1
  90. package/dist/esm/components/Icon/components/Depecriate.js.map +1 -1
  91. package/dist/esm/components/Icon/components/Developer.js.map +1 -1
  92. package/dist/esm/components/Icon/components/DistributionTemplate.js.map +1 -1
  93. package/dist/esm/components/Icon/components/Document.js.map +1 -1
  94. package/dist/esm/components/Icon/components/DocumentApprove.js.map +1 -1
  95. package/dist/esm/components/Icon/components/DocumentCreateEntry.js.map +1 -1
  96. package/dist/esm/components/Icon/components/DocumentCut.js.map +1 -1
  97. package/dist/esm/components/Icon/components/DocumentError.js.map +1 -1
  98. package/dist/esm/components/Icon/components/DocumentIsolatePage.js.map +1 -1
  99. package/dist/esm/components/Icon/components/DocumentMerge.js.map +1 -1
  100. package/dist/esm/components/Icon/components/DocumentMove.js.map +1 -1
  101. package/dist/esm/components/Icon/components/DocumentPreview.js.map +1 -1
  102. package/dist/esm/components/Icon/components/DocumentReceived.js.map +1 -1
  103. package/dist/esm/components/Icon/components/DocumentRejectedRequest.js.map +1 -1
  104. package/dist/esm/components/Icon/components/DocumentSplit.js.map +1 -1
  105. package/dist/esm/components/Icon/components/DocumentTime.js.map +1 -1
  106. package/dist/esm/components/Icon/components/Download.js.map +1 -1
  107. package/dist/esm/components/Icon/components/Drag.js.map +1 -1
  108. package/dist/esm/components/Icon/components/ECopedia.js.map +1 -1
  109. package/dist/esm/components/Icon/components/ESignature.js.map +1 -1
  110. package/dist/esm/components/Icon/components/Edit.js.map +1 -1
  111. package/dist/esm/components/Icon/components/EllipsisHorizontal.js.map +1 -1
  112. package/dist/esm/components/Icon/components/EllipsisVertical.js.map +1 -1
  113. package/dist/esm/components/Icon/components/EntriesOnAccount.js.map +1 -1
  114. package/dist/esm/components/Icon/components/EntriesOpen.js.map +1 -1
  115. package/dist/esm/components/Icon/components/EntriesWarning.js.map +1 -1
  116. package/dist/esm/components/Icon/components/EntryTypeCustomerInvoice.js.map +1 -1
  117. package/dist/esm/components/Icon/components/EntryTypeCustomerPayment.js.map +1 -1
  118. package/dist/esm/components/Icon/components/EntryTypeJournalEntry.js.map +1 -1
  119. package/dist/esm/components/Icon/components/EntryTypeManualCustomerInvoice.js.map +1 -1
  120. package/dist/esm/components/Icon/components/EntryTypeSupplierInvoice.js.map +1 -1
  121. package/dist/esm/components/Icon/components/EntryTypeSupplierPayment.js.map +1 -1
  122. package/dist/esm/components/Icon/components/Envelope.js.map +1 -1
  123. package/dist/esm/components/Icon/components/EnvelopeApproved.js.map +1 -1
  124. package/dist/esm/components/Icon/components/ExpandView.js.map +1 -1
  125. package/dist/esm/components/Icon/components/Expenses.js.map +1 -1
  126. package/dist/esm/components/Icon/components/Export.js.map +1 -1
  127. package/dist/esm/components/Icon/components/ExportToExcel.js.map +1 -1
  128. package/dist/esm/components/Icon/components/ExportToPdf.js.map +1 -1
  129. package/dist/esm/components/Icon/components/Filter.js.map +1 -1
  130. package/dist/esm/components/Icon/components/FilterSolid.js.map +1 -1
  131. package/dist/esm/components/Icon/components/GraphSolid.js.map +1 -1
  132. package/dist/esm/components/Icon/components/Hash.js.map +1 -1
  133. package/dist/esm/components/Icon/components/Home.js.map +1 -1
  134. package/dist/esm/components/Icon/components/Images.js.map +1 -1
  135. package/dist/esm/components/Icon/components/Import.js.map +1 -1
  136. package/dist/esm/components/Icon/components/Inbox.js.map +1 -1
  137. package/dist/esm/components/Icon/components/InboxEinvoicing.js.map +1 -1
  138. package/dist/esm/components/Icon/components/InboxScanning.js.map +1 -1
  139. package/dist/esm/components/Icon/components/InboxSmart.js.map +1 -1
  140. package/dist/esm/components/Icon/components/Info.js.map +1 -1
  141. package/dist/esm/components/Icon/components/Inventory.js.map +1 -1
  142. package/dist/esm/components/Icon/components/InventoryMatrix.js.map +1 -1
  143. package/dist/esm/components/Icon/components/JournalPro.js.map +1 -1
  144. package/dist/esm/components/Icon/components/Layout.js.map +1 -1
  145. package/dist/esm/components/Icon/components/LayoutBoth.js.map +1 -1
  146. package/dist/esm/components/Icon/components/LayoutFirst.js.map +1 -1
  147. package/dist/esm/components/Icon/components/LayoutLast.js.map +1 -1
  148. package/dist/esm/components/Icon/components/LayoutNone.js.map +1 -1
  149. package/dist/esm/components/Icon/components/LedgerCard.js.map +1 -1
  150. package/dist/esm/components/Icon/components/LedgerCardCustomerReminder.js.map +1 -1
  151. package/dist/esm/components/Icon/components/LedgerCardManualCustomerInvoice.js.map +1 -1
  152. package/dist/esm/components/Icon/components/LedgerCardObsoleteStock.js.map +1 -1
  153. package/dist/esm/components/Icon/components/LedgerCardOpeningEntry.js.map +1 -1
  154. package/dist/esm/components/Icon/components/LedgerCardReservedEntry.js.map +1 -1
  155. package/dist/esm/components/Icon/components/LedgerCardShrinkagePilferage.js.map +1 -1
  156. package/dist/esm/components/Icon/components/LedgerCardStockAdjustment.js.map +1 -1
  157. package/dist/esm/components/Icon/components/LedgerCardTransferredOpeningEntry.js.map +1 -1
  158. package/dist/esm/components/Icon/components/Lightbulb.js.map +1 -1
  159. package/dist/esm/components/Icon/components/Line.js.map +1 -1
  160. package/dist/esm/components/Icon/components/List.js.map +1 -1
  161. package/dist/esm/components/Icon/components/ListBulleted.js.map +1 -1
  162. package/dist/esm/components/Icon/components/ListSearch.js.map +1 -1
  163. package/dist/esm/components/Icon/components/LockOpen.js.map +1 -1
  164. package/dist/esm/components/Icon/components/Log.js.map +1 -1
  165. package/dist/esm/components/Icon/components/Market.js.map +1 -1
  166. package/dist/esm/components/Icon/components/MatchAmount.js.map +1 -1
  167. package/dist/esm/components/Icon/components/MatchEntries.js.map +1 -1
  168. package/dist/esm/components/Icon/components/Mileage.js.map +1 -1
  169. package/dist/esm/components/Icon/components/ModalResize.js.map +1 -1
  170. package/dist/esm/components/Icon/components/ModalShrink.js.map +1 -1
  171. package/dist/esm/components/Icon/components/More.js.map +1 -1
  172. package/dist/esm/components/Icon/components/MoreSolid.js.map +1 -1
  173. package/dist/esm/components/Icon/components/Move.js.map +1 -1
  174. package/dist/esm/components/Icon/components/NavigationList.js.map +1 -1
  175. package/dist/esm/components/Icon/components/Note.js.map +1 -1
  176. package/dist/esm/components/Icon/components/NoteFollowUp.js.map +1 -1
  177. package/dist/esm/components/Icon/components/NoteRead.js.map +1 -1
  178. package/dist/esm/components/Icon/components/PartnerApi.js.map +1 -1
  179. package/dist/esm/components/Icon/components/Period.js.map +1 -1
  180. package/dist/esm/components/Icon/components/PersonChange.js.map +1 -1
  181. package/dist/esm/components/Icon/components/PersonMinus.js.map +1 -1
  182. package/dist/esm/components/Icon/components/PersonPlus.js.map +1 -1
  183. package/dist/esm/components/Icon/components/PersonTick.js.map +1 -1
  184. package/dist/esm/components/Icon/components/Play.js.map +1 -1
  185. package/dist/esm/components/Icon/components/PlusMinus.js.map +1 -1
  186. package/dist/esm/components/Icon/components/Print.js.map +1 -1
  187. package/dist/esm/components/Icon/components/ProcessPayment.js.map +1 -1
  188. package/dist/esm/components/Icon/components/ProductLedgerCard.js.map +1 -1
  189. package/dist/esm/components/Icon/components/ProjectCards.js.map +1 -1
  190. package/dist/esm/components/Icon/components/Projects.js.map +1 -1
  191. package/dist/esm/components/Icon/components/Quicklinks.js.map +1 -1
  192. package/dist/esm/components/Icon/components/RatingBankruptcy.js.map +1 -1
  193. package/dist/esm/components/Icon/components/RatingPaymentProblems.js.map +1 -1
  194. package/dist/esm/components/Icon/components/Reconciled.js.map +1 -1
  195. package/dist/esm/components/Icon/components/Refresh.js.map +1 -1
  196. package/dist/esm/components/Icon/components/Report.js.map +1 -1
  197. package/dist/esm/components/Icon/components/ReportSolid.js.map +1 -1
  198. package/dist/esm/components/Icon/components/Restore.js.map +1 -1
  199. package/dist/esm/components/Icon/components/RotateLeft.js.map +1 -1
  200. package/dist/esm/components/Icon/components/RotateRight.js.map +1 -1
  201. package/dist/esm/components/Icon/components/Sales.js.map +1 -1
  202. package/dist/esm/components/Icon/components/Search.js.map +1 -1
  203. package/dist/esm/components/Icon/components/SearchBold.js.map +1 -1
  204. package/dist/esm/components/Icon/components/Secure.js.map +1 -1
  205. package/dist/esm/components/Icon/components/SecureTick.js.map +1 -1
  206. package/dist/esm/components/Icon/components/Settings.js.map +1 -1
  207. package/dist/esm/components/Icon/components/SettingsSolid.js.map +1 -1
  208. package/dist/esm/components/Icon/components/Shortcuts.js.map +1 -1
  209. package/dist/esm/components/Icon/components/ShowAll.js.map +1 -1
  210. package/dist/esm/components/Icon/components/ShowLess.js.map +1 -1
  211. package/dist/esm/components/Icon/components/ShowMore.js.map +1 -1
  212. package/dist/esm/components/Icon/components/ShowTemplate.js.map +1 -1
  213. package/dist/esm/components/Icon/components/Sliders.js.map +1 -1
  214. package/dist/esm/components/Icon/components/Smartpay.js.map +1 -1
  215. package/dist/esm/components/Icon/components/SortBy.js.map +1 -1
  216. package/dist/esm/components/Icon/components/Spinner.js.map +1 -1
  217. package/dist/esm/components/Icon/components/Star.js.map +1 -1
  218. package/dist/esm/components/Icon/components/StarSolid.js.map +1 -1
  219. package/dist/esm/components/Icon/components/Subscriptions.js.map +1 -1
  220. package/dist/esm/components/Icon/components/SystemEntries.js.map +1 -1
  221. package/dist/esm/components/Icon/components/Tag.js.map +1 -1
  222. package/dist/esm/components/Icon/components/TemplateOverride.js.map +1 -1
  223. package/dist/esm/components/Icon/components/Templates.js.map +1 -1
  224. package/dist/esm/components/Icon/components/ThumbBoth.js.map +1 -1
  225. package/dist/esm/components/Icon/components/ThumbDown.js.map +1 -1
  226. package/dist/esm/components/Icon/components/ThumbDownSolid.js.map +1 -1
  227. package/dist/esm/components/Icon/components/ThumbUp.js.map +1 -1
  228. package/dist/esm/components/Icon/components/ThumbUpSolid.js.map +1 -1
  229. package/dist/esm/components/Icon/components/Tick.js.map +1 -1
  230. package/dist/esm/components/Icon/components/Time.js.map +1 -1
  231. package/dist/esm/components/Icon/components/Transfer.js.map +1 -1
  232. package/dist/esm/components/Icon/components/TransferCancel.js.map +1 -1
  233. package/dist/esm/components/Icon/components/TransferLocked.js.map +1 -1
  234. package/dist/esm/components/Icon/components/Undock.js.map +1 -1
  235. package/dist/esm/components/Icon/components/Unreconciled.js.map +1 -1
  236. package/dist/esm/components/Icon/components/Warning.js.map +1 -1
  237. package/dist/esm/components/Icon/components/Webshop.js.map +1 -1
  238. package/dist/esm/components/Icon/components/Website.js.map +1 -1
  239. package/dist/esm/components/Icon/components/Workflow.js.map +1 -1
  240. package/dist/esm/components/Icon/components/Zoom.js.map +1 -1
  241. package/dist/esm/components/Icon/components/index.js +4 -4
  242. package/dist/esm/components/Icon/components/index.js.map +1 -1
  243. package/dist/esm/components/IconButton/IconButton.js.map +1 -1
  244. package/dist/esm/components/Input/Input.js.map +1 -1
  245. package/dist/esm/components/Input/util.js +2 -2
  246. package/dist/esm/components/Input/util.js.map +1 -1
  247. package/dist/esm/components/Listbox/Listbox.js.map +1 -1
  248. package/dist/esm/components/Listbox/ScrollableList.js +64 -83
  249. package/dist/esm/components/Listbox/ScrollableList.js.map +1 -1
  250. package/dist/esm/components/Listbox/useListbox.js +51 -60
  251. package/dist/esm/components/Listbox/useListbox.js.map +1 -1
  252. package/dist/esm/components/Listbox/useMultiListbox.js +64 -91
  253. package/dist/esm/components/Listbox/useMultiListbox.js.map +1 -1
  254. package/dist/esm/components/Listbox/useTypeahead.js +10 -9
  255. package/dist/esm/components/Listbox/useTypeahead.js.map +1 -1
  256. package/dist/esm/components/Listbox/util.js +48 -85
  257. package/dist/esm/components/Listbox/util.js.map +1 -1
  258. package/dist/esm/components/Menu/Context.js +2 -2
  259. package/dist/esm/components/Menu/Context.js.map +1 -1
  260. package/dist/esm/components/Menu/Menu.js.map +1 -1
  261. package/dist/esm/components/Menu/components/Checkbox.js +8 -9
  262. package/dist/esm/components/Menu/components/Checkbox.js.map +1 -1
  263. package/dist/esm/components/Menu/components/Content.js +9 -11
  264. package/dist/esm/components/Menu/components/Content.js.map +1 -1
  265. package/dist/esm/components/Menu/components/Header.js +3 -3
  266. package/dist/esm/components/Menu/components/Header.js.map +1 -1
  267. package/dist/esm/components/Menu/components/Item.js +30 -31
  268. package/dist/esm/components/Menu/components/Item.js.map +1 -1
  269. package/dist/esm/components/Menu/components/Link.js +10 -11
  270. package/dist/esm/components/Menu/components/Link.js.map +1 -1
  271. package/dist/esm/components/Menu/components/RadioGroup.js +16 -18
  272. package/dist/esm/components/Menu/components/RadioGroup.js.map +1 -1
  273. package/dist/esm/components/Menu/components/Separator.js +1 -1
  274. package/dist/esm/components/Menu/components/Separator.js.map +1 -1
  275. package/dist/esm/components/Menu/components/Trigger.js +4 -4
  276. package/dist/esm/components/Menu/components/Trigger.js.map +1 -1
  277. package/dist/esm/components/Navigation/Navigation.js.map +1 -1
  278. package/dist/esm/components/Pagination/PageNumbers.js +23 -28
  279. package/dist/esm/components/Pagination/PageNumbers.js.map +1 -1
  280. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  281. package/dist/esm/components/Pagination/usePagination.js +7 -21
  282. package/dist/esm/components/Pagination/usePagination.js.map +1 -1
  283. package/dist/esm/components/Pagination/usePaginationShortcuts.js +9 -9
  284. package/dist/esm/components/Pagination/usePaginationShortcuts.js.map +1 -1
  285. package/dist/esm/components/Popover/Popover.js.map +1 -1
  286. package/dist/esm/components/Popover/Primitives.js +7 -8
  287. package/dist/esm/components/Popover/Primitives.js.map +1 -1
  288. package/dist/esm/components/Progress/Progress.js.map +1 -1
  289. package/dist/esm/components/Provider/Provider.js.map +1 -1
  290. package/dist/esm/components/RadioGroup/RadioGroup.js.map +1 -1
  291. package/dist/esm/components/SearchInput/SearchInput.js +1 -1
  292. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  293. package/dist/esm/components/Select/Select.js.map +1 -1
  294. package/dist/esm/components/Select/useSelect.js +63 -81
  295. package/dist/esm/components/Select/useSelect.js.map +1 -1
  296. package/dist/esm/components/Spinner/Spinner.js.map +1 -1
  297. package/dist/esm/components/Switch/Switch.js.map +1 -1
  298. package/dist/esm/components/Table/components/BaseTable.js +23 -30
  299. package/dist/esm/components/Table/components/BaseTable.js.map +1 -1
  300. package/dist/esm/components/Table/components/PaginatedTable.js +3 -7
  301. package/dist/esm/components/Table/components/PaginatedTable.js.map +1 -1
  302. package/dist/esm/components/Table/components/Table.js +18 -25
  303. package/dist/esm/components/Table/components/Table.js.map +1 -1
  304. package/dist/esm/components/Table/components/WindowedTable.js +89 -109
  305. package/dist/esm/components/Table/components/WindowedTable.js.map +1 -1
  306. package/dist/esm/components/Table/hooks/plugins/useRowActions.js +122 -146
  307. package/dist/esm/components/Table/hooks/plugins/useRowActions.js.map +1 -1
  308. package/dist/esm/components/Table/hooks/plugins/useRowDraggable.js +57 -61
  309. package/dist/esm/components/Table/hooks/plugins/useRowDraggable.js.map +1 -1
  310. package/dist/esm/components/Table/hooks/plugins/useRowEditing.js +39 -36
  311. package/dist/esm/components/Table/hooks/plugins/useRowEditing.js.map +1 -1
  312. package/dist/esm/components/Table/hooks/plugins/useRowSelect.js +79 -89
  313. package/dist/esm/components/Table/hooks/plugins/useRowSelect.js.map +1 -1
  314. package/dist/esm/components/Table/hooks/useRowCreation.js +29 -64
  315. package/dist/esm/components/Table/hooks/useRowCreation.js.map +1 -1
  316. package/dist/esm/components/Table/hooks/useTable.js +119 -141
  317. package/dist/esm/components/Table/hooks/useTable.js.map +1 -1
  318. package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js +13 -16
  319. package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js.map +1 -1
  320. package/dist/esm/components/Table/util/renderColumn.js +10 -10
  321. package/dist/esm/components/Table/util/renderColumn.js.map +1 -1
  322. package/dist/esm/components/Table/util/renderRow.js +37 -46
  323. package/dist/esm/components/Table/util/renderRow.js.map +1 -1
  324. package/dist/esm/components/Table/util/rowIndexPath.js +14 -16
  325. package/dist/esm/components/Table/util/rowIndexPath.js.map +1 -1
  326. package/dist/esm/components/Table/util/sortTypes.js +23 -31
  327. package/dist/esm/components/Table/util/sortTypes.js.map +1 -1
  328. package/dist/esm/components/Table/util.js +29 -41
  329. package/dist/esm/components/Table/util.js.map +1 -1
  330. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  331. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  332. package/dist/esm/components/Toast/Toast.js +20 -21
  333. package/dist/esm/components/Toast/Toast.js.map +1 -1
  334. package/dist/esm/components/Toast/Toaster.js.map +1 -1
  335. package/dist/esm/components/Toast/util.js +2 -2
  336. package/dist/esm/components/Toast/util.js.map +1 -1
  337. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  338. package/dist/esm/components/Tour/Tour.js.map +1 -1
  339. package/dist/esm/components/Treeview/Treeview.js.map +1 -1
  340. package/dist/esm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  341. package/dist/esm/index.css +661 -661
  342. package/dist/esm/index.js +1 -1
  343. package/dist/esm/primitives/Button.js +9 -13
  344. package/dist/esm/primitives/Button.js.map +1 -1
  345. package/dist/esm/utils/date.js.map +1 -1
  346. package/dist/esm/utils/hooks/useBoundingClientRectListener.js.map +1 -1
  347. package/dist/esm/utils/hooks/useDraggable.js +16 -17
  348. package/dist/esm/utils/hooks/useDraggable.js.map +1 -1
  349. package/dist/esm/utils/hooks/useDropTarget.js +7 -10
  350. package/dist/esm/utils/hooks/useDropTarget.js.map +1 -1
  351. package/dist/esm/utils/hooks/useListKeyboardNavigation.js.map +1 -1
  352. package/dist/esm/utils/hooks/useListScrollTo.js.map +1 -1
  353. package/dist/esm/utils/hooks/useOnClickOutside.js.map +1 -1
  354. package/dist/esm/utils/hooks/useProxiedRef.js +3 -3
  355. package/dist/esm/utils/hooks/useProxiedRef.js.map +1 -1
  356. package/dist/esm/utils/hooks/useTimer.js +9 -17
  357. package/dist/esm/utils/hooks/useTimer.js.map +1 -1
  358. package/dist/esm/utils/input.js +7 -11
  359. package/dist/esm/utils/input.js.map +1 -1
  360. package/dist/esm/utils/mergeRefs.js +2 -2
  361. package/dist/esm/utils/mergeRefs.js.map +1 -1
  362. package/dist/esm/utils/taillwind.js +2 -2
  363. package/dist/esm/utils/taillwind.js.map +1 -1
  364. package/dist/index.css +661 -661
  365. package/dist/taco.cjs.development.js +1492 -1822
  366. package/dist/taco.cjs.development.js.map +1 -1
  367. package/dist/taco.cjs.production.min.js +1 -1
  368. package/dist/taco.cjs.production.min.js.map +1 -1
  369. package/package.json +5 -5
  370. package/plugins/tailwindcss-aria-attributes.js +73 -73
  371. package/tailwind.config.js +260 -255
  372. package/types.json +2603 -7007
@@ -1 +1 @@
1
- {"version":3,"file":"Listbox.js","sources":["../../../../src/components/Listbox/Listbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport { useListbox } from './useListbox';\nimport { useMultiListbox } from './useMultiListbox';\nimport { ScrollableList, ScrollableListItemValue, ScrollableListItem } from './ScrollableList';\n\nexport type ListboxItem = ScrollableListItem;\nexport type ListboxValue = ScrollableListItemValue;\n\nexport type ListboxTexts = {\n /**\n * Text displayed in the listbox if no data provided.\n * To read more about how to provide the text, see [Provider](component:provider) component\n */\n empty: string;\n /**\n * Text displayed in the listbox to indicate the data is loading.\n * Read more about how to provide the text in [Provider](component:provider) component\n */\n loading: string;\n /**\n * The first option displayed in a multiselect listbox that selects all available options.\n * Read more about how to provide the text in [Provider](component:provider) component\n */\n allOption: string;\n};\n\nexport type ListboxProps = Pick<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'onFocus'> &\n Omit<React.InputHTMLAttributes<HTMLElement>, 'defaultValue' | 'onChange' | 'value'> & {\n /** Data indicating the options in listbox */\n data?: ListboxItem[];\n /**\n * Initial value of the listbox.\n * This is used when listbox is mounted, if no value is provided.\n * *Note* that listbox is a controlled component, setting this will also trigger the `onChange` event\n */\n defaultValue?: ListboxValue;\n /** Set what value should have an empty option in listbox */\n emptyValue?: ListboxValue;\n /** Draws attention to the listbox by changing its style and making it visually prominent */\n highlighted?: boolean;\n /* Whether the input is in an invalid state */\n invalid?: boolean;\n /**\n * Shows a loading indicator with a text next to it.\n * Read more about how to provide the text in [Provider](component:provider) component\n */\n loading?: boolean;\n /**\n * Value of the listbox representing the selected item.\n * It needs to be an existing value from the provided data\n */\n value?: ListboxValue;\n };\n\nexport const Listbox = React.forwardRef(function Listbox(props: ListboxProps, ref: React.Ref<HTMLInputElement>) {\n const { className: externalClassName, ...otherProps } = props;\n const { list, input } = useListbox(otherProps, ref);\n const className = cn('bg-white inline-flex relative w-full', externalClassName);\n\n return (\n <span data-taco=\"listbox\" className={className}>\n <ScrollableList\n {...list}\n style={{ ...list.style, maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */ }}\n />\n <input {...input} className=\"hidden\" type=\"text\" />\n </span>\n );\n});\n\nexport const MultiListbox = React.forwardRef(function Listbox(props: ListboxProps, ref: React.Ref<HTMLInputElement>) {\n const { className: externalClassName, ...otherProps } = props;\n const { list, input } = useMultiListbox(otherProps, ref);\n const className = cn('bg-white inline-flex relative w-full', externalClassName);\n\n return (\n <span data-taco=\"listbox\" className={className}>\n <ScrollableList\n {...list}\n style={{\n ...list.style,\n maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */,\n }}\n />\n <input {...input} className=\"hidden\" type=\"text\" />\n </span>\n );\n});\n"],"names":["Listbox","React","props","ref","externalClassName","className","otherProps","useListbox","list","input","cn","ScrollableList","style","maxHeight","type","MultiListbox","useMultiListbox"],"mappings":";;;;;;;;;IAuDaA,OAAO,gBAAGC,UAAA,CAAiB,SAASD,OAAT,CAAiBE,KAAjB,EAAsCC,GAAtC;EACpC,IAAmBC,iBAAnB,GAAwDF,KAAxD,CAAQG,SAAR;MAAyCC,UAAzC,iCAAwDJ,KAAxD;;EACA,kBAAwBK,UAAU,CAACD,UAAD,EAAaH,GAAb,CAAlC;MAAQK,IAAR,eAAQA,IAAR;MAAcC,KAAd,eAAcA,KAAd;;EACA,IAAMJ,SAAS,GAAGK,EAAE,CAAC,sCAAD,EAAyCN,iBAAzC,CAApB;EAEA,OACIH,aAAA,OAAA;iBAAgB;IAAUI,SAAS,EAAEA;GAArC,EACIJ,aAAA,CAACU,cAAD,oBACQH;IACJI,KAAK,eAAOJ,IAAI,CAACI,KAAZ;MAAmBC,SAAS,EAAE;;;;IAFvC,CADJ,EAKIZ,aAAA,QAAA,oBAAWQ;IAAOJ,SAAS,EAAC;IAASS,IAAI,EAAC;IAA1C,CALJ,CADJ;AASH,CAdsB;IAgBVC,YAAY,gBAAGd,UAAA,CAAiB,SAASD,OAAT,CAAiBE,KAAjB,EAAsCC,GAAtC;EACzC,IAAmBC,iBAAnB,GAAwDF,KAAxD,CAAQG,SAAR;MAAyCC,UAAzC,iCAAwDJ,KAAxD;;EACA,uBAAwBc,eAAe,CAACV,UAAD,EAAaH,GAAb,CAAvC;MAAQK,IAAR,oBAAQA,IAAR;MAAcC,KAAd,oBAAcA,KAAd;;EACA,IAAMJ,SAAS,GAAGK,EAAE,CAAC,sCAAD,EAAyCN,iBAAzC,CAApB;EAEA,OACIH,aAAA,OAAA;iBAAgB;IAAUI,SAAS,EAAEA;GAArC,EACIJ,aAAA,CAACU,cAAD,oBACQH;IACJI,KAAK,eACEJ,IAAI,CAACI,KADP;MAEDC,SAAS,EAAE;;;;IAJnB,CADJ,EAQIZ,aAAA,QAAA,oBAAWQ;IAAOJ,SAAS,EAAC;IAASS,IAAI,EAAC;IAA1C,CARJ,CADJ;AAYH,CAjB2B;;;;"}
1
+ {"version":3,"file":"Listbox.js","sources":["../../../../src/components/Listbox/Listbox.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport cn from 'classnames';\r\nimport { useListbox } from './useListbox';\r\nimport { useMultiListbox } from './useMultiListbox';\r\nimport { ScrollableList, ScrollableListItemValue, ScrollableListItem } from './ScrollableList';\r\n\r\nexport type ListboxItem = ScrollableListItem;\r\nexport type ListboxValue = ScrollableListItemValue;\r\n\r\nexport type ListboxTexts = {\r\n /**\r\n * Text displayed in the listbox if no data provided.\r\n * To read more about how to provide the text, see [Provider](component:provider) component\r\n */\r\n empty: string;\r\n /**\r\n * Text displayed in the listbox to indicate the data is loading.\r\n * Read more about how to provide the text in [Provider](component:provider) component\r\n */\r\n loading: string;\r\n /**\r\n * The first option displayed in a multiselect listbox that selects all available options.\r\n * Read more about how to provide the text in [Provider](component:provider) component\r\n */\r\n allOption: string;\r\n};\r\n\r\nexport type ListboxProps = Pick<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'onFocus'> &\r\n Omit<React.InputHTMLAttributes<HTMLElement>, 'defaultValue' | 'onChange' | 'value'> & {\r\n /** Data indicating the options in listbox */\r\n data?: ListboxItem[];\r\n /**\r\n * Initial value of the listbox.\r\n * This is used when listbox is mounted, if no value is provided.\r\n * *Note* that listbox is a controlled component, setting this will also trigger the `onChange` event\r\n */\r\n defaultValue?: ListboxValue;\r\n /** Set what value should have an empty option in listbox */\r\n emptyValue?: ListboxValue;\r\n /** Draws attention to the listbox by changing its style and making it visually prominent */\r\n highlighted?: boolean;\r\n /* Whether the input is in an invalid state */\r\n invalid?: boolean;\r\n /**\r\n * Shows a loading indicator with a text next to it.\r\n * Read more about how to provide the text in [Provider](component:provider) component\r\n */\r\n loading?: boolean;\r\n /**\r\n * Value of the listbox representing the selected item.\r\n * It needs to be an existing value from the provided data\r\n */\r\n value?: ListboxValue;\r\n };\r\n\r\nexport const Listbox = React.forwardRef(function Listbox(props: ListboxProps, ref: React.Ref<HTMLInputElement>) {\r\n const { className: externalClassName, ...otherProps } = props;\r\n const { list, input } = useListbox(otherProps, ref);\r\n const className = cn('bg-white inline-flex relative w-full', externalClassName);\r\n\r\n return (\r\n <span data-taco=\"listbox\" className={className}>\r\n <ScrollableList\r\n {...list}\r\n style={{ ...list.style, maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */ }}\r\n />\r\n <input {...input} className=\"hidden\" type=\"text\" />\r\n </span>\r\n );\r\n});\r\n\r\nexport const MultiListbox = React.forwardRef(function Listbox(props: ListboxProps, ref: React.Ref<HTMLInputElement>) {\r\n const { className: externalClassName, ...otherProps } = props;\r\n const { list, input } = useMultiListbox(otherProps, ref);\r\n const className = cn('bg-white inline-flex relative w-full', externalClassName);\r\n\r\n return (\r\n <span data-taco=\"listbox\" className={className}>\r\n <ScrollableList\r\n {...list}\r\n style={{\r\n ...list.style,\r\n maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */,\r\n }}\r\n />\r\n <input {...input} className=\"hidden\" type=\"text\" />\r\n </span>\r\n );\r\n});\r\n"],"names":["Listbox","React","props","ref","externalClassName","className","otherProps","useListbox","list","input","cn","ScrollableList","style","maxHeight","type","MultiListbox","useMultiListbox"],"mappings":";;;;;;;;;IAuDaA,OAAO,gBAAGC,UAAA,CAAiB,SAASD,OAAT,CAAiBE,KAAjB,EAAsCC,GAAtC;EACpC,IAAmBC,iBAAnB,GAAwDF,KAAxD,CAAQG,SAAR;MAAyCC,UAAzC,iCAAwDJ,KAAxD;;EACA,kBAAwBK,UAAU,CAACD,UAAD,EAAaH,GAAb,CAAlC;MAAQK,IAAR,eAAQA,IAAR;MAAcC,KAAd,eAAcA,KAAd;;EACA,IAAMJ,SAAS,GAAGK,EAAE,CAAC,sCAAD,EAAyCN,iBAAzC,CAApB;EAEA,OACIH,aAAA,OAAA;iBAAgB;IAAUI,SAAS,EAAEA;GAArC,EACIJ,aAAA,CAACU,cAAD,oBACQH;IACJI,KAAK,eAAOJ,IAAI,CAACI,KAAZ;MAAmBC,SAAS,EAAE;;;;IAFvC,CADJ,EAKIZ,aAAA,QAAA,oBAAWQ;IAAOJ,SAAS,EAAC;IAASS,IAAI,EAAC;IAA1C,CALJ,CADJ;AASH,CAdsB;IAgBVC,YAAY,gBAAGd,UAAA,CAAiB,SAASD,OAAT,CAAiBE,KAAjB,EAAsCC,GAAtC;EACzC,IAAmBC,iBAAnB,GAAwDF,KAAxD,CAAQG,SAAR;MAAyCC,UAAzC,iCAAwDJ,KAAxD;;EACA,uBAAwBc,eAAe,CAACV,UAAD,EAAaH,GAAb,CAAvC;MAAQK,IAAR,oBAAQA,IAAR;MAAcC,KAAd,oBAAcA,KAAd;;EACA,IAAMJ,SAAS,GAAGK,EAAE,CAAC,sCAAD,EAAyCN,iBAAzC,CAApB;EAEA,OACIH,aAAA,OAAA;iBAAgB;IAAUI,SAAS,EAAEA;GAArC,EACIJ,aAAA,CAACU,cAAD,oBACQH;IACJI,KAAK,eACEJ,IAAI,CAACI,KADP;MAEDC,SAAS,EAAE;;;;IAJnB,CADJ,EAQIZ,aAAA,QAAA,oBAAWQ;IAAOJ,SAAS,EAAC;IAASS,IAAI,EAAC;IAA1C,CARJ,CADJ;AAYH,CAjB2B;;;;"}
@@ -1,4 +1,3 @@
1
- import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import { forwardRef, useMemo, createRef, useEffect, createElement } from 'react';
3
2
  import cn from 'classnames';
4
3
  import { Spinner } from '../Spinner/Spinner.js';
@@ -9,14 +8,10 @@ import { getInputClasses } from '../Input/util.js';
9
8
  import { getNextIndexFromKeycode } from '../../utils/hooks/useListKeyboardNavigation.js';
10
9
  import { useListScrollTo } from '../../utils/hooks/useListScrollTo.js';
11
10
 
12
- var _excluded = ["data", "disabled", "highlighted", "id", "invalid", "loading", "onChange", "onClick", "onFocus", "onKeyDown", "readOnly", "scrollOnFocus", "value", "multiselect", "selectedIndexes", "allOptionsSelected"],
13
- _excluded2 = ["children", "icon"];
14
- var getId = function getId(id, value) {
15
- return id + "_" + value;
16
- };
11
+ const getId = (id, value) => `${id}_${value}`;
17
12
 
18
- var getNextEnabledItem = function getNextEnabledItem(event, data, index) {
19
- var nextIndex = getNextIndexFromKeycode(event.keyCode, data.length, index);
13
+ const getNextEnabledItem = (event, data, index) => {
14
+ const nextIndex = getNextIndexFromKeycode(event.keyCode, data.length, index);
20
15
 
21
16
  if (nextIndex) {
22
17
  if (nextIndex === index) {
@@ -29,40 +24,35 @@ var getNextEnabledItem = function getNextEnabledItem(event, data, index) {
29
24
  return nextIndex;
30
25
  };
31
26
 
32
- var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref) {
33
- var data = props.data,
34
- disabled = props.disabled,
35
- id = props.id,
36
- loading = props.loading,
37
- setCurrentIndex = props.onChange,
38
- onClick = props.onClick,
39
- onFocus = props.onFocus,
40
- onKeyDown = props.onKeyDown,
41
- readOnly = props.readOnly,
42
- _props$scrollOnFocus = props.scrollOnFocus,
43
- scrollOnFocus = _props$scrollOnFocus === void 0 ? false : _props$scrollOnFocus,
44
- currentIndex = props.value,
45
- multiselect = props.multiselect,
46
- _props$selectedIndexe = props.selectedIndexes,
47
- selectedIndexes = _props$selectedIndexe === void 0 ? [] : _props$selectedIndexe,
48
- _props$allOptionsSele = props.allOptionsSelected,
49
- allOptionsSelected = _props$allOptionsSele === void 0 ? false : _props$allOptionsSele,
50
- otherProps = _objectWithoutPropertiesLoose(props, _excluded);
51
-
52
- var listRef = useProxiedRef(ref);
53
- var itemRefs = useMemo(function () {
54
- return data.map(function () {
55
- return createRef();
56
- });
57
- }, [data]);
58
-
59
- var _useLocalization = useLocalization(),
60
- texts = _useLocalization.texts;
61
-
62
- var _useListScrollTo = useListScrollTo(listRef, itemRefs),
63
- scrollTo = _useListScrollTo.scrollTo;
64
-
65
- useEffect(function () {
27
+ const ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref) {
28
+ const {
29
+ data,
30
+ disabled,
31
+ highlighted,
32
+ id,
33
+ invalid: _,
34
+ loading,
35
+ onChange: setCurrentIndex,
36
+ onClick,
37
+ onFocus,
38
+ onKeyDown,
39
+ readOnly,
40
+ scrollOnFocus = false,
41
+ value: currentIndex,
42
+ multiselect,
43
+ selectedIndexes = [],
44
+ allOptionsSelected = false,
45
+ ...otherProps
46
+ } = props;
47
+ const listRef = useProxiedRef(ref);
48
+ const itemRefs = useMemo(() => data.map(() => createRef()), [data]);
49
+ const {
50
+ texts
51
+ } = useLocalization();
52
+ const {
53
+ scrollTo
54
+ } = useListScrollTo(listRef, itemRefs);
55
+ useEffect(() => {
66
56
  var _itemRefs$currentInde;
67
57
 
68
58
  if (currentIndex && (_itemRefs$currentInde = itemRefs[currentIndex]) !== null && _itemRefs$currentInde !== void 0 && _itemRefs$currentInde.current) {
@@ -73,12 +63,12 @@ var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref)
73
63
  });
74
64
  }
75
65
  }, []);
76
- useEffect(function () {
66
+ useEffect(() => {
77
67
  scrollTo(currentIndex);
78
68
  }, [currentIndex]);
79
69
 
80
- var handleKeyDown = function handleKeyDown(event) {
81
- var nextIndex = getNextEnabledItem(event, data, currentIndex);
70
+ const handleKeyDown = event => {
71
+ const nextIndex = getNextEnabledItem(event, data, currentIndex);
82
72
 
83
73
  if (nextIndex !== undefined && nextIndex !== currentIndex) {
84
74
  event.preventDefault();
@@ -88,23 +78,21 @@ var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref)
88
78
 
89
79
  if (onKeyDown) {
90
80
  event.persist();
91
- var index = nextIndex !== undefined ? nextIndex : currentIndex;
81
+ const index = nextIndex !== undefined ? nextIndex : currentIndex;
92
82
  onKeyDown(event, index);
93
83
  }
94
84
  };
95
85
 
96
- var handleClick = function handleClick(index) {
97
- return function (event) {
98
- setCurrentIndex(index);
86
+ const handleClick = index => event => {
87
+ setCurrentIndex(index);
99
88
 
100
- if (onClick) {
101
- event.persist();
102
- onClick(event, index);
103
- }
104
- };
89
+ if (onClick) {
90
+ event.persist();
91
+ onClick(event, index);
92
+ }
105
93
  };
106
94
 
107
- var handleFocus = function handleFocus(event) {
95
+ const handleFocus = event => {
108
96
  if (scrollOnFocus) {
109
97
  scrollTo(currentIndex);
110
98
  }
@@ -115,36 +103,33 @@ var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref)
115
103
  }
116
104
  };
117
105
 
118
- var getOptionCheckedState = function getOptionCheckedState(optionValue, index) {
106
+ const getOptionCheckedState = (optionValue, index) => {
119
107
  if (optionValue === '#ALL-OPTIONS#') {
120
108
  return allOptionsSelected;
121
109
  } else if (!optionValue || !selectedIndexes) {
122
110
  return false;
123
111
  } else {
124
- return selectedIndexes.findIndex(function (i) {
125
- return i === index;
126
- }) !== -1;
112
+ return selectedIndexes.findIndex(i => i === index) !== -1;
127
113
  }
128
114
  };
129
115
 
130
- var list = _extends({}, otherProps, {
116
+ const list = { ...otherProps,
131
117
  className: cn('inline-flex flex-col list-none !p-0 m-0 overflow-y-auto h-auto', getInputClasses(props), {
132
118
  'yt-list--multiselect': multiselect,
133
119
  'pointer-events-none': disabled,
134
120
  'cursor-not-allowed': disabled || readOnly
135
121
  }, otherProps.className),
136
- disabled: disabled,
137
- id: id,
122
+ disabled,
123
+ id,
138
124
  onFocus: !disabled && !readOnly ? handleFocus : undefined,
139
125
  onKeyDown: !disabled && !readOnly ? handleKeyDown : undefined,
140
- readOnly: readOnly,
126
+ readOnly,
141
127
  ref: listRef,
142
128
  role: 'listbox',
143
129
  tabIndex: otherProps.tabIndex || 0
144
- });
145
-
146
- var options = data.map(function (option, index) {
147
- var depth = option.path ? option.path.split('.').length - 1 : 0;
130
+ };
131
+ const options = data.map((option, index) => {
132
+ const depth = option.path ? option.path.split('.').length - 1 : 0;
148
133
  return {
149
134
  'aria-selected': multiselect ? getOptionCheckedState(String(option.value), index) : currentIndex === index,
150
135
  'data-focused': currentIndex === index,
@@ -160,7 +145,7 @@ var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref)
160
145
  ref: itemRefs[index],
161
146
  role: 'option',
162
147
  style: depth > 0 ? {
163
- paddingLeft: depth + 1 + "rem"
148
+ paddingLeft: `${depth + 1}rem`
164
149
  } : undefined
165
150
  };
166
151
  });
@@ -170,21 +155,17 @@ var ScrollableList = /*#__PURE__*/forwardRef(function ScrollableList(props, ref)
170
155
  className: "yt-list__empty"
171
156
  }, createElement("span", null, createElement(Spinner, {
172
157
  delay: 0
173
- })), createElement("span", null, texts.listbox.loading)) : options.length ? options.map(function (_ref) {
174
- var children = _ref.children,
175
- icon = _ref.icon,
176
- optionProps = _objectWithoutPropertiesLoose(_ref, _excluded2);
177
-
178
- return createElement("li", Object.assign({}, optionProps), icon, createElement("span", {
179
- className: "flex-grow truncate text-left"
180
- }, children), multiselect && createElement(Checkbox, {
181
- checked: optionProps['aria-selected'],
182
- onChange: function onChange() {
183
- return null;
184
- },
185
- className: "pointer-events-none ml-2 self-center p-px"
186
- }));
187
- }) : createElement("li", {
158
+ })), createElement("span", null, texts.listbox.loading)) : options.length ? options.map(({
159
+ children,
160
+ icon,
161
+ ...optionProps
162
+ }) => createElement("li", Object.assign({}, optionProps), icon, createElement("span", {
163
+ className: "flex-grow truncate text-left"
164
+ }, children), multiselect && createElement(Checkbox, {
165
+ checked: optionProps['aria-selected'],
166
+ onChange: () => null,
167
+ className: "pointer-events-none ml-2 self-center p-px"
168
+ }))) : createElement("li", {
188
169
  className: "yt-list__empty"
189
170
  }, createElement("span", null, texts.listbox.empty)));
190
171
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollableList.js","sources":["../../../../src/components/Listbox/ScrollableList.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { getNextIndexFromKeycode } from '../../utils/hooks/useListKeyboardNavigation';\nimport { useListScrollTo } from '../../utils/hooks/useListScrollTo';\nimport './ScrollableList.css';\nimport { Spinner } from '../Spinner/Spinner';\nimport { useLocalization } from '../Provider/Provider';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport { getInputClasses } from '../Input/util';\n\nexport type ScrollableListItemValue = string | number | boolean | null;\n\nexport type ScrollableListItem = {\n /**\n * Set whether the item is disabled.\n * This will both change the style and make the item unselectable\n */\n disabled?: boolean;\n /* Specifies whether the item has child items -- intended for internal use only */\n hasChildren?: boolean;\n /** Place an icon before the item's text */\n icon?: React.ReactElement;\n /* The index path to the item -- intended for internal use only */\n path?: string;\n /** Text describing the item */\n text: string | JSX.Element;\n /** Value of the item */\n value: ScrollableListItemValue;\n /** Child items to show hierarchical data */\n children?: ScrollableListItem[];\n};\n\n/** @internal */\nexport type ScrollableListProps = Omit<\n React.HTMLAttributes<HTMLUListElement>,\n 'defaultValue' | 'id' | 'onChange' | 'onClick' | 'onKeyDown'\n> & {\n /** Data indicating the options in scrollable list */\n data: ScrollableListItem[];\n /** Sets the list to be disabled */\n disabled?: boolean;\n /** Draws attention to the scrollable list by changing its style and making it visually prominent */\n highlighted?: boolean;\n /** Set an id for the scrollable list */\n id: string;\n /* Whether the input is in an invalid state */\n invalid?: boolean;\n /**\n * Shows a loading indicator with a text next to it.\n * Read more about how to provide the text in `Provider` component.\n */\n loading?: boolean;\n /**\n * Handler called when current active/selected option changes in a scrollable list.\n * @param index indicates the index of the current active option\n */\n onChange: (index: number) => void;\n /** Handler called when option is clicked */\n onClick?: (event: React.MouseEvent<HTMLLIElement>, index: number) => void;\n /**\n * Set whether the selected item should be scrolled into view when listbox is focused.\n * Default value is `false`\n */\n scrollOnFocus?: boolean;\n /** Handler called when a key is pressed */\n onKeyDown?: (event: React.KeyboardEvent<HTMLUListElement>, index: number | undefined) => void;\n /* Sets the list to read only mode */\n readOnly?: boolean;\n /**\n * Value of the scrollable list representing the selected item.\n * It needs to be an existing value from the provided data.\n */\n value: number | undefined;\n /**\n * Allows to select multiple items from the list\n */\n multiselect?: boolean;\n /**\n * Contains the currently selected values when multiselect mode is ON.\n */\n selectedIndexes?: number[];\n /**\n * True when all available (not disabled) options are selected\n */\n allOptionsSelected?: boolean;\n};\n\n/** @internal */\nexport type ScrollableListPropsWithRef = ScrollableListProps & React.RefAttributes<HTMLUListElement>;\n\nexport const getId = (id: string, value: ScrollableListItemValue): string => `${id}_${value}`;\n\nconst getNextEnabledItem = (\n event: React.KeyboardEvent<HTMLElement>,\n data: ScrollableListItem[],\n index: number | undefined\n): number | undefined => {\n const nextIndex = getNextIndexFromKeycode(event.keyCode, data.length, index);\n\n if (nextIndex) {\n if (nextIndex === index) {\n return index;\n } else if (data[nextIndex] && data[nextIndex].disabled) {\n return getNextEnabledItem(event, data, nextIndex);\n }\n }\n\n return nextIndex;\n};\n\nexport const ScrollableList = React.forwardRef(function ScrollableList(\n props: ScrollableListProps,\n ref: React.Ref<HTMLUListElement>\n) {\n const {\n data,\n disabled,\n highlighted,\n id,\n invalid: _,\n loading,\n onChange: setCurrentIndex,\n onClick,\n onFocus,\n onKeyDown,\n readOnly,\n scrollOnFocus = false,\n value: currentIndex,\n multiselect,\n selectedIndexes = [],\n allOptionsSelected = false,\n ...otherProps\n } = props;\n const listRef = useProxiedRef<HTMLUListElement>(ref);\n const itemRefs = React.useMemo(() => data.map(() => React.createRef<HTMLLIElement>()), [data]);\n const { texts } = useLocalization();\n const { scrollTo } = useListScrollTo(listRef, itemRefs);\n\n React.useEffect(() => {\n if (currentIndex && itemRefs[currentIndex]?.current) {\n itemRefs[currentIndex].current?.scrollIntoView({\n block: 'center',\n });\n }\n }, []);\n\n React.useEffect(() => {\n scrollTo(currentIndex);\n }, [currentIndex]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLUListElement>): void => {\n const nextIndex = getNextEnabledItem(event, data, currentIndex);\n\n if (nextIndex !== undefined && nextIndex !== currentIndex) {\n event.preventDefault();\n scrollTo(nextIndex);\n setCurrentIndex(nextIndex);\n }\n\n if (onKeyDown) {\n event.persist();\n const index = nextIndex !== undefined ? nextIndex : currentIndex;\n onKeyDown(event, index);\n }\n };\n\n const handleClick = (index: number) => (event: React.MouseEvent<HTMLLIElement>) => {\n setCurrentIndex(index);\n\n if (onClick) {\n event.persist();\n onClick(event, index);\n }\n };\n\n const handleFocus = (event: React.FocusEvent<HTMLUListElement>): void => {\n if (scrollOnFocus) {\n scrollTo(currentIndex);\n }\n\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const getOptionCheckedState = (optionValue: string, index: number): boolean => {\n if (optionValue === '#ALL-OPTIONS#') {\n return allOptionsSelected;\n } else if (!optionValue || !selectedIndexes) {\n return false;\n } else {\n return selectedIndexes.findIndex(i => i === index) !== -1;\n }\n };\n\n const list: React.HTMLAttributes<HTMLUListElement> &\n React.RefAttributes<HTMLUListElement> & { disabled?: boolean; readOnly?: boolean } = {\n ...otherProps,\n className: cn(\n 'inline-flex flex-col list-none !p-0 m-0 overflow-y-auto h-auto',\n getInputClasses(props),\n {\n 'yt-list--multiselect': multiselect,\n 'pointer-events-none': disabled,\n 'cursor-not-allowed': disabled || readOnly,\n },\n otherProps.className\n ),\n disabled,\n id,\n onFocus: !disabled && !readOnly ? handleFocus : undefined,\n onKeyDown: !disabled && !readOnly ? handleKeyDown : undefined,\n readOnly,\n ref: listRef,\n role: 'listbox',\n tabIndex: otherProps.tabIndex || 0,\n };\n\n const options = data.map((option, index) => {\n const depth = option.path ? option.path.split('.').length - 1 : 0;\n\n return {\n 'aria-selected': multiselect ? getOptionCheckedState(String(option.value), index) : currentIndex === index,\n 'data-focused': currentIndex === index,\n children: option.text,\n className: cn(\n 'flex items-center px-3 w-full cursor-pointer bg-white flex-[0_0_2rem] focus:wcag-blue focus:border-blue',\n {\n 'sticky top-0 font-bold': depth === 0 && !!option.hasChildren,\n }\n ),\n disabled: option.disabled,\n icon: option.icon,\n id: getId(id, option.value),\n key: getId(id, option.value),\n onClick: !disabled && !readOnly ? handleClick(index) : undefined,\n ref: itemRefs[index],\n role: 'option',\n style:\n depth > 0\n ? {\n paddingLeft: `${depth + 1}rem`,\n }\n : undefined,\n };\n });\n\n return (\n <ul {...list} data-taco=\"scrollable-list\">\n {loading ? (\n <li className=\"yt-list__empty\">\n <span>\n <Spinner delay={0} />\n </span>\n <span>{texts.listbox.loading}</span>\n </li>\n ) : options.length ? (\n options.map(({ children, icon, ...optionProps }) => (\n <li {...optionProps}>\n {icon}\n <span className=\"flex-grow truncate text-left\">{children}</span>\n {multiselect && (\n <Checkbox\n checked={optionProps['aria-selected']}\n onChange={() => null}\n className=\"pointer-events-none ml-2 self-center p-px\"\n />\n )}\n </li>\n ))\n ) : (\n <li className=\"yt-list__empty\">\n <span>{texts.listbox.empty}</span>\n </li>\n )}\n </ul>\n );\n});\n"],"names":["getId","id","value","getNextEnabledItem","event","data","index","nextIndex","getNextIndexFromKeycode","keyCode","length","disabled","ScrollableList","React","props","ref","loading","setCurrentIndex","onChange","onClick","onFocus","onKeyDown","readOnly","scrollOnFocus","currentIndex","multiselect","selectedIndexes","allOptionsSelected","otherProps","listRef","useProxiedRef","itemRefs","map","useLocalization","texts","useListScrollTo","scrollTo","current","scrollIntoView","block","handleKeyDown","undefined","preventDefault","persist","handleClick","handleFocus","getOptionCheckedState","optionValue","findIndex","i","list","className","cn","getInputClasses","role","tabIndex","options","option","depth","path","split","String","children","text","hasChildren","icon","key","style","paddingLeft","Spinner","delay","listbox","optionProps","Checkbox","checked","empty"],"mappings":"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"}
1
+ {"version":3,"file":"ScrollableList.js","sources":["../../../../src/components/Listbox/ScrollableList.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport cn from 'classnames';\r\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\r\nimport { getNextIndexFromKeycode } from '../../utils/hooks/useListKeyboardNavigation';\r\nimport { useListScrollTo } from '../../utils/hooks/useListScrollTo';\r\nimport './ScrollableList.css';\r\nimport { Spinner } from '../Spinner/Spinner';\r\nimport { useLocalization } from '../Provider/Provider';\r\nimport { Checkbox } from '../Checkbox/Checkbox';\r\nimport { getInputClasses } from '../Input/util';\r\n\r\nexport type ScrollableListItemValue = string | number | boolean | null;\r\n\r\nexport type ScrollableListItem = {\r\n /**\r\n * Set whether the item is disabled.\r\n * This will both change the style and make the item unselectable\r\n */\r\n disabled?: boolean;\r\n /* Specifies whether the item has child items -- intended for internal use only */\r\n hasChildren?: boolean;\r\n /** Place an icon before the item's text */\r\n icon?: React.ReactElement;\r\n /* The index path to the item -- intended for internal use only */\r\n path?: string;\r\n /** Text describing the item */\r\n text: string | JSX.Element;\r\n /** Value of the item */\r\n value: ScrollableListItemValue;\r\n /** Child items to show hierarchical data */\r\n children?: ScrollableListItem[];\r\n};\r\n\r\n/** @internal */\r\nexport type ScrollableListProps = Omit<\r\n React.HTMLAttributes<HTMLUListElement>,\r\n 'defaultValue' | 'id' | 'onChange' | 'onClick' | 'onKeyDown'\r\n> & {\r\n /** Data indicating the options in scrollable list */\r\n data: ScrollableListItem[];\r\n /** Sets the list to be disabled */\r\n disabled?: boolean;\r\n /** Draws attention to the scrollable list by changing its style and making it visually prominent */\r\n highlighted?: boolean;\r\n /** Set an id for the scrollable list */\r\n id: string;\r\n /* Whether the input is in an invalid state */\r\n invalid?: boolean;\r\n /**\r\n * Shows a loading indicator with a text next to it.\r\n * Read more about how to provide the text in `Provider` component.\r\n */\r\n loading?: boolean;\r\n /**\r\n * Handler called when current active/selected option changes in a scrollable list.\r\n * @param index indicates the index of the current active option\r\n */\r\n onChange: (index: number) => void;\r\n /** Handler called when option is clicked */\r\n onClick?: (event: React.MouseEvent<HTMLLIElement>, index: number) => void;\r\n /**\r\n * Set whether the selected item should be scrolled into view when listbox is focused.\r\n * Default value is `false`\r\n */\r\n scrollOnFocus?: boolean;\r\n /** Handler called when a key is pressed */\r\n onKeyDown?: (event: React.KeyboardEvent<HTMLUListElement>, index: number | undefined) => void;\r\n /* Sets the list to read only mode */\r\n readOnly?: boolean;\r\n /**\r\n * Value of the scrollable list representing the selected item.\r\n * It needs to be an existing value from the provided data.\r\n */\r\n value: number | undefined;\r\n /**\r\n * Allows to select multiple items from the list\r\n */\r\n multiselect?: boolean;\r\n /**\r\n * Contains the currently selected values when multiselect mode is ON.\r\n */\r\n selectedIndexes?: number[];\r\n /**\r\n * True when all available (not disabled) options are selected\r\n */\r\n allOptionsSelected?: boolean;\r\n};\r\n\r\n/** @internal */\r\nexport type ScrollableListPropsWithRef = ScrollableListProps & React.RefAttributes<HTMLUListElement>;\r\n\r\nexport const getId = (id: string, value: ScrollableListItemValue): string => `${id}_${value}`;\r\n\r\nconst getNextEnabledItem = (\r\n event: React.KeyboardEvent<HTMLElement>,\r\n data: ScrollableListItem[],\r\n index: number | undefined\r\n): number | undefined => {\r\n const nextIndex = getNextIndexFromKeycode(event.keyCode, data.length, index);\r\n\r\n if (nextIndex) {\r\n if (nextIndex === index) {\r\n return index;\r\n } else if (data[nextIndex] && data[nextIndex].disabled) {\r\n return getNextEnabledItem(event, data, nextIndex);\r\n }\r\n }\r\n\r\n return nextIndex;\r\n};\r\n\r\nexport const ScrollableList = React.forwardRef(function ScrollableList(\r\n props: ScrollableListProps,\r\n ref: React.Ref<HTMLUListElement>\r\n) {\r\n const {\r\n data,\r\n disabled,\r\n highlighted,\r\n id,\r\n invalid: _,\r\n loading,\r\n onChange: setCurrentIndex,\r\n onClick,\r\n onFocus,\r\n onKeyDown,\r\n readOnly,\r\n scrollOnFocus = false,\r\n value: currentIndex,\r\n multiselect,\r\n selectedIndexes = [],\r\n allOptionsSelected = false,\r\n ...otherProps\r\n } = props;\r\n const listRef = useProxiedRef<HTMLUListElement>(ref);\r\n const itemRefs = React.useMemo(() => data.map(() => React.createRef<HTMLLIElement>()), [data]);\r\n const { texts } = useLocalization();\r\n const { scrollTo } = useListScrollTo(listRef, itemRefs);\r\n\r\n React.useEffect(() => {\r\n if (currentIndex && itemRefs[currentIndex]?.current) {\r\n itemRefs[currentIndex].current?.scrollIntoView({\r\n block: 'center',\r\n });\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n scrollTo(currentIndex);\r\n }, [currentIndex]);\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent<HTMLUListElement>): void => {\r\n const nextIndex = getNextEnabledItem(event, data, currentIndex);\r\n\r\n if (nextIndex !== undefined && nextIndex !== currentIndex) {\r\n event.preventDefault();\r\n scrollTo(nextIndex);\r\n setCurrentIndex(nextIndex);\r\n }\r\n\r\n if (onKeyDown) {\r\n event.persist();\r\n const index = nextIndex !== undefined ? nextIndex : currentIndex;\r\n onKeyDown(event, index);\r\n }\r\n };\r\n\r\n const handleClick = (index: number) => (event: React.MouseEvent<HTMLLIElement>) => {\r\n setCurrentIndex(index);\r\n\r\n if (onClick) {\r\n event.persist();\r\n onClick(event, index);\r\n }\r\n };\r\n\r\n const handleFocus = (event: React.FocusEvent<HTMLUListElement>): void => {\r\n if (scrollOnFocus) {\r\n scrollTo(currentIndex);\r\n }\r\n\r\n if (onFocus) {\r\n event.persist();\r\n onFocus(event);\r\n }\r\n };\r\n\r\n const getOptionCheckedState = (optionValue: string, index: number): boolean => {\r\n if (optionValue === '#ALL-OPTIONS#') {\r\n return allOptionsSelected;\r\n } else if (!optionValue || !selectedIndexes) {\r\n return false;\r\n } else {\r\n return selectedIndexes.findIndex(i => i === index) !== -1;\r\n }\r\n };\r\n\r\n const list: React.HTMLAttributes<HTMLUListElement> &\r\n React.RefAttributes<HTMLUListElement> & { disabled?: boolean; readOnly?: boolean } = {\r\n ...otherProps,\r\n className: cn(\r\n 'inline-flex flex-col list-none !p-0 m-0 overflow-y-auto h-auto',\r\n getInputClasses(props),\r\n {\r\n 'yt-list--multiselect': multiselect,\r\n 'pointer-events-none': disabled,\r\n 'cursor-not-allowed': disabled || readOnly,\r\n },\r\n otherProps.className\r\n ),\r\n disabled,\r\n id,\r\n onFocus: !disabled && !readOnly ? handleFocus : undefined,\r\n onKeyDown: !disabled && !readOnly ? handleKeyDown : undefined,\r\n readOnly,\r\n ref: listRef,\r\n role: 'listbox',\r\n tabIndex: otherProps.tabIndex || 0,\r\n };\r\n\r\n const options = data.map((option, index) => {\r\n const depth = option.path ? option.path.split('.').length - 1 : 0;\r\n\r\n return {\r\n 'aria-selected': multiselect ? getOptionCheckedState(String(option.value), index) : currentIndex === index,\r\n 'data-focused': currentIndex === index,\r\n children: option.text,\r\n className: cn(\r\n 'flex items-center px-3 w-full cursor-pointer bg-white flex-[0_0_2rem] focus:wcag-blue focus:border-blue',\r\n {\r\n 'sticky top-0 font-bold': depth === 0 && !!option.hasChildren,\r\n }\r\n ),\r\n disabled: option.disabled,\r\n icon: option.icon,\r\n id: getId(id, option.value),\r\n key: getId(id, option.value),\r\n onClick: !disabled && !readOnly ? handleClick(index) : undefined,\r\n ref: itemRefs[index],\r\n role: 'option',\r\n style:\r\n depth > 0\r\n ? {\r\n paddingLeft: `${depth + 1}rem`,\r\n }\r\n : undefined,\r\n };\r\n });\r\n\r\n return (\r\n <ul {...list} data-taco=\"scrollable-list\">\r\n {loading ? (\r\n <li className=\"yt-list__empty\">\r\n <span>\r\n <Spinner delay={0} />\r\n </span>\r\n <span>{texts.listbox.loading}</span>\r\n </li>\r\n ) : options.length ? (\r\n options.map(({ children, icon, ...optionProps }) => (\r\n <li {...optionProps}>\r\n {icon}\r\n <span className=\"flex-grow truncate text-left\">{children}</span>\r\n {multiselect && (\r\n <Checkbox\r\n checked={optionProps['aria-selected']}\r\n onChange={() => null}\r\n className=\"pointer-events-none ml-2 self-center p-px\"\r\n />\r\n )}\r\n </li>\r\n ))\r\n ) : (\r\n <li className=\"yt-list__empty\">\r\n <span>{texts.listbox.empty}</span>\r\n </li>\r\n )}\r\n </ul>\r\n );\r\n});\r\n"],"names":["getId","id","value","getNextEnabledItem","event","data","index","nextIndex","getNextIndexFromKeycode","keyCode","length","disabled","ScrollableList","React","props","ref","highlighted","invalid","_","loading","onChange","setCurrentIndex","onClick","onFocus","onKeyDown","readOnly","scrollOnFocus","currentIndex","multiselect","selectedIndexes","allOptionsSelected","otherProps","listRef","useProxiedRef","itemRefs","map","texts","useLocalization","scrollTo","useListScrollTo","current","scrollIntoView","block","handleKeyDown","undefined","preventDefault","persist","handleClick","handleFocus","getOptionCheckedState","optionValue","findIndex","i","list","className","cn","getInputClasses","role","tabIndex","options","option","depth","path","split","String","children","text","hasChildren","icon","key","style","paddingLeft","Spinner","delay","listbox","optionProps","Checkbox","checked","empty"],"mappings":"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"}
@@ -1,46 +1,40 @@
1
- import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import { useMemo, useEffect } from 'react';
3
2
  import { v4 } from 'uuid';
4
3
  import { useProxiedRef } from '../../utils/hooks/useProxiedRef.js';
5
4
  import { useFlattenedData, getIndexFromValue, getActiveDescendant, setInputValueByRef, findByValue, sanitizeItem } from './util.js';
6
5
  import { useTypeahead } from './useTypeahead.js';
7
6
 
8
- var _excluded = ["data", "defaultValue", "disabled", "emptyValue", "id", "invalid", "name", "onChange", "onFocus", "onKeyDown", "value"];
9
- var useListbox = function useListbox(_ref, ref) {
10
- var _ref$data = _ref.data,
11
- externalData = _ref$data === void 0 ? [] : _ref$data,
12
- defaultValue = _ref.defaultValue,
13
- disabled = _ref.disabled,
14
- emptyValue = _ref.emptyValue,
15
- nativeId = _ref.id,
16
- invalid = _ref.invalid,
17
- name = _ref.name,
18
- onChange = _ref.onChange,
19
- onFocus = _ref.onFocus,
20
- onKeyDown = _ref.onKeyDown,
21
- _ref$value = _ref.value,
22
- value = _ref$value === void 0 ? emptyValue : _ref$value,
23
- otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
24
-
25
- var data = useFlattenedData(emptyValue !== undefined ? [{
7
+ const useListbox = ({
8
+ data: externalData = [],
9
+ defaultValue,
10
+ disabled,
11
+ emptyValue,
12
+ id: nativeId,
13
+ invalid,
14
+ name,
15
+ onChange,
16
+ onFocus,
17
+ onKeyDown,
18
+ value = emptyValue,
19
+ ...otherProps
20
+ }, ref) => {
21
+ const data = useFlattenedData(emptyValue !== undefined ? [{
26
22
  text: '',
27
23
  value: emptyValue
28
- }].concat(externalData) : externalData);
29
- var id = useMemo(function () {
30
- return nativeId || v4();
31
- }, [nativeId]);
32
- var inputRef = useProxiedRef(ref);
33
- var currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;
34
-
35
- var _useTypeahead = useTypeahead({
36
- data: data,
37
- currentIndex: currentIndex
38
- }),
39
- getNextIndex = _useTypeahead.getNextIndex;
40
-
41
- var setInputValueByIndex = function setInputValueByIndex(index) {
24
+ }, ...externalData] : externalData);
25
+ const id = useMemo(() => nativeId || v4(), [nativeId]);
26
+ const inputRef = useProxiedRef(ref);
27
+ const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;
28
+ const {
29
+ getNextIndex
30
+ } = useTypeahead({
31
+ data,
32
+ currentIndex
33
+ });
34
+
35
+ const setInputValueByIndex = index => {
42
36
  if (index !== undefined) {
43
- var option = data[index];
37
+ const option = data[index];
44
38
 
45
39
  if (option && !option.disabled) {
46
40
  setInputValueByRef(inputRef.current, option.value);
@@ -48,14 +42,14 @@ var useListbox = function useListbox(_ref, ref) {
48
42
  }
49
43
  };
50
44
 
51
- var handleListboxChange = function handleListboxChange(index) {
45
+ const handleListboxChange = index => {
52
46
  setInputValueByIndex(index);
53
47
  };
54
48
 
55
- useEffect(function () {
49
+ useEffect(() => {
56
50
  if (data.length && currentIndex === undefined) {
57
51
  if (defaultValue !== undefined) {
58
- var defaultValueIndex = getIndexFromValue(data, defaultValue);
52
+ const defaultValueIndex = getIndexFromValue(data, defaultValue);
59
53
 
60
54
  if (defaultValueIndex !== undefined) {
61
55
  setInputValueByIndex(defaultValueIndex);
@@ -66,11 +60,11 @@ var useListbox = function useListbox(_ref, ref) {
66
60
  }
67
61
  }, [data]);
68
62
 
69
- var handleListboxKeyDown = function handleListboxKeyDown(event) {
70
- var charKey = String.fromCharCode(event.keyCode);
63
+ const handleListboxKeyDown = event => {
64
+ const charKey = String.fromCharCode(event.keyCode);
71
65
 
72
66
  if (charKey.match(/(\w)/g)) {
73
- var nextIndex = getNextIndex(charKey);
67
+ const nextIndex = getNextIndex(charKey);
74
68
 
75
69
  if (nextIndex > -1 && nextIndex !== currentIndex) {
76
70
  setInputValueByIndex(nextIndex);
@@ -85,7 +79,7 @@ var useListbox = function useListbox(_ref, ref) {
85
79
  }
86
80
  };
87
81
 
88
- var handleListboxFocus = function handleListboxFocus(event) {
82
+ const handleListboxFocus = event => {
89
83
  if (currentIndex === undefined && data.length) {
90
84
  setInputValueByIndex(0);
91
85
  }
@@ -96,26 +90,24 @@ var useListbox = function useListbox(_ref, ref) {
96
90
  }
97
91
  };
98
92
 
99
- var handleInputChange = function handleInputChange(event) {
93
+ const handleInputChange = event => {
100
94
  event.persist();
101
95
 
102
96
  if (onChange) {
103
97
  var _item$path$split, _item$path;
104
98
 
105
- var item = findByValue(data, event.target.value);
99
+ const item = findByValue(data, event.target.value);
106
100
  event.detail = sanitizeItem(item);
107
- var indexes = (_item$path$split = item === null || item === void 0 ? void 0 : (_item$path = item.path) === null || _item$path === void 0 ? void 0 : _item$path.split('.')) !== null && _item$path$split !== void 0 ? _item$path$split : [];
101
+ const indexes = (_item$path$split = item === null || item === void 0 ? void 0 : (_item$path = item.path) === null || _item$path === void 0 ? void 0 : _item$path.split('.')) !== null && _item$path$split !== void 0 ? _item$path$split : [];
108
102
 
109
103
  if (indexes.length > 1) {
110
104
  // we don't want to map the current item
111
105
  indexes.pop(); // we need to rebuild the path as we map
112
106
 
113
- var lastPath;
114
- event.detail.parents = indexes.map(function (i) {
107
+ let lastPath;
108
+ event.detail.parents = indexes.map(i => {
115
109
  lastPath = lastPath ? [lastPath, i].join('.') : i;
116
- return sanitizeItem(data.find(function (i) {
117
- return i.path === lastPath;
118
- }));
110
+ return sanitizeItem(data.find(i => i.path === lastPath));
119
111
  });
120
112
  }
121
113
 
@@ -123,30 +115,29 @@ var useListbox = function useListbox(_ref, ref) {
123
115
  }
124
116
  };
125
117
 
126
- var list = _extends({}, otherProps, {
118
+ const list = { ...otherProps,
127
119
  'aria-activedescendant': getActiveDescendant(data, currentIndex, id),
128
- data: data,
129
- disabled: disabled,
130
- id: id,
131
- invalid: invalid,
120
+ data,
121
+ disabled,
122
+ id,
123
+ invalid,
132
124
  onChange: handleListboxChange,
133
125
  onFocus: handleListboxFocus,
134
126
  onKeyDown: handleListboxKeyDown,
135
127
  scrollOnFocus: true,
136
128
  tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,
137
129
  value: currentIndex
138
- });
139
-
140
- var input = {
141
- name: name,
130
+ };
131
+ const input = {
132
+ name,
142
133
  onChange: handleInputChange,
143
134
  ref: inputRef,
144
135
  tabIndex: -1,
145
136
  value: value !== null && value !== void 0 ? value : ''
146
137
  };
147
138
  return {
148
- list: list,
149
- input: input
139
+ list,
140
+ input
150
141
  };
151
142
  };
152
143
 
@@ -1 +1 @@
1
- {"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, findByValue, getActiveDescendant, useFlattenedData, sanitizeItem } from './util';\nimport { ScrollableListProps } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue,\n id: nativeId,\n invalid,\n name,\n onChange,\n onFocus,\n onKeyDown,\n value = emptyValue,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const data = useFlattenedData(emptyValue !== undefined ? [{ text: '', value: emptyValue }, ...externalData] : externalData);\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value);\n }\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setInputValueByIndex(index);\n };\n\n React.useEffect(() => {\n if (data.length && currentIndex === undefined) {\n if (defaultValue !== undefined) {\n const defaultValueIndex = getIndexFromValue(data, defaultValue);\n\n if (defaultValueIndex !== undefined) {\n setInputValueByIndex(defaultValueIndex);\n }\n } else {\n setInputValueByIndex(0);\n }\n }\n }, [data]);\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\n const charKey = String.fromCharCode(event.keyCode);\n\n if (charKey.match(/(\\w)/g)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setInputValueByIndex(nextIndex);\n }\n return;\n }\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (currentIndex === undefined && data.length) {\n setInputValueByIndex(0);\n }\n\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (onChange) {\n const item = findByValue(data, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const indexes = item?.path?.split('.') ?? [];\n\n if (indexes.length > 1) {\n // we don't want to map the current item\n indexes.pop();\n // we need to rebuild the path as we map\n let lastPath: string;\n\n (event as any).detail.parents = indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(data.find(i => i.path === lastPath));\n });\n }\n\n onChange(event);\n }\n };\n\n const list: ScrollableListProps = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n data,\n disabled,\n id,\n invalid,\n onChange: handleListboxChange,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: true,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useListbox","ref","data","externalData","defaultValue","disabled","emptyValue","nativeId","id","invalid","name","onChange","onFocus","onKeyDown","value","otherProps","useFlattenedData","undefined","text","React","uuid","inputRef","useProxiedRef","currentIndex","getIndexFromValue","useTypeahead","getNextIndex","setInputValueByIndex","index","option","setInputValueByRef","current","handleListboxChange","length","defaultValueIndex","handleListboxKeyDown","event","charKey","String","fromCharCode","keyCode","match","nextIndex","persist","handleListboxFocus","handleInputChange","item","findByValue","target","detail","sanitizeItem","indexes","path","split","pop","lastPath","parents","map","i","join","find","list","getActiveDescendant","scrollOnFocus","tabIndex","input"],"mappings":"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"}
1
+ {"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { ListboxProps } from './Listbox';\r\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\r\nimport { setInputValueByRef, getIndexFromValue, findByValue, getActiveDescendant, useFlattenedData, sanitizeItem } from './util';\r\nimport { ScrollableListProps } from './ScrollableList';\r\nimport { useTypeahead } from './useTypeahead';\r\n\r\ntype useListbox = {\r\n list: ScrollableListProps;\r\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\r\n};\r\n\r\nexport const useListbox = (\r\n {\r\n data: externalData = [],\r\n defaultValue,\r\n disabled,\r\n emptyValue,\r\n id: nativeId,\r\n invalid,\r\n name,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n value = emptyValue,\r\n ...otherProps\r\n }: ListboxProps,\r\n ref: React.Ref<HTMLInputElement>\r\n): useListbox => {\r\n const data = useFlattenedData(emptyValue !== undefined ? [{ text: '', value: emptyValue }, ...externalData] : externalData);\r\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\r\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\r\n const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;\r\n const { getNextIndex } = useTypeahead({ data, currentIndex });\r\n\r\n const setInputValueByIndex = (index: number | undefined): void => {\r\n if (index !== undefined) {\r\n const option = data[index];\r\n\r\n if (option && !option.disabled) {\r\n setInputValueByRef(inputRef.current, option.value);\r\n }\r\n }\r\n };\r\n\r\n const handleListboxChange = (index: number): void => {\r\n setInputValueByIndex(index);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (data.length && currentIndex === undefined) {\r\n if (defaultValue !== undefined) {\r\n const defaultValueIndex = getIndexFromValue(data, defaultValue);\r\n\r\n if (defaultValueIndex !== undefined) {\r\n setInputValueByIndex(defaultValueIndex);\r\n }\r\n } else {\r\n setInputValueByIndex(0);\r\n }\r\n }\r\n }, [data]);\r\n\r\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\r\n const charKey = String.fromCharCode(event.keyCode);\r\n\r\n if (charKey.match(/(\\w)/g)) {\r\n const nextIndex = getNextIndex(charKey);\r\n\r\n if (nextIndex > -1 && nextIndex !== currentIndex) {\r\n setInputValueByIndex(nextIndex);\r\n }\r\n return;\r\n }\r\n\r\n if (onKeyDown) {\r\n event.persist();\r\n onKeyDown(event);\r\n }\r\n };\r\n\r\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\r\n if (currentIndex === undefined && data.length) {\r\n setInputValueByIndex(0);\r\n }\r\n\r\n if (onFocus) {\r\n event.persist();\r\n onFocus(event);\r\n }\r\n };\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n event.persist();\r\n\r\n if (onChange) {\r\n const item = findByValue(data, event.target.value);\r\n (event as any).detail = sanitizeItem(item);\r\n\r\n const indexes = item?.path?.split('.') ?? [];\r\n\r\n if (indexes.length > 1) {\r\n // we don't want to map the current item\r\n indexes.pop();\r\n // we need to rebuild the path as we map\r\n let lastPath: string;\r\n\r\n (event as any).detail.parents = indexes.map(i => {\r\n lastPath = lastPath ? [lastPath, i].join('.') : i;\r\n return sanitizeItem(data.find(i => i.path === lastPath));\r\n });\r\n }\r\n\r\n onChange(event);\r\n }\r\n };\r\n\r\n const list: ScrollableListProps = {\r\n ...otherProps,\r\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\r\n data,\r\n disabled,\r\n id,\r\n invalid,\r\n onChange: handleListboxChange,\r\n onFocus: handleListboxFocus,\r\n onKeyDown: handleListboxKeyDown,\r\n scrollOnFocus: true,\r\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\r\n value: currentIndex,\r\n };\r\n\r\n const input = {\r\n name,\r\n onChange: handleInputChange,\r\n ref: inputRef,\r\n tabIndex: -1,\r\n value: value ?? '',\r\n };\r\n\r\n return { list, input };\r\n};\r\n"],"names":["useListbox","data","externalData","defaultValue","disabled","emptyValue","id","nativeId","invalid","name","onChange","onFocus","onKeyDown","value","otherProps","ref","useFlattenedData","undefined","text","React","uuid","inputRef","useProxiedRef","currentIndex","getIndexFromValue","getNextIndex","useTypeahead","setInputValueByIndex","index","option","setInputValueByRef","current","handleListboxChange","length","defaultValueIndex","handleListboxKeyDown","event","charKey","String","fromCharCode","keyCode","match","nextIndex","persist","handleListboxFocus","handleInputChange","item","findByValue","target","detail","sanitizeItem","indexes","path","split","pop","lastPath","parents","map","i","join","find","list","getActiveDescendant","scrollOnFocus","tabIndex","input"],"mappings":";;;;;;MAaaA,UAAU,GAAG,CACtB;EACIC,IAAI,EAAEC,YAAY,GAAG,EADzB;EAEIC,YAFJ;EAGIC,QAHJ;EAIIC,UAJJ;EAKIC,EAAE,EAAEC,QALR;EAMIC,OANJ;EAOIC,IAPJ;EAQIC,QARJ;EASIC,OATJ;EAUIC,SAVJ;EAWIC,KAAK,GAAGR,UAXZ;EAYI,GAAGS;AAZP,CADsB,EAetBC,GAfsB;EAiBtB,MAAMd,IAAI,GAAGe,gBAAgB,CAACX,UAAU,KAAKY,SAAf,GAA2B,CAAC;IAAEC,IAAI,EAAE,EAAR;IAAYL,KAAK,EAAER;GAApB,EAAkC,GAAGH,YAArC,CAA3B,GAAgFA,YAAjF,CAA7B;EACA,MAAMI,EAAE,GAAGa,OAAA,CAAc,MAAMZ,QAAQ,IAAIa,EAAI,EAApC,EAAwC,CAACb,QAAD,CAAxC,CAAX;EACA,MAAMc,QAAQ,GAAGC,aAAa,CAAmBP,GAAnB,CAA9B;EACA,MAAMQ,YAAY,GAAGV,KAAK,KAAKI,SAAV,GAAsBO,iBAAiB,CAACvB,IAAD,EAAOY,KAAP,CAAvC,GAAuDI,SAA5E;EACA,MAAM;IAAEQ;MAAiBC,YAAY,CAAC;IAAEzB,IAAF;IAAQsB;GAAT,CAArC;;EAEA,MAAMI,oBAAoB,GAAIC,KAAD;IACzB,IAAIA,KAAK,KAAKX,SAAd,EAAyB;MACrB,MAAMY,MAAM,GAAG5B,IAAI,CAAC2B,KAAD,CAAnB;;MAEA,IAAIC,MAAM,IAAI,CAACA,MAAM,CAACzB,QAAtB,EAAgC;QAC5B0B,kBAAkB,CAACT,QAAQ,CAACU,OAAV,EAAmBF,MAAM,CAAChB,KAA1B,CAAlB;;;GALZ;;EAUA,MAAMmB,mBAAmB,GAAIJ,KAAD;IACxBD,oBAAoB,CAACC,KAAD,CAApB;GADJ;;EAIAT,SAAA,CAAgB;IACZ,IAAIlB,IAAI,CAACgC,MAAL,IAAeV,YAAY,KAAKN,SAApC,EAA+C;MAC3C,IAAId,YAAY,KAAKc,SAArB,EAAgC;QAC5B,MAAMiB,iBAAiB,GAAGV,iBAAiB,CAACvB,IAAD,EAAOE,YAAP,CAA3C;;QAEA,IAAI+B,iBAAiB,KAAKjB,SAA1B,EAAqC;UACjCU,oBAAoB,CAACO,iBAAD,CAApB;;OAJR,MAMO;QACHP,oBAAoB,CAAC,CAAD,CAApB;;;GATZ,EAYG,CAAC1B,IAAD,CAZH;;EAcA,MAAMkC,oBAAoB,GAAIC,KAAD;IACzB,MAAMC,OAAO,GAAGC,MAAM,CAACC,YAAP,CAAoBH,KAAK,CAACI,OAA1B,CAAhB;;IAEA,IAAIH,OAAO,CAACI,KAAR,CAAc,OAAd,CAAJ,EAA4B;MACxB,MAAMC,SAAS,GAAGjB,YAAY,CAACY,OAAD,CAA9B;;MAEA,IAAIK,SAAS,GAAG,CAAC,CAAb,IAAkBA,SAAS,KAAKnB,YAApC,EAAkD;QAC9CI,oBAAoB,CAACe,SAAD,CAApB;;;MAEJ;;;IAGJ,IAAI9B,SAAJ,EAAe;MACXwB,KAAK,CAACO,OAAN;MACA/B,SAAS,CAACwB,KAAD,CAAT;;GAdR;;EAkBA,MAAMQ,kBAAkB,GAAIR,KAAD;IACvB,IAAIb,YAAY,KAAKN,SAAjB,IAA8BhB,IAAI,CAACgC,MAAvC,EAA+C;MAC3CN,oBAAoB,CAAC,CAAD,CAApB;;;IAGJ,IAAIhB,OAAJ,EAAa;MACTyB,KAAK,CAACO,OAAN;MACAhC,OAAO,CAACyB,KAAD,CAAP;;GAPR;;EAWA,MAAMS,iBAAiB,GAAIT,KAAD;IACtBA,KAAK,CAACO,OAAN;;IAEA,IAAIjC,QAAJ,EAAc;MAAA;;MACV,MAAMoC,IAAI,GAAGC,WAAW,CAAC9C,IAAD,EAAOmC,KAAK,CAACY,MAAN,CAAanC,KAApB,CAAxB;MACCuB,KAAa,CAACa,MAAd,GAAuBC,YAAY,CAACJ,IAAD,CAAnC;MAED,MAAMK,OAAO,uBAAGL,IAAH,aAAGA,IAAH,qCAAGA,IAAI,CAAEM,IAAT,+CAAG,WAAYC,KAAZ,CAAkB,GAAlB,CAAH,+DAA6B,EAA1C;;MAEA,IAAIF,OAAO,CAAClB,MAAR,GAAiB,CAArB,EAAwB;;QAEpBkB,OAAO,CAACG,GAAR,GAFoB;;QAIpB,IAAIC,QAAJ;QAECnB,KAAa,CAACa,MAAd,CAAqBO,OAArB,GAA+BL,OAAO,CAACM,GAAR,CAAYC,CAAC;UACzCH,QAAQ,GAAGA,QAAQ,GAAG,CAACA,QAAD,EAAWG,CAAX,EAAcC,IAAd,CAAmB,GAAnB,CAAH,GAA6BD,CAAhD;UACA,OAAOR,YAAY,CAACjD,IAAI,CAAC2D,IAAL,CAAUF,CAAC,IAAIA,CAAC,CAACN,IAAF,KAAWG,QAA1B,CAAD,CAAnB;SAF4B,CAA/B;;;MAML7C,QAAQ,CAAC0B,KAAD,CAAR;;GArBR;;EAyBA,MAAMyB,IAAI,GAAwB,EAC9B,GAAG/C,UAD2B;IAE9B,yBAAyBgD,mBAAmB,CAAC7D,IAAD,EAAOsB,YAAP,EAAqBjB,EAArB,CAFd;IAG9BL,IAH8B;IAI9BG,QAJ8B;IAK9BE,EAL8B;IAM9BE,OAN8B;IAO9BE,QAAQ,EAAEsB,mBAPoB;IAQ9BrB,OAAO,EAAEiC,kBARqB;IAS9BhC,SAAS,EAAEuB,oBATmB;IAU9B4B,aAAa,EAAE,IAVe;IAW9BC,QAAQ,EAAE5D,QAAQ,GAAG,CAAC,CAAJ,GAAQU,UAAU,CAACkD,QAAX,GAAsBlD,UAAU,CAACkD,QAAjC,GAA4C,CAXxC;IAY9BnD,KAAK,EAAEU;GAZX;EAeA,MAAM0C,KAAK,GAAG;IACVxD,IADU;IAEVC,QAAQ,EAAEmC,iBAFA;IAGV9B,GAAG,EAAEM,QAHK;IAIV2C,QAAQ,EAAE,CAAC,CAJD;IAKVnD,KAAK,EAAEA,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW;GALpB;EAQA,OAAO;IAAEgD,IAAF;IAAQI;GAAf;AACH;;;;"}