@simplybusiness/mobius 3.3.2 → 3.4.1

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 (283) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cjs/components/Chopin/QuestionHelp/QuestionHelp.js +5 -10
  3. package/dist/cjs/components/Chopin/QuestionHelp/QuestionHelp.js.map +1 -1
  4. package/dist/cjs/components/Chopin/TradeSelector/Header/Header.d.ts +9 -0
  5. package/dist/cjs/components/Chopin/TradeSelector/Header/Header.js +14 -0
  6. package/dist/cjs/components/Chopin/TradeSelector/Header/Header.js.map +1 -0
  7. package/dist/cjs/components/Chopin/TradeSelector/Header/index.d.ts +1 -0
  8. package/dist/cjs/components/Chopin/TradeSelector/{Popover → Header}/index.js +1 -1
  9. package/dist/cjs/components/Chopin/TradeSelector/Header/index.js.map +1 -0
  10. package/dist/cjs/components/Chopin/TradeSelector/Listing/Listing.d.ts +12 -0
  11. package/dist/cjs/components/Chopin/TradeSelector/Listing/Listing.js +24 -0
  12. package/dist/cjs/components/Chopin/TradeSelector/Listing/Listing.js.map +1 -0
  13. package/dist/cjs/components/Chopin/TradeSelector/Listing/Listing.test.js +51 -0
  14. package/dist/cjs/components/Chopin/TradeSelector/Listing/Listing.test.js.map +1 -0
  15. package/dist/cjs/components/Chopin/TradeSelector/Listing/ListingItem.d.ts +10 -0
  16. package/dist/cjs/components/Chopin/TradeSelector/Listing/ListingItem.js +27 -0
  17. package/dist/cjs/components/Chopin/TradeSelector/Listing/ListingItem.js.map +1 -0
  18. package/dist/cjs/components/Chopin/TradeSelector/Listing/ListingItem.test.js +42 -0
  19. package/dist/cjs/components/Chopin/TradeSelector/Listing/ListingItem.test.js.map +1 -0
  20. package/dist/cjs/components/Chopin/TradeSelector/Listing/index.d.ts +1 -0
  21. package/dist/cjs/components/Chopin/TradeSelector/{ListBox → Listing}/index.js +1 -1
  22. package/dist/cjs/components/Chopin/TradeSelector/Listing/index.js.map +1 -0
  23. package/dist/cjs/components/Chopin/TradeSelector/SearchResults/SearchResults.d.ts +11 -11
  24. package/dist/cjs/components/Chopin/TradeSelector/SearchResults/SearchResults.js +92 -15
  25. package/dist/cjs/components/Chopin/TradeSelector/SearchResults/SearchResults.js.map +1 -1
  26. package/dist/cjs/components/Chopin/TradeSelector/SearchResults/SearchResults.test.js +96 -104
  27. package/dist/cjs/components/Chopin/TradeSelector/SearchResults/SearchResults.test.js.map +1 -1
  28. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/TradeInput.d.ts +15 -0
  29. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/TradeInput.js +37 -0
  30. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/TradeInput.js.map +1 -0
  31. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/TradeInput.test.js +57 -0
  32. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/TradeInput.test.js.map +1 -0
  33. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/index.d.ts +1 -0
  34. package/dist/cjs/components/Chopin/TradeSelector/{ComboBox → TradeInput}/index.js +1 -1
  35. package/dist/cjs/components/Chopin/TradeSelector/TradeInput/index.js.map +1 -0
  36. package/dist/cjs/components/Chopin/TradeSelector/TradeSelector.d.ts +2 -2
  37. package/dist/cjs/components/Chopin/TradeSelector/TradeSelector.js +62 -31
  38. package/dist/cjs/components/Chopin/TradeSelector/TradeSelector.js.map +1 -1
  39. package/dist/cjs/components/Chopin/TradeSelector/TradeSelector.test.js +152 -240
  40. package/dist/cjs/components/Chopin/TradeSelector/TradeSelector.test.js.map +1 -1
  41. package/dist/cjs/components/Chopin/TradeSelector/config/index.d.ts +9 -0
  42. package/dist/cjs/components/Chopin/TradeSelector/config/shared.d.ts +9 -0
  43. package/dist/cjs/components/Chopin/TradeSelector/config/shared.js +9 -0
  44. package/dist/cjs/components/Chopin/TradeSelector/config/shared.js.map +1 -1
  45. package/dist/cjs/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.d.ts +1 -0
  46. package/dist/cjs/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.js +17 -0
  47. package/dist/cjs/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.js.map +1 -0
  48. package/dist/cjs/components/Chopin/TradeSelector/mockApiResults.d.ts +10 -0
  49. package/dist/cjs/components/Chopin/TradeSelector/mockApiResults.js +11 -1
  50. package/dist/cjs/components/Chopin/TradeSelector/mockApiResults.js.map +1 -1
  51. package/dist/cjs/components/Chopin/TradeSelector/types.d.ts +7 -5
  52. package/dist/cjs/components/Chopin/TradeSelector/useFetchTrades/index.d.ts +1 -0
  53. package/dist/cjs/components/Chopin/TradeSelector/{SelectedTrade → useFetchTrades}/index.js +1 -1
  54. package/dist/cjs/components/Chopin/TradeSelector/useFetchTrades/index.js.map +1 -0
  55. package/dist/cjs/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.d.ts +8 -0
  56. package/dist/cjs/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.js +62 -0
  57. package/dist/cjs/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.js.map +1 -0
  58. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/index.d.ts +1 -0
  59. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/index.js +18 -0
  60. package/dist/cjs/components/Chopin/TradeSelector/{useTradeSelector → useTradeSelectorUrl}/index.js.map +1 -1
  61. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.d.ts +6 -0
  62. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.js +20 -0
  63. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.js.map +1 -0
  64. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.test.js +29 -0
  65. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.test.js.map +1 -0
  66. package/dist/cjs/components/Chopin/index.d.ts +5 -5
  67. package/dist/cjs/components/Chopin/index.js +5 -5
  68. package/dist/cjs/components/Chopin/index.js.map +1 -1
  69. package/dist/cjs/hooks/useOnClickOutside/index.d.ts +1 -0
  70. package/dist/cjs/hooks/useOnClickOutside/index.js +18 -0
  71. package/dist/cjs/hooks/useOnClickOutside/index.js.map +1 -0
  72. package/dist/cjs/hooks/useOnClickOutside/useOnClickOutside.d.ts +2 -0
  73. package/dist/cjs/hooks/useOnClickOutside/useOnClickOutside.js +23 -0
  74. package/dist/cjs/hooks/useOnClickOutside/useOnClickOutside.js.map +1 -0
  75. package/dist/esm/components/Chopin/QuestionHelp/QuestionHelp.js +6 -11
  76. package/dist/esm/components/Chopin/QuestionHelp/QuestionHelp.js.map +1 -1
  77. package/dist/esm/components/Chopin/TradeSelector/Header/Header.js +10 -0
  78. package/dist/esm/components/Chopin/TradeSelector/Header/Header.js.map +1 -0
  79. package/dist/esm/components/Chopin/TradeSelector/Header/index.js +2 -0
  80. package/dist/esm/components/Chopin/TradeSelector/Header/index.js.map +1 -0
  81. package/dist/esm/components/Chopin/TradeSelector/Listing/Listing.js +17 -0
  82. package/dist/esm/components/Chopin/TradeSelector/Listing/Listing.js.map +1 -0
  83. package/dist/esm/components/Chopin/TradeSelector/Listing/Listing.test.js +26 -0
  84. package/dist/esm/components/Chopin/TradeSelector/Listing/Listing.test.js.map +1 -0
  85. package/dist/esm/components/Chopin/TradeSelector/Listing/ListingItem.js +21 -0
  86. package/dist/esm/components/Chopin/TradeSelector/Listing/ListingItem.js.map +1 -0
  87. package/dist/esm/components/Chopin/TradeSelector/Listing/ListingItem.test.js +37 -0
  88. package/dist/esm/components/Chopin/TradeSelector/Listing/ListingItem.test.js.map +1 -0
  89. package/dist/esm/components/Chopin/TradeSelector/Listing/index.js +2 -0
  90. package/dist/esm/components/Chopin/TradeSelector/Listing/index.js.map +1 -0
  91. package/dist/esm/components/Chopin/TradeSelector/SearchResults/SearchResults.js +90 -16
  92. package/dist/esm/components/Chopin/TradeSelector/SearchResults/SearchResults.js.map +1 -1
  93. package/dist/esm/components/Chopin/TradeSelector/SearchResults/SearchResults.test.js +75 -103
  94. package/dist/esm/components/Chopin/TradeSelector/SearchResults/SearchResults.test.js.map +1 -1
  95. package/dist/esm/components/Chopin/TradeSelector/TradeInput/TradeInput.js +30 -0
  96. package/dist/esm/components/Chopin/TradeSelector/TradeInput/TradeInput.js.map +1 -0
  97. package/dist/esm/components/Chopin/TradeSelector/TradeInput/TradeInput.test.js +52 -0
  98. package/dist/esm/components/Chopin/TradeSelector/TradeInput/TradeInput.test.js.map +1 -0
  99. package/dist/esm/components/Chopin/TradeSelector/TradeInput/index.js +2 -0
  100. package/dist/esm/components/Chopin/TradeSelector/TradeInput/index.js.map +1 -0
  101. package/dist/esm/components/Chopin/TradeSelector/TradeSelector.js +63 -32
  102. package/dist/esm/components/Chopin/TradeSelector/TradeSelector.js.map +1 -1
  103. package/dist/esm/components/Chopin/TradeSelector/TradeSelector.test.js +154 -242
  104. package/dist/esm/components/Chopin/TradeSelector/TradeSelector.test.js.map +1 -1
  105. package/dist/esm/components/Chopin/TradeSelector/config/shared.js +9 -0
  106. package/dist/esm/components/Chopin/TradeSelector/config/shared.js.map +1 -1
  107. package/dist/esm/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.js +13 -0
  108. package/dist/esm/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.js.map +1 -0
  109. package/dist/esm/components/Chopin/TradeSelector/mockApiResults.js +10 -0
  110. package/dist/esm/components/Chopin/TradeSelector/mockApiResults.js.map +1 -1
  111. package/dist/esm/components/Chopin/TradeSelector/useFetchTrades/index.js +2 -0
  112. package/dist/esm/components/Chopin/TradeSelector/useFetchTrades/index.js.map +1 -0
  113. package/dist/esm/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.js +55 -0
  114. package/dist/esm/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.js.map +1 -0
  115. package/dist/esm/components/Chopin/TradeSelector/useTradeSelectorUrl/index.js +2 -0
  116. package/dist/esm/components/Chopin/TradeSelector/{useTradeSelector → useTradeSelectorUrl}/index.js.map +1 -1
  117. package/dist/esm/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.js +16 -0
  118. package/dist/esm/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.js.map +1 -0
  119. package/dist/esm/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.test.js +27 -0
  120. package/dist/esm/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.test.js.map +1 -0
  121. package/dist/esm/components/Chopin/index.js +5 -5
  122. package/dist/esm/components/Chopin/index.js.map +1 -1
  123. package/dist/esm/hooks/useOnClickOutside/index.js +2 -0
  124. package/dist/esm/hooks/useOnClickOutside/index.js.map +1 -0
  125. package/dist/esm/hooks/useOnClickOutside/useOnClickOutside.js +19 -0
  126. package/dist/esm/hooks/useOnClickOutside/useOnClickOutside.js.map +1 -0
  127. package/dist/mobius.d.ts +38 -30
  128. package/package.json +5 -7
  129. package/src/components/Chopin/QuestionHelp/QuestionHelp.tsx +8 -20
  130. package/src/components/Chopin/TradeSelector/Header/Header.tsx +33 -0
  131. package/src/components/Chopin/TradeSelector/Header/index.tsx +1 -0
  132. package/src/components/Chopin/TradeSelector/Listing/Listing.test.tsx +42 -0
  133. package/src/components/Chopin/TradeSelector/Listing/Listing.tsx +51 -0
  134. package/src/components/Chopin/TradeSelector/Listing/ListingItem.test.tsx +54 -0
  135. package/src/components/Chopin/TradeSelector/Listing/ListingItem.tsx +50 -0
  136. package/src/components/Chopin/TradeSelector/Listing/index.tsx +1 -0
  137. package/src/components/Chopin/TradeSelector/SearchResults/SearchResults.test.tsx +90 -130
  138. package/src/components/Chopin/TradeSelector/SearchResults/SearchResults.tsx +169 -66
  139. package/src/components/Chopin/TradeSelector/TradeInput/TradeInput.test.tsx +74 -0
  140. package/src/components/Chopin/TradeSelector/TradeInput/TradeInput.tsx +94 -0
  141. package/src/components/Chopin/TradeSelector/TradeInput/index.tsx +1 -0
  142. package/src/components/Chopin/TradeSelector/TradeSelector.story.mdx +75 -49
  143. package/src/components/Chopin/TradeSelector/TradeSelector.test.tsx +228 -300
  144. package/src/components/Chopin/TradeSelector/TradeSelector.tsx +124 -93
  145. package/src/components/Chopin/TradeSelector/config/shared.ts +9 -0
  146. package/src/components/Chopin/TradeSelector/jestHTMLDialogPolyfill.ts +17 -0
  147. package/src/components/Chopin/TradeSelector/mockApiResults.ts +11 -0
  148. package/src/components/Chopin/TradeSelector/types.ts +24 -6
  149. package/src/components/Chopin/TradeSelector/useFetchTrades/index.ts +1 -0
  150. package/src/components/Chopin/TradeSelector/useFetchTrades/useFetchTrades.ts +67 -0
  151. package/src/components/Chopin/TradeSelector/useTradeSelectorUrl/index.ts +1 -0
  152. package/src/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.test.ts +37 -0
  153. package/src/components/Chopin/TradeSelector/useTradeSelectorUrl/useTradeSelectorUrl.ts +26 -0
  154. package/src/components/Chopin/index.tsx +5 -5
  155. package/src/components/Link/Link.story.mdx +14 -0
  156. package/src/hooks/useOnClickOutside/index.ts +1 -0
  157. package/src/hooks/useOnClickOutside/useOnClickOutside.ts +23 -0
  158. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/ComboBox.d.ts +0 -9
  159. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/ComboBox.js +0 -37
  160. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/ComboBox.js.map +0 -1
  161. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/ComboBox.test.js +0 -59
  162. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/ComboBox.test.js.map +0 -1
  163. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/index.d.ts +0 -1
  164. package/dist/cjs/components/Chopin/TradeSelector/ComboBox/index.js.map +0 -1
  165. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBox.d.ts +0 -13
  166. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBox.js +0 -16
  167. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBox.js.map +0 -1
  168. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBoxSection.d.ts +0 -8
  169. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBoxSection.js +0 -15
  170. package/dist/cjs/components/Chopin/TradeSelector/ListBox/ListBoxSection.js.map +0 -1
  171. package/dist/cjs/components/Chopin/TradeSelector/ListBox/Option.d.ts +0 -9
  172. package/dist/cjs/components/Chopin/TradeSelector/ListBox/Option.js +0 -22
  173. package/dist/cjs/components/Chopin/TradeSelector/ListBox/Option.js.map +0 -1
  174. package/dist/cjs/components/Chopin/TradeSelector/ListBox/index.d.ts +0 -1
  175. package/dist/cjs/components/Chopin/TradeSelector/ListBox/index.js.map +0 -1
  176. package/dist/cjs/components/Chopin/TradeSelector/Popover/Popover.d.ts +0 -10
  177. package/dist/cjs/components/Chopin/TradeSelector/Popover/Popover.js +0 -24
  178. package/dist/cjs/components/Chopin/TradeSelector/Popover/Popover.js.map +0 -1
  179. package/dist/cjs/components/Chopin/TradeSelector/Popover/Popover.test.js +0 -18
  180. package/dist/cjs/components/Chopin/TradeSelector/Popover/Popover.test.js.map +0 -1
  181. package/dist/cjs/components/Chopin/TradeSelector/Popover/index.d.ts +0 -1
  182. package/dist/cjs/components/Chopin/TradeSelector/Popover/index.js.map +0 -1
  183. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.d.ts +0 -5
  184. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.js +0 -8
  185. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.js.map +0 -1
  186. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.test.js +0 -18
  187. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.test.js.map +0 -1
  188. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/index.d.ts +0 -1
  189. package/dist/cjs/components/Chopin/TradeSelector/SelectedTrade/index.js.map +0 -1
  190. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.d.ts +0 -7
  191. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.js +0 -27
  192. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.js.map +0 -1
  193. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.test.js +0 -76
  194. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.test.js.map +0 -1
  195. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/index.d.ts +0 -1
  196. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/index.js +0 -18
  197. package/dist/cjs/components/Chopin/TradeSelector/getItemsToDisplay/index.js.map +0 -1
  198. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.d.ts +0 -2
  199. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.js +0 -17
  200. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.js.map +0 -1
  201. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.d.ts +0 -1
  202. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.js +0 -42
  203. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.js.map +0 -1
  204. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/index.d.ts +0 -1
  205. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/index.js +0 -18
  206. package/dist/cjs/components/Chopin/TradeSelector/getTradesGroupedByType/index.js.map +0 -1
  207. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/index.d.ts +0 -1
  208. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/index.js +0 -18
  209. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.d.ts +0 -17
  210. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.js +0 -68
  211. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.js.map +0 -1
  212. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.d.ts +0 -1
  213. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.js +0 -86
  214. package/dist/cjs/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.js.map +0 -1
  215. package/dist/esm/components/Chopin/TradeSelector/ComboBox/ComboBox.js +0 -31
  216. package/dist/esm/components/Chopin/TradeSelector/ComboBox/ComboBox.js.map +0 -1
  217. package/dist/esm/components/Chopin/TradeSelector/ComboBox/ComboBox.test.js +0 -54
  218. package/dist/esm/components/Chopin/TradeSelector/ComboBox/ComboBox.test.js.map +0 -1
  219. package/dist/esm/components/Chopin/TradeSelector/ComboBox/index.js +0 -2
  220. package/dist/esm/components/Chopin/TradeSelector/ComboBox/index.js.map +0 -1
  221. package/dist/esm/components/Chopin/TradeSelector/ListBox/ListBox.js +0 -13
  222. package/dist/esm/components/Chopin/TradeSelector/ListBox/ListBox.js.map +0 -1
  223. package/dist/esm/components/Chopin/TradeSelector/ListBox/ListBoxSection.js +0 -12
  224. package/dist/esm/components/Chopin/TradeSelector/ListBox/ListBoxSection.js.map +0 -1
  225. package/dist/esm/components/Chopin/TradeSelector/ListBox/Option.js +0 -16
  226. package/dist/esm/components/Chopin/TradeSelector/ListBox/Option.js.map +0 -1
  227. package/dist/esm/components/Chopin/TradeSelector/ListBox/index.js +0 -2
  228. package/dist/esm/components/Chopin/TradeSelector/ListBox/index.js.map +0 -1
  229. package/dist/esm/components/Chopin/TradeSelector/Popover/Popover.js +0 -21
  230. package/dist/esm/components/Chopin/TradeSelector/Popover/Popover.js.map +0 -1
  231. package/dist/esm/components/Chopin/TradeSelector/Popover/Popover.test.js +0 -16
  232. package/dist/esm/components/Chopin/TradeSelector/Popover/Popover.test.js.map +0 -1
  233. package/dist/esm/components/Chopin/TradeSelector/Popover/index.js +0 -2
  234. package/dist/esm/components/Chopin/TradeSelector/Popover/index.js.map +0 -1
  235. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.js +0 -4
  236. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.js.map +0 -1
  237. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.test.js +0 -16
  238. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.test.js.map +0 -1
  239. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/index.js +0 -2
  240. package/dist/esm/components/Chopin/TradeSelector/SelectedTrade/index.js.map +0 -1
  241. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.js +0 -23
  242. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.js.map +0 -1
  243. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.test.js +0 -74
  244. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.test.js.map +0 -1
  245. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/index.js +0 -2
  246. package/dist/esm/components/Chopin/TradeSelector/getItemsToDisplay/index.js.map +0 -1
  247. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.js +0 -13
  248. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.js.map +0 -1
  249. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.js +0 -40
  250. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.js.map +0 -1
  251. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/index.js +0 -2
  252. package/dist/esm/components/Chopin/TradeSelector/getTradesGroupedByType/index.js.map +0 -1
  253. package/dist/esm/components/Chopin/TradeSelector/useTradeSelector/index.js +0 -2
  254. package/dist/esm/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.js +0 -65
  255. package/dist/esm/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.js.map +0 -1
  256. package/dist/esm/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.js +0 -84
  257. package/dist/esm/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.js.map +0 -1
  258. package/src/components/Chopin/TradeSelector/ComboBox/ComboBox.test.tsx +0 -85
  259. package/src/components/Chopin/TradeSelector/ComboBox/ComboBox.tsx +0 -74
  260. package/src/components/Chopin/TradeSelector/ComboBox/index.tsx +0 -1
  261. package/src/components/Chopin/TradeSelector/ListBox/ListBox.tsx +0 -36
  262. package/src/components/Chopin/TradeSelector/ListBox/ListBoxSection.tsx +0 -34
  263. package/src/components/Chopin/TradeSelector/ListBox/Option.tsx +0 -35
  264. package/src/components/Chopin/TradeSelector/ListBox/index.tsx +0 -1
  265. package/src/components/Chopin/TradeSelector/Popover/Popover.test.tsx +0 -28
  266. package/src/components/Chopin/TradeSelector/Popover/Popover.tsx +0 -42
  267. package/src/components/Chopin/TradeSelector/Popover/index.tsx +0 -1
  268. package/src/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.test.tsx +0 -24
  269. package/src/components/Chopin/TradeSelector/SelectedTrade/SelectedTrade.tsx +0 -20
  270. package/src/components/Chopin/TradeSelector/SelectedTrade/index.tsx +0 -1
  271. package/src/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.test.ts +0 -97
  272. package/src/components/Chopin/TradeSelector/getItemsToDisplay/getItemsToDisplay.ts +0 -36
  273. package/src/components/Chopin/TradeSelector/getItemsToDisplay/index.ts +0 -1
  274. package/src/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.test.ts +0 -49
  275. package/src/components/Chopin/TradeSelector/getTradesGroupedByType/getTradesGroupedByType.ts +0 -19
  276. package/src/components/Chopin/TradeSelector/getTradesGroupedByType/index.ts +0 -1
  277. package/src/components/Chopin/TradeSelector/useTradeSelector/index.ts +0 -1
  278. package/src/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.test.ts +0 -107
  279. package/src/components/Chopin/TradeSelector/useTradeSelector/useTradeSelector.ts +0 -82
  280. /package/dist/cjs/components/Chopin/TradeSelector/{ComboBox/ComboBox.test.d.ts → Listing/Listing.test.d.ts} +0 -0
  281. /package/dist/cjs/components/Chopin/TradeSelector/{Popover/Popover.test.d.ts → Listing/ListingItem.test.d.ts} +0 -0
  282. /package/dist/cjs/components/Chopin/TradeSelector/{SelectedTrade/SelectedTrade.test.d.ts → TradeInput/TradeInput.test.d.ts} +0 -0
  283. /package/dist/cjs/components/Chopin/TradeSelector/{getItemsToDisplay/getItemsToDisplay.test.d.ts → useTradeSelectorUrl/useTradeSelectorUrl.test.d.ts} +0 -0
@@ -1,24 +1,33 @@
1
- import { forwardRef, useMemo } from "react";
1
+ import {
2
+ forwardRef,
3
+ useState,
4
+ useRef,
5
+ useEffect,
6
+ ChangeEvent,
7
+ useMemo,
8
+ } from "react";
2
9
  import clsx from "clsx";
3
- import { useSlotId } from "@react-aria/utils";
4
10
  import { useLabel } from "@react-aria/label";
5
- import type {
6
- TradeSelectorProps,
11
+ import { useSlotId } from "@react-aria/utils";
12
+
13
+ import {
14
+ InputRef,
15
+ TradeProps,
7
16
  TradeSelectorElementType,
17
+ TradeSelectorProps,
8
18
  TradeSelectorRef,
9
- } from ".";
19
+ } from "./types";
10
20
  import { getConfig } from "./config";
11
- import { SelectedTrade } from "./SelectedTrade";
21
+ import { TradeInput } from "./TradeInput";
12
22
  import { SearchResults } from "./SearchResults";
13
- import { useTradeSelector } from "./useTradeSelector";
14
- import { getItemsToDisplay } from "./getItemsToDisplay";
15
- import { ForwardedRefComponent } from "../../../types/components";
23
+ import { useFetchTrades } from "./useFetchTrades";
24
+ import { useTradeSelectorUrl } from "./useTradeSelectorUrl";
25
+ import { Header } from "./Header";
16
26
  import { ErrorMessage } from "../../ErrorMessage";
27
+ import { ForwardedRefComponent } from "../../../types/components";
17
28
  import { spaceDelimitedList } from "../../../utils/spaceDelimitedList";
18
- import { Label } from "../../Label";
19
- import { Text } from "../../Text";
20
29
 
21
- export const ERROR_MESSAGE_SERVICE_UNAVAIALBLE =
30
+ export const ERROR_MESSAGE_SERVICE_UNAVAILABLE =
22
31
  "The service is currently unavailable. Please try again later";
23
32
 
24
33
  const TradeSelector: ForwardedRefComponent<
@@ -26,7 +35,6 @@ const TradeSelector: ForwardedRefComponent<
26
35
  TradeSelectorElementType
27
36
  > = forwardRef((props: TradeSelectorProps, ref: TradeSelectorRef) => {
28
37
  const {
29
- elementType: Element = "div",
30
38
  minInput = 3,
31
39
  apiRequestDebounceInMs = 250,
32
40
  urls,
@@ -34,22 +42,15 @@ const TradeSelector: ForwardedRefComponent<
34
42
  className,
35
43
  onTradeSelected,
36
44
  hideLabel,
37
- initialTrade,
45
+ initialTrade = "",
46
+ vertical,
47
+ searchScope,
38
48
  } = props;
39
-
49
+ const { site, baseUrl, defaultLabels } = getConfig();
40
50
  const fieldLabels = {
41
- input: "What is your specific trade/profession?",
42
- description: "",
43
- exact: "Exact matches for your search",
44
- placeholder: "e.g. Cleaner, builder, consultant",
45
- suggested: "Suggested matches for your search",
46
- noResults: "View all trades",
47
- loading: "Loading...",
51
+ ...defaultLabels,
48
52
  ...labels,
49
53
  };
50
-
51
- const { site, baseUrl } = getConfig();
52
-
53
54
  const links = useMemo(
54
55
  () => ({
55
56
  quoteRedirect: site,
@@ -60,88 +61,118 @@ const TradeSelector: ForwardedRefComponent<
60
61
  }),
61
62
  [site, baseUrl, urls],
62
63
  );
63
-
64
- const {
65
- inputValue,
66
- trades,
67
- onInputChange,
68
- onSelectionChange,
69
- error,
70
- isLoading,
71
- selectedTrade,
72
- hasUserChangedMind,
73
- onUserChangedMind,
74
- } = useTradeSelector({
75
- minInput,
76
- apiRequestDebounceInMs,
77
- urls: links,
78
- onTradeSelected,
79
- initialTrade,
80
- });
81
-
82
64
  const classes = clsx("chopin", "chopin/TradeSelector", className);
65
+ const [userInput, setUserInput] = useState<string>("");
66
+ const [selectedTrade, setSelectedTrade] = useState<TradeProps | null>(null);
67
+ const [editMode, setEditMode] = useState<boolean>(false);
68
+ const [isOverlayVisible, setIsOverlayVisible] = useState<boolean>(false);
69
+ const inputRef = useRef<InputRef>(null);
70
+ const currentTrade = selectedTrade ? selectedTrade.value : initialTrade;
71
+ const endpoint = useTradeSelectorUrl(links.tradeApi, userInput, {
72
+ site: links.quoteRedirect,
73
+ vertical,
74
+ searchScope,
75
+ });
76
+ const { trades, isLoading, error, fetchTrades } = useFetchTrades(
77
+ endpoint,
78
+ apiRequestDebounceInMs,
79
+ );
83
80
  const errorMessage = error?.message;
84
81
  const errorMessageId = useSlotId([Boolean(errorMessage)]);
85
82
  const { labelProps, fieldProps } = useLabel({
86
83
  label: fieldLabels.input,
87
84
  });
85
+ const ariaLabel = hideLabel ? fieldLabels.input : undefined;
86
+ const inputProps = hideLabel ? undefined : fieldProps;
88
87
  const describedBy = spaceDelimitedList([
89
88
  errorMessageId,
90
89
  props["aria-describedby"],
91
90
  ]);
92
- const isOpen = inputValue.length >= minInput && !errorMessage;
93
- const shouldSelectedTradeDisplay = selectedTrade && !hasUserChangedMind;
94
- const items = isOpen
95
- ? getItemsToDisplay({
96
- trades,
97
- isLoading,
98
- labels: fieldLabels,
99
- })
100
- : [];
101
- const { input: inputLabel, description } = fieldLabels;
102
- const ariaLabel = hideLabel ? inputLabel : undefined;
103
- const inputProps = hideLabel ? undefined : fieldProps;
91
+
92
+ const handleChange = (event: ChangeEvent<HTMLInputElement>) =>
93
+ setUserInput(event.target.value);
94
+
95
+ const toggleEditMode = () => setEditMode(!editMode);
96
+
97
+ const handleOverlayClose = () => {
98
+ setIsOverlayVisible(false);
99
+ };
100
+
101
+ const handleTradeSelect = (trade: TradeProps) => {
102
+ setSelectedTrade(trade);
103
+
104
+ if (editMode) {
105
+ toggleEditMode();
106
+ }
107
+
108
+ if (trade && onTradeSelected) {
109
+ try {
110
+ onTradeSelected(trade);
111
+ } catch (err) {
112
+ // eslint-disable-next-line no-console
113
+ console.error("onTradeSelected returned the following error", err);
114
+ }
115
+ }
116
+ };
117
+
118
+ useEffect(() => {
119
+ if (editMode && currentTrade) {
120
+ setUserInput(currentTrade);
121
+ }
122
+
123
+ if (!editMode) {
124
+ setUserInput("");
125
+ }
126
+ }, [editMode, currentTrade]);
127
+
128
+ useEffect(() => {
129
+ if (userInput.length >= minInput) {
130
+ setIsOverlayVisible(true);
131
+ fetchTrades(true);
132
+ }
133
+
134
+ if (userInput.length < minInput) {
135
+ setIsOverlayVisible(false);
136
+ }
137
+ }, [minInput, fetchTrades, userInput.length]);
104
138
 
105
139
  return (
106
- <Element ref={ref} className={classes}>
107
- {!hideLabel && (
108
- <>
109
- <Label
110
- {...labelProps}
111
- className="chopin/TradeSelectorLabel"
112
- aria-hidden
113
- >
114
- {inputLabel}
115
- </Label>
116
- <Text className="chopin/TradeSelectorDescription" variant="caption">
117
- {description}
118
- </Text>
119
- </>
120
- )}
121
- {shouldSelectedTradeDisplay ? (
122
- <SelectedTrade trade={selectedTrade} onClick={onUserChangedMind} />
140
+ <div ref={ref} className={classes}>
141
+ <Header
142
+ isOpen={!hideLabel}
143
+ labelProps={labelProps}
144
+ labels={fieldLabels}
145
+ />
146
+ <TradeInput
147
+ inputRef={inputRef}
148
+ inputProps={inputProps}
149
+ value={userInput}
150
+ onChange={handleChange}
151
+ label={ariaLabel}
152
+ placeholder={fieldLabels.placeholder}
153
+ initialTrade={currentTrade}
154
+ onEdit={toggleEditMode}
155
+ isEditable={editMode}
156
+ />
157
+ {error ? (
158
+ <ErrorMessage
159
+ id={errorMessageId}
160
+ errorMessage={ERROR_MESSAGE_SERVICE_UNAVAILABLE}
161
+ />
123
162
  ) : (
124
- <>
125
- <SearchResults
126
- inputValue={inputValue}
127
- items={items}
128
- labels={fieldLabels}
129
- describedBy={describedBy}
130
- fallbackUrl={links.allOccupations}
131
- onInputChange={onInputChange}
132
- onSelectionChange={onSelectionChange}
133
- fieldProps={inputProps}
134
- label={ariaLabel}
135
- />
136
- {error && (
137
- <ErrorMessage
138
- id={errorMessageId}
139
- errorMessage={ERROR_MESSAGE_SERVICE_UNAVAIALBLE}
140
- />
141
- )}
142
- </>
163
+ <SearchResults
164
+ isOpen={isOverlayVisible}
165
+ labels={fieldLabels}
166
+ onClick={handleTradeSelect}
167
+ onClose={handleOverlayClose}
168
+ results={trades}
169
+ isLoading={isLoading}
170
+ fallbackUrl={links.allOccupations}
171
+ describedBy={describedBy}
172
+ inputRef={inputRef}
173
+ />
143
174
  )}
144
- </Element>
175
+ </div>
145
176
  );
146
177
  });
147
178
 
@@ -4,6 +4,15 @@
4
4
  */
5
5
  const shared = {
6
6
  appId: "simplybusiness_hoverla",
7
+ defaultLabels: {
8
+ input: "What is your specific trade/profession?",
9
+ description: "",
10
+ exact: "Exact matches for your search",
11
+ placeholder: "e.g. Cleaner, builder, consultant",
12
+ suggested: "Suggested matches for your search",
13
+ noResults: "View all trades",
14
+ loading: "Loading...",
15
+ },
7
16
  };
8
17
 
9
18
  export { shared };
@@ -0,0 +1,17 @@
1
+ // Workaround for lack of `<dialog>` support in jsdom
2
+ // Workaround from: https://github.com/jsdom/jsdom/issues/3294#issuecomment-1268330372
3
+ // Fix: https://github.com/jsdom/jsdom/pull/3403
4
+ // This can be removed once `<dialog>` support is introduced in Jest via jsdom
5
+ export const jestHTMLDialogPolyfill = () => {
6
+ HTMLDialogElement.prototype.show = jest.fn(function mock(
7
+ this: HTMLDialogElement,
8
+ ) {
9
+ this.open = true;
10
+ });
11
+
12
+ HTMLDialogElement.prototype.close = jest.fn(function mock(
13
+ this: HTMLDialogElement,
14
+ ) {
15
+ this.open = false;
16
+ });
17
+ };
@@ -1,5 +1,16 @@
1
1
  import { TradeProps } from ".";
2
2
 
3
+ export const mockTrade = {
4
+ blocked: false,
5
+ label: "<strong>Landlord</strong>",
6
+ supported_verticals: null,
7
+ trade_detail: null,
8
+ trade_type: null,
9
+ type: "exact",
10
+ value: "Landlord",
11
+ vertical: "landlord",
12
+ };
13
+
3
14
  export const exactResults = [
4
15
  {
5
16
  value: "Swim Shop",
@@ -1,6 +1,26 @@
1
1
  import { Ref, RefAttributes } from "react";
2
2
  import { DOMProps } from "@react-types/shared";
3
3
 
4
+ export type DialogRef = HTMLDialogElement;
5
+ export type InputRef = HTMLInputElement;
6
+
7
+ export type TradeSelectorSearchScope =
8
+ | "all_verticals"
9
+ | "current_and_supported_verticals"
10
+ | "current_vertical"
11
+ | "except_current_vertical"
12
+ | "usa_contractors"
13
+ | "commercial_landlord_business_types"
14
+ | "contractors_combined"
15
+ | "supported_for_current_vertical"
16
+ | "commercial_combined_manufacturer"
17
+ | "commercial_combined_wholesaler"
18
+ | "commercial_combined_all";
19
+
20
+ // TODO: We could probably use a union type here instead of a string
21
+ // but we may not want to restrict the possible values.
22
+ export type TradeSelectorVertical = string;
23
+
4
24
  export type TradeProps = {
5
25
  value: string;
6
26
  vertical: string;
@@ -15,12 +35,6 @@ export type TradeProps = {
15
35
  blocked: boolean;
16
36
  };
17
37
 
18
- export type GroupedTradeProps = {
19
- name: string;
20
- title: string;
21
- children: TradeProps[];
22
- };
23
-
24
38
  export type LabelProps = {
25
39
  input: string;
26
40
  exact: string;
@@ -43,9 +57,12 @@ export type TradeSelectorCommonProps = {
43
57
  urls: UrlProps;
44
58
  onTradeSelected?: (trade: TradeProps | string) => void;
45
59
  initialTrade?: string;
60
+ vertical?: TradeSelectorVertical;
61
+ searchScope?: TradeSelectorSearchScope;
46
62
  };
47
63
 
48
64
  export type TradeSelectorElementType = HTMLDivElement;
65
+
49
66
  export interface TradeSelectorProps
50
67
  extends Partial<TradeSelectorCommonProps>,
51
68
  DOMProps,
@@ -53,6 +70,7 @@ export interface TradeSelectorProps
53
70
  /** Custom class name for setting specific CSS */
54
71
  className?: string;
55
72
  elementType?: string | React.ElementType;
73
+ onTradeSelected?: (trade: TradeProps | string) => void;
56
74
  labels?: LabelProps;
57
75
  hideLabel?: boolean;
58
76
  }
@@ -0,0 +1 @@
1
+ export * from "./useFetchTrades";
@@ -0,0 +1,67 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import debounce from "lodash.debounce";
3
+ import { TradeProps } from "../types";
4
+
5
+ export const useFetchTrades = (endpoint: URL, debounceInMs: number) => {
6
+ const [isLoading, setIsLoading] = useState<boolean>(false);
7
+ const [error, setError] = useState<Error | null>(null);
8
+ const [trades, setTrades] = useState<TradeProps[] | null>(null);
9
+ const [fetchTrades, setFetchTrades] = useState<boolean>(false);
10
+
11
+ const getTrades = useCallback(
12
+ // eslint-disable-next-line consistent-return
13
+ async (signal: AbortSignal) => {
14
+ try {
15
+ const response = await fetch(endpoint, {
16
+ signal,
17
+ });
18
+ const json = await response.json();
19
+ setIsLoading(false);
20
+
21
+ if (!response.ok) {
22
+ throw new Error(json.message || json.statusText);
23
+ }
24
+
25
+ setError(null);
26
+ return setTrades(json.results);
27
+ } catch (err) {
28
+ if (err instanceof Error && err.name !== "AbortError") {
29
+ // eslint-disable-next-line no-console
30
+ console.error(err);
31
+ setError(err);
32
+ }
33
+ }
34
+ },
35
+ [endpoint],
36
+ );
37
+
38
+ useEffect(() => {
39
+ const controller = new AbortController();
40
+
41
+ if (fetchTrades) {
42
+ setIsLoading(true);
43
+
44
+ const fetchData = debounce(async () => {
45
+ const { signal } = controller;
46
+ await getTrades(signal);
47
+ }, debounceInMs);
48
+
49
+ fetchData();
50
+ }
51
+
52
+ return () => controller.abort();
53
+ }, [getTrades, debounceInMs, fetchTrades]);
54
+
55
+ useEffect(() => {
56
+ if (!isLoading) {
57
+ setFetchTrades(false);
58
+ }
59
+ }, [isLoading]);
60
+
61
+ return {
62
+ isLoading,
63
+ error,
64
+ trades,
65
+ fetchTrades: setFetchTrades,
66
+ };
67
+ };
@@ -0,0 +1 @@
1
+ export * from "./useTradeSelectorUrl";
@@ -0,0 +1,37 @@
1
+ import { renderHook } from "@testing-library/react";
2
+ import { useTradeSelectorUrl } from "./useTradeSelectorUrl";
3
+
4
+ describe("useTradeSelectorUrl", () => {
5
+ it("should return a url", () => {
6
+ const { result } = renderHook(() =>
7
+ useTradeSelectorUrl("https://trade-api.example.com/search", "foo"),
8
+ );
9
+ expect(result.current).toBeInstanceOf(URL);
10
+ });
11
+
12
+ it("should return a url with the correct query params", () => {
13
+ const { result } = renderHook(() =>
14
+ useTradeSelectorUrl("https://trade-api.example.com/search", "foo", {
15
+ vertical: "bar",
16
+ searchScope: "baz",
17
+ }),
18
+ );
19
+ expect(result.current.searchParams.get("q")).toEqual("foo");
20
+ expect(result.current.searchParams.get("vertical")).toEqual("bar");
21
+ expect(result.current.searchParams.get("search_scope")).toEqual("baz");
22
+ });
23
+
24
+ it("should return a new url when the input changes", () => {
25
+ const { result, rerender } = renderHook(
26
+ ({ userInput }) =>
27
+ useTradeSelectorUrl("https://trade-api.example.com/search", userInput),
28
+ {
29
+ initialProps: { userInput: "foo" },
30
+ },
31
+ );
32
+ const firstUrl = result.current;
33
+ rerender({ userInput: "bar" });
34
+ const secondUrl = result.current;
35
+ expect(firstUrl).not.toEqual(secondUrl);
36
+ });
37
+ });
@@ -0,0 +1,26 @@
1
+ import { useMemo } from "react";
2
+
3
+ export type TradeSelectorUrlOptions = {
4
+ vertical?: string;
5
+ searchScope?: string;
6
+ site?: string;
7
+ };
8
+
9
+ function addQueryParam(url: URL, key: string, value?: string) {
10
+ if (value) url.searchParams.set(key, value);
11
+ }
12
+
13
+ export function useTradeSelectorUrl(
14
+ tradeApi: string,
15
+ userInput: string,
16
+ { vertical, searchScope, site }: TradeSelectorUrlOptions = {},
17
+ ) {
18
+ return useMemo(() => {
19
+ const url = new URL(tradeApi);
20
+ addQueryParam(url, "q", userInput);
21
+ addQueryParam(url, "vertical", vertical);
22
+ addQueryParam(url, "search_scope", searchScope);
23
+ addQueryParam(url, "site", site);
24
+ return url;
25
+ }, [tradeApi, userInput, vertical, searchScope, site]);
26
+ }
@@ -1,10 +1,10 @@
1
+ export * from "./Actions";
2
+ export * from "./Footer";
3
+ export * from "./Header";
1
4
  export * from "./PercentageTotalsQuestion";
2
5
  export * from "./Question";
3
6
  export * from "./QuestionGroup";
4
- export * from "./Steps";
5
7
  export * from "./Section";
6
- export * from "./TradeSelector";
7
- export * from "./Footer";
8
- export * from "./Header";
9
- export * from "./Actions";
8
+ export * from "./Steps";
10
9
  export * from "./Testimonial";
10
+ export * from "./TradeSelector";
@@ -80,6 +80,20 @@ import { Link } from "@simplybusiness/mobius";
80
80
  </NextLink>
81
81
  ```
82
82
 
83
+ ### `NextJS` v13
84
+
85
+ NextJS v13 updated the `next/link` component to no longer require passing a link as a child to the component. This means that the above example can be simplified to:
86
+
87
+ <!-- prettier-ignore -->
88
+ ```js
89
+ import NextLink from "next/link";
90
+ import { Link } from "@simplybusiness/mobius";
91
+
92
+ ...
93
+
94
+ <Link href={url} elementType={NextLink}>{value}</Link>
95
+ ```
96
+
83
97
  ## Examples
84
98
 
85
99
  ### Normal
@@ -0,0 +1 @@
1
+ export * from "./useOnClickOutside";
@@ -0,0 +1,23 @@
1
+ import { useEffect, RefObject } from "react";
2
+
3
+ export const useOnClickOutside = (
4
+ ref: RefObject<HTMLElement>,
5
+ handler: (event: MouseEvent | TouchEvent) => void,
6
+ ) => {
7
+ useEffect(() => {
8
+ const listener = (event: MouseEvent | TouchEvent) => {
9
+ // Do nothing if clicking ref's element or descendent elements
10
+ if (!ref.current || ref.current.contains(event.target as HTMLElement)) {
11
+ return;
12
+ }
13
+ handler(event);
14
+ };
15
+ document.addEventListener("mousedown", listener);
16
+ document.addEventListener("touchstart", listener);
17
+
18
+ return () => {
19
+ document.removeEventListener("mousedown", listener);
20
+ document.removeEventListener("touchstart", listener);
21
+ };
22
+ }, [ref, handler]);
23
+ };
@@ -1,9 +0,0 @@
1
- import type { ComboBoxProps } from "@react-types/combobox";
2
- import { AriaLabelingProps, DOMProps } from "@react-types/shared";
3
- export interface AllComboBoxProps<T extends object> extends ComboBoxProps<T> {
4
- className?: string;
5
- fieldProps?: AriaLabelingProps & DOMProps;
6
- label?: string;
7
- }
8
- declare const ComboBox: <T extends object>(props: AllComboBoxProps<T>) => import("@emotion/react/jsx-runtime").JSX.Element;
9
- export { ComboBox };
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ComboBox = void 0;
7
- const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
8
- const react_1 = require("react");
9
- const combobox_1 = require("@react-stately/combobox");
10
- const combobox_2 = require("@react-aria/combobox");
11
- const interactions_1 = require("@react-aria/interactions");
12
- const focus_1 = require("@react-aria/focus");
13
- const clsx_1 = __importDefault(require("clsx"));
14
- const ListBox_1 = require("../ListBox");
15
- const Popover_1 = require("../Popover");
16
- const ComboBox = (props) => {
17
- const { className, fieldProps, label } = props;
18
- const state = (0, combobox_1.useComboBoxState)(Object.assign({}, props));
19
- const inputRef = (0, react_1.useRef)(null);
20
- const listBoxRef = (0, react_1.useRef)(null);
21
- const popoverRef = (0, react_1.useRef)(null);
22
- const { inputProps, listBoxProps } = (0, combobox_2.useComboBox)(Object.assign(Object.assign(Object.assign({}, props), fieldProps), { inputRef,
23
- listBoxRef,
24
- popoverRef }), state);
25
- const { close } = state;
26
- const { isFocusVisible, focusProps } = (0, focus_1.useFocusRing)({
27
- within: true,
28
- });
29
- const { hoverProps, isHovered } = (0, interactions_1.useHover)(Object.assign({}, props));
30
- const classes = (0, clsx_1.default)("chopin", "chopin/ComboBoxInput", {
31
- "--is-focused": isFocusVisible,
32
- "--is-hovered": isHovered,
33
- }, className);
34
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "chopin/ComboBoxInputContainer" }, focusProps, { children: [(0, jsx_runtime_1.jsx)("input", Object.assign({}, hoverProps, inputProps, fieldProps, { ref: inputRef, className: classes, "aria-label": label })), state.isOpen && ((0, jsx_runtime_1.jsx)(Popover_1.Popover, Object.assign({ popoverRef: popoverRef, isOpen: state.isOpen, onClose: close }, { children: (0, jsx_runtime_1.jsx)(ListBox_1.ListBox, Object.assign({}, listBoxProps, { listBoxRef: listBoxRef, state: state })) })))] })));
35
- };
36
- exports.ComboBox = ComboBox;
37
- //# sourceMappingURL=ComboBox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../../../../../../src/components/Chopin/TradeSelector/ComboBox/ComboBox.tsx"],"names":[],"mappings":";;;;;;;AAAA,iCAA+B;AAG/B,sDAA2D;AAC3D,mDAAmD;AACnD,2DAAoD;AACpD,6CAAiD;AACjD,gDAAwB;AACxB,wCAAqC;AACrC,wCAAqC;AAQrC,MAAM,QAAQ,GAAG,CAAmB,KAA0B,EAAE,EAAE;IAChE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAA,2BAAgB,oBAAM,KAAK,EAAG,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAA,sBAAW,gDAEzC,KAAK,GACL,UAAU,KACb,QAAQ;QACR,UAAU;QACV,UAAU,KAEZ,KAAK,CACN,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAA,oBAAY,EAAC;QAClD,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAQ,oBACrC,KAAK,EACR,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,cAAI,EAClB,QAAQ,EACR,sBAAsB,EACtB;QACE,cAAc,EAAE,cAAc;QAC9B,cAAc,EAAE,SAAS;KAC1B,EACD,SAAS,CACV,CAAC;IAEF,OAAO,CACL,+CAAK,SAAS,EAAC,+BAA+B,IAAK,UAAU,eAC3D,kDACM,UAAU,EACV,UAAU,EACV,UAAU,IACd,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,OAAO,gBACN,KAAK,IACjB,EACD,KAAK,CAAC,MAAM,IAAI,CACf,uBAAC,iBAAO,kBAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,gBACnE,uBAAC,iBAAO,oBAAK,YAAY,IAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,IAC3D,CACX,KACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEO,4BAAQ"}