@nlabs/gothamui 1.8.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 (426) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION.md +36 -0
  3. package/README.md +768 -0
  4. package/docs/assets/gothamui-app-architecture.svg +159 -0
  5. package/docs/assets/gothamui-logo.png +0 -0
  6. package/docs/assets/gothamui-logo.svg +42 -0
  7. package/docs/render-performance.md +34 -0
  8. package/lib/actions/GothamActions.d.ts +42 -0
  9. package/lib/actions/GothamActions.js +67 -0
  10. package/lib/actions/MarkdownActions.d.ts +4 -0
  11. package/lib/actions/MarkdownActions.js +48 -0
  12. package/lib/app.d.ts +1 -0
  13. package/lib/app.js +198 -0
  14. package/lib/components/Alert/Alert.d.ts +8 -0
  15. package/lib/components/Alert/Alert.js +24 -0
  16. package/lib/components/Alert/Alert.stories.js +59 -0
  17. package/lib/components/AuthRoute/AuthRoute.d.ts +3 -0
  18. package/lib/components/AuthRoute/AuthRoute.js +21 -0
  19. package/lib/components/AuthRoute/AuthRoute.stories.js +45 -0
  20. package/lib/components/AutocompleteField/AutocompleteField.d.ts +24 -0
  21. package/lib/components/AutocompleteField/AutocompleteField.js +148 -0
  22. package/lib/components/AutocompleteField/AutocompleteField.stories.js +62 -0
  23. package/lib/components/Avatar/Avatar.d.ts +29 -0
  24. package/lib/components/Avatar/Avatar.js +154 -0
  25. package/lib/components/Avatar/Avatar.stories.js +105 -0
  26. package/lib/components/Badge/Badge.d.ts +9 -0
  27. package/lib/components/Badge/Badge.js +22 -0
  28. package/lib/components/Badge/Badge.stories.js +53 -0
  29. package/lib/components/Breadcrumbs/Breadcrumbs.d.ts +19 -0
  30. package/lib/components/Breadcrumbs/Breadcrumbs.js +74 -0
  31. package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +95 -0
  32. package/lib/components/Button/Button.d.ts +25 -0
  33. package/lib/components/Button/Button.js +157 -0
  34. package/lib/components/Button/Button.stories.js +119 -0
  35. package/lib/components/Card/Card.d.ts +8 -0
  36. package/lib/components/Card/Card.js +39 -0
  37. package/lib/components/Card/Card.stories.js +60 -0
  38. package/lib/components/CategoryGrid/CategoryGrid.d.ts +15 -0
  39. package/lib/components/CategoryGrid/CategoryGrid.js +42 -0
  40. package/lib/components/CategoryGrid/CategoryGrid.stories.js +35 -0
  41. package/lib/components/Chat/AudioMessage/AudioMessage.css +1 -0
  42. package/lib/components/Chat/AudioMessage/AudioMessage.d.ts +3 -0
  43. package/lib/components/Chat/AudioMessage/AudioMessage.js +28 -0
  44. package/lib/components/Chat/Avatar/Avatar.css +1 -0
  45. package/lib/components/Chat/Avatar/Avatar.d.ts +3 -0
  46. package/lib/components/Chat/Avatar/Avatar.js +72 -0
  47. package/lib/components/Chat/Button/Button.css +1 -0
  48. package/lib/components/Chat/Button/Button.d.ts +3 -0
  49. package/lib/components/Chat/Button/Button.js +37 -0
  50. package/lib/components/Chat/Chat.stories.js +688 -0
  51. package/lib/components/Chat/ChatItem/ChatItem.css +1 -0
  52. package/lib/components/Chat/ChatItem/ChatItem.d.ts +3 -0
  53. package/lib/components/Chat/ChatItem/ChatItem.js +183 -0
  54. package/lib/components/Chat/ChatList/ChatList.css +1 -0
  55. package/lib/components/Chat/ChatList/ChatList.d.ts +3 -0
  56. package/lib/components/Chat/ChatList/ChatList.js +84 -0
  57. package/lib/components/Chat/Circle/Circle.d.ts +3 -0
  58. package/lib/components/Chat/Circle/Circle.js +27 -0
  59. package/lib/components/Chat/Dropdown/Dropdown.css +1 -0
  60. package/lib/components/Chat/Dropdown/Dropdown.d.ts +3 -0
  61. package/lib/components/Chat/Dropdown/Dropdown.js +66 -0
  62. package/lib/components/Chat/FileMessage/FileMessage.css +1 -0
  63. package/lib/components/Chat/FileMessage/FileMessage.d.ts +3 -0
  64. package/lib/components/Chat/FileMessage/FileMessage.js +77 -0
  65. package/lib/components/Chat/Input/Input.css +1 -0
  66. package/lib/components/Chat/Input/Input.d.ts +3 -0
  67. package/lib/components/Chat/Input/Input.js +108 -0
  68. package/lib/components/Chat/LocationMessage/LocationMessage.css +1 -0
  69. package/lib/components/Chat/LocationMessage/LocationMessage.d.ts +3 -0
  70. package/lib/components/Chat/LocationMessage/LocationMessage.js +36 -0
  71. package/lib/components/Chat/MeetingItem/MeetingItem.css +1 -0
  72. package/lib/components/Chat/MeetingItem/MeetingItem.d.ts +3 -0
  73. package/lib/components/Chat/MeetingItem/MeetingItem.js +106 -0
  74. package/lib/components/Chat/MeetingLink/MeetingLink.css +1 -0
  75. package/lib/components/Chat/MeetingLink/MeetingLink.d.ts +3 -0
  76. package/lib/components/Chat/MeetingLink/MeetingLink.js +26 -0
  77. package/lib/components/Chat/MeetingList/MeetingList.css +1 -0
  78. package/lib/components/Chat/MeetingList/MeetingList.d.ts +3 -0
  79. package/lib/components/Chat/MeetingList/MeetingList.js +52 -0
  80. package/lib/components/Chat/MeetingMessage/MeetingMessage.css +1 -0
  81. package/lib/components/Chat/MeetingMessage/MeetingMessage.d.ts +3 -0
  82. package/lib/components/Chat/MeetingMessage/MeetingMessage.js +227 -0
  83. package/lib/components/Chat/MessageBox/MessageBox.css +1 -0
  84. package/lib/components/Chat/MessageBox/MessageBox.d.ts +3 -0
  85. package/lib/components/Chat/MessageBox/MessageBox.js +263 -0
  86. package/lib/components/Chat/MessageList/MessageList.css +1 -0
  87. package/lib/components/Chat/MessageList/MessageList.d.ts +2 -0
  88. package/lib/components/Chat/MessageList/MessageList.js +196 -0
  89. package/lib/components/Chat/Navbar/Navbar.css +1 -0
  90. package/lib/components/Chat/Navbar/Navbar.d.ts +3 -0
  91. package/lib/components/Chat/Navbar/Navbar.js +21 -0
  92. package/lib/components/Chat/PhotoMessage/PhotoMessage.css +1 -0
  93. package/lib/components/Chat/PhotoMessage/PhotoMessage.d.ts +3 -0
  94. package/lib/components/Chat/PhotoMessage/PhotoMessage.js +73 -0
  95. package/lib/components/Chat/Popup/Popup.css +1 -0
  96. package/lib/components/Chat/Popup/Popup.d.ts +3 -0
  97. package/lib/components/Chat/Popup/Popup.js +45 -0
  98. package/lib/components/Chat/README.md +50 -0
  99. package/lib/components/Chat/ReplyMessage/ReplyMessage.css +1 -0
  100. package/lib/components/Chat/ReplyMessage/ReplyMessage.d.ts +3 -0
  101. package/lib/components/Chat/ReplyMessage/ReplyMessage.js +42 -0
  102. package/lib/components/Chat/SideBar/SideBar.css +1 -0
  103. package/lib/components/Chat/SideBar/SideBar.d.ts +3 -0
  104. package/lib/components/Chat/SideBar/SideBar.js +21 -0
  105. package/lib/components/Chat/SpotifyMessage/SpotifyMessage.css +1 -0
  106. package/lib/components/Chat/SpotifyMessage/SpotifyMessage.d.ts +3 -0
  107. package/lib/components/Chat/SpotifyMessage/SpotifyMessage.js +28 -0
  108. package/lib/components/Chat/SystemMessage/SystemMessage.css +1 -0
  109. package/lib/components/Chat/SystemMessage/SystemMessage.d.ts +3 -0
  110. package/lib/components/Chat/SystemMessage/SystemMessage.js +14 -0
  111. package/lib/components/Chat/VideoMessage/VideoMessage.css +1 -0
  112. package/lib/components/Chat/VideoMessage/VideoMessage.d.ts +3 -0
  113. package/lib/components/Chat/VideoMessage/VideoMessage.js +88 -0
  114. package/lib/components/Chat/assets/img/leftArrow.svg +6 -0
  115. package/lib/components/Chat/assets/img/rightArrow.svg +6 -0
  116. package/lib/components/Chat/index.d.ts +25 -0
  117. package/lib/components/Chat/index.js +27 -0
  118. package/lib/components/Chat/type.d.js +52 -0
  119. package/lib/components/Chat/utils/formatRelativeDate.d.ts +4 -0
  120. package/lib/components/Chat/utils/formatRelativeDate.js +110 -0
  121. package/lib/components/Checkbox/Checkbox.d.ts +15 -0
  122. package/lib/components/Checkbox/Checkbox.js +106 -0
  123. package/lib/components/Checkbox/Checkbox.stories.js +51 -0
  124. package/lib/components/ComponentUtils/renderWithAsChild.d.ts +9 -0
  125. package/lib/components/ComponentUtils/renderWithAsChild.js +27 -0
  126. package/lib/components/Container/Container.d.ts +7 -0
  127. package/lib/components/Container/Container.js +16 -0
  128. package/lib/components/Container/Container.stories.js +36 -0
  129. package/lib/components/DateField/DateField.d.ts +22 -0
  130. package/lib/components/DateField/DateField.js +145 -0
  131. package/lib/components/DateField/DateField.stories.js +125 -0
  132. package/lib/components/DateField/DatePicker.d.ts +9 -0
  133. package/lib/components/DateField/DatePicker.js +205 -0
  134. package/lib/components/DateField/DatePicker.stories.js +33 -0
  135. package/lib/components/DescriptionList/DescriptionList.d.ts +4 -0
  136. package/lib/components/DescriptionList/DescriptionList.js +19 -0
  137. package/lib/components/DescriptionList/DescriptionList.stories.js +34 -0
  138. package/lib/components/Dialog/Dialog.d.ts +25 -0
  139. package/lib/components/Dialog/Dialog.js +66 -0
  140. package/lib/components/Dialog/Dialog.stories.js +88 -0
  141. package/lib/components/DropUpload/DropUpload.d.ts +37 -0
  142. package/lib/components/DropUpload/DropUpload.js +323 -0
  143. package/lib/components/DropUpload/DropUpload.stories.js +48 -0
  144. package/lib/components/Empty/Empty.d.ts +11 -0
  145. package/lib/components/Empty/Empty.js +39 -0
  146. package/lib/components/Empty/Empty.stories.js +52 -0
  147. package/lib/components/EmptyState/EmptyState.d.ts +15 -0
  148. package/lib/components/EmptyState/EmptyState.js +44 -0
  149. package/lib/components/EmptyState/EmptyState.stories.js +36 -0
  150. package/lib/components/ErrorMessage/ErrorMessage.d.ts +7 -0
  151. package/lib/components/ErrorMessage/ErrorMessage.js +20 -0
  152. package/lib/components/ErrorMessage/ErrorMessage.stories.js +25 -0
  153. package/lib/components/FaqSection/FaqSection.d.ts +14 -0
  154. package/lib/components/FaqSection/FaqSection.js +37 -0
  155. package/lib/components/FaqSection/FaqSection.stories.js +31 -0
  156. package/lib/components/Fieldset/Fieldset.d.ts +21 -0
  157. package/lib/components/Fieldset/Fieldset.js +39 -0
  158. package/lib/components/Fieldset/Fieldset.stories.js +42 -0
  159. package/lib/components/Footer/Footer.d.ts +26 -0
  160. package/lib/components/Footer/Footer.js +119 -0
  161. package/lib/components/Footer/Footer.stories.js +184 -0
  162. package/lib/components/Form/Form.d.ts +42 -0
  163. package/lib/components/Form/Form.js +198 -0
  164. package/lib/components/Form/Form.stories.js +65 -0
  165. package/lib/components/Form/FormContext.d.ts +35 -0
  166. package/lib/components/Form/FormContext.js +71 -0
  167. package/lib/components/GothamRoute/GothamRoute.d.ts +0 -0
  168. package/lib/components/GothamRoute/GothamRoute.js +56 -0
  169. package/lib/components/GothamRouter/GothamRouter.d.ts +0 -0
  170. package/lib/components/GothamRouter/GothamRouter.js +52 -0
  171. package/lib/components/Heading/Heading.d.ts +7 -0
  172. package/lib/components/Heading/Heading.js +20 -0
  173. package/lib/components/Heading/Heading.stories.js +51 -0
  174. package/lib/components/IncentiveGrid/IncentiveGrid.d.ts +15 -0
  175. package/lib/components/IncentiveGrid/IncentiveGrid.js +34 -0
  176. package/lib/components/IncentiveGrid/IncentiveGrid.stories.js +41 -0
  177. package/lib/components/InputField/InputField.d.ts +25 -0
  178. package/lib/components/InputField/InputField.js +68 -0
  179. package/lib/components/InputField/InputField.stories.js +58 -0
  180. package/lib/components/Item/Item.d.ts +25 -0
  181. package/lib/components/Item/Item.js +79 -0
  182. package/lib/components/Item/Item.stories.js +94 -0
  183. package/lib/components/Kbd/Kbd.d.ts +2 -0
  184. package/lib/components/Kbd/Kbd.js +9 -0
  185. package/lib/components/Kbd/Kbd.stories.js +24 -0
  186. package/lib/components/Label/Label.d.ts +11 -0
  187. package/lib/components/Label/Label.js +23 -0
  188. package/lib/components/Label/Label.stories.js +38 -0
  189. package/lib/components/Link/Link.d.ts +7 -0
  190. package/lib/components/Link/Link.js +13 -0
  191. package/lib/components/Link/Link.stories.js +28 -0
  192. package/lib/components/ListContainer/ListContainer.d.ts +8 -0
  193. package/lib/components/ListContainer/ListContainer.js +14 -0
  194. package/lib/components/ListContainer/ListContainer.stories.js +45 -0
  195. package/lib/components/Loader/Loader.d.ts +9 -0
  196. package/lib/components/Loader/Loader.js +36 -0
  197. package/lib/components/Loader/Loader.stories.js +94 -0
  198. package/lib/components/LogoCloud/LogoCloud.d.ts +15 -0
  199. package/lib/components/LogoCloud/LogoCloud.js +43 -0
  200. package/lib/components/LogoCloud/LogoCloud.stories.js +28 -0
  201. package/lib/components/Markdown/Markdown.d.ts +8 -0
  202. package/lib/components/Markdown/Markdown.js +64 -0
  203. package/lib/components/Markdown/Markdown.stories.js +34 -0
  204. package/lib/components/MediaLightbox/MediaLightbox.d.ts +22 -0
  205. package/lib/components/MediaLightbox/MediaLightbox.js +80 -0
  206. package/lib/components/MediaObject/MediaObject.d.ts +8 -0
  207. package/lib/components/MediaObject/MediaObject.js +37 -0
  208. package/lib/components/MediaObject/MediaObject.stories.js +28 -0
  209. package/lib/components/Navbar/Navbar.d.ts +43 -0
  210. package/lib/components/Navbar/Navbar.js +213 -0
  211. package/lib/components/Navbar/Navbar.stories.js +235 -0
  212. package/lib/components/NotFound/NotFound.d.ts +34 -0
  213. package/lib/components/NotFound/NotFound.js +351 -0
  214. package/lib/components/NotFound/NotFound.stories.js +80 -0
  215. package/lib/components/Notify/Notify.d.ts +18 -0
  216. package/lib/components/Notify/Notify.js +178 -0
  217. package/lib/components/Notify/Notify.stories.js +148 -0
  218. package/lib/components/Notify/NotifyExample.d.ts +1 -0
  219. package/lib/components/Notify/NotifyExample.js +174 -0
  220. package/lib/components/Notify/README.md +103 -0
  221. package/lib/components/Pagination/Pagination.d.ts +18 -0
  222. package/lib/components/Pagination/Pagination.js +225 -0
  223. package/lib/components/Pagination/Pagination.stories.js +69 -0
  224. package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +12 -0
  225. package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.js +88 -0
  226. package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.stories.js +16 -0
  227. package/lib/components/PaymentMethodPanel/PaymentMethodPanel.d.ts +18 -0
  228. package/lib/components/PaymentMethodPanel/PaymentMethodPanel.js +113 -0
  229. package/lib/components/PaymentMethodPanel/PaymentMethodPanel.stories.js +88 -0
  230. package/lib/components/Pricing/Pricing.d.ts +78 -0
  231. package/lib/components/Pricing/Pricing.js +764 -0
  232. package/lib/components/Pricing/Pricing.stories.js +146 -0
  233. package/lib/components/ProductGrid/ProductGrid.d.ts +23 -0
  234. package/lib/components/ProductGrid/ProductGrid.js +79 -0
  235. package/lib/components/ProductGrid/ProductGrid.stories.js +50 -0
  236. package/lib/components/ProgressSteps/ProgressSteps.d.ts +13 -0
  237. package/lib/components/ProgressSteps/ProgressSteps.js +51 -0
  238. package/lib/components/ProgressSteps/ProgressSteps.stories.js +35 -0
  239. package/lib/components/RadioField/RadioField.d.ts +16 -0
  240. package/lib/components/RadioField/RadioField.js +63 -0
  241. package/lib/components/RadioField/RadioField.stories.js +140 -0
  242. package/lib/components/ReviewList/ReviewList.d.ts +15 -0
  243. package/lib/components/ReviewList/ReviewList.js +51 -0
  244. package/lib/components/ReviewList/ReviewList.stories.js +29 -0
  245. package/lib/components/SectionHeader/SectionHeader.d.ts +9 -0
  246. package/lib/components/SectionHeader/SectionHeader.js +36 -0
  247. package/lib/components/SectionHeader/SectionHeader.stories.js +35 -0
  248. package/lib/components/SelectField/SelectField.d.ts +18 -0
  249. package/lib/components/SelectField/SelectField.js +145 -0
  250. package/lib/components/SelectField/SelectField.stories.js +155 -0
  251. package/lib/components/SelectField/SelectOption.d.ts +13 -0
  252. package/lib/components/SelectField/SelectOption.js +40 -0
  253. package/lib/components/SelectField/SelectOption.stories.js +40 -0
  254. package/lib/components/Separator/Separator.d.ts +6 -0
  255. package/lib/components/Separator/Separator.js +13 -0
  256. package/lib/components/Separator/Separator.stories.js +70 -0
  257. package/lib/components/Skeleton/Skeleton.d.ts +2 -0
  258. package/lib/components/Skeleton/Skeleton.js +9 -0
  259. package/lib/components/Skeleton/Skeleton.stories.js +24 -0
  260. package/lib/components/Svg/Svg.d.ts +9 -0
  261. package/lib/components/Svg/Svg.js +25 -0
  262. package/lib/components/Svg/Svg.stories.js +34 -0
  263. package/lib/components/Switch/Switch.d.ts +12 -0
  264. package/lib/components/Switch/Switch.js +54 -0
  265. package/lib/components/Switch/Switch.stories.js +61 -0
  266. package/lib/components/Table/Table.d.ts +18 -0
  267. package/lib/components/Table/Table.js +99 -0
  268. package/lib/components/Table/Table.stories.js +79 -0
  269. package/lib/components/Tabs/Tabs.d.ts +17 -0
  270. package/lib/components/Tabs/Tabs.js +85 -0
  271. package/lib/components/Tabs/Tabs.stories.js +45 -0
  272. package/lib/components/Text/Text.d.ts +5 -0
  273. package/lib/components/Text/Text.js +24 -0
  274. package/lib/components/Text/Text.stories.js +35 -0
  275. package/lib/components/TextField/TextField.d.ts +31 -0
  276. package/lib/components/TextField/TextField.js +91 -0
  277. package/lib/components/TextField/TextField.stories.js +158 -0
  278. package/lib/components/Textarea/Textarea.d.ts +5 -0
  279. package/lib/components/Textarea/Textarea.js +10 -0
  280. package/lib/components/Textarea/Textarea.stories.js +32 -0
  281. package/lib/components/index.d.ts +60 -0
  282. package/lib/components/index.js +62 -0
  283. package/lib/config/appConfig.d.ts +5 -0
  284. package/lib/config/appConfig.js +20 -0
  285. package/lib/constants/AuthConstants.d.ts +8 -0
  286. package/lib/constants/AuthConstants.js +9 -0
  287. package/lib/constants/GothamConstants.d.ts +24 -0
  288. package/lib/constants/GothamConstants.js +25 -0
  289. package/lib/constants/MarkdownConstants.d.ts +8 -0
  290. package/lib/constants/MarkdownConstants.js +9 -0
  291. package/lib/constants/MessageConstants.d.ts +10 -0
  292. package/lib/constants/MessageConstants.js +11 -0
  293. package/lib/docs/analytics.md +231 -0
  294. package/lib/docs/api-reference.md +364 -0
  295. package/lib/docs/comparison.md +83 -0
  296. package/lib/docs/containers.md +11 -0
  297. package/lib/docs/gettingStarted.md +338 -0
  298. package/lib/docs/payments.md +79 -0
  299. package/lib/editor/CodeEditor.d.ts +11 -0
  300. package/lib/editor/CodeEditor.js +15 -0
  301. package/lib/editor/CodeEditor.stories.js +24 -0
  302. package/lib/editor/index.d.ts +1 -0
  303. package/lib/editor/index.js +3 -0
  304. package/lib/errors/UserError.d.ts +8 -0
  305. package/lib/errors/UserError.js +12 -0
  306. package/lib/examples/OptimizedFormExample.d.ts +1 -0
  307. package/lib/examples/OptimizedFormExample.js +130 -0
  308. package/lib/form/index.d.ts +11 -0
  309. package/lib/form/index.js +13 -0
  310. package/lib/hooks/useIsMobile.d.ts +1 -0
  311. package/lib/hooks/useIsMobile.js +12 -0
  312. package/lib/i18n/index.d.ts +8 -0
  313. package/lib/i18n/index.js +7 -0
  314. package/lib/icons/Dual Ring-1s-100px.svg +1 -0
  315. package/lib/icons/gotham-logo.svg +17 -0
  316. package/lib/icons/gotham.svg +8 -0
  317. package/lib/icons/index.d.ts +5 -0
  318. package/lib/icons/index.js +6 -0
  319. package/lib/icons/pencil.svg +6 -0
  320. package/lib/img/arkhamjs-logo.png +0 -0
  321. package/lib/img/logo.png +0 -0
  322. package/lib/index.d.ts +25 -0
  323. package/lib/index.js +25 -0
  324. package/lib/router/index.d.ts +5 -0
  325. package/lib/router/index.js +6 -0
  326. package/lib/stores/GothamAppStore.d.ts +35 -0
  327. package/lib/stores/GothamAppStore.js +70 -0
  328. package/lib/stories/Button.d.ts +28 -0
  329. package/lib/stories/Button.js +22 -0
  330. package/lib/stories/Header.d.ts +12 -0
  331. package/lib/stories/Header.js +78 -0
  332. package/lib/stories/Page.d.ts +3 -0
  333. package/lib/stories/Page.js +108 -0
  334. package/lib/stories/assets/accessibility.png +0 -0
  335. package/lib/stories/assets/accessibility.svg +5 -0
  336. package/lib/stories/assets/addon-library.png +0 -0
  337. package/lib/stories/assets/assets.png +0 -0
  338. package/lib/stories/assets/context.png +0 -0
  339. package/lib/stories/assets/discord.svg +15 -0
  340. package/lib/stories/assets/docs.png +0 -0
  341. package/lib/stories/assets/figma-plugin.png +0 -0
  342. package/lib/stories/assets/github.svg +3 -0
  343. package/lib/stories/assets/share.png +0 -0
  344. package/lib/stories/assets/styling.png +0 -0
  345. package/lib/stories/assets/testing.png +0 -0
  346. package/lib/stories/assets/theming.png +0 -0
  347. package/lib/stories/assets/tutorials.svg +12 -0
  348. package/lib/stories/assets/youtube.svg +4 -0
  349. package/lib/stories/button.css +1 -0
  350. package/lib/stories/header.css +1 -0
  351. package/lib/stories/page.css +1 -0
  352. package/lib/styles/chat.css +1 -0
  353. package/lib/styles/index.css +2 -0
  354. package/lib/styles/tailwind.css +1 -0
  355. package/lib/types/assets.d.js +2 -0
  356. package/lib/types/gotham.d.ts +12 -0
  357. package/lib/types/gotham.js +3 -0
  358. package/lib/types/vitest-globals.d.js +3 -0
  359. package/lib/utils/GothamContext.d.ts +14 -0
  360. package/lib/utils/GothamContext.js +14 -0
  361. package/lib/utils/awsRum.d.ts +23 -0
  362. package/lib/utils/awsRum.js +50 -0
  363. package/lib/utils/colorUtils.d.ts +20 -0
  364. package/lib/utils/colorUtils.js +499 -0
  365. package/lib/utils/contentUtils.d.ts +2 -0
  366. package/lib/utils/contentUtils.js +18 -0
  367. package/lib/utils/i18nUtil.d.ts +1 -0
  368. package/lib/utils/i18nUtil.js +7 -0
  369. package/lib/utils/imageUtils.d.ts +5 -0
  370. package/lib/utils/imageUtils.js +48 -0
  371. package/lib/utils/interactionAnalytics.d.ts +10 -0
  372. package/lib/utils/interactionAnalytics.js +142 -0
  373. package/lib/utils/navEventQueue.d.ts +6 -0
  374. package/lib/utils/navEventQueue.js +50 -0
  375. package/lib/utils/refUtils.d.ts +2 -0
  376. package/lib/utils/refUtils.js +11 -0
  377. package/lib/utils/routeUtils.d.ts +12 -0
  378. package/lib/utils/routeUtils.js +109 -0
  379. package/lib/utils/sizeUtils.d.ts +5 -0
  380. package/lib/utils/sizeUtils.js +6 -0
  381. package/lib/utils/storyInteractions.d.ts +6 -0
  382. package/lib/utils/storyInteractions.js +45 -0
  383. package/lib/utils/storyUtils.d.ts +1 -0
  384. package/lib/utils/storyUtils.js +11 -0
  385. package/lib/utils/testUtils.d.ts +3 -0
  386. package/lib/utils/testUtils.js +56 -0
  387. package/lib/utils/timer.d.ts +21 -0
  388. package/lib/utils/timer.js +38 -0
  389. package/lib/utils/useBreakpoint.d.ts +6 -0
  390. package/lib/utils/useBreakpoint.js +56 -0
  391. package/lib/utils/viewPerformance.d.ts +34 -0
  392. package/lib/utils/viewPerformance.js +103 -0
  393. package/lib/utils/viewUtils.d.ts +9 -0
  394. package/lib/utils/viewUtils.js +44 -0
  395. package/lib/views/AuthSignInView/AuthSignInView.d.ts +20 -0
  396. package/lib/views/AuthSignInView/AuthSignInView.js +107 -0
  397. package/lib/views/AuthSignInView/AuthSignInView.stories.js +29 -0
  398. package/lib/views/AuthSignUpView/AuthSignUpView.d.ts +21 -0
  399. package/lib/views/AuthSignUpView/AuthSignUpView.js +146 -0
  400. package/lib/views/AuthSignUpView/AuthSignUpView.stories.js +30 -0
  401. package/lib/views/AuthView/AuthView.d.ts +16 -0
  402. package/lib/views/AuthView/AuthView.js +60 -0
  403. package/lib/views/AuthView/AuthView.stories.js +34 -0
  404. package/lib/views/DefaultView/DefaultView.d.ts +5 -0
  405. package/lib/views/DefaultView/DefaultView.js +134 -0
  406. package/lib/views/Gotham/Gotham.d.ts +44 -0
  407. package/lib/views/Gotham/Gotham.js +24 -0
  408. package/lib/views/Gotham/Gotham.stories.js +31 -0
  409. package/lib/views/Gotham/GothamListeners.d.ts +0 -0
  410. package/lib/views/Gotham/GothamListeners.js +2 -0
  411. package/lib/views/Gotham/GothamProvider.d.ts +43 -0
  412. package/lib/views/Gotham/GothamProvider.js +217 -0
  413. package/lib/views/Gotham/GothamRoot.d.ts +6 -0
  414. package/lib/views/Gotham/GothamRoot.js +69 -0
  415. package/lib/views/HomeView/HomeView.d.ts +10 -0
  416. package/lib/views/HomeView/HomeView.js +134 -0
  417. package/lib/views/LoaderView/LoaderView.d.ts +8 -0
  418. package/lib/views/LoaderView/LoaderView.js +30 -0
  419. package/lib/views/MenuView/MenuView.d.ts +13 -0
  420. package/lib/views/MenuView/MenuView.js +305 -0
  421. package/lib/views/NotFoundView/NotFoundView.d.ts +2 -0
  422. package/lib/views/NotFoundView/NotFoundView.js +12 -0
  423. package/lib/views/index.d.ts +11 -0
  424. package/lib/views/index.js +13 -0
  425. package/package.json +202 -0
  426. package/styles/tailwind.css +1 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ export const convertFileToBase64 = (file, maxSize)=>new Promise((resolve, reject)=>{
5
+ const reader = new FileReader();
6
+ reader.onload = ()=>{
7
+ const image = new Image();
8
+ image.onload = ()=>{
9
+ // Resize the image
10
+ const canvas = document.createElement('canvas');
11
+ const { height, width } = image;
12
+ let updatedHeight = height;
13
+ let updatedWidth = width;
14
+ if (width > height) {
15
+ if (width > maxSize) {
16
+ updatedHeight *= maxSize / width;
17
+ updatedWidth = maxSize;
18
+ }
19
+ } else if (height > maxSize) {
20
+ updatedWidth *= maxSize / height;
21
+ updatedHeight = maxSize;
22
+ }
23
+ canvas.width = updatedWidth;
24
+ canvas.height = updatedHeight;
25
+ canvas.getContext('2d')?.drawImage(image, 0, 0, updatedWidth, updatedHeight);
26
+ const dataUrl = canvas.toDataURL('image/jpeg');
27
+ // const resizedImage = dataURLToBlob(dataUrl);
28
+ resolve(dataUrl);
29
+ // $.event.trigger({
30
+ // type: 'imageResized',
31
+ // blob: resizedImage,
32
+ // url: dataUrl
33
+ // });
34
+ };
35
+ const originalBase64 = reader.result;
36
+ image.src = originalBase64;
37
+ };
38
+ // reader.onloadend = () => {
39
+ // const base64: string = reader.result as string;
40
+ // resolve(base64);
41
+ // };
42
+ reader.onerror = (event)=>{
43
+ reject(event);
44
+ };
45
+ reader.readAsDataURL(file);
46
+ });
47
+
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9pbWFnZVV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydEZpbGVUb0Jhc2U2NCA9IChmaWxlOiBGaWxlLCBtYXhTaXplOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIC8vIFJlc2l6ZSB0aGUgaW1hZ2VcbiAgICAgICAgY29uc3QgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCB7aGVpZ2h0LCB3aWR0aH0gPSBpbWFnZTtcbiAgICAgICAgbGV0IHVwZGF0ZWRIZWlnaHQ6IG51bWJlciA9IGhlaWdodDtcbiAgICAgICAgbGV0IHVwZGF0ZWRXaWR0aDogbnVtYmVyID0gd2lkdGg7XG5cbiAgICAgICAgaWYod2lkdGggPiBoZWlnaHQpIHtcbiAgICAgICAgICBpZih3aWR0aCA+IG1heFNpemUpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRIZWlnaHQgKj0gbWF4U2l6ZSAvIHdpZHRoO1xuICAgICAgICAgICAgdXBkYXRlZFdpZHRoID0gbWF4U2l6ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZihoZWlnaHQgPiBtYXhTaXplKSB7XG4gICAgICAgICAgdXBkYXRlZFdpZHRoICo9IG1heFNpemUgLyBoZWlnaHQ7XG4gICAgICAgICAgdXBkYXRlZEhlaWdodCA9IG1heFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMud2lkdGggPSB1cGRhdGVkV2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSB1cGRhdGVkSGVpZ2h0O1xuICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKT8uZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB1cGRhdGVkV2lkdGgsIHVwZGF0ZWRIZWlnaHQpO1xuICAgICAgICBjb25zdCBkYXRhVXJsOiBzdHJpbmcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XG4gICAgICAgIC8vIGNvbnN0IHJlc2l6ZWRJbWFnZSA9IGRhdGFVUkxUb0Jsb2IoZGF0YVVybCk7XG5cbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgICAgLy8gJC5ldmVudC50cmlnZ2VyKHtcbiAgICAgICAgLy8gICB0eXBlOiAnaW1hZ2VSZXNpemVkJyxcbiAgICAgICAgLy8gICBibG9iOiByZXNpemVkSW1hZ2UsXG4gICAgICAgIC8vICAgdXJsOiBkYXRhVXJsXG4gICAgICAgIC8vIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxCYXNlNjQ6IHN0cmluZyA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgaW1hZ2Uuc3JjID0gb3JpZ2luYWxCYXNlNjQ7XG4gICAgfTtcbiAgICAvLyByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgIC8vICAgY29uc3QgYmFzZTY0OiBzdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAvLyAgIHJlc29sdmUoYmFzZTY0KTtcbiAgICAvLyB9O1xuICAgIHJlYWRlci5vbmVycm9yID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICByZWplY3QoZXZlbnQpO1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbImNvbnZlcnRGaWxlVG9CYXNlNjQiLCJmaWxlIiwibWF4U2l6ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImltYWdlIiwiSW1hZ2UiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJoZWlnaHQiLCJ3aWR0aCIsInVwZGF0ZWRIZWlnaHQiLCJ1cGRhdGVkV2lkdGgiLCJnZXRDb250ZXh0IiwiZHJhd0ltYWdlIiwiZGF0YVVybCIsInRvRGF0YVVSTCIsIm9yaWdpbmFsQmFzZTY0IiwicmVzdWx0Iiwic3JjIiwib25lcnJvciIsImV2ZW50IiwicmVhZEFzRGF0YVVSTCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBTyxNQUFNQSxzQkFBc0IsQ0FBQ0MsTUFBWUMsVUFDOUMsSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztRQUNwQixNQUFNQyxTQUFTLElBQUlDO1FBQ25CRCxPQUFPRSxNQUFNLEdBQUc7WUFDZCxNQUFNQyxRQUFRLElBQUlDO1lBQ2xCRCxNQUFNRCxNQUFNLEdBQUc7Z0JBQ2IsbUJBQW1CO2dCQUNuQixNQUFNRyxTQUE0QkMsU0FBU0MsYUFBYSxDQUFDO2dCQUN6RCxNQUFNLEVBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFDLEdBQUdOO2dCQUN4QixJQUFJTyxnQkFBd0JGO2dCQUM1QixJQUFJRyxlQUF1QkY7Z0JBRTNCLElBQUdBLFFBQVFELFFBQVE7b0JBQ2pCLElBQUdDLFFBQVFiLFNBQVM7d0JBQ2xCYyxpQkFBaUJkLFVBQVVhO3dCQUMzQkUsZUFBZWY7b0JBQ2pCO2dCQUNGLE9BQU8sSUFBR1ksU0FBU1osU0FBUztvQkFDMUJlLGdCQUFnQmYsVUFBVVk7b0JBQzFCRSxnQkFBZ0JkO2dCQUNsQjtnQkFFQVMsT0FBT0ksS0FBSyxHQUFHRTtnQkFDZk4sT0FBT0csTUFBTSxHQUFHRTtnQkFDaEJMLE9BQU9PLFVBQVUsQ0FBQyxPQUFPQyxVQUFVVixPQUFPLEdBQUcsR0FBR1EsY0FBY0Q7Z0JBQzlELE1BQU1JLFVBQWtCVCxPQUFPVSxTQUFTLENBQUM7Z0JBQ3pDLCtDQUErQztnQkFFL0NqQixRQUFRZ0I7WUFDUixvQkFBb0I7WUFDcEIsMEJBQTBCO1lBQzFCLHdCQUF3QjtZQUN4QixpQkFBaUI7WUFDakIsTUFBTTtZQUNSO1lBRUEsTUFBTUUsaUJBQXlCaEIsT0FBT2lCLE1BQU07WUFDNUNkLE1BQU1lLEdBQUcsR0FBR0Y7UUFDZDtRQUNBLDZCQUE2QjtRQUM3QixvREFBb0Q7UUFDcEQscUJBQXFCO1FBQ3JCLEtBQUs7UUFDTGhCLE9BQU9tQixPQUFPLEdBQUcsQ0FBQ0M7WUFDaEJyQixPQUFPcUI7UUFDVDtRQUNBcEIsT0FBT3FCLGFBQWEsQ0FBQzFCO0lBQ3ZCLEdBQUcifQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2026-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ import type { AwsRum } from './awsRum.js';
6
+ /**
7
+ * Tracks semantic interactions with one delegated listener per event type.
8
+ * Values, visible text, URLs, and query strings are deliberately excluded.
9
+ */
10
+ export declare const registerInteractionAnalytics: (awsRum: AwsRum, ownerDocument?: Document | undefined) => (() => void);
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Copyright (c) 2026-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ const ACTIVATION_SELECTOR = [
5
+ 'a[href]',
6
+ 'area[href]',
7
+ 'button',
8
+ 'input[type="button"]',
9
+ 'input[type="image"]',
10
+ 'input[type="reset"]',
11
+ 'input[type="submit"]',
12
+ 'summary',
13
+ '[role="button"]',
14
+ '[role="checkbox"]',
15
+ '[role="link"]',
16
+ '[role="menuitem"]',
17
+ '[role="menuitemcheckbox"]',
18
+ '[role="menuitemradio"]',
19
+ '[role="option"]',
20
+ '[role="radio"]',
21
+ '[role="slider"]',
22
+ '[role="switch"]',
23
+ '[role="tab"]',
24
+ '[role="treeitem"]',
25
+ '[data-analytics-interaction="click"]'
26
+ ].join(',');
27
+ const EDITABLE_SELECTOR = '[contenteditable=""], [contenteditable="true"]';
28
+ const KEYBOARD_VALUE_SELECTOR = '[role="slider"], [role="spinbutton"]';
29
+ const VALUE_KEYS = new Set([
30
+ 'ArrowDown',
31
+ 'ArrowLeft',
32
+ 'ArrowRight',
33
+ 'ArrowUp',
34
+ 'End',
35
+ 'Home',
36
+ 'PageDown',
37
+ 'PageUp'
38
+ ]);
39
+ const NATIVE_VALUE_SELECTOR = [
40
+ 'input:not([type="button"]):not([type="hidden"]):not([type="image"]):not([type="reset"]):not([type="submit"])',
41
+ 'select',
42
+ 'textarea'
43
+ ].join(',');
44
+ const VALUE_SELECTOR = [
45
+ NATIVE_VALUE_SELECTOR,
46
+ '[role="checkbox"]',
47
+ '[role="combobox"]',
48
+ '[role="listbox"]',
49
+ '[role="radio"]',
50
+ '[role="slider"]',
51
+ '[role="spinbutton"]',
52
+ '[role="switch"]',
53
+ '[data-analytics-interaction="change"]'
54
+ ].join(',');
55
+ const findTarget = (event, selector)=>{
56
+ const path = typeof event.composedPath === 'function' ? event.composedPath() : [
57
+ event.target
58
+ ];
59
+ return path.find((item)=>item instanceof Element && item.matches(selector));
60
+ };
61
+ const getControl = (element)=>{
62
+ const role = element.getAttribute('role');
63
+ if (role) {
64
+ return role;
65
+ }
66
+ if (element instanceof HTMLInputElement) {
67
+ return `input.${element.type || 'text'}`;
68
+ }
69
+ return element.tagName.toLowerCase();
70
+ };
71
+ const isTrackable = (element)=>{
72
+ const disabled = element.getAttribute('aria-disabled') === 'true' || element instanceof HTMLButtonElement && element.disabled || element instanceof HTMLInputElement && element.disabled || element instanceof HTMLSelectElement && element.disabled || element instanceof HTMLTextAreaElement && element.disabled;
73
+ return !disabled && !element.closest('[data-analytics-track="false"]');
74
+ };
75
+ const trackInteraction = (awsRum, element, interaction)=>{
76
+ if (!isTrackable(element)) {
77
+ return;
78
+ }
79
+ const analyticsName = element.getAttribute('data-analytics-name')?.trim();
80
+ awsRum.track({
81
+ name: analyticsName || 'interaction',
82
+ path: globalThis.location?.pathname,
83
+ properties: {
84
+ control: getControl(element),
85
+ interaction
86
+ },
87
+ type: interaction === 'activate' ? 'click' : interaction
88
+ });
89
+ };
90
+ /**
91
+ * Tracks semantic interactions with one delegated listener per event type.
92
+ * Values, visible text, URLs, and query strings are deliberately excluded.
93
+ */ export const registerInteractionAnalytics = (awsRum, ownerDocument = globalThis.document)=>{
94
+ if (!ownerDocument) {
95
+ return ()=>{};
96
+ }
97
+ const handleBlur = (event)=>{
98
+ const target = findTarget(event, EDITABLE_SELECTOR);
99
+ if (target) {
100
+ trackInteraction(awsRum, target, 'edit');
101
+ }
102
+ };
103
+ const handleChange = (event)=>{
104
+ const target = findTarget(event, VALUE_SELECTOR);
105
+ if (target) {
106
+ trackInteraction(awsRum, target, 'change');
107
+ }
108
+ };
109
+ const handleClick = (event)=>{
110
+ const target = findTarget(event, ACTIVATION_SELECTOR);
111
+ if (target && !target.matches(NATIVE_VALUE_SELECTOR)) {
112
+ trackInteraction(awsRum, target, 'activate');
113
+ }
114
+ };
115
+ const handleSubmit = (event)=>{
116
+ const submitEvent = event;
117
+ if (!submitEvent.submitter && event.target instanceof HTMLFormElement) {
118
+ trackInteraction(awsRum, event.target, 'submit');
119
+ }
120
+ };
121
+ const handleValueKey = (event)=>{
122
+ const keyboardEvent = event;
123
+ const target = findTarget(event, KEYBOARD_VALUE_SELECTOR);
124
+ if (target && VALUE_KEYS.has(keyboardEvent.key)) {
125
+ trackInteraction(awsRum, target, 'change');
126
+ }
127
+ };
128
+ ownerDocument.addEventListener('blur', handleBlur, true);
129
+ ownerDocument.addEventListener('change', handleChange, true);
130
+ ownerDocument.addEventListener('click', handleClick, true);
131
+ ownerDocument.addEventListener('keyup', handleValueKey, true);
132
+ ownerDocument.addEventListener('submit', handleSubmit, true);
133
+ return ()=>{
134
+ ownerDocument.removeEventListener('blur', handleBlur, true);
135
+ ownerDocument.removeEventListener('change', handleChange, true);
136
+ ownerDocument.removeEventListener('click', handleClick, true);
137
+ ownerDocument.removeEventListener('keyup', handleValueKey, true);
138
+ ownerDocument.removeEventListener('submit', handleSubmit, true);
139
+ };
140
+ };
141
+
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9pbnRlcmFjdGlvbkFuYWx5dGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNi1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHR5cGUge0F3c1J1bX0gZnJvbSAnLi9hd3NSdW0uanMnO1xuXG50eXBlIEludGVyYWN0aW9uS2luZCA9ICdhY3RpdmF0ZScgfCAnY2hhbmdlJyB8ICdlZGl0JyB8ICdzdWJtaXQnO1xuXG5jb25zdCBBQ1RJVkFUSU9OX1NFTEVDVE9SID0gW1xuICAnYVtocmVmXScsXG4gICdhcmVhW2hyZWZdJyxcbiAgJ2J1dHRvbicsXG4gICdpbnB1dFt0eXBlPVwiYnV0dG9uXCJdJyxcbiAgJ2lucHV0W3R5cGU9XCJpbWFnZVwiXScsXG4gICdpbnB1dFt0eXBlPVwicmVzZXRcIl0nLFxuICAnaW5wdXRbdHlwZT1cInN1Ym1pdFwiXScsXG4gICdzdW1tYXJ5JyxcbiAgJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgJ1tyb2xlPVwiY2hlY2tib3hcIl0nLFxuICAnW3JvbGU9XCJsaW5rXCJdJyxcbiAgJ1tyb2xlPVwibWVudWl0ZW1cIl0nLFxuICAnW3JvbGU9XCJtZW51aXRlbWNoZWNrYm94XCJdJyxcbiAgJ1tyb2xlPVwibWVudWl0ZW1yYWRpb1wiXScsXG4gICdbcm9sZT1cIm9wdGlvblwiXScsXG4gICdbcm9sZT1cInJhZGlvXCJdJyxcbiAgJ1tyb2xlPVwic2xpZGVyXCJdJyxcbiAgJ1tyb2xlPVwic3dpdGNoXCJdJyxcbiAgJ1tyb2xlPVwidGFiXCJdJyxcbiAgJ1tyb2xlPVwidHJlZWl0ZW1cIl0nLFxuICAnW2RhdGEtYW5hbHl0aWNzLWludGVyYWN0aW9uPVwiY2xpY2tcIl0nXG5dLmpvaW4oJywnKTtcblxuY29uc3QgRURJVEFCTEVfU0VMRUNUT1IgPSAnW2NvbnRlbnRlZGl0YWJsZT1cIlwiXSwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nO1xuY29uc3QgS0VZQk9BUkRfVkFMVUVfU0VMRUNUT1IgPSAnW3JvbGU9XCJzbGlkZXJcIl0sIFtyb2xlPVwic3BpbmJ1dHRvblwiXSc7XG5jb25zdCBWQUxVRV9LRVlTID0gbmV3IFNldChbJ0Fycm93RG93bicsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdBcnJvd1VwJywgJ0VuZCcsICdIb21lJywgJ1BhZ2VEb3duJywgJ1BhZ2VVcCddKTtcbmNvbnN0IE5BVElWRV9WQUxVRV9TRUxFQ1RPUiA9IFtcbiAgJ2lucHV0Om5vdChbdHlwZT1cImJ1dHRvblwiXSk6bm90KFt0eXBlPVwiaGlkZGVuXCJdKTpub3QoW3R5cGU9XCJpbWFnZVwiXSk6bm90KFt0eXBlPVwicmVzZXRcIl0pOm5vdChbdHlwZT1cInN1Ym1pdFwiXSknLFxuICAnc2VsZWN0JyxcbiAgJ3RleHRhcmVhJ1xuXS5qb2luKCcsJyk7XG5jb25zdCBWQUxVRV9TRUxFQ1RPUiA9IFtcbiAgTkFUSVZFX1ZBTFVFX1NFTEVDVE9SLFxuICAnW3JvbGU9XCJjaGVja2JveFwiXScsXG4gICdbcm9sZT1cImNvbWJvYm94XCJdJyxcbiAgJ1tyb2xlPVwibGlzdGJveFwiXScsXG4gICdbcm9sZT1cInJhZGlvXCJdJyxcbiAgJ1tyb2xlPVwic2xpZGVyXCJdJyxcbiAgJ1tyb2xlPVwic3BpbmJ1dHRvblwiXScsXG4gICdbcm9sZT1cInN3aXRjaFwiXScsXG4gICdbZGF0YS1hbmFseXRpY3MtaW50ZXJhY3Rpb249XCJjaGFuZ2VcIl0nXG5dLmpvaW4oJywnKTtcblxuY29uc3QgZmluZFRhcmdldCA9IChldmVudDogRXZlbnQsIHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcGF0aCA9IHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09ICdmdW5jdGlvbicgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IFtldmVudC50YXJnZXRdO1xuXG4gIHJldHVybiBwYXRoLmZpbmQoKGl0ZW0pOiBpdGVtIGlzIEVsZW1lbnQgPT4gaXRlbSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgaXRlbS5tYXRjaGVzKHNlbGVjdG9yKSk7XG59O1xuXG5jb25zdCBnZXRDb250cm9sID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCByb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKTtcblxuICBpZihyb2xlKSB7XG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICBpZihlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgIHJldHVybiBgaW5wdXQuJHtlbGVtZW50LnR5cGUgfHwgJ3RleHQnfWA7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5jb25zdCBpc1RyYWNrYWJsZSA9IChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGRpc2FibGVkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKSA9PT0gJ3RydWUnXG4gICAgfHwgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkKVxuICAgIHx8IChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkKVxuICAgIHx8IChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQgJiYgZWxlbWVudC5kaXNhYmxlZClcbiAgICB8fCAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgJiYgZWxlbWVudC5kaXNhYmxlZCk7XG5cbiAgcmV0dXJuICFkaXNhYmxlZCAmJiAhZWxlbWVudC5jbG9zZXN0KCdbZGF0YS1hbmFseXRpY3MtdHJhY2s9XCJmYWxzZVwiXScpO1xufTtcblxuY29uc3QgdHJhY2tJbnRlcmFjdGlvbiA9IChhd3NSdW06IEF3c1J1bSwgZWxlbWVudDogRWxlbWVudCwgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uS2luZCk6IHZvaWQgPT4ge1xuICBpZighaXNUcmFja2FibGUoZWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhbmFseXRpY3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYW5hbHl0aWNzLW5hbWUnKT8udHJpbSgpO1xuXG4gIGF3c1J1bS50cmFjayh7XG4gICAgbmFtZTogYW5hbHl0aWNzTmFtZSB8fCAnaW50ZXJhY3Rpb24nLFxuICAgIHBhdGg6IGdsb2JhbFRoaXMubG9jYXRpb24/LnBhdGhuYW1lLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGNvbnRyb2w6IGdldENvbnRyb2woZWxlbWVudCksXG4gICAgICBpbnRlcmFjdGlvblxuICAgIH0sXG4gICAgdHlwZTogaW50ZXJhY3Rpb24gPT09ICdhY3RpdmF0ZScgPyAnY2xpY2snIDogaW50ZXJhY3Rpb25cbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYWNrcyBzZW1hbnRpYyBpbnRlcmFjdGlvbnMgd2l0aCBvbmUgZGVsZWdhdGVkIGxpc3RlbmVyIHBlciBldmVudCB0eXBlLlxuICogVmFsdWVzLCB2aXNpYmxlIHRleHQsIFVSTHMsIGFuZCBxdWVyeSBzdHJpbmdzIGFyZSBkZWxpYmVyYXRlbHkgZXhjbHVkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCByZWdpc3RlckludGVyYWN0aW9uQW5hbHl0aWNzID0gKFxuICBhd3NSdW06IEF3c1J1bSxcbiAgb3duZXJEb2N1bWVudDogRG9jdW1lbnQgfCB1bmRlZmluZWQgPSBnbG9iYWxUaGlzLmRvY3VtZW50XG4pOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBpZighb3duZXJEb2N1bWVudCkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZmluZFRhcmdldChldmVudCwgRURJVEFCTEVfU0VMRUNUT1IpO1xuXG4gICAgaWYodGFyZ2V0KSB7XG4gICAgICB0cmFja0ludGVyYWN0aW9uKGF3c1J1bSwgdGFyZ2V0LCAnZWRpdCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGZpbmRUYXJnZXQoZXZlbnQsIFZBTFVFX1NFTEVDVE9SKTtcblxuICAgIGlmKHRhcmdldCkge1xuICAgICAgdHJhY2tJbnRlcmFjdGlvbihhd3NSdW0sIHRhcmdldCwgJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZmluZFRhcmdldChldmVudCwgQUNUSVZBVElPTl9TRUxFQ1RPUik7XG5cbiAgICBpZih0YXJnZXQgJiYgIXRhcmdldC5tYXRjaGVzKE5BVElWRV9WQUxVRV9TRUxFQ1RPUikpIHtcbiAgICAgIHRyYWNrSW50ZXJhY3Rpb24oYXdzUnVtLCB0YXJnZXQsICdhY3RpdmF0ZScpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHN1Ym1pdEV2ZW50ID0gZXZlbnQgYXMgU3VibWl0RXZlbnQ7XG5cbiAgICBpZighc3VibWl0RXZlbnQuc3VibWl0dGVyICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgdHJhY2tJbnRlcmFjdGlvbihhd3NSdW0sIGV2ZW50LnRhcmdldCwgJ3N1Ym1pdCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlVmFsdWVLZXkgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3Qga2V5Ym9hcmRFdmVudCA9IGV2ZW50IGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgY29uc3QgdGFyZ2V0ID0gZmluZFRhcmdldChldmVudCwgS0VZQk9BUkRfVkFMVUVfU0VMRUNUT1IpO1xuXG4gICAgaWYodGFyZ2V0ICYmIFZBTFVFX0tFWVMuaGFzKGtleWJvYXJkRXZlbnQua2V5KSkge1xuICAgICAgdHJhY2tJbnRlcmFjdGlvbihhd3NSdW0sIHRhcmdldCwgJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcblxuICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBoYW5kbGVCbHVyLCB0cnVlKTtcbiAgb3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBoYW5kbGVDaGFuZ2UsIHRydWUpO1xuICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2ssIHRydWUpO1xuICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgaGFuZGxlVmFsdWVLZXksIHRydWUpO1xuICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGhhbmRsZVN1Ym1pdCwgdHJ1ZSk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBoYW5kbGVCbHVyLCB0cnVlKTtcbiAgICBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSwgdHJ1ZSk7XG4gICAgb3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrLCB0cnVlKTtcbiAgICBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgaGFuZGxlVmFsdWVLZXksIHRydWUpO1xuICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VibWl0JywgaGFuZGxlU3VibWl0LCB0cnVlKTtcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiQUNUSVZBVElPTl9TRUxFQ1RPUiIsImpvaW4iLCJFRElUQUJMRV9TRUxFQ1RPUiIsIktFWUJPQVJEX1ZBTFVFX1NFTEVDVE9SIiwiVkFMVUVfS0VZUyIsIlNldCIsIk5BVElWRV9WQUxVRV9TRUxFQ1RPUiIsIlZBTFVFX1NFTEVDVE9SIiwiZmluZFRhcmdldCIsImV2ZW50Iiwic2VsZWN0b3IiLCJwYXRoIiwiY29tcG9zZWRQYXRoIiwidGFyZ2V0IiwiZmluZCIsIml0ZW0iLCJFbGVtZW50IiwibWF0Y2hlcyIsImdldENvbnRyb2wiLCJlbGVtZW50Iiwicm9sZSIsImdldEF0dHJpYnV0ZSIsIkhUTUxJbnB1dEVsZW1lbnQiLCJ0eXBlIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiaXNUcmFja2FibGUiLCJkaXNhYmxlZCIsIkhUTUxCdXR0b25FbGVtZW50IiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiY2xvc2VzdCIsInRyYWNrSW50ZXJhY3Rpb24iLCJhd3NSdW0iLCJpbnRlcmFjdGlvbiIsImFuYWx5dGljc05hbWUiLCJ0cmltIiwidHJhY2siLCJuYW1lIiwiZ2xvYmFsVGhpcyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJwcm9wZXJ0aWVzIiwiY29udHJvbCIsInJlZ2lzdGVySW50ZXJhY3Rpb25BbmFseXRpY3MiLCJvd25lckRvY3VtZW50IiwiZG9jdW1lbnQiLCJoYW5kbGVCbHVyIiwiaGFuZGxlQ2hhbmdlIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVTdWJtaXQiLCJzdWJtaXRFdmVudCIsInN1Ym1pdHRlciIsIkhUTUxGb3JtRWxlbWVudCIsImhhbmRsZVZhbHVlS2V5Iiwia2V5Ym9hcmRFdmVudCIsImhhcyIsImtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoi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
@@ -0,0 +1,6 @@
1
+ type Handler = (data: any) => void;
2
+ export declare const enqueue: (type: string, data: any) => void;
3
+ export declare const registerHandler: (type: string, handler: Handler) => void;
4
+ export declare const clear: () => void;
5
+ export declare const registerFlux: (flux: any) => void;
6
+ export {};
@@ -0,0 +1,50 @@
1
+ import { GothamConstants } from '../constants/GothamConstants.js';
2
+ const queue = new Map();
3
+ const handlers = new Map();
4
+ export const enqueue = (type, data)=>{
5
+ const list = queue.get(type) || [];
6
+ list.push(data);
7
+ queue.set(type, list);
8
+ };
9
+ export const registerHandler = (type, handler)=>{
10
+ handlers.set(type, handler);
11
+ const queued = queue.get(type);
12
+ if (queued && queued.length) {
13
+ // Flush queued items
14
+ queued.forEach((item)=>{
15
+ try {
16
+ handler(item);
17
+ } catch (e) {
18
+ // swallow errors to avoid breaking app init
19
+ }
20
+ });
21
+ queue.delete(type);
22
+ }
23
+ };
24
+ export const clear = ()=>{
25
+ queue.clear();
26
+ handlers.clear();
27
+ };
28
+ export const registerFlux = (flux)=>{
29
+ if (!flux || typeof flux.on !== 'function') {
30
+ return;
31
+ }
32
+ const capture = (type)=>(data)=>{
33
+ const handler = handlers.get(type);
34
+ if (handler) {
35
+ try {
36
+ handler(data);
37
+ } catch (e) {
38
+ // ignore
39
+ }
40
+ } else {
41
+ enqueue(type, data);
42
+ }
43
+ };
44
+ flux.on(GothamConstants.NAV_GOTO, capture(GothamConstants.NAV_GOTO));
45
+ flux.on(GothamConstants.NAV_REPLACE, capture(GothamConstants.NAV_REPLACE));
46
+ flux.on(GothamConstants.NAV_BACK, capture(GothamConstants.NAV_BACK));
47
+ flux.on(GothamConstants.NAV_FORWARD, capture(GothamConstants.NAV_FORWARD));
48
+ };
49
+
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9uYXZFdmVudFF1ZXVlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7R290aGFtQ29uc3RhbnRzfSBmcm9tICcuLi9jb25zdGFudHMvR290aGFtQ29uc3RhbnRzLmpzJztcblxudHlwZSBIYW5kbGVyID0gKGRhdGE6IGFueSkgPT4gdm9pZDtcblxuY29uc3QgcXVldWU6IE1hcDxzdHJpbmcsIGFueVtdPiA9IG5ldyBNYXAoKTtcbmNvbnN0IGhhbmRsZXJzOiBNYXA8c3RyaW5nLCBIYW5kbGVyPiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGNvbnN0IGVucXVldWUgPSAodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkID0+IHtcbiAgY29uc3QgbGlzdCA9IHF1ZXVlLmdldCh0eXBlKSB8fCBbXTtcbiAgbGlzdC5wdXNoKGRhdGEpO1xuICBxdWV1ZS5zZXQodHlwZSwgbGlzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJIYW5kbGVyID0gKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcik6IHZvaWQgPT4ge1xuICBoYW5kbGVycy5zZXQodHlwZSwgaGFuZGxlcik7XG5cbiAgY29uc3QgcXVldWVkID0gcXVldWUuZ2V0KHR5cGUpO1xuICBpZihxdWV1ZWQgJiYgcXVldWVkLmxlbmd0aCkge1xuICAgIC8vIEZsdXNoIHF1ZXVlZCBpdGVtc1xuICAgIHF1ZXVlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGl0ZW0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3JzIHRvIGF2b2lkIGJyZWFraW5nIGFwcCBpbml0XG4gICAgICB9XG4gICAgfSk7XG4gICAgcXVldWUuZGVsZXRlKHR5cGUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gIHF1ZXVlLmNsZWFyKCk7XG4gIGhhbmRsZXJzLmNsZWFyKCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJGbHV4ID0gKGZsdXg6IGFueSk6IHZvaWQgPT4ge1xuICBpZighZmx1eCB8fCB0eXBlb2YgZmx1eC5vbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhcHR1cmUgPSAodHlwZTogc3RyaW5nKSA9PiAoZGF0YTogYW55KSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzLmdldCh0eXBlKTtcbiAgICBpZihoYW5kbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGRhdGEpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbnF1ZXVlKHR5cGUsIGRhdGEpO1xuICAgIH1cbiAgfTtcblxuICBmbHV4Lm9uKEdvdGhhbUNvbnN0YW50cy5OQVZfR09UTywgY2FwdHVyZShHb3RoYW1Db25zdGFudHMuTkFWX0dPVE8pKTtcbiAgZmx1eC5vbihHb3RoYW1Db25zdGFudHMuTkFWX1JFUExBQ0UsIGNhcHR1cmUoR290aGFtQ29uc3RhbnRzLk5BVl9SRVBMQUNFKSk7XG4gIGZsdXgub24oR290aGFtQ29uc3RhbnRzLk5BVl9CQUNLLCBjYXB0dXJlKEdvdGhhbUNvbnN0YW50cy5OQVZfQkFDSykpO1xuICBmbHV4Lm9uKEdvdGhhbUNvbnN0YW50cy5OQVZfRk9SV0FSRCwgY2FwdHVyZShHb3RoYW1Db25zdGFudHMuTkFWX0ZPUldBUkQpKTtcbn07XG4iXSwibmFtZXMiOlsiR290aGFtQ29uc3RhbnRzIiwicXVldWUiLCJNYXAiLCJoYW5kbGVycyIsImVucXVldWUiLCJ0eXBlIiwiZGF0YSIsImxpc3QiLCJnZXQiLCJwdXNoIiwic2V0IiwicmVnaXN0ZXJIYW5kbGVyIiwiaGFuZGxlciIsInF1ZXVlZCIsImxlbmd0aCIsImZvckVhY2giLCJpdGVtIiwiZSIsImRlbGV0ZSIsImNsZWFyIiwicmVnaXN0ZXJGbHV4IiwiZmx1eCIsIm9uIiwiY2FwdHVyZSIsIk5BVl9HT1RPIiwiTkFWX1JFUExBQ0UiLCJOQVZfQkFDSyIsIk5BVl9GT1JXQVJEIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxlQUFlLFFBQU8sa0NBQWtDO0FBSWhFLE1BQU1DLFFBQTRCLElBQUlDO0FBQ3RDLE1BQU1DLFdBQWlDLElBQUlEO0FBRTNDLE9BQU8sTUFBTUUsVUFBVSxDQUFDQyxNQUFjQztJQUNwQyxNQUFNQyxPQUFPTixNQUFNTyxHQUFHLENBQUNILFNBQVMsRUFBRTtJQUNsQ0UsS0FBS0UsSUFBSSxDQUFDSDtJQUNWTCxNQUFNUyxHQUFHLENBQUNMLE1BQU1FO0FBQ2xCLEVBQUU7QUFFRixPQUFPLE1BQU1JLGtCQUFrQixDQUFDTixNQUFjTztJQUM1Q1QsU0FBU08sR0FBRyxDQUFDTCxNQUFNTztJQUVuQixNQUFNQyxTQUFTWixNQUFNTyxHQUFHLENBQUNIO0lBQ3pCLElBQUdRLFVBQVVBLE9BQU9DLE1BQU0sRUFBRTtRQUMxQixxQkFBcUI7UUFDckJELE9BQU9FLE9BQU8sQ0FBQyxDQUFDQztZQUNkLElBQUk7Z0JBQ0ZKLFFBQVFJO1lBQ1YsRUFBRSxPQUFNQyxHQUFHO1lBQ1QsNENBQTRDO1lBQzlDO1FBQ0Y7UUFDQWhCLE1BQU1pQixNQUFNLENBQUNiO0lBQ2Y7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNYyxRQUFRO0lBQ25CbEIsTUFBTWtCLEtBQUs7SUFDWGhCLFNBQVNnQixLQUFLO0FBQ2hCLEVBQUU7QUFFRixPQUFPLE1BQU1DLGVBQWUsQ0FBQ0M7SUFDM0IsSUFBRyxDQUFDQSxRQUFRLE9BQU9BLEtBQUtDLEVBQUUsS0FBSyxZQUFZO1FBQ3pDO0lBQ0Y7SUFFQSxNQUFNQyxVQUFVLENBQUNsQixPQUFpQixDQUFDQztZQUNqQyxNQUFNTSxVQUFVVCxTQUFTSyxHQUFHLENBQUNIO1lBQzdCLElBQUdPLFNBQVM7Z0JBQ1YsSUFBSTtvQkFDRkEsUUFBUU47Z0JBQ1YsRUFBRSxPQUFNVyxHQUFHO2dCQUNULFNBQVM7Z0JBQ1g7WUFDRixPQUFPO2dCQUNMYixRQUFRQyxNQUFNQztZQUNoQjtRQUNGO0lBRUFlLEtBQUtDLEVBQUUsQ0FBQ3RCLGdCQUFnQndCLFFBQVEsRUFBRUQsUUFBUXZCLGdCQUFnQndCLFFBQVE7SUFDbEVILEtBQUtDLEVBQUUsQ0FBQ3RCLGdCQUFnQnlCLFdBQVcsRUFBRUYsUUFBUXZCLGdCQUFnQnlCLFdBQVc7SUFDeEVKLEtBQUtDLEVBQUUsQ0FBQ3RCLGdCQUFnQjBCLFFBQVEsRUFBRUgsUUFBUXZCLGdCQUFnQjBCLFFBQVE7SUFDbEVMLEtBQUtDLEVBQUUsQ0FBQ3RCLGdCQUFnQjJCLFdBQVcsRUFBRUosUUFBUXZCLGdCQUFnQjJCLFdBQVc7QUFDMUUsRUFBRSJ9
@@ -0,0 +1,2 @@
1
+ import type { Ref } from 'react';
2
+ export declare const assignRef: <T>(ref: Ref<T> | undefined, value: T | null) => void;
@@ -0,0 +1,11 @@
1
+ export const assignRef = (ref, value)=>{
2
+ if (typeof ref === 'function') {
3
+ ref(value);
4
+ return;
5
+ }
6
+ if (ref) {
7
+ ref.current = value;
8
+ }
9
+ };
10
+
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9yZWZVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UmVmfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25SZWYgPSA8VD4ocmVmOiBSZWY8VD4gfCB1bmRlZmluZWQsIHZhbHVlOiBUIHwgbnVsbCk6IHZvaWQgPT4ge1xuICBpZih0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZihyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImFzc2lnblJlZiIsInJlZiIsInZhbHVlIiwiY3VycmVudCJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxNQUFNQSxZQUFZLENBQUlDLEtBQXlCQztJQUNwRCxJQUFHLE9BQU9ELFFBQVEsWUFBWTtRQUM1QkEsSUFBSUM7UUFDSjtJQUNGO0lBRUEsSUFBR0QsS0FBSztRQUNOQSxJQUFJRSxPQUFPLEdBQUdEO0lBQ2hCO0FBQ0YsRUFBRSJ9
@@ -0,0 +1,12 @@
1
+ import type { RouteObject } from 'react-router';
2
+ export type CustomRouteProps = RouteObject & {
3
+ readonly analytics?: {
4
+ readonly route?: string;
5
+ readonly title?: string;
6
+ readonly viewId: string;
7
+ };
8
+ readonly authenticate?: boolean;
9
+ readonly props?: Record<string, unknown>;
10
+ readonly routes?: CustomRouteProps[];
11
+ };
12
+ export declare const parseRoutes: (routes?: CustomRouteProps[], parentPath?: string) => RouteObject[];
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
4
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
5
+ */ import { Flux } from '@nlabs/arkhamjs';
6
+ import React from 'react';
7
+ import { Outlet, redirect } from 'react-router';
8
+ import { AuthRoute } from '../components/AuthRoute/AuthRoute.js';
9
+ import { Config } from '../config/appConfig.js';
10
+ export const parseRoutes = (routes = [], parentPath = '')=>routes.map((route)=>{
11
+ const { analytics, authenticate, element, props, ...standardRouteProps } = route;
12
+ const nestedRoutes = route.routes || route.children;
13
+ const currentPath = typeof standardRouteProps.path === 'string' ? standardRouteProps.path.replace(/^\//, '') : '';
14
+ const fullPath = parentPath ? parentPath + (currentPath ? `/${currentPath}` : '') : currentPath;
15
+ const authRoute = Config.get('authRoute') || '/signIn';
16
+ let routeElement = element;
17
+ if (/*#__PURE__*/ React.isValidElement(element)) {
18
+ routeElement = /*#__PURE__*/ React.cloneElement(element, {
19
+ route
20
+ });
21
+ } else if (typeof element === 'function' || element !== null && typeof element === 'object' && '$$typeof' in element && element.$$typeof === Symbol.for('react.memo')) {
22
+ routeElement = /*#__PURE__*/ React.createElement(element, {
23
+ route
24
+ });
25
+ }
26
+ let authFlag = authenticate;
27
+ if (authFlag === undefined && /*#__PURE__*/ React.isValidElement(element)) {
28
+ const elemProps = element.props;
29
+ authFlag = Boolean(elemProps && (elemProps.authenticate || elemProps.route && elemProps.route.authenticate));
30
+ }
31
+ if (authFlag) {
32
+ if (!routeElement) {
33
+ routeElement = /*#__PURE__*/ _jsx(AuthRoute, {
34
+ children: /*#__PURE__*/ _jsx(Outlet, {})
35
+ });
36
+ } else {
37
+ routeElement = /*#__PURE__*/ _jsx(AuthRoute, {
38
+ children: routeElement
39
+ });
40
+ }
41
+ }
42
+ const normalizedChildren = nestedRoutes?.length ? nestedRoutes.map((child)=>{
43
+ let childPath = typeof child.path === 'string' ? child.path.replace(/^\/*/, '') : child.path;
44
+ if (fullPath && typeof childPath === 'string') {
45
+ const prefix = `${fullPath}/`;
46
+ if (childPath.startsWith(prefix)) {
47
+ childPath = childPath.replace(new RegExp(`^${prefix}`), '');
48
+ }
49
+ }
50
+ return {
51
+ ...child,
52
+ path: childPath
53
+ };
54
+ }) : undefined;
55
+ const loader = route.loader || (authFlag ? makeRequireAuthLoader(authRoute) : undefined);
56
+ const handle = analytics ? {
57
+ ...standardRouteProps.handle || {},
58
+ analytics
59
+ } : standardRouteProps.handle;
60
+ if (normalizedChildren?.length) {
61
+ return {
62
+ ...standardRouteProps,
63
+ authenticate: authFlag,
64
+ children: parseRoutes(normalizedChildren, fullPath),
65
+ element: routeElement,
66
+ handle,
67
+ loader,
68
+ path: currentPath || standardRouteProps.path
69
+ };
70
+ }
71
+ return {
72
+ ...standardRouteProps,
73
+ authenticate: authFlag,
74
+ element: routeElement,
75
+ handle,
76
+ loader,
77
+ path: currentPath || standardRouteProps.path
78
+ };
79
+ });
80
+ const makeRequireAuthLoader = (authRoute)=>async ({ request })=>{
81
+ let token;
82
+ try {
83
+ if (Flux && typeof Flux.getState === 'function') {
84
+ token = Flux.getState([
85
+ 'user',
86
+ 'session',
87
+ 'token'
88
+ ]) || Flux.getState([
89
+ 'session',
90
+ 'token'
91
+ ]) || Flux.getState([
92
+ 'user',
93
+ 'token'
94
+ ]);
95
+ }
96
+ } catch (_e) {
97
+ // ignore errors accessing Flux
98
+ }
99
+ const isAuthFn = Config.get('isAuth', ()=>false);
100
+ const sessionAuth = Boolean(token) || isAuthFn && isAuthFn();
101
+ if (!sessionAuth) {
102
+ const url = new URL(request.url);
103
+ const redirectParam = encodeURIComponent(`${url.pathname}${url.search}${url.hash}`);
104
+ return redirect(`${authRoute}?redirect=${redirectParam}`);
105
+ }
106
+ return null;
107
+ };
108
+
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9yb3V0ZVV0aWxzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtGbHV4fSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7T3V0bGV0LCByZWRpcmVjdH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHtBdXRoUm91dGV9IGZyb20gJy4uL2NvbXBvbmVudHMvQXV0aFJvdXRlL0F1dGhSb3V0ZS5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2FwcENvbmZpZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtSb3V0ZU9iamVjdH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBEZWZpbmUgYSB0eXBlIGZvciBvdXIgY3VzdG9tIHJvdXRlIG9iamVjdHNcbmV4cG9ydCB0eXBlIEN1c3RvbVJvdXRlUHJvcHMgPSBSb3V0ZU9iamVjdCAmIHtcbiAgcmVhZG9ubHkgYW5hbHl0aWNzPzoge1xuICAgIHJlYWRvbmx5IHJvdXRlPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHZpZXdJZDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBwcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSByb3V0ZXM/OiBDdXN0b21Sb3V0ZVByb3BzW107XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJvdXRlcyA9IChyb3V0ZXM6IEN1c3RvbVJvdXRlUHJvcHNbXSA9IFtdLCBwYXJlbnRQYXRoID0gJycpOiBSb3V0ZU9iamVjdFtdID0+IHJvdXRlcy5tYXAoKHJvdXRlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbmFseXRpY3MsXG4gICAgYXV0aGVudGljYXRlLFxuICAgIGVsZW1lbnQsXG4gICAgcHJvcHMsXG4gICAgLi4uc3RhbmRhcmRSb3V0ZVByb3BzXG4gIH0gPSByb3V0ZTtcblxuICBjb25zdCBuZXN0ZWRSb3V0ZXMgPSAocm91dGUgYXMgYW55KS5yb3V0ZXMgfHwgKHJvdXRlIGFzIGFueSkuY2hpbGRyZW47XG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gdHlwZW9mIHN0YW5kYXJkUm91dGVQcm9wcy5wYXRoID09PSAnc3RyaW5nJ1xuICAgID8gc3RhbmRhcmRSb3V0ZVByb3BzLnBhdGgucmVwbGFjZSgvXlxcLy8sICcnKVxuICAgIDogJyc7XG4gIGNvbnN0IGZ1bGxQYXRoID0gcGFyZW50UGF0aCA/IChwYXJlbnRQYXRoICsgKGN1cnJlbnRQYXRoID8gYC8ke2N1cnJlbnRQYXRofWAgOiAnJykpIDogY3VycmVudFBhdGg7XG4gIGNvbnN0IGF1dGhSb3V0ZSA9IChDb25maWcuZ2V0KCdhdXRoUm91dGUnKSBhcyBzdHJpbmcpIHx8ICcvc2lnbkluJztcbiAgbGV0IHJvdXRlRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgaWYoUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByb3V0ZUVsZW1lbnQgPSBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwge3JvdXRlfSBhcyBhbnkpO1xuICB9IGVsc2UgaWYodHlwZW9mIGVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHwgKFxuICAgIGVsZW1lbnQgIT09IG51bGxcbiAgICAmJiB0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCdcbiAgICAmJiAnJCR0eXBlb2YnIGluIGVsZW1lbnRcbiAgICAmJiBlbGVtZW50LiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJylcbiAgKSkge1xuICAgIHJvdXRlRWxlbWVudCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCBhcyBhbnksIHtyb3V0ZX0pO1xuICB9XG5cbiAgbGV0IGF1dGhGbGFnID0gYXV0aGVudGljYXRlO1xuXG4gIGlmKGF1dGhGbGFnID09PSB1bmRlZmluZWQgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBjb25zdCBlbGVtUHJvcHM6IGFueSA9IChlbGVtZW50IGFzIFJlYWN0LlJlYWN0RWxlbWVudCkucHJvcHM7XG4gICAgYXV0aEZsYWcgPSBCb29sZWFuKGVsZW1Qcm9wcyAmJiAoZWxlbVByb3BzLmF1dGhlbnRpY2F0ZSB8fCAoZWxlbVByb3BzLnJvdXRlICYmIGVsZW1Qcm9wcy5yb3V0ZS5hdXRoZW50aWNhdGUpKSk7XG4gIH1cblxuICBpZihhdXRoRmxhZykge1xuICAgIGlmKCFyb3V0ZUVsZW1lbnQpIHtcbiAgICAgIHJvdXRlRWxlbWVudCA9IDxBdXRoUm91dGU+PE91dGxldC8+PC9BdXRoUm91dGU+O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZUVsZW1lbnQgPSA8QXV0aFJvdXRlPntyb3V0ZUVsZW1lbnR9PC9BdXRoUm91dGU+O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDaGlsZHJlbiA9IG5lc3RlZFJvdXRlcz8ubGVuZ3RoXG4gICAgPyBuZXN0ZWRSb3V0ZXMubWFwKChjaGlsZCkgPT4ge1xuICAgICAgbGV0IGNoaWxkUGF0aCA9IHR5cGVvZiBjaGlsZC5wYXRoID09PSAnc3RyaW5nJyA/IGNoaWxkLnBhdGgucmVwbGFjZSgvXlxcLyovLCAnJykgOiBjaGlsZC5wYXRoO1xuXG4gICAgICBpZihmdWxsUGF0aCAmJiB0eXBlb2YgY2hpbGRQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgJHtmdWxsUGF0aH0vYDtcbiAgICAgICAgaWYoY2hpbGRQYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICAgIGNoaWxkUGF0aCA9IGNoaWxkUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3ByZWZpeH1gKSwgJycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNoaWxkLFxuICAgICAgICBwYXRoOiBjaGlsZFBhdGhcbiAgICAgIH07XG4gICAgfSlcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBsb2FkZXIgPSAocm91dGUgYXMgYW55KS5sb2FkZXIgfHwgKGF1dGhGbGFnID8gbWFrZVJlcXVpcmVBdXRoTG9hZGVyKGF1dGhSb3V0ZSkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBoYW5kbGUgPSBhbmFseXRpY3MgPyB7Li4uKHN0YW5kYXJkUm91dGVQcm9wcy5oYW5kbGUgfHwge30pLCBhbmFseXRpY3N9IDogc3RhbmRhcmRSb3V0ZVByb3BzLmhhbmRsZTtcblxuICBpZihub3JtYWxpemVkQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGFuZGFyZFJvdXRlUHJvcHMsXG4gICAgICBhdXRoZW50aWNhdGU6IGF1dGhGbGFnLFxuICAgICAgY2hpbGRyZW46IHBhcnNlUm91dGVzKG5vcm1hbGl6ZWRDaGlsZHJlbiBhcyBDdXN0b21Sb3V0ZVByb3BzW10sIGZ1bGxQYXRoKSxcbiAgICAgIGVsZW1lbnQ6IHJvdXRlRWxlbWVudCxcbiAgICAgIGhhbmRsZSxcbiAgICAgIGxvYWRlcixcbiAgICAgIHBhdGg6IGN1cnJlbnRQYXRoIHx8IHN0YW5kYXJkUm91dGVQcm9wcy5wYXRoXG4gICAgfSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YW5kYXJkUm91dGVQcm9wcyxcbiAgICBhdXRoZW50aWNhdGU6IGF1dGhGbGFnLFxuICAgIGVsZW1lbnQ6IHJvdXRlRWxlbWVudCxcbiAgICBoYW5kbGUsXG4gICAgbG9hZGVyLFxuICAgIHBhdGg6IGN1cnJlbnRQYXRoIHx8IHN0YW5kYXJkUm91dGVQcm9wcy5wYXRoXG4gIH0gYXMgYW55O1xufSk7XG5cbmNvbnN0IG1ha2VSZXF1aXJlQXV0aExvYWRlciA9IChhdXRoUm91dGU6IHN0cmluZyk6IGFueSA9PiBhc3luYyAoe3JlcXVlc3R9OiB7cmVxdWVzdDogUmVxdWVzdH0pID0+IHtcbiAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBpZihGbHV4ICYmIHR5cGVvZiBGbHV4LmdldFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0b2tlbiA9IEZsdXguZ2V0U3RhdGUoWyd1c2VyJywgJ3Nlc3Npb24nLCAndG9rZW4nXSkgYXMgc3RyaW5nIHx8IEZsdXguZ2V0U3RhdGUoWydzZXNzaW9uJywgJ3Rva2VuJ10pIGFzIHN0cmluZyB8fCBGbHV4LmdldFN0YXRlKFsndXNlcicsICd0b2tlbiddKSBhcyBzdHJpbmc7XG4gICAgfVxuICB9IGNhdGNoKF9lKSB7XG4gICAgLy8gaWdub3JlIGVycm9ycyBhY2Nlc3NpbmcgRmx1eFxuICB9XG5cbiAgY29uc3QgaXNBdXRoRm4gPSBDb25maWcuZ2V0KCdpc0F1dGgnLCAoKSA9PiBmYWxzZSkgYXMgKCkgPT4gYm9vbGVhbjtcbiAgY29uc3Qgc2Vzc2lvbkF1dGggPSBCb29sZWFuKHRva2VuKSB8fCAoaXNBdXRoRm4gJiYgaXNBdXRoRm4oKSk7XG5cbiAgaWYoIXNlc3Npb25BdXRoKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgY29uc3QgcmVkaXJlY3RQYXJhbSA9IGVuY29kZVVSSUNvbXBvbmVudChgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofSR7dXJsLmhhc2h9YCk7XG5cbiAgICByZXR1cm4gcmVkaXJlY3QoYCR7YXV0aFJvdXRlfT9yZWRpcmVjdD0ke3JlZGlyZWN0UGFyYW19YCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4iXSwibmFtZXMiOlsiRmx1eCIsIlJlYWN0IiwiT3V0bGV0IiwicmVkaXJlY3QiLCJBdXRoUm91dGUiLCJDb25maWciLCJwYXJzZVJvdXRlcyIsInJvdXRlcyIsInBhcmVudFBhdGgiLCJtYXAiLCJyb3V0ZSIsImFuYWx5dGljcyIsImF1dGhlbnRpY2F0ZSIsImVsZW1lbnQiLCJwcm9wcyIsInN0YW5kYXJkUm91dGVQcm9wcyIsIm5lc3RlZFJvdXRlcyIsImNoaWxkcmVuIiwiY3VycmVudFBhdGgiLCJwYXRoIiwicmVwbGFjZSIsImZ1bGxQYXRoIiwiYXV0aFJvdXRlIiwiZ2V0Iiwicm91dGVFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCIkJHR5cGVvZiIsIlN5bWJvbCIsImZvciIsImNyZWF0ZUVsZW1lbnQiLCJhdXRoRmxhZyIsInVuZGVmaW5lZCIsImVsZW1Qcm9wcyIsIkJvb2xlYW4iLCJub3JtYWxpemVkQ2hpbGRyZW4iLCJsZW5ndGgiLCJjaGlsZCIsImNoaWxkUGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJSZWdFeHAiLCJsb2FkZXIiLCJtYWtlUmVxdWlyZUF1dGhMb2FkZXIiLCJoYW5kbGUiLCJyZXF1ZXN0IiwidG9rZW4iLCJnZXRTdGF0ZSIsIl9lIiwiaXNBdXRoRm4iLCJzZXNzaW9uQXV0aCIsInVybCIsIlVSTCIsInJlZGlyZWN0UGFyYW0iLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giXSwibWFwcGluZ3MiOiI7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxJQUFJLFFBQU8sa0JBQWtCO0FBQ3JDLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxNQUFNLEVBQUVDLFFBQVEsUUFBTyxlQUFlO0FBRTlDLFNBQVFDLFNBQVMsUUFBTyx1Q0FBdUM7QUFDL0QsU0FBUUMsTUFBTSxRQUFPLHlCQUF5QjtBQWlCOUMsT0FBTyxNQUFNQyxjQUFjLENBQUNDLFNBQTZCLEVBQUUsRUFBRUMsYUFBYSxFQUFFLEdBQW9CRCxPQUFPRSxHQUFHLENBQUMsQ0FBQ0M7UUFDMUcsTUFBTSxFQUNKQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsT0FBTyxFQUNQQyxLQUFLLEVBQ0wsR0FBR0Msb0JBQ0osR0FBR0w7UUFFSixNQUFNTSxlQUFlLEFBQUNOLE1BQWNILE1BQU0sSUFBSSxBQUFDRyxNQUFjTyxRQUFRO1FBQ3JFLE1BQU1DLGNBQWMsT0FBT0gsbUJBQW1CSSxJQUFJLEtBQUssV0FDbkRKLG1CQUFtQkksSUFBSSxDQUFDQyxPQUFPLENBQUMsT0FBTyxNQUN2QztRQUNKLE1BQU1DLFdBQVdiLGFBQWNBLGFBQWNVLENBQUFBLGNBQWMsQ0FBQyxDQUFDLEVBQUVBLGFBQWEsR0FBRyxFQUFDLElBQU1BO1FBQ3RGLE1BQU1JLFlBQVksQUFBQ2pCLE9BQU9rQixHQUFHLENBQUMsZ0JBQTJCO1FBQ3pELElBQUlDLGVBQWVYO1FBRW5CLGtCQUFHWixNQUFNd0IsY0FBYyxDQUFDWixVQUFVO1lBQ2hDVyw2QkFBZXZCLE1BQU15QixZQUFZLENBQUNiLFNBQVM7Z0JBQUNIO1lBQUs7UUFDbkQsT0FBTyxJQUFHLE9BQU9HLFlBQVksY0FDM0JBLFlBQVksUUFDVCxPQUFPQSxZQUFZLFlBQ25CLGNBQWNBLFdBQ2RBLFFBQVFjLFFBQVEsS0FBS0MsT0FBT0MsR0FBRyxDQUFDLGVBQ2xDO1lBQ0RMLDZCQUFldkIsTUFBTTZCLGFBQWEsQ0FBQ2pCLFNBQWdCO2dCQUFDSDtZQUFLO1FBQzNEO1FBRUEsSUFBSXFCLFdBQVduQjtRQUVmLElBQUdtQixhQUFhQywyQkFBYS9CLE1BQU13QixjQUFjLENBQUNaLFVBQVU7WUFDMUQsTUFBTW9CLFlBQWlCLEFBQUNwQixRQUErQkMsS0FBSztZQUM1RGlCLFdBQVdHLFFBQVFELGFBQWNBLENBQUFBLFVBQVVyQixZQUFZLElBQUtxQixVQUFVdkIsS0FBSyxJQUFJdUIsVUFBVXZCLEtBQUssQ0FBQ0UsWUFBWTtRQUM3RztRQUVBLElBQUdtQixVQUFVO1lBQ1gsSUFBRyxDQUFDUCxjQUFjO2dCQUNoQkEsNkJBQWUsS0FBQ3BCOzhCQUFVLGNBQUEsS0FBQ0Y7O1lBQzdCLE9BQU87Z0JBQ0xzQiw2QkFBZSxLQUFDcEI7OEJBQVdvQjs7WUFDN0I7UUFDRjtRQUVBLE1BQU1XLHFCQUFxQm5CLGNBQWNvQixTQUNyQ3BCLGFBQWFQLEdBQUcsQ0FBQyxDQUFDNEI7WUFDbEIsSUFBSUMsWUFBWSxPQUFPRCxNQUFNbEIsSUFBSSxLQUFLLFdBQVdrQixNQUFNbEIsSUFBSSxDQUFDQyxPQUFPLENBQUMsUUFBUSxNQUFNaUIsTUFBTWxCLElBQUk7WUFFNUYsSUFBR0UsWUFBWSxPQUFPaUIsY0FBYyxVQUFVO2dCQUM1QyxNQUFNQyxTQUFTLEdBQUdsQixTQUFTLENBQUMsQ0FBQztnQkFDN0IsSUFBR2lCLFVBQVVFLFVBQVUsQ0FBQ0QsU0FBUztvQkFDL0JELFlBQVlBLFVBQVVsQixPQUFPLENBQUMsSUFBSXFCLE9BQU8sQ0FBQyxDQUFDLEVBQUVGLFFBQVEsR0FBRztnQkFDMUQ7WUFDRjtZQUVBLE9BQU87Z0JBQ0wsR0FBR0YsS0FBSztnQkFDUmxCLE1BQU1tQjtZQUNSO1FBQ0YsS0FDRU47UUFFSixNQUFNVSxTQUFTLEFBQUNoQyxNQUFjZ0MsTUFBTSxJQUFLWCxDQUFBQSxXQUFXWSxzQkFBc0JyQixhQUFhVSxTQUFRO1FBQy9GLE1BQU1ZLFNBQVNqQyxZQUFZO1lBQUMsR0FBSUksbUJBQW1CNkIsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUFHakM7UUFBUyxJQUFJSSxtQkFBbUI2QixNQUFNO1FBRXhHLElBQUdULG9CQUFvQkMsUUFBUTtZQUM3QixPQUFPO2dCQUNMLEdBQUdyQixrQkFBa0I7Z0JBQ3JCSCxjQUFjbUI7Z0JBQ2RkLFVBQVVYLFlBQVk2QixvQkFBMENkO2dCQUNoRVIsU0FBU1c7Z0JBQ1RvQjtnQkFDQUY7Z0JBQ0F2QixNQUFNRCxlQUFlSCxtQkFBbUJJLElBQUk7WUFDOUM7UUFDRjtRQUVBLE9BQU87WUFDTCxHQUFHSixrQkFBa0I7WUFDckJILGNBQWNtQjtZQUNkbEIsU0FBU1c7WUFDVG9CO1lBQ0FGO1lBQ0F2QixNQUFNRCxlQUFlSCxtQkFBbUJJLElBQUk7UUFDOUM7SUFDRixHQUFHO0FBRUgsTUFBTXdCLHdCQUF3QixDQUFDckIsWUFBMkIsT0FBTyxFQUFDdUIsT0FBTyxFQUFxQjtRQUM1RixJQUFJQztRQUVKLElBQUk7WUFDRixJQUFHOUMsUUFBUSxPQUFPQSxLQUFLK0MsUUFBUSxLQUFLLFlBQVk7Z0JBQzlDRCxRQUFROUMsS0FBSytDLFFBQVEsQ0FBQztvQkFBQztvQkFBUTtvQkFBVztpQkFBUSxLQUFlL0MsS0FBSytDLFFBQVEsQ0FBQztvQkFBQztvQkFBVztpQkFBUSxLQUFlL0MsS0FBSytDLFFBQVEsQ0FBQztvQkFBQztvQkFBUTtpQkFBUTtZQUNuSjtRQUNGLEVBQUUsT0FBTUMsSUFBSTtRQUNWLCtCQUErQjtRQUNqQztRQUVBLE1BQU1DLFdBQVc1QyxPQUFPa0IsR0FBRyxDQUFDLFVBQVUsSUFBTTtRQUM1QyxNQUFNMkIsY0FBY2hCLFFBQVFZLFVBQVdHLFlBQVlBO1FBRW5ELElBQUcsQ0FBQ0MsYUFBYTtZQUNmLE1BQU1DLE1BQU0sSUFBSUMsSUFBSVAsUUFBUU0sR0FBRztZQUMvQixNQUFNRSxnQkFBZ0JDLG1CQUFtQixHQUFHSCxJQUFJSSxRQUFRLEdBQUdKLElBQUlLLE1BQU0sR0FBR0wsSUFBSU0sSUFBSSxFQUFFO1lBRWxGLE9BQU90RCxTQUFTLEdBQUdtQixVQUFVLFVBQVUsRUFBRStCLGVBQWU7UUFDMUQ7UUFFQSxPQUFPO0lBQ1QifQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ export type GothamSize = 'sm' | 'md' | 'lg';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ export { };
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9zaXplVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdvdGhhbVNpemUgPSAnc20nIHwgJ21kJyB8ICdsZyc7Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFdBQTRDIn0=
@@ -0,0 +1,6 @@
1
+ type StoryContext = {
2
+ readonly canvasElement: HTMLElement;
3
+ };
4
+ export declare const interactWithCanvas: ({ canvasElement }: StoryContext) => Promise<void>;
5
+ export declare const focusCanvas: ({ canvasElement }: StoryContext) => Promise<void>;
6
+ export {};
@@ -0,0 +1,45 @@
1
+ const preventAnchorNavigation = (element)=>{
2
+ const anchor = element.closest('a[href]');
3
+ if (anchor instanceof HTMLAnchorElement) {
4
+ anchor.addEventListener('click', (event)=>event.preventDefault(), {
5
+ capture: true,
6
+ once: true
7
+ });
8
+ }
9
+ };
10
+ const clearCanvasFocus = (canvasElement)=>{
11
+ const { activeElement } = canvasElement.ownerDocument;
12
+ if (activeElement instanceof HTMLElement && canvasElement.contains(activeElement)) {
13
+ activeElement.blur();
14
+ }
15
+ };
16
+ export const interactWithCanvas = async ({ canvasElement })=>{
17
+ await Promise.resolve();
18
+ const field = canvasElement.querySelector('input:not([type="file"]), textarea');
19
+ if (field && !field.disabled && !field.readOnly) {
20
+ field.focus();
21
+ field.value = field instanceof HTMLTextAreaElement ? 'Story interaction note' : 'Story interaction';
22
+ field.dispatchEvent(new Event('input', {
23
+ bubbles: true
24
+ }));
25
+ field.dispatchEvent(new Event('change', {
26
+ bubbles: true
27
+ }));
28
+ field.blur();
29
+ }
30
+ const clickable = canvasElement.querySelector('button:not([disabled]), a[href], [role="button"]');
31
+ if (clickable) {
32
+ clickable.focus();
33
+ preventAnchorNavigation(clickable);
34
+ clickable.click();
35
+ clearCanvasFocus(canvasElement);
36
+ }
37
+ };
38
+ export const focusCanvas = async ({ canvasElement })=>{
39
+ await Promise.resolve();
40
+ const focusable = canvasElement.querySelector('button, a[href], input, textarea, [tabindex]');
41
+ focusable?.focus();
42
+ clearCanvasFocus(canvasElement);
43
+ };
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9zdG9yeUludGVyYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFN0b3J5Q29udGV4dCA9IHtcbiAgcmVhZG9ubHkgY2FudmFzRWxlbWVudDogSFRNTEVsZW1lbnQ7XG59O1xuXG5jb25zdCBwcmV2ZW50QW5jaG9yTmF2aWdhdGlvbiA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICBjb25zdCBhbmNob3IgPSBlbGVtZW50LmNsb3Nlc3QoJ2FbaHJlZl0nKTtcblxuICBpZihhbmNob3IgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuICAgIGFuY2hvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSwge2NhcHR1cmU6IHRydWUsIG9uY2U6IHRydWV9KTtcbiAgfVxufTtcblxuY29uc3QgY2xlYXJDYW52YXNGb2N1cyA9IChjYW52YXNFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICBjb25zdCB7YWN0aXZlRWxlbWVudH0gPSBjYW52YXNFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbiAgaWYoYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGNhbnZhc0VsZW1lbnQuY29udGFpbnMoYWN0aXZlRWxlbWVudCkpIHtcbiAgICBhY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGludGVyYWN0V2l0aENhbnZhcyA9IGFzeW5jICh7Y2FudmFzRWxlbWVudH06IFN0b3J5Q29udGV4dCkgPT4ge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcblxuICBjb25zdCBmaWVsZCA9IGNhbnZhc0VsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KFt0eXBlPVwiZmlsZVwiXSksIHRleHRhcmVhJykgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuXG4gIGlmKGZpZWxkICYmICFmaWVsZC5kaXNhYmxlZCAmJiAhZmllbGQucmVhZE9ubHkpIHtcbiAgICBmaWVsZC5mb2N1cygpO1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50ID8gJ1N0b3J5IGludGVyYWN0aW9uIG5vdGUnIDogJ1N0b3J5IGludGVyYWN0aW9uJztcbiAgICBmaWVsZC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7YnViYmxlczogdHJ1ZX0pKTtcbiAgICBmaWVsZC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywge2J1YmJsZXM6IHRydWV9KSk7XG4gICAgZmllbGQuYmx1cigpO1xuICB9XG5cbiAgY29uc3QgY2xpY2thYmxlID0gY2FudmFzRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b246bm90KFtkaXNhYmxlZF0pLCBhW2hyZWZdLCBbcm9sZT1cImJ1dHRvblwiXScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICBpZihjbGlja2FibGUpIHtcbiAgICBjbGlja2FibGUuZm9jdXMoKTtcbiAgICBwcmV2ZW50QW5jaG9yTmF2aWdhdGlvbihjbGlja2FibGUpO1xuICAgIGNsaWNrYWJsZS5jbGljaygpO1xuICAgIGNsZWFyQ2FudmFzRm9jdXMoY2FudmFzRWxlbWVudCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c0NhbnZhcyA9IGFzeW5jICh7Y2FudmFzRWxlbWVudH06IFN0b3J5Q29udGV4dCkgPT4ge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcblxuICBjb25zdCBmb2N1c2FibGUgPSBjYW52YXNFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbiwgYVtocmVmXSwgaW5wdXQsIHRleHRhcmVhLCBbdGFiaW5kZXhdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICBmb2N1c2FibGU/LmZvY3VzKCk7XG4gIGNsZWFyQ2FudmFzRm9jdXMoY2FudmFzRWxlbWVudCk7XG59O1xuIl0sIm5hbWVzIjpbInByZXZlbnRBbmNob3JOYXZpZ2F0aW9uIiwiZWxlbWVudCIsImFuY2hvciIsImNsb3Nlc3QiLCJIVE1MQW5jaG9yRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiY2FwdHVyZSIsIm9uY2UiLCJjbGVhckNhbnZhc0ZvY3VzIiwiY2FudmFzRWxlbWVudCIsImFjdGl2ZUVsZW1lbnQiLCJvd25lckRvY3VtZW50IiwiSFRNTEVsZW1lbnQiLCJjb250YWlucyIsImJsdXIiLCJpbnRlcmFjdFdpdGhDYW52YXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZpZWxkIiwicXVlcnlTZWxlY3RvciIsImRpc2FibGVkIiwicmVhZE9ubHkiLCJmb2N1cyIsInZhbHVlIiwiSFRNTFRleHRBcmVhRWxlbWVudCIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsImJ1YmJsZXMiLCJjbGlja2FibGUiLCJjbGljayIsImZvY3VzQ2FudmFzIiwiZm9jdXNhYmxlIl0sIm1hcHBpbmdzIjoiQUFJQSxNQUFNQSwwQkFBMEIsQ0FBQ0M7SUFDL0IsTUFBTUMsU0FBU0QsUUFBUUUsT0FBTyxDQUFDO0lBRS9CLElBQUdELGtCQUFrQkUsbUJBQW1CO1FBQ3RDRixPQUFPRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUNDLFFBQVVBLE1BQU1DLGNBQWMsSUFBSTtZQUFDQyxTQUFTO1lBQU1DLE1BQU07UUFBSTtJQUNoRztBQUNGO0FBRUEsTUFBTUMsbUJBQW1CLENBQUNDO0lBQ3hCLE1BQU0sRUFBQ0MsYUFBYSxFQUFDLEdBQUdELGNBQWNFLGFBQWE7SUFFbkQsSUFBR0QseUJBQXlCRSxlQUFlSCxjQUFjSSxRQUFRLENBQUNILGdCQUFnQjtRQUNoRkEsY0FBY0ksSUFBSTtJQUNwQjtBQUNGO0FBRUEsT0FBTyxNQUFNQyxxQkFBcUIsT0FBTyxFQUFDTixhQUFhLEVBQWU7SUFDcEUsTUFBTU8sUUFBUUMsT0FBTztJQUVyQixNQUFNQyxRQUFRVCxjQUFjVSxhQUFhLENBQUM7SUFFMUMsSUFBR0QsU0FBUyxDQUFDQSxNQUFNRSxRQUFRLElBQUksQ0FBQ0YsTUFBTUcsUUFBUSxFQUFFO1FBQzlDSCxNQUFNSSxLQUFLO1FBQ1hKLE1BQU1LLEtBQUssR0FBR0wsaUJBQWlCTSxzQkFBc0IsMkJBQTJCO1FBQ2hGTixNQUFNTyxhQUFhLENBQUMsSUFBSUMsTUFBTSxTQUFTO1lBQUNDLFNBQVM7UUFBSTtRQUNyRFQsTUFBTU8sYUFBYSxDQUFDLElBQUlDLE1BQU0sVUFBVTtZQUFDQyxTQUFTO1FBQUk7UUFDdERULE1BQU1KLElBQUk7SUFDWjtJQUVBLE1BQU1jLFlBQVluQixjQUFjVSxhQUFhLENBQUM7SUFFOUMsSUFBR1MsV0FBVztRQUNaQSxVQUFVTixLQUFLO1FBQ2Z4Qix3QkFBd0I4QjtRQUN4QkEsVUFBVUMsS0FBSztRQUNmckIsaUJBQWlCQztJQUNuQjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1xQixjQUFjLE9BQU8sRUFBQ3JCLGFBQWEsRUFBZTtJQUM3RCxNQUFNTyxRQUFRQyxPQUFPO0lBRXJCLE1BQU1jLFlBQVl0QixjQUFjVSxhQUFhLENBQUM7SUFDOUNZLFdBQVdUO0lBQ1hkLGlCQUFpQkM7QUFDbkIsRUFBRSJ9
@@ -0,0 +1 @@
1
+ export declare const gothamDecorator: (Story: any) => import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
4
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
5
+ */ import { GothamProvider } from '../views/Gotham/GothamProvider.js';
6
+ export const gothamDecorator = (Story)=>/*#__PURE__*/ _jsx(GothamProvider, {
7
+ config: {},
8
+ children: /*#__PURE__*/ _jsx(Story, {})
9
+ });
10
+
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9zdG9yeVV0aWxzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtHb3RoYW1Qcm92aWRlcn0gZnJvbSAnLi4vdmlld3MvR290aGFtL0dvdGhhbVByb3ZpZGVyLmpzJztcblxuZXhwb3J0IGNvbnN0IGdvdGhhbURlY29yYXRvciA9IChTdG9yeSkgPT4gKFxuICA8R290aGFtUHJvdmlkZXIgY29uZmlnPXt7fX0+XG4gICAgPFN0b3J5IC8+XG4gIDwvR290aGFtUHJvdmlkZXI+XG4pO1xuIl0sIm5hbWVzIjpbIkdvdGhhbVByb3ZpZGVyIiwiZ290aGFtRGVjb3JhdG9yIiwiU3RvcnkiLCJjb25maWciXSwibWFwcGluZ3MiOiI7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxjQUFjLFFBQU8sb0NBQW9DO0FBRWpFLE9BQU8sTUFBTUMsa0JBQWtCLENBQUNDLHNCQUM5QixLQUFDRjtRQUFlRyxRQUFRLENBQUM7a0JBQ3ZCLGNBQUEsS0FBQ0Q7T0FFSCJ9
@@ -0,0 +1,3 @@
1
+ export declare const getTestElement: (name: string, index?: number) => HTMLElement;
2
+ export declare const renderWithProvider: any;
3
+ export declare const renderWithForm: any;
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
4
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
5
+ */ import { Flux } from '@nlabs/arkhamjs';
6
+ import { FluxProvider } from '@nlabs/arkhamjs-utils-react';
7
+ import { render, screen, waitFor } from '@nlabs/lex/test-react';
8
+ import { MemoryRouter } from 'react-router';
9
+ import { Form } from '../components/Form/Form.js';
10
+ export const getTestElement = (name, index = 0)=>screen.queryAllByTestId(name)[index];
11
+ export const renderWithProvider = async (Element, props = {})=>{
12
+ const { mockRoute = '/', ...restProps } = props;
13
+ Flux.init();
14
+ jest.useFakeTimers();
15
+ const wrapper = render(/*#__PURE__*/ _jsx(FluxProvider, {
16
+ flux: Flux,
17
+ children: /*#__PURE__*/ _jsx(MemoryRouter, {
18
+ initialEntries: [
19
+ mockRoute
20
+ ],
21
+ initialIndex: 0,
22
+ children: /*#__PURE__*/ _jsx(Element, {
23
+ ...restProps
24
+ })
25
+ })
26
+ }));
27
+ await waitFor(()=>{
28
+ jest.runAllImmediates();
29
+ });
30
+ return wrapper;
31
+ };
32
+ export const renderWithForm = async (Element, props = {})=>{
33
+ const { mocks, onSubmit = ()=>{}, ...restProps } = props;
34
+ jest.useFakeTimers();
35
+ const wrapper = render(/*#__PURE__*/ _jsx(FluxProvider, {
36
+ flux: Flux,
37
+ children: /*#__PURE__*/ _jsx(MemoryRouter, {
38
+ initialEntries: [
39
+ '/'
40
+ ],
41
+ initialIndex: 0,
42
+ children: /*#__PURE__*/ _jsx(Form, {
43
+ onSubmit: onSubmit,
44
+ children: /*#__PURE__*/ _jsx(Element, {
45
+ ...restProps
46
+ })
47
+ })
48
+ })
49
+ }));
50
+ await waitFor(()=>{
51
+ jest.runAllImmediates();
52
+ });
53
+ return wrapper;
54
+ };
55
+
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy90ZXN0VXRpbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0ZsdXh9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQge0ZsdXhQcm92aWRlcn0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzLXV0aWxzLXJlYWN0JztcbmltcG9ydCB7cmVuZGVyLCBzY3JlZW4sIHdhaXRGb3J9IGZyb20gJ0BubGFicy9sZXgvdGVzdC1yZWFjdCc7XG5pbXBvcnQge01lbW9yeVJvdXRlcn0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHtGb3JtfSBmcm9tICcuLi9jb21wb25lbnRzL0Zvcm0vRm9ybS5qcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRUZXN0RWxlbWVudCA9IChuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIgPSAwKSA9PiBzY3JlZW4ucXVlcnlBbGxCeVRlc3RJZChuYW1lKVtpbmRleF07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJXaXRoUHJvdmlkZXI6IGFueSA9IGFzeW5jIChFbGVtZW50LCBwcm9wcyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBtb2NrUm91dGUgPSAnLycsXG4gICAgLi4ucmVzdFByb3BzXG4gIH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcHJvcHM7XG4gIEZsdXguaW5pdCgpO1xuICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcblxuICBjb25zdCB3cmFwcGVyID0gcmVuZGVyKFxuICAgIDxGbHV4UHJvdmlkZXIgZmx1eD17Rmx1eH0gPlxuICAgICAgPE1lbW9yeVJvdXRlciBpbml0aWFsRW50cmllcz17W21vY2tSb3V0ZSBhcyBzdHJpbmddfSBpbml0aWFsSW5kZXg9ezB9ID5cbiAgICAgICAgPEVsZW1lbnQgey4uLnJlc3RQcm9wc30gLz5cbiAgICAgIDwvTWVtb3J5Um91dGVyPlxuICAgIDwvRmx1eFByb3ZpZGVyPlxuICApO1xuXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgIGplc3QucnVuQWxsSW1tZWRpYXRlcygpO1xuICB9KTtcblxuICByZXR1cm4gd3JhcHBlcjtcbn07XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBtb2Nrcz86IHVua25vd247XG4gIG9uU3VibWl0PzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgcmVuZGVyV2l0aEZvcm06IGFueSA9IGFzeW5jIChFbGVtZW50LCBwcm9wczogUmVuZGVyRm9ybVByb3BzID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIG1vY2tzLFxuICAgIG9uU3VibWl0ID0gKCkgPT4ge30sXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wcztcblxuICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcblxuICBjb25zdCB3cmFwcGVyID0gcmVuZGVyKFxuICAgIDxGbHV4UHJvdmlkZXIgZmx1eD17Rmx1eH0+XG4gICAgICA8TWVtb3J5Um91dGVyIGluaXRpYWxFbnRyaWVzPXtbJy8nXX0gaW5pdGlhbEluZGV4PXswfT5cbiAgICAgICAgPEZvcm0gb25TdWJtaXQ9e29uU3VibWl0fT5cbiAgICAgICAgICA8RWxlbWVudCB7Li4ucmVzdFByb3BzfSAvPlxuICAgICAgICA8L0Zvcm0+XG4gICAgICA8L01lbW9yeVJvdXRlcj5cbiAgICA8L0ZsdXhQcm92aWRlcj5cbiAgKTtcblxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICBqZXN0LnJ1bkFsbEltbWVkaWF0ZXMoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdyYXBwZXI7XG59O1xuIl0sIm5hbWVzIjpbIkZsdXgiLCJGbHV4UHJvdmlkZXIiLCJyZW5kZXIiLCJzY3JlZW4iLCJ3YWl0Rm9yIiwiTWVtb3J5Um91dGVyIiwiRm9ybSIsImdldFRlc3RFbGVtZW50IiwibmFtZSIsImluZGV4IiwicXVlcnlBbGxCeVRlc3RJZCIsInJlbmRlcldpdGhQcm92aWRlciIsIkVsZW1lbnQiLCJwcm9wcyIsIm1vY2tSb3V0ZSIsInJlc3RQcm9wcyIsImluaXQiLCJqZXN0IiwidXNlRmFrZVRpbWVycyIsIndyYXBwZXIiLCJmbHV4IiwiaW5pdGlhbEVudHJpZXMiLCJpbml0aWFsSW5kZXgiLCJydW5BbGxJbW1lZGlhdGVzIiwicmVuZGVyV2l0aEZvcm0iLCJtb2NrcyIsIm9uU3VibWl0Il0sIm1hcHBpbmdzIjoiO0FBQUE7OztDQUdDLEdBQ0QsU0FBUUEsSUFBSSxRQUFPLGtCQUFrQjtBQUNyQyxTQUFRQyxZQUFZLFFBQU8sOEJBQThCO0FBQ3pELFNBQVFDLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxPQUFPLFFBQU8sd0JBQXdCO0FBQzlELFNBQVFDLFlBQVksUUFBTyxlQUFlO0FBRTFDLFNBQVFDLElBQUksUUFBTyw2QkFBNkI7QUFFaEQsT0FBTyxNQUFNQyxpQkFBaUIsQ0FBQ0MsTUFBY0MsUUFBZ0IsQ0FBQyxHQUFLTixPQUFPTyxnQkFBZ0IsQ0FBQ0YsS0FBSyxDQUFDQyxNQUFNLENBQUM7QUFFeEcsT0FBTyxNQUFNRSxxQkFBMEIsT0FBT0MsU0FBU0MsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxFQUNKQyxZQUFZLEdBQUcsRUFDZixHQUFHQyxXQUNKLEdBQTRCRjtJQUM3QmIsS0FBS2dCLElBQUk7SUFDVEMsS0FBS0MsYUFBYTtJQUVsQixNQUFNQyxVQUFVakIscUJBQ2QsS0FBQ0Q7UUFBYW1CLE1BQU1wQjtrQkFDbEIsY0FBQSxLQUFDSztZQUFhZ0IsZ0JBQWdCO2dCQUFDUDthQUFvQjtZQUFFUSxjQUFjO3NCQUNqRSxjQUFBLEtBQUNWO2dCQUFTLEdBQUdHLFNBQVM7Ozs7SUFLNUIsTUFBTVgsUUFBUTtRQUNaYSxLQUFLTSxnQkFBZ0I7SUFDdkI7SUFFQSxPQUFPSjtBQUNULEVBQUU7QUFRRixPQUFPLE1BQU1LLGlCQUFzQixPQUFPWixTQUFTQyxRQUF5QixDQUFDLENBQUM7SUFDNUUsTUFBTSxFQUNKWSxLQUFLLEVBQ0xDLFdBQVcsS0FBTyxDQUFDLEVBQ25CLEdBQUdYLFdBQ0osR0FBR0Y7SUFFSkksS0FBS0MsYUFBYTtJQUVsQixNQUFNQyxVQUFVakIscUJBQ2QsS0FBQ0Q7UUFBYW1CLE1BQU1wQjtrQkFDbEIsY0FBQSxLQUFDSztZQUFhZ0IsZ0JBQWdCO2dCQUFDO2FBQUk7WUFBRUMsY0FBYztzQkFDakQsY0FBQSxLQUFDaEI7Z0JBQUtvQixVQUFVQTswQkFDZCxjQUFBLEtBQUNkO29CQUFTLEdBQUdHLFNBQVM7Ozs7O0lBTTlCLE1BQU1YLFFBQVE7UUFDWmEsS0FBS00sZ0JBQWdCO0lBQ3ZCO0lBRUEsT0FBT0o7QUFDVCxFQUFFIn0=
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ /**
6
+ * Create a Timer
7
+ * @param {Number} delay
8
+ * @param {Function} callback
9
+ * @constructor
10
+ */
11
+ export declare class GothamTimer {
12
+ timerId: unknown;
13
+ start: number;
14
+ remaining: number;
15
+ delay: number;
16
+ callback: unknown;
17
+ constructor(delay: number, callback: unknown);
18
+ pause(): void;
19
+ resume(): void;
20
+ getTimeRemaining(): number;
21
+ }