@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,103 @@
1
+ # Notify Component
2
+
3
+ The Notify component provides a customizable notification system for displaying alerts, messages, and interactive notifications to users.
4
+
5
+ ## Features
6
+
7
+ - **Multiple Severity Levels**: Support for error, warning, info, and success notifications
8
+ - **Customizable Positioning**: Position notifications at any corner or edge of the screen
9
+ - **Auto-dismiss**: Automatically hide notifications after a configurable duration
10
+ - **Interactive Actions**: Add buttons or icon buttons for user interaction
11
+ - **Tailwind CSS Styling**: Fully styled with Tailwind CSS for easy customization
12
+
13
+ ## Usage
14
+
15
+ ```tsx
16
+ import {GothamActions} from '@actions/GothamActions';
17
+
18
+ // Basic notification
19
+ GothamActions.notify({
20
+ message: 'This is a basic notification',
21
+ autoHideDuration: 5000
22
+ });
23
+
24
+ // Notification with severity
25
+ GothamActions.notify({
26
+ message: 'Operation completed successfully',
27
+ severity: 'success'
28
+ });
29
+
30
+ // Notification with custom position
31
+ GothamActions.notify({
32
+ message: 'This appears in the top right',
33
+ anchorOrigin: {
34
+ horizontal: 'right',
35
+ vertical: 'top'
36
+ }
37
+ });
38
+
39
+ // Notification with actions
40
+ GothamActions.notify({
41
+ message: 'Would you like to undo?',
42
+ actions: [
43
+ {
44
+ label: 'Undo',
45
+ onClick: (key) => {
46
+ console.log('Undo clicked', key);
47
+ // Perform undo action
48
+ }
49
+ },
50
+ {
51
+ icon: 'close',
52
+ onClick: (key) => {
53
+ console.log('Close clicked', key);
54
+ GothamActions.notifyClose();
55
+ }
56
+ }
57
+ ]
58
+ });
59
+ ```
60
+
61
+ ## Props
62
+
63
+ The `GothamNotifyParams` interface accepts the following properties:
64
+
65
+ | Property | Type | Default | Description |
66
+ |----------|------|---------|-------------|
67
+ | `message` | ReactElement \| string | - | The content of the notification |
68
+ | `severity` | 'error' \| 'warning' \| 'info' \| 'success' | - | The severity level of the notification |
69
+ | `autoHideDuration` | number | 3000 | Time in milliseconds before automatically dismissing |
70
+ | `anchorOrigin` | { horizontal: 'left' \| 'center' \| 'right', vertical: 'top' \| 'bottom' } | { horizontal: 'left', vertical: 'bottom' } | Position of the notification |
71
+ | `actions` | GothamNotifyAction[] | [] | Array of action buttons to display |
72
+
73
+ ### GothamNotifyAction
74
+
75
+ | Property | Type | Description |
76
+ |----------|------|-------------|
77
+ | `icon` | string | Icon name to display (uses the Svg component) |
78
+ | `label` | string | Text label for the button |
79
+ | `onClick` | (key: string) => void | Callback function when the action is clicked |
80
+
81
+ ## Implementation Details
82
+
83
+ The Notify component uses:
84
+
85
+ - **Headless UI's Transition** for smooth enter/exit animations
86
+ - **Custom Button and IconButton components** built with Tailwind CSS
87
+ - **Custom Alert component** with appropriate styling for each severity level
88
+ - **ArkhamJS Flux architecture** for state management and event handling
89
+
90
+ ## Tailwind CSS Classes
91
+
92
+ The component uses the following Tailwind CSS utility classes:
93
+
94
+ - Positioning: `fixed`, `top-4`, `bottom-4`, `left-4`, `right-4`, etc.
95
+ - Layout: `flex`, `items-center`, `justify-between`, etc.
96
+ - Spacing: `p-4`, `m-4`, `space-x-2`, etc.
97
+ - Visual: `shadow-lg`, `rounded-lg`, `bg-white`, etc.
98
+ - Colors: `bg-red-500`, `bg-blue-500`, `bg-green-500`, `bg-yellow-500`, etc.
99
+ - Transitions: `transform`, `transition`, `duration-300`, etc.
100
+
101
+ ## Customization
102
+
103
+ To customize the appearance of the notifications, you can modify the Tailwind CSS classes in the component or extend the Tailwind configuration to include your project's design tokens.
@@ -0,0 +1,18 @@
1
+ export type PaginationVariant = 'centered' | 'simple';
2
+ export type PaginationResultLabel = 'items' | 'results';
3
+ export interface PaginationProps {
4
+ readonly className?: string;
5
+ readonly currentPage: number;
6
+ readonly pageSize?: number;
7
+ readonly nextLabel?: string;
8
+ readonly onPageChange?: (page: number) => void;
9
+ readonly pageLabel?: (page: number) => string;
10
+ readonly previousLabel?: string;
11
+ readonly resultLabel?: PaginationResultLabel;
12
+ readonly showLabels?: boolean;
13
+ readonly siblingCount?: number;
14
+ readonly totalItems?: number;
15
+ readonly totalPages: number;
16
+ readonly variant?: PaginationVariant;
17
+ }
18
+ export declare const Pagination: ({ className, currentPage, pageSize, nextLabel, onPageChange, pageLabel, previousLabel, resultLabel, showLabels, siblingCount, totalItems, totalPages, variant }: PaginationProps) => import("react").JSX.Element | null;
@@ -0,0 +1,225 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ import { ChevronLeft } from 'lucide-react';
4
+ const clampPage = (page, totalPages)=>Math.min(Math.max(page, 1), Math.max(totalPages, 1));
5
+ const createRange = (start, end)=>Array.from({
6
+ length: end - start + 1
7
+ }, (_, index)=>start + index);
8
+ const getPaginationItems = (currentPage, totalPages, siblingCount)=>{
9
+ if (totalPages <= 0) {
10
+ return [];
11
+ }
12
+ const safeCurrentPage = clampPage(currentPage, totalPages);
13
+ const totalPageNumbers = siblingCount + 5;
14
+ if (totalPages <= totalPageNumbers) {
15
+ return createRange(1, totalPages).map((page)=>({
16
+ page,
17
+ type: 'page'
18
+ }));
19
+ }
20
+ const leftSiblingIndex = Math.max(safeCurrentPage - siblingCount, 1);
21
+ const rightSiblingIndex = Math.min(safeCurrentPage + siblingCount, totalPages);
22
+ const shouldShowLeftEllipsis = leftSiblingIndex > 2;
23
+ const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;
24
+ if (!shouldShowLeftEllipsis) {
25
+ const leftRange = createRange(1, 3 + siblingCount * 2);
26
+ return [
27
+ ...leftRange.map((page)=>({
28
+ page,
29
+ type: 'page'
30
+ })),
31
+ {
32
+ id: 'ellipsis-right',
33
+ type: 'ellipsis'
34
+ },
35
+ {
36
+ page: totalPages,
37
+ type: 'page'
38
+ }
39
+ ];
40
+ }
41
+ if (!shouldShowRightEllipsis) {
42
+ const rightRange = createRange(totalPages - (2 + siblingCount * 2), totalPages);
43
+ return [
44
+ {
45
+ page: 1,
46
+ type: 'page'
47
+ },
48
+ {
49
+ id: 'ellipsis-left',
50
+ type: 'ellipsis'
51
+ },
52
+ ...rightRange.map((page)=>({
53
+ page,
54
+ type: 'page'
55
+ }))
56
+ ];
57
+ }
58
+ const middleRange = createRange(leftSiblingIndex, rightSiblingIndex);
59
+ return [
60
+ {
61
+ page: 1,
62
+ type: 'page'
63
+ },
64
+ {
65
+ id: 'ellipsis-left',
66
+ type: 'ellipsis'
67
+ },
68
+ ...middleRange.map((page)=>({
69
+ page,
70
+ type: 'page'
71
+ })),
72
+ {
73
+ id: 'ellipsis-right',
74
+ type: 'ellipsis'
75
+ },
76
+ {
77
+ page: totalPages,
78
+ type: 'page'
79
+ }
80
+ ];
81
+ };
82
+ const buttonBaseClasses = [
83
+ 'inline-flex',
84
+ 'items-center',
85
+ 'text-sm',
86
+ 'font-medium',
87
+ 'transition-colors',
88
+ 'disabled:pointer-events-none',
89
+ 'disabled:opacity-50'
90
+ ].join(' ');
91
+ const PaginationButton = ({ children, className, ...props })=>/*#__PURE__*/ _jsx("button", {
92
+ className: cn(buttonBaseClasses, className),
93
+ type: "button",
94
+ ...props,
95
+ children: children
96
+ });
97
+ export const Pagination = ({ className, currentPage, pageSize = 10, nextLabel = 'Next', onPageChange, pageLabel = (page)=>page.toString(), previousLabel = 'Previous', resultLabel = 'results', showLabels = true, siblingCount = 1, totalItems, totalPages, variant = 'simple' })=>{
98
+ const safeCurrentPage = clampPage(currentPage, totalPages);
99
+ const safeTotalItems = totalItems ?? totalPages * pageSize;
100
+ const rangeStart = safeTotalItems === 0 ? 0 : (safeCurrentPage - 1) * pageSize + 1;
101
+ const rangeEnd = Math.min(safeCurrentPage * pageSize, safeTotalItems);
102
+ const isPreviousDisabled = safeCurrentPage <= 1;
103
+ const isNextDisabled = safeCurrentPage >= totalPages;
104
+ const handlePageChange = (page)=>{
105
+ if (page === safeCurrentPage || page < 1 || page > totalPages) {
106
+ return;
107
+ }
108
+ onPageChange?.(page);
109
+ };
110
+ if (totalPages <= 1) {
111
+ return null;
112
+ }
113
+ if (variant === 'centered') {
114
+ return /*#__PURE__*/ _jsxs("nav", {
115
+ "aria-label": "Pagination",
116
+ className: cn('flex items-center justify-between border-t border-gray-200 px-4 sm:px-0 dark:border-white/10', className),
117
+ children: [
118
+ /*#__PURE__*/ _jsx("div", {
119
+ className: "-mt-px flex w-0 flex-1",
120
+ children: /*#__PURE__*/ _jsxs(PaginationButton, {
121
+ "aria-label": previousLabel,
122
+ className: "border-t-2 border-transparent pt-4 pr-1 text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200",
123
+ disabled: isPreviousDisabled,
124
+ onClick: ()=>handlePageChange(safeCurrentPage - 1),
125
+ children: [
126
+ /*#__PURE__*/ _jsx(ChevronLeft, {
127
+ "aria-hidden": "true",
128
+ className: "mr-3 size-5 text-gray-400 dark:text-gray-500"
129
+ }),
130
+ showLabels ? previousLabel : /*#__PURE__*/ _jsx("span", {
131
+ className: "sr-only",
132
+ children: previousLabel
133
+ })
134
+ ]
135
+ })
136
+ }),
137
+ /*#__PURE__*/ _jsx("div", {
138
+ className: "hidden md:-mt-px md:flex",
139
+ children: getPaginationItems(safeCurrentPage, totalPages, siblingCount).map((item)=>item.type === 'ellipsis' ? /*#__PURE__*/ _jsx("span", {
140
+ className: "inline-flex items-center border-t-2 border-transparent px-4 pt-4 text-sm font-medium text-gray-500 dark:text-gray-400",
141
+ children: "..."
142
+ }, item.id) : /*#__PURE__*/ _jsx(PaginationButton, {
143
+ "aria-current": item.page === safeCurrentPage ? 'page' : undefined,
144
+ "aria-label": pageLabel(item.page),
145
+ className: cn('border-t-2 px-4 pt-4', item.page === safeCurrentPage ? 'border-indigo-500 text-indigo-600 dark:border-indigo-400 dark:text-indigo-400' : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200'),
146
+ onClick: ()=>handlePageChange(item.page),
147
+ children: item.page
148
+ }, item.page))
149
+ }),
150
+ /*#__PURE__*/ _jsx("div", {
151
+ className: "-mt-px flex w-0 flex-1 justify-end",
152
+ children: /*#__PURE__*/ _jsxs(PaginationButton, {
153
+ "aria-label": nextLabel,
154
+ className: "border-t-2 border-transparent pt-4 pl-1 text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200",
155
+ disabled: isNextDisabled,
156
+ onClick: ()=>handlePageChange(safeCurrentPage + 1),
157
+ children: [
158
+ showLabels ? nextLabel : /*#__PURE__*/ _jsx("span", {
159
+ className: "sr-only",
160
+ children: nextLabel
161
+ }),
162
+ /*#__PURE__*/ _jsx(ChevronLeft, {
163
+ "aria-hidden": "true",
164
+ className: "ml-3 size-5 rotate-180 text-gray-400 dark:text-gray-500"
165
+ })
166
+ ]
167
+ })
168
+ })
169
+ ]
170
+ });
171
+ }
172
+ return /*#__PURE__*/ _jsxs("nav", {
173
+ "aria-label": "Pagination",
174
+ className: cn('flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 dark:border-white/10 dark:bg-transparent', className),
175
+ children: [
176
+ /*#__PURE__*/ _jsx("div", {
177
+ className: "hidden sm:block",
178
+ children: /*#__PURE__*/ _jsxs("p", {
179
+ className: "text-sm text-gray-700 dark:text-gray-300",
180
+ children: [
181
+ "Showing ",
182
+ /*#__PURE__*/ _jsx("span", {
183
+ className: "font-medium",
184
+ children: rangeStart
185
+ }),
186
+ " to ",
187
+ /*#__PURE__*/ _jsx("span", {
188
+ className: "font-medium",
189
+ children: rangeEnd
190
+ }),
191
+ " of",
192
+ ' ',
193
+ /*#__PURE__*/ _jsx("span", {
194
+ className: "font-medium",
195
+ children: safeTotalItems
196
+ }),
197
+ " ",
198
+ resultLabel
199
+ ]
200
+ })
201
+ }),
202
+ /*#__PURE__*/ _jsxs("div", {
203
+ className: "flex flex-1 justify-between sm:justify-end",
204
+ children: [
205
+ /*#__PURE__*/ _jsx(PaginationButton, {
206
+ "aria-label": previousLabel,
207
+ className: "relative rounded-md bg-white px-3 py-2 font-semibold text-gray-700 inset-ring inset-ring-gray-300 hover:bg-gray-50 dark:bg-white/10 dark:text-gray-200 dark:inset-ring-white/5 dark:hover:bg-white/20",
208
+ disabled: isPreviousDisabled,
209
+ onClick: ()=>handlePageChange(safeCurrentPage - 1),
210
+ children: previousLabel
211
+ }),
212
+ /*#__PURE__*/ _jsx(PaginationButton, {
213
+ "aria-label": nextLabel,
214
+ className: "relative ml-3 rounded-md bg-white px-3 py-2 font-semibold text-gray-700 inset-ring inset-ring-gray-300 hover:bg-gray-50 dark:bg-white/10 dark:text-gray-200 dark:inset-ring-white/5 dark:hover:bg-white/20",
215
+ disabled: isNextDisabled,
216
+ onClick: ()=>handlePageChange(safeCurrentPage + 1),
217
+ children: nextLabel
218
+ })
219
+ ]
220
+ })
221
+ ]
222
+ });
223
+ };
224
+
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7Q2hldnJvbkxlZnR9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5cbmltcG9ydCB0eXBlIHtCdXR0b25IVE1MQXR0cmlidXRlcywgUmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25WYXJpYW50ID0gJ2NlbnRlcmVkJyB8ICdzaW1wbGUnO1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblJlc3VsdExhYmVsID0gJ2l0ZW1zJyB8ICdyZXN1bHRzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUHJvcHMge1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHBhZ2VTaXplPzogbnVtYmVyO1xuICByZWFkb25seSBuZXh0TGFiZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9uUGFnZUNoYW5nZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHBhZ2VMYWJlbD86IChwYWdlOiBudW1iZXIpID0+IHN0cmluZztcbiAgcmVhZG9ubHkgcHJldmlvdXNMYWJlbD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzdWx0TGFiZWw/OiBQYWdpbmF0aW9uUmVzdWx0TGFiZWw7XG4gIHJlYWRvbmx5IHNob3dMYWJlbHM/OiBib29sZWFuO1xuICByZWFkb25seSBzaWJsaW5nQ291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvdGFsSXRlbXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdmFyaWFudD86IFBhZ2luYXRpb25WYXJpYW50O1xufVxuXG5jb25zdCBjbGFtcFBhZ2UgPSAocGFnZTogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIpID0+IE1hdGgubWluKE1hdGgubWF4KHBhZ2UsIDEpLCBNYXRoLm1heCh0b3RhbFBhZ2VzLCAxKSk7XG5cbmNvbnN0IGNyZWF0ZVJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PlxuICBBcnJheS5mcm9tKHtsZW5ndGg6IGVuZCAtIHN0YXJ0ICsgMX0sIChfLCBpbmRleCkgPT4gc3RhcnQgKyBpbmRleCk7XG5cbmNvbnN0IGdldFBhZ2luYXRpb25JdGVtcyA9IChjdXJyZW50UGFnZTogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIsIHNpYmxpbmdDb3VudDogbnVtYmVyKSA9PiB7XG4gIGlmKHRvdGFsUGFnZXMgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHNhZmVDdXJyZW50UGFnZSA9IGNsYW1wUGFnZShjdXJyZW50UGFnZSwgdG90YWxQYWdlcyk7XG4gIGNvbnN0IHRvdGFsUGFnZU51bWJlcnMgPSBzaWJsaW5nQ291bnQgKyA1O1xuXG4gIGlmKHRvdGFsUGFnZXMgPD0gdG90YWxQYWdlTnVtYmVycykge1xuICAgIHJldHVybiBjcmVhdGVSYW5nZSgxLCB0b3RhbFBhZ2VzKS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpO1xuICB9XG5cbiAgY29uc3QgbGVmdFNpYmxpbmdJbmRleCA9IE1hdGgubWF4KHNhZmVDdXJyZW50UGFnZSAtIHNpYmxpbmdDb3VudCwgMSk7XG4gIGNvbnN0IHJpZ2h0U2libGluZ0luZGV4ID0gTWF0aC5taW4oc2FmZUN1cnJlbnRQYWdlICsgc2libGluZ0NvdW50LCB0b3RhbFBhZ2VzKTtcbiAgY29uc3Qgc2hvdWxkU2hvd0xlZnRFbGxpcHNpcyA9IGxlZnRTaWJsaW5nSW5kZXggPiAyO1xuICBjb25zdCBzaG91bGRTaG93UmlnaHRFbGxpcHNpcyA9IHJpZ2h0U2libGluZ0luZGV4IDwgdG90YWxQYWdlcyAtIDE7XG5cbiAgaWYoIXNob3VsZFNob3dMZWZ0RWxsaXBzaXMpIHtcbiAgICBjb25zdCBsZWZ0UmFuZ2UgPSBjcmVhdGVSYW5nZSgxLCAzICsgc2libGluZ0NvdW50ICogMik7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmxlZnRSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpLFxuICAgICAge2lkOiAnZWxsaXBzaXMtcmlnaHQnLCB0eXBlOiAnZWxsaXBzaXMnfSBhcyBjb25zdCxcbiAgICAgIHtwYWdlOiB0b3RhbFBhZ2VzLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0XG4gICAgXTtcbiAgfVxuXG4gIGlmKCFzaG91bGRTaG93UmlnaHRFbGxpcHNpcykge1xuICAgIGNvbnN0IHJpZ2h0UmFuZ2UgPSBjcmVhdGVSYW5nZSh0b3RhbFBhZ2VzIC0gKDIgKyBzaWJsaW5nQ291bnQgKiAyKSwgdG90YWxQYWdlcyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtwYWdlOiAxLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0LFxuICAgICAge2lkOiAnZWxsaXBzaXMtbGVmdCcsIHR5cGU6ICdlbGxpcHNpcyd9IGFzIGNvbnN0LFxuICAgICAgLi4ucmlnaHRSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0IG1pZGRsZVJhbmdlID0gY3JlYXRlUmFuZ2UobGVmdFNpYmxpbmdJbmRleCwgcmlnaHRTaWJsaW5nSW5kZXgpO1xuICByZXR1cm4gW1xuICAgIHtwYWdlOiAxLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0LFxuICAgIHtpZDogJ2VsbGlwc2lzLWxlZnQnLCB0eXBlOiAnZWxsaXBzaXMnfSBhcyBjb25zdCxcbiAgICAuLi5taWRkbGVSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpLFxuICAgIHtpZDogJ2VsbGlwc2lzLXJpZ2h0JywgdHlwZTogJ2VsbGlwc2lzJ30gYXMgY29uc3QsXG4gICAge3BhZ2U6IHRvdGFsUGFnZXMsIHR5cGU6ICdwYWdlJ30gYXMgY29uc3RcbiAgXTtcbn07XG5cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gW1xuICAnaW5saW5lLWZsZXgnLFxuICAnaXRlbXMtY2VudGVyJyxcbiAgJ3RleHQtc20nLFxuICAnZm9udC1tZWRpdW0nLFxuICAndHJhbnNpdGlvbi1jb2xvcnMnLFxuICAnZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZScsXG4gICdkaXNhYmxlZDpvcGFjaXR5LTUwJ1xuXS5qb2luKCcgJyk7XG5cbmNvbnN0IFBhZ2luYXRpb25CdXR0b24gPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+ICYge3JlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdE5vZGV9KSA9PiAoXG4gIDxidXR0b25cbiAgICBjbGFzc05hbWU9e2NuKGJ1dHRvbkJhc2VDbGFzc2VzLCBjbGFzc05hbWUpfVxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHsuLi5wcm9wc31cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9idXR0b24+XG4pO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvbiA9ICh7XG4gIGNsYXNzTmFtZSxcbiAgY3VycmVudFBhZ2UsXG4gIHBhZ2VTaXplID0gMTAsXG4gIG5leHRMYWJlbCA9ICdOZXh0JyxcbiAgb25QYWdlQ2hhbmdlLFxuICBwYWdlTGFiZWwgPSAocGFnZSkgPT4gcGFnZS50b1N0cmluZygpLFxuICBwcmV2aW91c0xhYmVsID0gJ1ByZXZpb3VzJyxcbiAgcmVzdWx0TGFiZWwgPSAncmVzdWx0cycsXG4gIHNob3dMYWJlbHMgPSB0cnVlLFxuICBzaWJsaW5nQ291bnQgPSAxLFxuICB0b3RhbEl0ZW1zLFxuICB0b3RhbFBhZ2VzLFxuICB2YXJpYW50ID0gJ3NpbXBsZSdcbn06IFBhZ2luYXRpb25Qcm9wcykgPT4ge1xuICBjb25zdCBzYWZlQ3VycmVudFBhZ2UgPSBjbGFtcFBhZ2UoY3VycmVudFBhZ2UsIHRvdGFsUGFnZXMpO1xuICBjb25zdCBzYWZlVG90YWxJdGVtcyA9IHRvdGFsSXRlbXMgPz8gdG90YWxQYWdlcyAqIHBhZ2VTaXplO1xuICBjb25zdCByYW5nZVN0YXJ0ID0gc2FmZVRvdGFsSXRlbXMgPT09IDAgPyAwIDogKHNhZmVDdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemUgKyAxO1xuICBjb25zdCByYW5nZUVuZCA9IE1hdGgubWluKHNhZmVDdXJyZW50UGFnZSAqIHBhZ2VTaXplLCBzYWZlVG90YWxJdGVtcyk7XG4gIGNvbnN0IGlzUHJldmlvdXNEaXNhYmxlZCA9IHNhZmVDdXJyZW50UGFnZSA8PSAxO1xuICBjb25zdCBpc05leHREaXNhYmxlZCA9IHNhZmVDdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzO1xuXG4gIGNvbnN0IGhhbmRsZVBhZ2VDaGFuZ2UgPSAocGFnZTogbnVtYmVyKSA9PiB7XG4gICAgaWYocGFnZSA9PT0gc2FmZUN1cnJlbnRQYWdlIHx8IHBhZ2UgPCAxIHx8IHBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlPy4ocGFnZSk7XG4gIH07XG5cbiAgaWYodG90YWxQYWdlcyA8PSAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZih2YXJpYW50ID09PSAnY2VudGVyZWQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxuYXZcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB4LTQgc206cHgtMCBkYXJrOmJvcmRlci13aGl0ZS8xMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LXB4IGZsZXggdy0wIGZsZXgtMVwiPlxuICAgICAgICAgIDxQYWdpbmF0aW9uQnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtwcmV2aW91c0xhYmVsfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHQtNCBwci0xIHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNQcmV2aW91c0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShzYWZlQ3VycmVudFBhZ2UgLSAxKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkxlZnQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwibXItMyBzaXplLTUgdGV4dC1ncmF5LTQwMCBkYXJrOnRleHQtZ3JheS01MDBcIiAvPlxuICAgICAgICAgICAge3Nob3dMYWJlbHMgPyBwcmV2aW91c0xhYmVsIDogPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntwcmV2aW91c0xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDotbXQtcHggbWQ6ZmxleFwiPlxuICAgICAgICAgIHtnZXRQYWdpbmF0aW9uSXRlbXMoc2FmZUN1cnJlbnRQYWdlLCB0b3RhbFBhZ2VzLCBzaWJsaW5nQ291bnQpLm1hcCgoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZWxsaXBzaXMnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHgtNCBwdC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBhZ2luYXRpb25CdXR0b25cbiAgICAgICAgICAgICAga2V5PXtpdGVtLnBhZ2V9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXRlbS5wYWdlID09PSBzYWZlQ3VycmVudFBhZ2UgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhZ2VMYWJlbChpdGVtLnBhZ2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdib3JkZXItdC0yIHB4LTQgcHQtNCcsXG4gICAgICAgICAgICAgICAgaXRlbS5wYWdlID09PSBzYWZlQ3VycmVudFBhZ2VcbiAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1pbmRpZ28tNTAwIHRleHQtaW5kaWdvLTYwMCBkYXJrOmJvcmRlci1pbmRpZ28tNDAwIGRhcms6dGV4dC1pbmRpZ28tNDAwJ1xuICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShpdGVtLnBhZ2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbS5wYWdlfVxuICAgICAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC1weCBmbGV4IHctMCBmbGV4LTEganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICA8UGFnaW5hdGlvbkJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bmV4dExhYmVsfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHQtNCBwbC0xIHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNOZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQYWdlQ2hhbmdlKHNhZmVDdXJyZW50UGFnZSArIDEpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzaG93TGFiZWxzID8gbmV4dExhYmVsIDogPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntuZXh0TGFiZWx9PC9zcGFuPn1cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJtbC0zIHNpemUtNSByb3RhdGUtMTgwIHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwXCIgLz5cbiAgICAgICAgICA8L1BhZ2luYXRpb25CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uYXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG5hdlxuICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcHgtNCBweS0zIHNtOnB4LTYgZGFyazpib3JkZXItd2hpdGUvMTAgZGFyazpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBzbTpibG9ja1wiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwXCI+XG4gICAgICAgICAgU2hvd2luZyA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntyYW5nZVN0YXJ0fTwvc3Bhbj4gdG8gPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57cmFuZ2VFbmR9PC9zcGFuPiBvZnsnICd9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57c2FmZVRvdGFsSXRlbXN9PC9zcGFuPiB7cmVzdWx0TGFiZWx9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGp1c3RpZnktYmV0d2VlbiBzbTpqdXN0aWZ5LWVuZFwiPlxuICAgICAgICA8UGFnaW5hdGlvbkJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9e3ByZXZpb3VzTGFiZWx9XG4gICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgcm91bmRlZC1tZCBiZy13aGl0ZSBweC0zIHB5LTIgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIGluc2V0LXJpbmcgaW5zZXQtcmluZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTUwIGRhcms6Ymctd2hpdGUvMTAgZGFyazp0ZXh0LWdyYXktMjAwIGRhcms6aW5zZXQtcmluZy13aGl0ZS81IGRhcms6aG92ZXI6Ymctd2hpdGUvMjBcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc1ByZXZpb3VzRGlzYWJsZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShzYWZlQ3VycmVudFBhZ2UgLSAxKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtwcmV2aW91c0xhYmVsfVxuICAgICAgICA8L1BhZ2luYXRpb25CdXR0b24+XG4gICAgICAgIDxQYWdpbmF0aW9uQnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD17bmV4dExhYmVsfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG1sLTMgcm91bmRlZC1tZCBiZy13aGl0ZSBweC0zIHB5LTIgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIGluc2V0LXJpbmcgaW5zZXQtcmluZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTUwIGRhcms6Ymctd2hpdGUvMTAgZGFyazp0ZXh0LWdyYXktMjAwIGRhcms6aW5zZXQtcmluZy13aGl0ZS81IGRhcms6aG92ZXI6Ymctd2hpdGUvMjBcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc05leHREaXNhYmxlZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQYWdlQ2hhbmdlKHNhZmVDdXJyZW50UGFnZSArIDEpfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRMYWJlbH1cbiAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbImNuIiwiQ2hldnJvbkxlZnQiLCJjbGFtcFBhZ2UiLCJwYWdlIiwidG90YWxQYWdlcyIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjcmVhdGVSYW5nZSIsInN0YXJ0IiwiZW5kIiwiQXJyYXkiLCJmcm9tIiwibGVuZ3RoIiwiXyIsImluZGV4IiwiZ2V0UGFnaW5hdGlvbkl0ZW1zIiwiY3VycmVudFBhZ2UiLCJzaWJsaW5nQ291bnQiLCJzYWZlQ3VycmVudFBhZ2UiLCJ0b3RhbFBhZ2VOdW1iZXJzIiwibWFwIiwidHlwZSIsImxlZnRTaWJsaW5nSW5kZXgiLCJyaWdodFNpYmxpbmdJbmRleCIsInNob3VsZFNob3dMZWZ0RWxsaXBzaXMiLCJzaG91bGRTaG93UmlnaHRFbGxpcHNpcyIsImxlZnRSYW5nZSIsImlkIiwicmlnaHRSYW5nZSIsIm1pZGRsZVJhbmdlIiwiYnV0dG9uQmFzZUNsYXNzZXMiLCJqb2luIiwiUGFnaW5hdGlvbkJ1dHRvbiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJidXR0b24iLCJQYWdpbmF0aW9uIiwicGFnZVNpemUiLCJuZXh0TGFiZWwiLCJvblBhZ2VDaGFuZ2UiLCJwYWdlTGFiZWwiLCJ0b1N0cmluZyIsInByZXZpb3VzTGFiZWwiLCJyZXN1bHRMYWJlbCIsInNob3dMYWJlbHMiLCJ0b3RhbEl0ZW1zIiwidmFyaWFudCIsInNhZmVUb3RhbEl0ZW1zIiwicmFuZ2VTdGFydCIsInJhbmdlRW5kIiwiaXNQcmV2aW91c0Rpc2FibGVkIiwiaXNOZXh0RGlzYWJsZWQiLCJoYW5kbGVQYWdlQ2hhbmdlIiwibmF2IiwiYXJpYS1sYWJlbCIsImRpdiIsImRpc2FibGVkIiwib25DbGljayIsImFyaWEtaGlkZGVuIiwic3BhbiIsIml0ZW0iLCJhcmlhLWN1cnJlbnQiLCJ1bmRlZmluZWQiLCJwIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsRUFBRSxRQUFPLGVBQWU7QUFDaEMsU0FBUUMsV0FBVyxRQUFPLGVBQWU7QUF1QnpDLE1BQU1DLFlBQVksQ0FBQ0MsTUFBY0MsYUFBdUJDLEtBQUtDLEdBQUcsQ0FBQ0QsS0FBS0UsR0FBRyxDQUFDSixNQUFNLElBQUlFLEtBQUtFLEdBQUcsQ0FBQ0gsWUFBWTtBQUV6RyxNQUFNSSxjQUFjLENBQUNDLE9BQWVDLE1BQ2xDQyxNQUFNQyxJQUFJLENBQUM7UUFBQ0MsUUFBUUgsTUFBTUQsUUFBUTtJQUFDLEdBQUcsQ0FBQ0ssR0FBR0MsUUFBVU4sUUFBUU07QUFFOUQsTUFBTUMscUJBQXFCLENBQUNDLGFBQXFCYixZQUFvQmM7SUFDbkUsSUFB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
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Pagination as PaginationComponent } from './Pagination.js';
4
+ import { interactWithCanvas } from '../../utils/storyInteractions.js';
5
+ const PaginationStory = (args)=>{
6
+ const [currentPage, setCurrentPage] = useState(args.currentPage);
7
+ return /*#__PURE__*/ _jsx("div", {
8
+ className: "w-full max-w-4xl bg-white p-6 dark:bg-black-dark",
9
+ children: /*#__PURE__*/ _jsx(PaginationComponent, {
10
+ ...args,
11
+ currentPage: currentPage,
12
+ onPageChange: setCurrentPage
13
+ })
14
+ });
15
+ };
16
+ const meta = {
17
+ argTypes: {
18
+ currentPage: {
19
+ control: 'number'
20
+ },
21
+ pageSize: {
22
+ control: 'number'
23
+ },
24
+ siblingCount: {
25
+ control: 'number'
26
+ },
27
+ totalItems: {
28
+ control: 'number'
29
+ },
30
+ totalPages: {
31
+ control: 'number'
32
+ },
33
+ variant: {
34
+ control: 'select',
35
+ options: [
36
+ 'centered',
37
+ 'simple'
38
+ ]
39
+ }
40
+ },
41
+ component: PaginationComponent,
42
+ parameters: {
43
+ layout: 'centered'
44
+ },
45
+ title: 'Components/Pagination'
46
+ };
47
+ export default meta;
48
+ export const Centered = {
49
+ args: {
50
+ currentPage: 2,
51
+ totalPages: 10,
52
+ variant: 'centered'
53
+ },
54
+ play: interactWithCanvas,
55
+ render: PaginationStory
56
+ };
57
+ export const Simple = {
58
+ args: {
59
+ currentPage: 1,
60
+ pageSize: 10,
61
+ totalItems: 97,
62
+ totalPages: 10,
63
+ variant: 'simple'
64
+ },
65
+ play: interactWithCanvas,
66
+ render: PaginationStory
67
+ };
68
+
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi5zdG9yaWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7UGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICcuL1BhZ2luYXRpb24uanMnO1xuaW1wb3J0IHtpbnRlcmFjdFdpdGhDYW52YXN9IGZyb20gJy4uLy4uL3V0aWxzL3N0b3J5SW50ZXJhY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5pbXBvcnQgdHlwZSB7Q29tcG9uZW50UHJvcHN9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUGFnaW5hdGlvblN0b3J5ID0gKGFyZ3M6IENvbXBvbmVudFByb3BzPHR5cGVvZiBQYWdpbmF0aW9uQ29tcG9uZW50PikgPT4ge1xuICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKGFyZ3MuY3VycmVudFBhZ2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctNHhsIGJnLXdoaXRlIHAtNiBkYXJrOmJnLWJsYWNrLWRhcmtcIj5cbiAgICAgIDxQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAgICAgIHsuLi5hcmdzfVxuICAgICAgICBjdXJyZW50UGFnZT17Y3VycmVudFBhZ2V9XG4gICAgICAgIG9uUGFnZUNoYW5nZT17c2V0Q3VycmVudFBhZ2V9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgbWV0YTogTWV0YTx0eXBlb2YgUGFnaW5hdGlvbkNvbXBvbmVudD4gPSB7XG4gIGFyZ1R5cGVzOiB7XG4gICAgY3VycmVudFBhZ2U6IHtcbiAgICAgIGNvbnRyb2w6ICdudW1iZXInXG4gICAgfSxcbiAgICBwYWdlU2l6ZToge1xuICAgICAgY29udHJvbDogJ251bWJlcidcbiAgICB9LFxuICAgIHNpYmxpbmdDb3VudDoge1xuICAgICAgY29udHJvbDogJ251bWJlcidcbiAgICB9LFxuICAgIHRvdGFsSXRlbXM6IHtcbiAgICAgIGNvbnRyb2w6ICdudW1iZXInXG4gICAgfSxcbiAgICB0b3RhbFBhZ2VzOiB7XG4gICAgICBjb250cm9sOiAnbnVtYmVyJ1xuICAgIH0sXG4gICAgdmFyaWFudDoge1xuICAgICAgY29udHJvbDogJ3NlbGVjdCcsXG4gICAgICBvcHRpb25zOiBbJ2NlbnRlcmVkJywgJ3NpbXBsZSddXG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IFBhZ2luYXRpb25Db21wb25lbnQsXG4gIHBhcmFtZXRlcnM6IHtcbiAgICBsYXlvdXQ6ICdjZW50ZXJlZCdcbiAgfSxcbiAgdGl0bGU6ICdDb21wb25lbnRzL1BhZ2luYXRpb24nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXRhO1xuXG50eXBlIFN0b3J5ID0gU3RvcnlPYmo8dHlwZW9mIFBhZ2luYXRpb25Db21wb25lbnQ+O1xuXG5leHBvcnQgY29uc3QgQ2VudGVyZWQ6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgY3VycmVudFBhZ2U6IDIsXG4gICAgdG90YWxQYWdlczogMTAsXG4gICAgdmFyaWFudDogJ2NlbnRlcmVkJ1xuICB9LFxuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXMsXG4gIHJlbmRlcjogUGFnaW5hdGlvblN0b3J5XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlOiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VTaXplOiAxMCxcbiAgICB0b3RhbEl0ZW1zOiA5NyxcbiAgICB0b3RhbFBhZ2VzOiAxMCxcbiAgICB2YXJpYW50OiAnc2ltcGxlJ1xuICB9LFxuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXMsXG4gIHJlbmRlcjogUGFnaW5hdGlvblN0b3J5XG59O1xuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwiUGFnaW5hdGlvbiIsIlBhZ2luYXRpb25Db21wb25lbnQiLCJpbnRlcmFjdFdpdGhDYW52YXMiLCJQYWdpbmF0aW9uU3RvcnkiLCJhcmdzIiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsImRpdiIsImNsYXNzTmFtZSIsIm9uUGFnZUNoYW5nZSIsIm1ldGEiLCJhcmdUeXBlcyIsImNvbnRyb2wiLCJwYWdlU2l6ZSIsInNpYmxpbmdDb3VudCIsInRvdGFsSXRlbXMiLCJ0b3RhbFBhZ2VzIiwidmFyaWFudCIsIm9wdGlvbnMiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJDZW50ZXJlZCIsInBsYXkiLCJyZW5kZXIiLCJTaW1wbGUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxRQUFRLFFBQU8sUUFBUTtBQUUvQixTQUFRQyxjQUFjQyxtQkFBbUIsUUFBTyxrQkFBa0I7QUFDbEUsU0FBUUMsa0JBQWtCLFFBQU8sbUNBQW1DO0FBS3BFLE1BQU1DLGtCQUFrQixDQUFDQztJQUN2QixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1AsU0FBU0ssS0FBS0MsV0FBVztJQUUvRCxxQkFDRSxLQUFDRTtRQUFJQyxXQUFVO2tCQUNiLGNBQUEsS0FBQ1A7WUFDRSxHQUFHRyxJQUFJO1lBQ1JDLGFBQWFBO1lBQ2JJLGNBQWNIOzs7QUFJdEI7QUFFQSxNQUFNSSxPQUF5QztJQUM3Q0MsVUFBVTtRQUNSTixhQUFhO1lBQ1hPLFNBQVM7UUFDWDtRQUNBQyxVQUFVO1lBQ1JELFNBQVM7UUFDWDtRQUNBRSxjQUFjO1lBQ1pGLFNBQVM7UUFDWDtRQUNBRyxZQUFZO1lBQ1ZILFNBQVM7UUFDWDtRQUNBSSxZQUFZO1lBQ1ZKLFNBQVM7UUFDWDtRQUNBSyxTQUFTO1lBQ1BMLFNBQVM7WUFDVE0sU0FBUztnQkFBQztnQkFBWTthQUFTO1FBQ2pDO0lBQ0Y7SUFDQUMsV0FBV2xCO0lBQ1htQixZQUFZO1FBQ1ZDLFFBQVE7SUFDVjtJQUNBQyxPQUFPO0FBQ1Q7QUFFQSxlQUFlWixLQUFLO0FBSXBCLE9BQU8sTUFBTWEsV0FBa0I7SUFDN0JuQixNQUFNO1FBQ0pDLGFBQWE7UUFDYlcsWUFBWTtRQUNaQyxTQUFTO0lBQ1g7SUFDQU8sTUFBTXRCO0lBQ051QixRQUFRdEI7QUFDVixFQUFFO0FBRUYsT0FBTyxNQUFNdUIsU0FBZ0I7SUFDM0J0QixNQUFNO1FBQ0pDLGFBQWE7UUFDYlEsVUFBVTtRQUNWRSxZQUFZO1FBQ1pDLFlBQVk7UUFDWkMsU0FBUztJQUNYO0lBQ0FPLE1BQU10QjtJQUNOdUIsUUFBUXRCO0FBQ1YsRUFBRSJ9
@@ -0,0 +1,12 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export type PasswordStrength = {
3
+ readonly label: string;
4
+ readonly score: number;
5
+ };
6
+ export interface PasswordStrengthMeterProps extends HTMLAttributes<HTMLDivElement> {
7
+ readonly password: string;
8
+ }
9
+ export declare const getPasswordStrength: (password: string) => PasswordStrength;
10
+ declare const PasswordStrengthMeterComponent: ({ className, password, ...props }: PasswordStrengthMeterProps) => import("react").JSX.Element | null;
11
+ export declare const PasswordStrengthMeter: import("react").MemoExoticComponent<typeof PasswordStrengthMeterComponent>;
12
+ export {};
@@ -0,0 +1,88 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ import { memo } from 'react';
4
+ export const getPasswordStrength = (password)=>{
5
+ if (password.length < 8) {
6
+ return {
7
+ label: 'Too short',
8
+ score: 0
9
+ };
10
+ }
11
+ const checks = [
12
+ true,
13
+ /[A-Za-z]/.test(password),
14
+ /\d/.test(password),
15
+ /[^A-Za-z0-9]/.test(password)
16
+ ];
17
+ const score = checks.filter(Boolean).length;
18
+ const labels = [
19
+ 'Too short',
20
+ 'Weak',
21
+ 'Fair',
22
+ 'Good',
23
+ 'Strong'
24
+ ];
25
+ return {
26
+ label: labels[score] || 'Strong',
27
+ score
28
+ };
29
+ };
30
+ const getSegmentClass = (score, segment)=>{
31
+ if (segment > score) {
32
+ return 'bg-muted dark:bg-muted-dark';
33
+ }
34
+ if (score <= 1) {
35
+ return 'bg-red-500';
36
+ }
37
+ if (score === 2) {
38
+ return 'bg-amber-500';
39
+ }
40
+ if (score === 3) {
41
+ return 'bg-primary dark:bg-primary-dark';
42
+ }
43
+ return 'bg-emerald-600';
44
+ };
45
+ const PasswordStrengthMeterComponent = ({ className, password, ...props })=>{
46
+ if (!password) {
47
+ return null;
48
+ }
49
+ const strength = getPasswordStrength(password);
50
+ const segments = [
51
+ 1,
52
+ 2,
53
+ 3,
54
+ 4
55
+ ];
56
+ return /*#__PURE__*/ _jsxs("div", {
57
+ "aria-label": `Password strength: ${strength.label}`,
58
+ className: cn('grid gap-1.5', className),
59
+ "data-slot": "password-strength-meter",
60
+ role: "status",
61
+ ...props,
62
+ children: [
63
+ /*#__PURE__*/ _jsx("div", {
64
+ "aria-hidden": true,
65
+ className: "grid grid-cols-4 gap-1.5",
66
+ children: segments.map((segment)=>/*#__PURE__*/ _jsx("span", {
67
+ className: cn('h-1.5 rounded-full transition-colors', getSegmentClass(strength.score, segment))
68
+ }, segment))
69
+ }),
70
+ /*#__PURE__*/ _jsxs("p", {
71
+ className: "m-0 flex items-center justify-between text-xs text-muted-foreground dark:text-muted-foreground-dark",
72
+ children: [
73
+ /*#__PURE__*/ _jsx("span", {
74
+ children: "Password strength"
75
+ }),
76
+ /*#__PURE__*/ _jsx("strong", {
77
+ className: "text-foreground dark:text-foreground-dark",
78
+ children: strength.label
79
+ })
80
+ ]
81
+ })
82
+ ]
83
+ });
84
+ };
85
+ export const PasswordStrengthMeter = /*#__PURE__*/ memo(PasswordStrengthMeterComponent);
86
+ PasswordStrengthMeter.displayName = 'PasswordStrengthMeter';
87
+
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkU3RyZW5ndGhNZXRlci9QYXNzd29yZFN0cmVuZ3RoTWV0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y259IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge21lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUge0hUTUxBdHRyaWJ1dGVzfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFBhc3N3b3JkU3RyZW5ndGggPSB7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3JlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkU3RyZW5ndGhNZXRlclByb3BzIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkU3RyZW5ndGggPSAocGFzc3dvcmQ6IHN0cmluZyk6IFBhc3N3b3JkU3RyZW5ndGggPT4ge1xuICBpZihwYXNzd29yZC5sZW5ndGggPCA4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiAnVG9vIHNob3J0JyxcbiAgICAgIHNjb3JlOiAwXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNoZWNrcyA9IFtcbiAgICB0cnVlLFxuICAgIC9bQS1aYS16XS8udGVzdChwYXNzd29yZCksXG4gICAgL1xcZC8udGVzdChwYXNzd29yZCksXG4gICAgL1teQS1aYS16MC05XS8udGVzdChwYXNzd29yZClcbiAgXTtcbiAgY29uc3Qgc2NvcmUgPSBjaGVja3MuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgY29uc3QgbGFiZWxzID0gWydUb28gc2hvcnQnLCAnV2VhaycsICdGYWlyJywgJ0dvb2QnLCAnU3Ryb25nJ107XG5cbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogbGFiZWxzW3Njb3JlXSB8fCAnU3Ryb25nJyxcbiAgICBzY29yZVxuICB9O1xufTtcblxuY29uc3QgZ2V0U2VnbWVudENsYXNzID0gKHNjb3JlOiBudW1iZXIsIHNlZ21lbnQ6IG51bWJlcikgPT4ge1xuICBpZihzZWdtZW50ID4gc2NvcmUpIHtcbiAgICByZXR1cm4gJ2JnLW11dGVkIGRhcms6YmctbXV0ZWQtZGFyayc7XG4gIH1cblxuICBpZihzY29yZSA8PSAxKSB7XG4gICAgcmV0dXJuICdiZy1yZWQtNTAwJztcbiAgfVxuXG4gIGlmKHNjb3JlID09PSAyKSB7XG4gICAgcmV0dXJuICdiZy1hbWJlci01MDAnO1xuICB9XG5cbiAgaWYoc2NvcmUgPT09IDMpIHtcbiAgICByZXR1cm4gJ2JnLXByaW1hcnkgZGFyazpiZy1wcmltYXJ5LWRhcmsnO1xuICB9XG5cbiAgcmV0dXJuICdiZy1lbWVyYWxkLTYwMCc7XG59O1xuXG5jb25zdCBQYXNzd29yZFN0cmVuZ3RoTWV0ZXJDb21wb25lbnQgPSAoe1xuICBjbGFzc05hbWUsXG4gIHBhc3N3b3JkLFxuICAuLi5wcm9wc1xufTogUGFzc3dvcmRTdHJlbmd0aE1ldGVyUHJvcHMpID0+IHtcbiAgaWYoIXBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdHJlbmd0aCA9IGdldFBhc3N3b3JkU3RyZW5ndGgocGFzc3dvcmQpO1xuICBjb25zdCBzZWdtZW50cyA9IFsxLCAyLCAzLCA0XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGFyaWEtbGFiZWw9e2BQYXNzd29yZCBzdHJlbmd0aDogJHtzdHJlbmd0aC5sYWJlbH1gfVxuICAgICAgY2xhc3NOYW1lPXtjbignZ3JpZCBnYXAtMS41JywgY2xhc3NOYW1lKX1cbiAgICAgIGRhdGEtc2xvdD1cInBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyXCJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgey4uLnByb3BzfT5cbiAgICAgIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNCBnYXAtMS41XCI+XG4gICAgICAgIHtzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaC0xLjUgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tY29sb3JzJywgZ2V0U2VnbWVudENsYXNzKHN0cmVuZ3RoLnNjb3JlLCBzZWdtZW50KSl9XG4gICAgICAgICAgICBrZXk9e3NlZ21lbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzTmFtZT1cIm0tMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQtZGFya1wiPlxuICAgICAgICA8c3Bhbj5QYXNzd29yZCBzdHJlbmd0aDwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9XCJ0ZXh0LWZvcmVncm91bmQgZGFyazp0ZXh0LWZvcmVncm91bmQtZGFya1wiPntzdHJlbmd0aC5sYWJlbH08L3N0cm9uZz5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBQYXNzd29yZFN0cmVuZ3RoTWV0ZXIgPSBtZW1vKFBhc3N3b3JkU3RyZW5ndGhNZXRlckNvbXBvbmVudCk7XG5QYXNzd29yZFN0cmVuZ3RoTWV0ZXIuZGlzcGxheU5hbWUgPSAnUGFzc3dvcmRTdHJlbmd0aE1ldGVyJztcbiJdLCJuYW1lcyI6WyJjbiIsIm1lbW8iLCJnZXRQYXNzd29yZFN0cmVuZ3RoIiwicGFzc3dvcmQiLCJsZW5ndGgiLCJsYWJlbCIsInNjb3JlIiwiY2hlY2tzIiwidGVzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJsYWJlbHMiLCJnZXRTZWdtZW50Q2xhc3MiLCJzZWdtZW50IiwiUGFzc3dvcmRTdHJlbmd0aE1ldGVyQ29tcG9uZW50IiwiY2xhc3NOYW1lIiwicHJvcHMiLCJzdHJlbmd0aCIsInNlZ21lbnRzIiwiZGl2IiwiYXJpYS1sYWJlbCIsImRhdGEtc2xvdCIsInJvbGUiLCJhcmlhLWhpZGRlbiIsIm1hcCIsInNwYW4iLCJwIiwic3Ryb25nIiwiUGFzc3dvcmRTdHJlbmd0aE1ldGVyIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQUNoQyxTQUFRQyxJQUFJLFFBQU8sUUFBUTtBQWEzQixPQUFPLE1BQU1DLHNCQUFzQixDQUFDQztJQUNsQyxJQUFHQSxTQUFTQyxNQUFNLEdBQUcsR0FBRztRQUN0QixPQUFPO1lBQ0xDLE9BQU87WUFDUEMsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNQyxTQUFTO1FBQ2I7UUFDQSxXQUFXQyxJQUFJLENBQUNMO1FBQ2hCLEtBQUtLLElBQUksQ0FBQ0w7UUFDVixlQUFlSyxJQUFJLENBQUNMO0tBQ3JCO0lBQ0QsTUFBTUcsUUFBUUMsT0FBT0UsTUFBTSxDQUFDQyxTQUFTTixNQUFNO0lBQzNDLE1BQU1PLFNBQVM7UUFBQztRQUFhO1FBQVE7UUFBUTtRQUFRO0tBQVM7SUFFOUQsT0FBTztRQUNMTixPQUFPTSxNQUFNLENBQUNMLE1BQU0sSUFBSTtRQUN4QkE7SUFDRjtBQUNGLEVBQUU7QUFFRixNQUFNTSxrQkFBa0IsQ0FBQ04sT0FBZU87SUFDdEMsSUFBR0EsVUFBVVAsT0FBTztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxTQUFTLEdBQUc7UUFDYixPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxVQUFVLEdBQUc7UUFDZCxPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxVQUFVLEdBQUc7UUFDZCxPQUFPO0lBQ1Q7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxNQUFNUSxpQ0FBaUMsQ0FBQyxFQUN0Q0MsU0FBUyxFQUNUWixRQUFRLEVBQ1IsR0FBR2EsT0FDd0I7SUFDM0IsSUFBRyxDQUFDYixVQUFVO1FBQ1osT0FBTztJQUNUO0lBRUEsTUFBTWMsV0FBV2Ysb0JBQW9CQztJQUNyQyxNQUFNZSxXQUFXO1FBQUM7UUFBRztRQUFHO1FBQUc7S0FBRTtJQUU3QixxQkFDRSxNQUFDQztRQUNDQyxjQUFZLENBQUMsbUJBQW1CLEVBQUVILFNBQVNaLEtBQUssRUFBRTtRQUNsRFUsV0FBV2YsR0FBRyxnQkFBZ0JlO1FBQzlCTSxhQUFVO1FBQ1ZDLE1BQUs7UUFDSixHQUFHTixLQUFLOzswQkFDVCxLQUFDRztnQkFBSUksYUFBVztnQkFBQ1IsV0FBVTswQkFDeEJHLFNBQVNNLEdBQUcsQ0FBQyxDQUFDWCx3QkFDYixLQUFDWTt3QkFDQ1YsV0FBV2YsR0FBRyx3Q0FBd0NZLGdCQUFnQkssU0FBU1gsS0FBSyxFQUFFTzt1QkFDakZBOzswQkFJWCxNQUFDYTtnQkFBRVgsV0FBVTs7a0NBQ1gsS0FBQ1U7a0NBQUs7O2tDQUNOLEtBQUNFO3dCQUFPWixXQUFVO2tDQUE2Q0UsU0FBU1osS0FBSzs7Ozs7O0FBSXJGO0FBRUEsT0FBTyxNQUFNdUIsc0NBQXdCM0IsS0FBS2EsZ0NBQWdDO0FBQzFFYyxzQkFBc0JDLFdBQVcsR0FBRyJ9
@@ -0,0 +1,16 @@
1
+ import { PasswordStrengthMeter } from './PasswordStrengthMeter.js';
2
+ const meta = {
3
+ component: PasswordStrengthMeter,
4
+ parameters: {
5
+ layout: 'padded'
6
+ },
7
+ title: 'Application UI/Forms/PasswordStrengthMeter'
8
+ };
9
+ export default meta;
10
+ export const Default = {
11
+ args: {
12
+ password: 'CorrectHorse123!'
13
+ }
14
+ };
15
+
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkU3RyZW5ndGhNZXRlci9QYXNzd29yZFN0cmVuZ3RoTWV0ZXIuc3Rvcmllcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTWV0ZXJ9IGZyb20gJy4vUGFzc3dvcmRTdHJlbmd0aE1ldGVyLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5cbmNvbnN0IG1ldGE6IE1ldGE8dHlwZW9mIFBhc3N3b3JkU3RyZW5ndGhNZXRlcj4gPSB7XG4gIGNvbXBvbmVudDogUGFzc3dvcmRTdHJlbmd0aE1ldGVyLFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgbGF5b3V0OiAncGFkZGVkJ1xuICB9LFxuICB0aXRsZTogJ0FwcGxpY2F0aW9uIFVJL0Zvcm1zL1Bhc3N3b3JkU3RyZW5ndGhNZXRlcidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgUGFzc3dvcmRTdHJlbmd0aE1ldGVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHQ6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgcGFzc3dvcmQ6ICdDb3JyZWN0SG9yc2UxMjMhJ1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIlBhc3N3b3JkU3RyZW5ndGhNZXRlciIsIm1ldGEiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJEZWZhdWx0IiwiYXJncyIsInBhc3N3b3JkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxxQkFBcUIsUUFBTyw2QkFBNkI7QUFJakUsTUFBTUMsT0FBMkM7SUFDL0NDLFdBQVdGO0lBQ1hHLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVKLEtBQUs7QUFJcEIsT0FBTyxNQUFNSyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKQyxVQUFVO0lBQ1o7QUFDRixFQUFFIn0=
@@ -0,0 +1,18 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface PaymentMethodPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
3
+ readonly actionIcon?: ReactNode;
4
+ readonly addLabel?: string;
5
+ readonly brand?: string;
6
+ readonly description?: ReactNode;
7
+ readonly emptyDescription?: ReactNode;
8
+ readonly emptyTitle?: ReactNode;
9
+ readonly isAdding?: boolean;
10
+ readonly isRemoving?: boolean;
11
+ readonly last4?: string;
12
+ readonly onAdd: () => void;
13
+ readonly onRemove?: () => void;
14
+ readonly removeLabel?: string;
15
+ readonly replaceLabel?: string;
16
+ readonly title?: ReactNode;
17
+ }
18
+ export declare const PaymentMethodPanel: (paymentMethodPanelProps: PaymentMethodPanelProps) => import("react").JSX.Element;