@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,140 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { gothamColors } from '../../utils/colorUtils.js';
3
+ import { interactWithCanvas } from '../../utils/storyInteractions.js';
4
+ import { RadioField } from './RadioField.js';
5
+ const meta = {
6
+ argTypes: {
7
+ color: {
8
+ control: 'select',
9
+ description: 'The color of the radio group',
10
+ options: gothamColors
11
+ },
12
+ defaultValue: {
13
+ control: 'text',
14
+ description: 'The default selected value'
15
+ },
16
+ label: {
17
+ control: 'text',
18
+ description: 'The label text for the radio group'
19
+ },
20
+ name: {
21
+ control: 'text',
22
+ description: 'The name of the radio group'
23
+ },
24
+ optionClass: {
25
+ control: 'text',
26
+ description: 'The class name for the radio options'
27
+ },
28
+ options: {
29
+ control: 'object',
30
+ description: 'Array of radio options'
31
+ }
32
+ },
33
+ component: RadioField,
34
+ decorators: [
35
+ (Story)=>/*#__PURE__*/ _jsx("div", {
36
+ className: "p-4 max-w-md",
37
+ children: /*#__PURE__*/ _jsx(Story, {})
38
+ })
39
+ ],
40
+ parameters: {
41
+ backgrounds: {
42
+ default: 'light',
43
+ values: [
44
+ {
45
+ name: 'light',
46
+ value: '#ffffff'
47
+ },
48
+ {
49
+ name: 'dark',
50
+ value: '#1a1a1a'
51
+ }
52
+ ]
53
+ },
54
+ layout: 'centered'
55
+ },
56
+ title: 'Components/Form/RadioField'
57
+ };
58
+ export default meta;
59
+ const defaultOptions = [
60
+ {
61
+ description: 'This is the first option description',
62
+ id: 'option1',
63
+ label: 'First Option',
64
+ value: '1'
65
+ },
66
+ {
67
+ description: 'This is the second option description',
68
+ id: 'option2',
69
+ label: 'Second Option',
70
+ value: '2'
71
+ },
72
+ {
73
+ description: 'This is the third option description',
74
+ id: 'option3',
75
+ label: 'Third Option',
76
+ value: '3'
77
+ }
78
+ ];
79
+ export const Default = {
80
+ args: {
81
+ label: 'Choose a Color',
82
+ name: 'colorSelection',
83
+ options: [
84
+ {
85
+ id: 'red',
86
+ label: 'Red',
87
+ value: 'red'
88
+ },
89
+ {
90
+ id: 'blue',
91
+ label: 'Blue',
92
+ value: 'blue'
93
+ },
94
+ {
95
+ id: 'green',
96
+ label: 'Green',
97
+ value: 'green'
98
+ }
99
+ ]
100
+ },
101
+ play: interactWithCanvas
102
+ };
103
+ export const WithDefaultValue = {
104
+ args: {
105
+ defaultValue: '2',
106
+ label: 'Select an Option',
107
+ name: 'radioGroupWithDefault',
108
+ options: defaultOptions
109
+ },
110
+ play: interactWithCanvas
111
+ };
112
+ export const WithLongDescriptions = {
113
+ args: {
114
+ label: 'Select a Plan',
115
+ name: 'planSelection',
116
+ options: [
117
+ {
118
+ description: 'Perfect for individuals and small projects. Includes basic features and support.',
119
+ id: 'basic',
120
+ label: 'Basic Plan',
121
+ value: 'basic'
122
+ },
123
+ {
124
+ description: 'Ideal for growing businesses. Includes advanced features, priority support, and team collaboration tools.',
125
+ id: 'pro',
126
+ label: 'Professional Plan',
127
+ value: 'pro'
128
+ },
129
+ {
130
+ description: 'Enterprise-grade solution with all features, dedicated support, and custom integrations.',
131
+ id: 'enterprise',
132
+ label: 'Enterprise Plan',
133
+ value: 'enterprise'
134
+ }
135
+ ]
136
+ },
137
+ play: interactWithCanvas
138
+ };
139
+
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1JhZGlvRmllbGQvUmFkaW9GaWVsZC5zdG9yaWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dvdGhhbUNvbG9yc30gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3JVdGlscy5qcyc7XG5pbXBvcnQge2ludGVyYWN0V2l0aENhbnZhc30gZnJvbSAnLi4vLi4vdXRpbHMvc3RvcnlJbnRlcmFjdGlvbnMuanMnO1xuaW1wb3J0IHtSYWRpb0ZpZWxkfSBmcm9tICcuL1JhZGlvRmllbGQuanMnO1xuXG5pbXBvcnQgdHlwZSB7TWV0YSwgU3RvcnlPYmp9IGZyb20gJ0BubGFicy9sZXgvc3Rvcnlib29rJztcblxuY29uc3QgbWV0YTogTWV0YTx0eXBlb2YgUmFkaW9GaWVsZD4gPSB7XG4gIGFyZ1R5cGVzOiB7XG4gICAgY29sb3I6IHtcbiAgICAgIGNvbnRyb2w6ICdzZWxlY3QnLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGUgY29sb3Igb2YgdGhlIHJhZGlvIGdyb3VwJyxcbiAgICAgIG9wdGlvbnM6IGdvdGhhbUNvbG9yc1xuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICBjb250cm9sOiAndGV4dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkZWZhdWx0IHNlbGVjdGVkIHZhbHVlJ1xuICAgIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGxhYmVsIHRleHQgZm9yIHRoZSByYWRpbyBncm91cCdcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG5hbWUgb2YgdGhlIHJhZGlvIGdyb3VwJ1xuICAgIH0sXG4gICAgb3B0aW9uQ2xhc3M6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNsYXNzIG5hbWUgZm9yIHRoZSByYWRpbyBvcHRpb25zJ1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgY29udHJvbDogJ29iamVjdCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FycmF5IG9mIHJhZGlvIG9wdGlvbnMnXG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IFJhZGlvRmllbGQsXG4gIGRlY29yYXRvcnM6IFtcbiAgICAoU3RvcnkpID0+IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00IG1heC13LW1kXCI+XG4gICAgICAgIDxTdG9yeSAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICBdLFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgYmFja2dyb3VuZHM6IHtcbiAgICAgIGRlZmF1bHQ6ICdsaWdodCcsXG4gICAgICB2YWx1ZXM6IFtcbiAgICAgICAge25hbWU6ICdsaWdodCcsIHZhbHVlOiAnI2ZmZmZmZid9LFxuICAgICAgICB7bmFtZTogJ2RhcmsnLCB2YWx1ZTogJyMxYTFhMWEnfVxuICAgICAgXVxuICAgIH0sXG4gICAgbGF5b3V0OiAnY2VudGVyZWQnXG4gIH0sXG4gIHRpdGxlOiAnQ29tcG9uZW50cy9Gb3JtL1JhZGlvRmllbGQnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXRhO1xudHlwZSBTdG9yeSA9IFN0b3J5T2JqPHR5cGVvZiBSYWRpb0ZpZWxkPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBbXG4gIHtcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGZpcnN0IG9wdGlvbiBkZXNjcmlwdGlvbicsXG4gICAgaWQ6ICdvcHRpb24xJyxcbiAgICBsYWJlbDogJ0ZpcnN0IE9wdGlvbicsXG4gICAgdmFsdWU6ICcxJ1xuICB9LFxuICB7XG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBzZWNvbmQgb3B0aW9uIGRlc2NyaXB0aW9uJyxcbiAgICBpZDogJ29wdGlvbjInLFxuICAgIGxhYmVsOiAnU2Vjb25kIE9wdGlvbicsXG4gICAgdmFsdWU6ICcyJ1xuICB9LFxuICB7XG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSB0aGlyZCBvcHRpb24gZGVzY3JpcHRpb24nLFxuICAgIGlkOiAnb3B0aW9uMycsXG4gICAgbGFiZWw6ICdUaGlyZCBPcHRpb24nLFxuICAgIHZhbHVlOiAnMydcbiAgfVxuXTtcblxuXG5leHBvcnQgY29uc3QgRGVmYXVsdDogU3RvcnkgPSB7XG4gIGFyZ3M6IHtcbiAgICBsYWJlbDogJ0Nob29zZSBhIENvbG9yJyxcbiAgICBuYW1lOiAnY29sb3JTZWxlY3Rpb24nLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdyZWQnLFxuICAgICAgICBsYWJlbDogJ1JlZCcsXG4gICAgICAgIHZhbHVlOiAncmVkJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdibHVlJyxcbiAgICAgICAgbGFiZWw6ICdCbHVlJyxcbiAgICAgICAgdmFsdWU6ICdibHVlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdncmVlbicsXG4gICAgICAgIGxhYmVsOiAnR3JlZW4nLFxuICAgICAgICB2YWx1ZTogJ2dyZWVuJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgcGxheTogaW50ZXJhY3RXaXRoQ2FudmFzXG59O1xuXG5leHBvcnQgY29uc3QgV2l0aERlZmF1bHRWYWx1ZTogU3RvcnkgPSB7XG4gIGFyZ3M6IHtcbiAgICBkZWZhdWx0VmFsdWU6ICcyJyxcbiAgICBsYWJlbDogJ1NlbGVjdCBhbiBPcHRpb24nLFxuICAgIG5hbWU6ICdyYWRpb0dyb3VwV2l0aERlZmF1bHQnLFxuICAgIG9wdGlvbnM6IGRlZmF1bHRPcHRpb25zXG4gIH0sXG4gIHBsYXk6IGludGVyYWN0V2l0aENhbnZhc1xufTtcblxuZXhwb3J0IGNvbnN0IFdpdGhMb25nRGVzY3JpcHRpb25zOiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGxhYmVsOiAnU2VsZWN0IGEgUGxhbicsXG4gICAgbmFtZTogJ3BsYW5TZWxlY3Rpb24nLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQZXJmZWN0IGZvciBpbmRpdmlkdWFscyBhbmQgc21hbGwgcHJvamVjdHMuIEluY2x1ZGVzIGJhc2ljIGZlYXR1cmVzIGFuZCBzdXBwb3J0LicsXG4gICAgICAgIGlkOiAnYmFzaWMnLFxuICAgICAgICBsYWJlbDogJ0Jhc2ljIFBsYW4nLFxuICAgICAgICB2YWx1ZTogJ2Jhc2ljJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdJZGVhbCBmb3IgZ3Jvd2luZyBidXNpbmVzc2VzLiBJbmNsdWRlcyBhZHZhbmNlZCBmZWF0dXJlcywgcHJpb3JpdHkgc3VwcG9ydCwgYW5kIHRlYW0gY29sbGFib3JhdGlvbiB0b29scy4nLFxuICAgICAgICBpZDogJ3BybycsXG4gICAgICAgIGxhYmVsOiAnUHJvZmVzc2lvbmFsIFBsYW4nLFxuICAgICAgICB2YWx1ZTogJ3BybydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRW50ZXJwcmlzZS1ncmFkZSBzb2x1dGlvbiB3aXRoIGFsbCBmZWF0dXJlcywgZGVkaWNhdGVkIHN1cHBvcnQsIGFuZCBjdXN0b20gaW50ZWdyYXRpb25zLicsXG4gICAgICAgIGlkOiAnZW50ZXJwcmlzZScsXG4gICAgICAgIGxhYmVsOiAnRW50ZXJwcmlzZSBQbGFuJyxcbiAgICAgICAgdmFsdWU6ICdlbnRlcnByaXNlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgcGxheTogaW50ZXJhY3RXaXRoQ2FudmFzXG59O1xuIl0sIm5hbWVzIjpbImdvdGhhbUNvbG9ycyIsImludGVyYWN0V2l0aENhbnZhcyIsIlJhZGlvRmllbGQiLCJtZXRhIiwiYXJnVHlwZXMiLCJjb2xvciIsImNvbnRyb2wiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbnMiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsIm5hbWUiLCJvcHRpb25DbGFzcyIsImNvbXBvbmVudCIsImRlY29yYXRvcnMiLCJTdG9yeSIsImRpdiIsImNsYXNzTmFtZSIsInBhcmFtZXRlcnMiLCJiYWNrZ3JvdW5kcyIsImRlZmF1bHQiLCJ2YWx1ZXMiLCJ2YWx1ZSIsImxheW91dCIsInRpdGxlIiwiZGVmYXVsdE9wdGlvbnMiLCJpZCIsIkRlZmF1bHQiLCJhcmdzIiwicGxheSIsIldpdGhEZWZhdWx0VmFsdWUiLCJXaXRoTG9uZ0Rlc2NyaXB0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLFlBQVksUUFBTyw0QkFBNEI7QUFDdkQsU0FBUUMsa0JBQWtCLFFBQU8sbUNBQW1DO0FBQ3BFLFNBQVFDLFVBQVUsUUFBTyxrQkFBa0I7QUFJM0MsTUFBTUMsT0FBZ0M7SUFDcENDLFVBQVU7UUFDUkMsT0FBTztZQUNMQyxTQUFTO1lBQ1RDLGFBQWE7WUFDYkMsU0FBU1I7UUFDWDtRQUNBUyxjQUFjO1lBQ1pILFNBQVM7WUFDVEMsYUFBYTtRQUNmO1FBQ0FHLE9BQU87WUFDTEosU0FBUztZQUNUQyxhQUFhO1FBQ2Y7UUFDQUksTUFBTTtZQUNKTCxTQUFTO1lBQ1RDLGFBQWE7UUFDZjtRQUNBSyxhQUFhO1lBQ1hOLFNBQVM7WUFDVEMsYUFBYTtRQUNmO1FBQ0FDLFNBQVM7WUFDUEYsU0FBUztZQUNUQyxhQUFhO1FBQ2Y7SUFDRjtJQUNBTSxXQUFXWDtJQUNYWSxZQUFZO1FBQ1YsQ0FBQ0Msc0JBQ0MsS0FBQ0M7Z0JBQUlDLFdBQVU7MEJBQ2IsY0FBQSxLQUFDRjs7S0FHTjtJQUNERyxZQUFZO1FBQ1ZDLGFBQWE7WUFDWEMsU0FBUztZQUNUQyxRQUFRO2dCQUNOO29CQUFDVixNQUFNO29CQUFTVyxPQUFPO2dCQUFTO2dCQUNoQztvQkFBQ1gsTUFBTTtvQkFBUVcsT0FBTztnQkFBUzthQUNoQztRQUNIO1FBQ0FDLFFBQVE7SUFDVjtJQUNBQyxPQUFPO0FBQ1Q7QUFFQSxlQUFlckIsS0FBSztBQUdwQixNQUFNc0IsaUJBQWlCO0lBQ3JCO1FBQ0VsQixhQUFhO1FBQ2JtQixJQUFJO1FBQ0poQixPQUFPO1FBQ1BZLE9BQU87SUFDVDtJQUNBO1FBQ0VmLGFBQWE7UUFDYm1CLElBQUk7UUFDSmhCLE9BQU87UUFDUFksT0FBTztJQUNUO0lBQ0E7UUFDRWYsYUFBYTtRQUNibUIsSUFBSTtRQUNKaEIsT0FBTztRQUNQWSxPQUFPO0lBQ1Q7Q0FDRDtBQUdELE9BQU8sTUFBTUssVUFBaUI7SUFDNUJDLE1BQU07UUFDSmxCLE9BQU87UUFDUEMsTUFBTTtRQUNOSCxTQUFTO1lBQ1A7Z0JBQ0VrQixJQUFJO2dCQUNKaEIsT0FBTztnQkFDUFksT0FBTztZQUNUO1lBQ0E7Z0JBQ0VJLElBQUk7Z0JBQ0poQixPQUFPO2dCQUNQWSxPQUFPO1lBQ1Q7WUFDQTtnQkFDRUksSUFBSTtnQkFDSmhCLE9BQU87Z0JBQ1BZLE9BQU87WUFDVDtTQUNEO0lBQ0g7SUFDQU8sTUFBTTVCO0FBQ1IsRUFBRTtBQUVGLE9BQU8sTUFBTTZCLG1CQUEwQjtJQUNyQ0YsTUFBTTtRQUNKbkIsY0FBYztRQUNkQyxPQUFPO1FBQ1BDLE1BQU07UUFDTkgsU0FBU2lCO0lBQ1g7SUFDQUksTUFBTTVCO0FBQ1IsRUFBRTtBQUVGLE9BQU8sTUFBTThCLHVCQUE4QjtJQUN6Q0gsTUFBTTtRQUNKbEIsT0FBTztRQUNQQyxNQUFNO1FBQ05ILFNBQVM7WUFDUDtnQkFDRUQsYUFBYTtnQkFDYm1CLElBQUk7Z0JBQ0poQixPQUFPO2dCQUNQWSxPQUFPO1lBQ1Q7WUFDQTtnQkFDRWYsYUFBYTtnQkFDYm1CLElBQUk7Z0JBQ0poQixPQUFPO2dCQUNQWSxPQUFPO1lBQ1Q7WUFDQTtnQkFDRWYsYUFBYTtnQkFDYm1CLElBQUk7Z0JBQ0poQixPQUFPO2dCQUNQWSxPQUFPO1lBQ1Q7U0FDRDtJQUNIO0lBQ0FPLE1BQU01QjtBQUNSLEVBQUUifQ==
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface ReviewItem {
3
+ readonly author: string;
4
+ readonly avatarSrc?: string;
5
+ readonly body: ReactNode;
6
+ readonly id?: string | number;
7
+ readonly rating?: number;
8
+ readonly title?: ReactNode;
9
+ }
10
+ export interface ReviewListProps extends HTMLAttributes<HTMLDivElement> {
11
+ readonly reviews: ReviewItem[];
12
+ }
13
+ declare const ReviewListComponent: ({ className, reviews, ...props }: ReviewListProps) => import("react").JSX.Element;
14
+ export declare const ReviewList: import("react").MemoExoticComponent<typeof ReviewListComponent>;
15
+ export {};
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ import { Star } from 'lucide-react';
4
+ import { memo } from 'react';
5
+ import { Avatar } from '../Avatar/Avatar.js';
6
+ const ReviewListComponent = ({ className, reviews, ...props })=>/*#__PURE__*/ _jsx("div", {
7
+ className: cn('grid grid-cols-1 gap-6 lg:grid-cols-2', className),
8
+ "data-slot": "review-list",
9
+ ...props,
10
+ children: reviews.map((review)=>/*#__PURE__*/ _jsxs("figure", {
11
+ className: "rounded-lg border border-border bg-card p-6 shadow-sm dark:border-border-dark dark:bg-card-dark",
12
+ children: [
13
+ typeof review.rating === 'number' ? /*#__PURE__*/ _jsx("div", {
14
+ "aria-label": `${review.rating} out of 5 stars`,
15
+ className: "flex gap-1 text-primary dark:text-primary-dark",
16
+ children: Array.from({
17
+ length: 5
18
+ }, (_, index)=>/*#__PURE__*/ _jsx(Star, {
19
+ "aria-hidden": "true",
20
+ className: cn('size-4', index < review.rating ? 'fill-current' : 'opacity-25')
21
+ }, index))
22
+ }) : null,
23
+ review.title ? /*#__PURE__*/ _jsx("h3", {
24
+ className: "mt-4 text-base font-semibold text-foreground dark:text-foreground-dark",
25
+ children: review.title
26
+ }) : null,
27
+ /*#__PURE__*/ _jsx("blockquote", {
28
+ className: "mt-3 text-sm/6 text-muted-foreground dark:text-muted-foreground-dark",
29
+ children: review.body
30
+ }),
31
+ /*#__PURE__*/ _jsxs("figcaption", {
32
+ className: "mt-6 flex items-center gap-3",
33
+ children: [
34
+ /*#__PURE__*/ _jsx(Avatar, {
35
+ initials: review.author.slice(0, 2).toUpperCase(),
36
+ size: "sm",
37
+ src: review.avatarSrc
38
+ }),
39
+ /*#__PURE__*/ _jsx("span", {
40
+ className: "text-sm font-medium text-foreground dark:text-foreground-dark",
41
+ children: review.author
42
+ })
43
+ ]
44
+ })
45
+ ]
46
+ }, review.id ?? review.author))
47
+ });
48
+ export const ReviewList = /*#__PURE__*/ memo(ReviewListComponent);
49
+ ReviewList.displayName = 'ReviewList';
50
+
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Jldmlld0xpc3QvUmV2aWV3TGlzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7U3Rhcn0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7bWVtb30gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge0F2YXRhcn0gZnJvbSAnLi4vQXZhdGFyL0F2YXRhci5qcyc7XG5cbmltcG9ydCB0eXBlIHtIVE1MQXR0cmlidXRlcywgUmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aWV3SXRlbSB7XG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuICByZWFkb25seSBhdmF0YXJTcmM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJvZHk6IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHJlYWRvbmx5IHJhdGluZz86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGl0bGU/OiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aWV3TGlzdFByb3BzIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgcmVhZG9ubHkgcmV2aWV3czogUmV2aWV3SXRlbVtdO1xufVxuXG5jb25zdCBSZXZpZXdMaXN0Q29tcG9uZW50ID0gKHtcbiAgY2xhc3NOYW1lLFxuICByZXZpZXdzLFxuICAuLi5wcm9wc1xufTogUmV2aWV3TGlzdFByb3BzKSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtjbignZ3JpZCBncmlkLWNvbHMtMSBnYXAtNiBsZzpncmlkLWNvbHMtMicsIGNsYXNzTmFtZSl9IGRhdGEtc2xvdD1cInJldmlldy1saXN0XCIgey4uLnByb3BzfT5cbiAgICB7cmV2aWV3cy5tYXAoKHJldmlldykgPT4gKFxuICAgICAgPGZpZ3VyZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWNhcmQgcC02IHNoYWRvdy1zbSBkYXJrOmJvcmRlci1ib3JkZXItZGFyayBkYXJrOmJnLWNhcmQtZGFya1wiIGtleT17cmV2aWV3LmlkID8/IHJldmlldy5hdXRob3J9PlxuICAgICAgICB7dHlwZW9mIHJldmlldy5yYXRpbmcgPT09ICdudW1iZXInID8gKFxuICAgICAgICAgIDxkaXYgYXJpYS1sYWJlbD17YCR7cmV2aWV3LnJhdGluZ30gb3V0IG9mIDUgc3RhcnNgfSBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIHRleHQtcHJpbWFyeSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrXCI+XG4gICAgICAgICAgICB7QXJyYXkuZnJvbSh7bGVuZ3RoOiA1fSwgKF8sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBpbmRleCA8IHJldmlldy5yYXRpbmchID8gJ2ZpbGwtY3VycmVudCcgOiAnb3BhY2l0eS0yNScpfVxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtyZXZpZXcudGl0bGUgPyA8aDMgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQgZGFyazp0ZXh0LWZvcmVncm91bmQtZGFya1wiPntyZXZpZXcudGl0bGV9PC9oMz4gOiBudWxsfVxuICAgICAgICA8YmxvY2txdW90ZSBjbGFzc05hbWU9XCJtdC0zIHRleHQtc20vNiB0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQtZGFya1wiPntyZXZpZXcuYm9keX08L2Jsb2NrcXVvdGU+XG4gICAgICAgIDxmaWdjYXB0aW9uIGNsYXNzTmFtZT1cIm10LTYgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICA8QXZhdGFyIGluaXRpYWxzPXtyZXZpZXcuYXV0aG9yLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCl9IHNpemU9XCJzbVwiIHNyYz17cmV2aWV3LmF2YXRhclNyY30gLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBkYXJrOnRleHQtZm9yZWdyb3VuZC1kYXJrXCI+e3Jldmlldy5hdXRob3J9PC9zcGFuPlxuICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICA8L2ZpZ3VyZT5cbiAgICApKX1cbiAgPC9kaXY+XG4pO1xuXG5leHBvcnQgY29uc3QgUmV2aWV3TGlzdCA9IG1lbW8oUmV2aWV3TGlzdENvbXBvbmVudCk7XG5SZXZpZXdMaXN0LmRpc3BsYXlOYW1lID0gJ1Jldmlld0xpc3QnO1xuIl0sIm5hbWVzIjpbImNuIiwiU3RhciIsIm1lbW8iLCJBdmF0YXIiLCJSZXZpZXdMaXN0Q29tcG9uZW50IiwiY2xhc3NOYW1lIiwicmV2aWV3cyIsInByb3BzIiwiZGl2IiwiZGF0YS1zbG90IiwibWFwIiwicmV2aWV3IiwiZmlndXJlIiwicmF0aW5nIiwiYXJpYS1sYWJlbCIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsIl8iLCJpbmRleCIsImFyaWEtaGlkZGVuIiwidGl0bGUiLCJoMyIsImJsb2NrcXVvdGUiLCJib2R5IiwiZmlnY2FwdGlvbiIsImluaXRpYWxzIiwiYXV0aG9yIiwic2xpY2UiLCJ0b1VwcGVyQ2FzZSIsInNpemUiLCJzcmMiLCJhdmF0YXJTcmMiLCJzcGFuIiwiaWQiLCJSZXZpZXdMaXN0IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQUNoQyxTQUFRQyxJQUFJLFFBQU8sZUFBZTtBQUNsQyxTQUFRQyxJQUFJLFFBQU8sUUFBUTtBQUUzQixTQUFRQyxNQUFNLFFBQU8sc0JBQXNCO0FBaUIzQyxNQUFNQyxzQkFBc0IsQ0FBQyxFQUMzQkMsU0FBUyxFQUNUQyxPQUFPLEVBQ1AsR0FBR0MsT0FDYSxpQkFDaEIsS0FBQ0M7UUFBSUgsV0FBV0wsR0FBRyx5Q0FBeUNLO1FBQVlJLGFBQVU7UUFBZSxHQUFHRixLQUFLO2tCQUN0R0QsUUFBUUksR0FBRyxDQUFDLENBQUNDLHVCQUNaLE1BQUNDO2dCQUFPUCxXQUFVOztvQkFDZixPQUFPTSxPQUFPRSxNQUFNLEtBQUsseUJBQ3hCLEtBQUNMO3dCQUFJTSxjQUFZLEdBQUdILE9BQU9FLE1BQU0sQ0FBQyxlQUFlLENBQUM7d0JBQUVSLFdBQVU7a0NBQzNEVSxNQUFNQyxJQUFJLENBQUM7NEJBQUNDLFFBQVE7d0JBQUMsR0FBRyxDQUFDQyxHQUFHQyxzQkFDM0IsS0FBQ2xCO2dDQUNDbUIsZUFBWTtnQ0FDWmYsV0FBV0wsR0FBRyxVQUFVbUIsUUFBUVIsT0FBT0UsTUFBTSxHQUFJLGlCQUFpQjsrQkFDN0RNO3lCQUlUO29CQUNIUixPQUFPVSxLQUFLLGlCQUFHLEtBQUNDO3dCQUFHakIsV0FBVTtrQ0FBMEVNLE9BQU9VLEtBQUs7eUJBQVM7a0NBQzdILEtBQUNFO3dCQUFXbEIsV0FBVTtrQ0FBd0VNLE9BQU9hLElBQUk7O2tDQUN6RyxNQUFDQzt3QkFBV3BCLFdBQVU7OzBDQUNwQixLQUFDRjtnQ0FBT3VCLFVBQVVmLE9BQU9nQixNQUFNLENBQUNDLEtBQUssQ0FBQyxHQUFHLEdBQUdDLFdBQVc7Z0NBQUlDLE1BQUs7Z0NBQUtDLEtBQUtwQixPQUFPcUIsU0FBUzs7MENBQzFGLEtBQUNDO2dDQUFLNUIsV0FBVTswQ0FBaUVNLE9BQU9nQixNQUFNOzs7OztlQWhCdUJoQixPQUFPdUIsRUFBRSxJQUFJdkIsT0FBT2dCLE1BQU07O0FBdUJ6SixPQUFPLE1BQU1RLDJCQUFhakMsS0FBS0UscUJBQXFCO0FBQ3BEK0IsV0FBV0MsV0FBVyxHQUFHIn0=
@@ -0,0 +1,29 @@
1
+ import { ReviewList } from './ReviewList.js';
2
+ const meta = {
3
+ component: ReviewList,
4
+ parameters: {
5
+ layout: 'padded'
6
+ },
7
+ title: 'Ecommerce/ReviewList'
8
+ };
9
+ export default meta;
10
+ export const MultiColumn = {
11
+ args: {
12
+ reviews: [
13
+ {
14
+ author: 'Judith Black',
15
+ body: 'The quality is excellent and the packaging feels considered.',
16
+ rating: 5,
17
+ title: 'Worth it'
18
+ },
19
+ {
20
+ author: 'Leslie Alexander',
21
+ body: 'Beautiful details, quick shipping, and easy checkout.',
22
+ rating: 4,
23
+ title: 'Great experience'
24
+ }
25
+ ]
26
+ }
27
+ };
28
+
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Jldmlld0xpc3QvUmV2aWV3TGlzdC5zdG9yaWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Jldmlld0xpc3R9IGZyb20gJy4vUmV2aWV3TGlzdC5qcyc7XG5cbmltcG9ydCB0eXBlIHtNZXRhLCBTdG9yeU9ian0gZnJvbSAnQG5sYWJzL2xleC9zdG9yeWJvb2snO1xuXG5jb25zdCBtZXRhOiBNZXRhPHR5cGVvZiBSZXZpZXdMaXN0PiA9IHtcbiAgY29tcG9uZW50OiBSZXZpZXdMaXN0LFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgbGF5b3V0OiAncGFkZGVkJ1xuICB9LFxuICB0aXRsZTogJ0Vjb21tZXJjZS9SZXZpZXdMaXN0J1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWV0YTtcblxudHlwZSBTdG9yeSA9IFN0b3J5T2JqPHR5cGVvZiBSZXZpZXdMaXN0PjtcblxuZXhwb3J0IGNvbnN0IE11bHRpQ29sdW1uOiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIHJldmlld3M6IFtcbiAgICAgIHthdXRob3I6ICdKdWRpdGggQmxhY2snLCBib2R5OiAnVGhlIHF1YWxpdHkgaXMgZXhjZWxsZW50IGFuZCB0aGUgcGFja2FnaW5nIGZlZWxzIGNvbnNpZGVyZWQuJywgcmF0aW5nOiA1LCB0aXRsZTogJ1dvcnRoIGl0J30sXG4gICAgICB7YXV0aG9yOiAnTGVzbGllIEFsZXhhbmRlcicsIGJvZHk6ICdCZWF1dGlmdWwgZGV0YWlscywgcXVpY2sgc2hpcHBpbmcsIGFuZCBlYXN5IGNoZWNrb3V0LicsIHJhdGluZzogNCwgdGl0bGU6ICdHcmVhdCBleHBlcmllbmNlJ31cbiAgICBdXG4gIH1cbn07XG4iXSwibmFtZXMiOlsiUmV2aWV3TGlzdCIsIm1ldGEiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJNdWx0aUNvbHVtbiIsImFyZ3MiLCJyZXZpZXdzIiwiYXV0aG9yIiwiYm9keSIsInJhdGluZyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsVUFBVSxRQUFPLGtCQUFrQjtBQUkzQyxNQUFNQyxPQUFnQztJQUNwQ0MsV0FBV0Y7SUFDWEcsWUFBWTtRQUNWQyxRQUFRO0lBQ1Y7SUFDQUMsT0FBTztBQUNUO0FBRUEsZUFBZUosS0FBSztBQUlwQixPQUFPLE1BQU1LLGNBQXFCO0lBQ2hDQyxNQUFNO1FBQ0pDLFNBQVM7WUFDUDtnQkFBQ0MsUUFBUTtnQkFBZ0JDLE1BQU07Z0JBQWdFQyxRQUFRO2dCQUFHTixPQUFPO1lBQVU7WUFDM0g7Z0JBQUNJLFFBQVE7Z0JBQW9CQyxNQUFNO2dCQUF5REMsUUFBUTtnQkFBR04sT0FBTztZQUFrQjtTQUNqSTtJQUNIO0FBQ0YsRUFBRSJ9
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
3
+ readonly actions?: ReactNode;
4
+ readonly align?: 'left' | 'center';
5
+ readonly eyebrow?: ReactNode;
6
+ readonly subtitle?: ReactNode;
7
+ readonly title: ReactNode;
8
+ }
9
+ export declare const SectionHeader: ({ actions, align, children, className, eyebrow, subtitle, title, ...props }: SectionHeaderProps) => import("react").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ export const SectionHeader = ({ actions, align = 'left', children, className, eyebrow, subtitle, title, ...props })=>{
4
+ const actionClasses = actions && align === 'left' ? 'sm:max-w-none sm:flex-row sm:items-end sm:justify-between' : '';
5
+ return /*#__PURE__*/ _jsxs("div", {
6
+ className: cn('flex flex-col gap-4', align === 'center' ? 'mx-auto max-w-3xl items-center text-center' : 'max-w-3xl', actionClasses, className),
7
+ "data-slot": "section-header",
8
+ ...props,
9
+ children: [
10
+ /*#__PURE__*/ _jsxs("div", {
11
+ className: cn('min-w-0', align === 'center' && 'flex flex-col items-center'),
12
+ children: [
13
+ eyebrow ? /*#__PURE__*/ _jsx("p", {
14
+ className: "text-sm/6 font-semibold text-primary dark:text-primary-dark",
15
+ children: eyebrow
16
+ }) : null,
17
+ /*#__PURE__*/ _jsx("h2", {
18
+ className: "mt-2 text-3xl font-semibold tracking-tight text-foreground sm:text-4xl dark:text-foreground-dark",
19
+ children: title
20
+ }),
21
+ subtitle ? /*#__PURE__*/ _jsx("p", {
22
+ className: "mt-4 text-base/7 text-muted-foreground dark:text-muted-foreground-dark",
23
+ children: subtitle
24
+ }) : null,
25
+ children
26
+ ]
27
+ }),
28
+ actions ? /*#__PURE__*/ _jsx("div", {
29
+ className: "flex shrink-0 items-center gap-3",
30
+ children: actions
31
+ }) : null
32
+ ]
33
+ });
34
+ };
35
+
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1NlY3Rpb25IZWFkZXIvU2VjdGlvbkhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcblxuaW1wb3J0IHR5cGUge0hUTUxBdHRyaWJ1dGVzLCBSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBTZWN0aW9uSGVhZGVyUHJvcHMgZXh0ZW5kcyBPbWl0PEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiwgJ3RpdGxlJz4ge1xuICByZWFkb25seSBhY3Rpb25zPzogUmVhY3ROb2RlO1xuICByZWFkb25seSBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInO1xuICByZWFkb25seSBleWVicm93PzogUmVhY3ROb2RlO1xuICByZWFkb25seSBzdWJ0aXRsZT86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgdGl0bGU6IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IFNlY3Rpb25IZWFkZXIgPSAoe1xuICBhY3Rpb25zLFxuICBhbGlnbiA9ICdsZWZ0JyxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZXllYnJvdyxcbiAgc3VidGl0bGUsXG4gIHRpdGxlLFxuICAuLi5wcm9wc1xufTogU2VjdGlvbkhlYWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFjdGlvbkNsYXNzZXMgPSBhY3Rpb25zICYmIGFsaWduID09PSAnbGVmdCdcbiAgICA/ICdzbTptYXgtdy1ub25lIHNtOmZsZXgtcm93IHNtOml0ZW1zLWVuZCBzbTpqdXN0aWZ5LWJldHdlZW4nXG4gICAgOiAnJztcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGZsZXgtY29sIGdhcC00JyxcbiAgICAgICAgYWxpZ24gPT09ICdjZW50ZXInID8gJ214LWF1dG8gbWF4LXctM3hsIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlcicgOiAnbWF4LXctM3hsJyxcbiAgICAgICAgYWN0aW9uQ2xhc3NlcyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS1zbG90PVwic2VjdGlvbi1oZWFkZXJcIlxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbignbWluLXctMCcsIGFsaWduID09PSAnY2VudGVyJyAmJiAnZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXInKX0+XG4gICAgICAgIHtleWVicm93ID8gKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20vNiBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrXCI+e2V5ZWJyb3d9PC9wPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cIm10LTIgdGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LWZvcmVncm91bmQgc206dGV4dC00eGwgZGFyazp0ZXh0LWZvcmVncm91bmQtZGFya1wiPlxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAge3N1YnRpdGxlID8gKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTQgdGV4dC1iYXNlLzcgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kLWRhcmtcIj57c3VidGl0bGV9PC9wPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICB7YWN0aW9ucyA/IDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj57YWN0aW9uc308L2Rpdj4gOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJjbiIsIlNlY3Rpb25IZWFkZXIiLCJhY3Rpb25zIiwiYWxpZ24iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImV5ZWJyb3ciLCJzdWJ0aXRsZSIsInRpdGxlIiwicHJvcHMiLCJhY3Rpb25DbGFzc2VzIiwiZGl2IiwiZGF0YS1zbG90IiwicCIsImgyIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsRUFBRSxRQUFPLGVBQWU7QUFZaEMsT0FBTyxNQUFNQyxnQkFBZ0IsQ0FBQyxFQUM1QkMsT0FBTyxFQUNQQyxRQUFRLE1BQU0sRUFDZEMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxLQUFLLEVBQ0wsR0FBR0MsT0FDZ0I7SUFDbkIsTUFBTUMsZ0JBQWdCUixXQUFXQyxVQUFVLFNBQ3ZDLDhEQUNBO0lBRUoscUJBQ0UsTUFBQ1E7UUFDQ04sV0FBV0wsR0FDVCx1QkFDQUcsVUFBVSxXQUFXLCtDQUErQyxhQUNwRU8sZUFDQUw7UUFFRk8sYUFBVTtRQUNULEdBQUdILEtBQUs7OzBCQUVULE1BQUNFO2dCQUFJTixXQUFXTCxHQUFHLFdBQVdHLFVBQVUsWUFBWTs7b0JBQ2pERyx3QkFDQyxLQUFDTzt3QkFBRVIsV0FBVTtrQ0FBK0RDO3lCQUMxRTtrQ0FDSixLQUFDUTt3QkFBR1QsV0FBVTtrQ0FDWEc7O29CQUVGRCx5QkFDQyxLQUFDTTt3QkFBRVIsV0FBVTtrQ0FBMEVFO3lCQUNyRjtvQkFDSEg7OztZQUVGRix3QkFBVSxLQUFDUztnQkFBSU4sV0FBVTswQkFBb0NIO2lCQUFpQjs7O0FBR3JGLEVBQUUifQ==
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { interactWithCanvas } from '../../utils/storyInteractions.js';
4
+ import { Button } from '../Button/Button.js';
5
+ import { SectionHeader } from './SectionHeader.js';
6
+ const meta = {
7
+ component: SectionHeader,
8
+ parameters: {
9
+ layout: 'padded'
10
+ },
11
+ title: 'Marketing/Sections/SectionHeader'
12
+ };
13
+ export default meta;
14
+ export const Default = {
15
+ args: {
16
+ eyebrow: 'Deploy faster',
17
+ subtitle: 'Composable section headers for marketing and application surfaces.',
18
+ title: 'Everything you need to ship'
19
+ },
20
+ play: interactWithCanvas
21
+ };
22
+ export const WithAction = {
23
+ play: interactWithCanvas,
24
+ render: ()=>/*#__PURE__*/ _jsx(SectionHeader, {
25
+ actions: /*#__PURE__*/ _jsx(Button, {
26
+ label: "View all",
27
+ size: "sm",
28
+ variant: "outlined"
29
+ }),
30
+ subtitle: "A compact page heading with a trailing action.",
31
+ title: "Recent activity"
32
+ })
33
+ };
34
+
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1NlY3Rpb25IZWFkZXIvU2VjdGlvbkhlYWRlci5zdG9yaWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge2ludGVyYWN0V2l0aENhbnZhc30gZnJvbSAnLi4vLi4vdXRpbHMvc3RvcnlJbnRlcmFjdGlvbnMuanMnO1xuaW1wb3J0IHtCdXR0b259IGZyb20gJy4uL0J1dHRvbi9CdXR0b24uanMnO1xuaW1wb3J0IHtTZWN0aW9uSGVhZGVyfSBmcm9tICcuL1NlY3Rpb25IZWFkZXIuanMnO1xuXG5pbXBvcnQgdHlwZSB7TWV0YSwgU3RvcnlPYmp9IGZyb20gJ0BubGFicy9sZXgvc3Rvcnlib29rJztcblxuY29uc3QgbWV0YTogTWV0YTx0eXBlb2YgU2VjdGlvbkhlYWRlcj4gPSB7XG4gIGNvbXBvbmVudDogU2VjdGlvbkhlYWRlcixcbiAgcGFyYW1ldGVyczoge1xuICAgIGxheW91dDogJ3BhZGRlZCdcbiAgfSxcbiAgdGl0bGU6ICdNYXJrZXRpbmcvU2VjdGlvbnMvU2VjdGlvbkhlYWRlcidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgU2VjdGlvbkhlYWRlcj47XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0OiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGV5ZWJyb3c6ICdEZXBsb3kgZmFzdGVyJyxcbiAgICBzdWJ0aXRsZTogJ0NvbXBvc2FibGUgc2VjdGlvbiBoZWFkZXJzIGZvciBtYXJrZXRpbmcgYW5kIGFwcGxpY2F0aW9uIHN1cmZhY2VzLicsXG4gICAgdGl0bGU6ICdFdmVyeXRoaW5nIHlvdSBuZWVkIHRvIHNoaXAnXG4gIH0sXG4gIHBsYXk6IGludGVyYWN0V2l0aENhbnZhc1xufTtcblxuZXhwb3J0IGNvbnN0IFdpdGhBY3Rpb246IFN0b3J5ID0ge1xuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXMsXG4gIHJlbmRlcjogKCkgPT4gKFxuICAgIDxTZWN0aW9uSGVhZGVyXG4gICAgICBhY3Rpb25zPXs8QnV0dG9uIGxhYmVsPVwiVmlldyBhbGxcIiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZWRcIiAvPn1cbiAgICAgIHN1YnRpdGxlPVwiQSBjb21wYWN0IHBhZ2UgaGVhZGluZyB3aXRoIGEgdHJhaWxpbmcgYWN0aW9uLlwiXG4gICAgICB0aXRsZT1cIlJlY2VudCBhY3Rpdml0eVwiXG4gICAgLz5cbiAgKVxufTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsImludGVyYWN0V2l0aENhbnZhcyIsIkJ1dHRvbiIsIlNlY3Rpb25IZWFkZXIiLCJtZXRhIiwiY29tcG9uZW50IiwicGFyYW1ldGVycyIsImxheW91dCIsInRpdGxlIiwiRGVmYXVsdCIsImFyZ3MiLCJleWVicm93Iiwic3VidGl0bGUiLCJwbGF5IiwiV2l0aEFjdGlvbiIsInJlbmRlciIsImFjdGlvbnMiLCJsYWJlbCIsInNpemUiLCJ2YXJpYW50Il0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsV0FBVyxRQUFRO0FBRTFCLFNBQVFDLGtCQUFrQixRQUFPLG1DQUFtQztBQUNwRSxTQUFRQyxNQUFNLFFBQU8sc0JBQXNCO0FBQzNDLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFJakQsTUFBTUMsT0FBbUM7SUFDdkNDLFdBQVdGO0lBQ1hHLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVKLEtBQUs7QUFJcEIsT0FBTyxNQUFNSyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKQyxTQUFTO1FBQ1RDLFVBQVU7UUFDVkosT0FBTztJQUNUO0lBQ0FLLE1BQU1aO0FBQ1IsRUFBRTtBQUVGLE9BQU8sTUFBTWEsYUFBb0I7SUFDL0JELE1BQU1aO0lBQ05jLFFBQVEsa0JBQ04sS0FBQ1o7WUFDQ2EsdUJBQVMsS0FBQ2Q7Z0JBQU9lLE9BQU07Z0JBQVdDLE1BQUs7Z0JBQUtDLFNBQVE7O1lBQ3BEUCxVQUFTO1lBQ1RKLE9BQU07O0FBR1osRUFBRSJ9
@@ -0,0 +1,18 @@
1
+ import { InputBorderType } from '../InputField/InputField.js';
2
+ import { SelectFieldOption } from './SelectOption.js';
3
+ import type { GothamColor } from '../../utils/colorUtils.js';
4
+ export type SelectFieldProps = {
5
+ readonly backgroundColor?: GothamColor;
6
+ readonly borderColor?: GothamColor;
7
+ readonly borderType?: InputBorderType;
8
+ readonly className?: string;
9
+ readonly color?: GothamColor;
10
+ readonly defaultValue?: string;
11
+ readonly label?: string;
12
+ readonly labelColor?: GothamColor;
13
+ readonly labelClass?: string;
14
+ readonly name: string;
15
+ readonly options: SelectFieldOption[];
16
+ readonly showChevron?: boolean;
17
+ };
18
+ export declare const SelectField: import("react").NamedExoticComponent<SelectFieldProps>;
@@ -0,0 +1,145 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Label, Listbox, ListboxButton, ListboxOptions } from '@headlessui/react';
4
+ import { cn } from '@nlabs/utils';
5
+ import { ChevronDown } from 'lucide-react';
6
+ import { memo, useMemo, useState } from 'react';
7
+ import { useIsMobile } from '../../hooks/useIsMobile.js';
8
+ import { getBackgroundClasses, getOutlineClasses, getTextClasses } from '../../utils/colorUtils.js';
9
+ import { useGothamFormField } from '../Form/FormContext.js';
10
+ import { getInputBorderClass } from '../InputField/InputField.js';
11
+ import { Svg } from '../Svg/Svg.js';
12
+ import { SelectOption } from './SelectOption.js';
13
+ const SelectFieldComponent = ({ backgroundColor = 'transparent', borderColor = 'black', borderType = 'solid', className = 'cursor-default grid outline-1 w-full grid-cols-1 rounded-md px-3.5 py-2 text-left sm:text-sm/6', color = 'primary', defaultValue, label, labelClass, labelColor = 'neutral', name, options, showChevron = true })=>{
14
+ const isMobile = useIsMobile();
15
+ const form = useGothamFormField(name);
16
+ const [localValue, setLocalValue] = useState(defaultValue ?? '');
17
+ const fieldValue = form?.value ?? localValue;
18
+ const normalizedFieldValue = fieldValue === undefined || fieldValue === null ? '' : String(fieldValue);
19
+ const selectClasses = useMemo(()=>cn('flex relative w-full', getInputBorderClass(borderType, borderColor, color, 'transparent'), className), [
20
+ borderType,
21
+ borderColor,
22
+ color,
23
+ className
24
+ ]);
25
+ const nativeSelectClasses = useMemo(()=>cn(selectClasses, 'appearance-none', {
26
+ 'pr-10': showChevron
27
+ }), [
28
+ selectClasses,
29
+ showChevron
30
+ ]);
31
+ const labelClasses = useMemo(()=>cn(labelClass, 'block text-sm/6 font-medium', getTextClasses(labelColor)), [
32
+ labelClass,
33
+ labelColor
34
+ ]);
35
+ const optionsClasses = useMemo(()=>cn('absolute z-10 max-h-56 w-full overflow-auto rounded-md py-1 text-base focus:outline-hidden data-leave:transition data-leave:duration-100 data-leave:ease-in data-closed:data-leave:opacity-0 sm:text-sm', getBackgroundClasses('white'), getOutlineClasses(color, {
36
+ hasFocus: true,
37
+ hasHover: true
38
+ })), [
39
+ backgroundColor,
40
+ color
41
+ ]);
42
+ const chevronClasses = useMemo(()=>cn('col-start-1 row-start-1 mr-3 size-5 self-center justify-self-end sm:size-4', getTextClasses(color)), [
43
+ color
44
+ ]);
45
+ const selected = useMemo(()=>options.find((option)=>String(option?.value) === normalizedFieldValue), [
46
+ normalizedFieldValue,
47
+ options
48
+ ]);
49
+ const onChange = (value)=>{
50
+ if (!form) {
51
+ setLocalValue(String(value));
52
+ }
53
+ form?.setValue(name, String(value));
54
+ form?.clearError(name);
55
+ };
56
+ return isMobile ? /*#__PURE__*/ _jsxs("div", {
57
+ className: "relative w-full",
58
+ children: [
59
+ /*#__PURE__*/ _jsx("select", {
60
+ className: nativeSelectClasses,
61
+ name: name,
62
+ onChange: (event)=>onChange(event.target.value),
63
+ value: normalizedFieldValue,
64
+ children: options.map((option)=>/*#__PURE__*/ _jsx("option", {
65
+ value: String(option.value),
66
+ children: option.label
67
+ }, option.id))
68
+ }),
69
+ showChevron ? /*#__PURE__*/ _jsx(ChevronDown, {
70
+ "aria-hidden": "true",
71
+ className: cn('pointer-events-none absolute right-3 top-1/2 size-5 -translate-y-1/2', getTextClasses(color))
72
+ }) : null
73
+ ]
74
+ }) : /*#__PURE__*/ _jsx("div", {
75
+ className: "flex flex-col w-full",
76
+ children: /*#__PURE__*/ _jsxs(Listbox, {
77
+ onChange: onChange,
78
+ value: normalizedFieldValue,
79
+ children: [
80
+ /*#__PURE__*/ _jsx(Label, {
81
+ className: labelClasses,
82
+ children: label
83
+ }),
84
+ /*#__PURE__*/ _jsx("select", {
85
+ hidden: true,
86
+ name: name,
87
+ onChange: (event)=>onChange(event.target.value),
88
+ value: normalizedFieldValue,
89
+ children: options.map((option)=>/*#__PURE__*/ _jsx("option", {
90
+ value: String(option.value),
91
+ children: option.label
92
+ }, option.id))
93
+ }),
94
+ /*#__PURE__*/ _jsxs("div", {
95
+ className: cn('flex flex-col relative w-full', {
96
+ 'mt-2': label
97
+ }),
98
+ children: [
99
+ /*#__PURE__*/ _jsxs(ListboxButton, {
100
+ className: selectClasses,
101
+ children: [
102
+ /*#__PURE__*/ _jsxs("span", {
103
+ className: "col-start-1 row-start-1 flex items-center gap-3 pr-6",
104
+ children: [
105
+ selected?.image && /*#__PURE__*/ _jsx("img", {
106
+ alt: "",
107
+ className: "size-5 shrink-0 rounded-full",
108
+ src: selected.image
109
+ }),
110
+ selected?.icon && /*#__PURE__*/ _jsx(Svg, {
111
+ className: "size-5 shrink-0 rounded-full",
112
+ name: selected.icon
113
+ }),
114
+ /*#__PURE__*/ _jsxs("span", {
115
+ className: "block truncate",
116
+ children: [
117
+ selected?.label,
118
+ " "
119
+ ]
120
+ })
121
+ ]
122
+ }),
123
+ showChevron ? /*#__PURE__*/ _jsx(ChevronDown, {
124
+ "aria-hidden": "true",
125
+ className: chevronClasses
126
+ }) : null
127
+ ]
128
+ }),
129
+ /*#__PURE__*/ _jsx(ListboxOptions, {
130
+ className: optionsClasses,
131
+ transition: true,
132
+ children: options.map((option)=>option && /*#__PURE__*/ _jsx(SelectOption, {
133
+ option: option
134
+ }, option?.id || option?.label))
135
+ })
136
+ ]
137
+ })
138
+ ]
139
+ })
140
+ });
141
+ };
142
+ export const SelectField = /*#__PURE__*/ memo(SelectFieldComponent);
143
+ SelectField.displayName = 'SelectField';
144
+
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1NlbGVjdEZpZWxkL1NlbGVjdEZpZWxkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7TGFiZWwsIExpc3Rib3gsIExpc3Rib3hCdXR0b24sIExpc3Rib3hPcHRpb25zfSBmcm9tICdAaGVhZGxlc3N1aS9yZWFjdCc7XG5pbXBvcnQge2NufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHtDaGV2cm9uRG93bn0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7bWVtbywgdXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHt1c2VJc01vYmlsZX0gZnJvbSAnLi4vLi4vaG9va3MvdXNlSXNNb2JpbGUuanMnO1xuaW1wb3J0IHtnZXRCYWNrZ3JvdW5kQ2xhc3NlcywgZ2V0T3V0bGluZUNsYXNzZXMsIGdldFRleHRDbGFzc2VzfSBmcm9tICcuLi8uLi91dGlscy9jb2xvclV0aWxzLmpzJztcbmltcG9ydCB7dXNlR290aGFtRm9ybUZpZWxkfSBmcm9tICcuLi9Gb3JtL0Zvcm1Db250ZXh0LmpzJztcbmltcG9ydCB7SW5wdXRCb3JkZXJUeXBlLCBnZXRJbnB1dEJvcmRlckNsYXNzfSBmcm9tICcuLi9JbnB1dEZpZWxkL0lucHV0RmllbGQuanMnO1xuaW1wb3J0IHtTdmd9IGZyb20gJy4uL1N2Zy9TdmcuanMnO1xuaW1wb3J0IHtTZWxlY3RGaWVsZE9wdGlvbiwgU2VsZWN0T3B0aW9ufSBmcm9tICcuL1NlbGVjdE9wdGlvbi5qcyc7XG5cbmltcG9ydCB0eXBlIHtGQ30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0dvdGhhbUNvbG9yfSBmcm9tICcuLi8uLi91dGlscy9jb2xvclV0aWxzLmpzJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0RmllbGRQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZENvbG9yPzogR290aGFtQ29sb3I7XG4gIHJlYWRvbmx5IGJvcmRlckNvbG9yPzogR290aGFtQ29sb3I7XG4gIHJlYWRvbmx5IGJvcmRlclR5cGU/OiBJbnB1dEJvcmRlclR5cGU7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29sb3I/OiBHb3RoYW1Db2xvcjtcbiAgcmVhZG9ubHkgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWxDb2xvcj86IEdvdGhhbUNvbG9yO1xuICByZWFkb25seSBsYWJlbENsYXNzPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFNlbGVjdEZpZWxkT3B0aW9uW107XG4gIHJlYWRvbmx5IHNob3dDaGV2cm9uPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFNlbGVjdEZpZWxkQ29tcG9uZW50OiBGQzxTZWxlY3RGaWVsZFByb3BzPiA9ICh7XG4gIGJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCcsXG4gIGJvcmRlckNvbG9yID0gJ2JsYWNrJyxcbiAgYm9yZGVyVHlwZSA9ICdzb2xpZCcsXG4gIGNsYXNzTmFtZSA9ICdjdXJzb3ItZGVmYXVsdCBncmlkIG91dGxpbmUtMSB3LWZ1bGwgZ3JpZC1jb2xzLTEgcm91bmRlZC1tZCBweC0zLjUgcHktMiB0ZXh0LWxlZnQgc206dGV4dC1zbS82JyxcbiAgY29sb3IgPSAncHJpbWFyeScsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbGFiZWwsXG4gIGxhYmVsQ2xhc3MsXG4gIGxhYmVsQ29sb3IgPSAnbmV1dHJhbCcsXG4gIG5hbWUsXG4gIG9wdGlvbnMsXG4gIHNob3dDaGV2cm9uID0gdHJ1ZVxufSkgPT4ge1xuICBjb25zdCBpc01vYmlsZSA9IHVzZUlzTW9iaWxlKCk7XG4gIGNvbnN0IGZvcm0gPSB1c2VHb3RoYW1Gb3JtRmllbGQobmFtZSk7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKGRlZmF1bHRWYWx1ZSA/PyAnJyk7XG4gIGNvbnN0IGZpZWxkVmFsdWUgPSBmb3JtPy52YWx1ZSA/PyBsb2NhbFZhbHVlO1xuICBjb25zdCBub3JtYWxpemVkRmllbGRWYWx1ZSA9IGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsID8gJycgOiBTdHJpbmcoZmllbGRWYWx1ZSk7XG4gIGNvbnN0IHNlbGVjdENsYXNzZXMgPSB1c2VNZW1vKCgpID0+IGNuKFxuICAgICdmbGV4IHJlbGF0aXZlIHctZnVsbCcsXG4gICAgZ2V0SW5wdXRCb3JkZXJDbGFzcyhib3JkZXJUeXBlLCBib3JkZXJDb2xvciwgY29sb3IsICd0cmFuc3BhcmVudCcpLCBjbGFzc05hbWUpLCBbYm9yZGVyVHlwZSwgYm9yZGVyQ29sb3IsIGNvbG9yLCBjbGFzc05hbWVdXG4gICk7XG4gIGNvbnN0IG5hdGl2ZVNlbGVjdENsYXNzZXMgPSB1c2VNZW1vKCgpID0+IGNuKFxuICAgIHNlbGVjdENsYXNzZXMsXG4gICAgJ2FwcGVhcmFuY2Utbm9uZScsXG4gICAgeydwci0xMCc6IHNob3dDaGV2cm9ufVxuICApLCBbc2VsZWN0Q2xhc3Nlcywgc2hvd0NoZXZyb25dKTtcbiAgY29uc3QgbGFiZWxDbGFzc2VzID0gdXNlTWVtbygoKSA9PiBjbihcbiAgICBsYWJlbENsYXNzLFxuICAgICdibG9jayB0ZXh0LXNtLzYgZm9udC1tZWRpdW0nLFxuICAgIGdldFRleHRDbGFzc2VzKGxhYmVsQ29sb3IpXG4gICksIFtsYWJlbENsYXNzLCBsYWJlbENvbG9yXSk7XG4gIGNvbnN0IG9wdGlvbnNDbGFzc2VzID0gdXNlTWVtbygoKSA9PiBjbihcbiAgICAnYWJzb2x1dGUgei0xMCBtYXgtaC01NiB3LWZ1bGwgb3ZlcmZsb3ctYXV0byByb3VuZGVkLW1kIHB5LTEgdGV4dC1iYXNlIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRhdGEtbGVhdmU6dHJhbnNpdGlvbiBkYXRhLWxlYXZlOmR1cmF0aW9uLTEwMCBkYXRhLWxlYXZlOmVhc2UtaW4gZGF0YS1jbG9zZWQ6ZGF0YS1sZWF2ZTpvcGFjaXR5LTAgc206dGV4dC1zbScsXG4gICAgZ2V0QmFja2dyb3VuZENsYXNzZXMoJ3doaXRlJyksXG4gICAgZ2V0T3V0bGluZUNsYXNzZXMoY29sb3IsIHtoYXNGb2N1czogdHJ1ZSwgaGFzSG92ZXI6IHRydWV9KVxuICApLCBbYmFja2dyb3VuZENvbG9yLCBjb2xvcl0pO1xuICBjb25zdCBjaGV2cm9uQ2xhc3NlcyA9IHVzZU1lbW8oKCkgPT4gY24oXG4gICAgJ2NvbC1zdGFydC0xIHJvdy1zdGFydC0xIG1yLTMgc2l6ZS01IHNlbGYtY2VudGVyIGp1c3RpZnktc2VsZi1lbmQgc206c2l6ZS00JyxcbiAgICBnZXRUZXh0Q2xhc3Nlcyhjb2xvcilcbiAgKSwgW2NvbG9yXSk7XG4gIGNvbnN0IHNlbGVjdGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gU3RyaW5nKG9wdGlvbj8udmFsdWUpID09PSBub3JtYWxpemVkRmllbGRWYWx1ZSksXG4gICAgW25vcm1hbGl6ZWRGaWVsZFZhbHVlLCBvcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZighZm9ybSkge1xuICAgICAgc2V0TG9jYWxWYWx1ZShTdHJpbmcodmFsdWUpKTtcbiAgICB9XG4gICAgZm9ybT8uc2V0VmFsdWUobmFtZSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgZm9ybT8uY2xlYXJFcnJvcihuYW1lKTtcbiAgfTtcblxuICByZXR1cm4gaXNNb2JpbGUgPyAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgY2xhc3NOYW1lPXtuYXRpdmVTZWxlY3RDbGFzc2VzfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICB2YWx1ZT17bm9ybWFsaXplZEZpZWxkVmFsdWV9PlxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHRpb24uaWR9IHZhbHVlPXtTdHJpbmcob3B0aW9uLnZhbHVlKX0+e29wdGlvbi5sYWJlbH08L29wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIHtzaG93Q2hldnJvbiA/IChcbiAgICAgICAgPENoZXZyb25Eb3duXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTMgdG9wLTEvMiBzaXplLTUgLXRyYW5zbGF0ZS15LTEvMicsIGdldFRleHRDbGFzc2VzKGNvbG9yKSl9XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICA8TGlzdGJveCBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXtub3JtYWxpemVkRmllbGRWYWx1ZX0+XG4gICAgICAgIDxMYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3Nlc30+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICA8L0xhYmVsPlxuICAgICAgICA8c2VsZWN0IGhpZGRlbiBuYW1lPXtuYW1lfSBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfSB2YWx1ZT17bm9ybWFsaXplZEZpZWxkVmFsdWV9PlxuICAgICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0aW9uLmlkfSB2YWx1ZT17U3RyaW5nKG9wdGlvbi52YWx1ZSl9PntvcHRpb24ubGFiZWx9PC9vcHRpb24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgcmVsYXRpdmUgdy1mdWxsJywgeydtdC0yJzogbGFiZWx9KX0+XG4gICAgICAgICAgPExpc3Rib3hCdXR0b24gY2xhc3NOYW1lPXtzZWxlY3RDbGFzc2VzfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNvbC1zdGFydC0xIHJvdy1zdGFydC0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHByLTZcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkPy5pbWFnZSAmJiA8aW1nIGFsdD1cIlwiIGNsYXNzTmFtZT1cInNpemUtNSBzaHJpbmstMCByb3VuZGVkLWZ1bGxcIiBzcmM9e3NlbGVjdGVkLmltYWdlfSAvPn1cbiAgICAgICAgICAgICAge3NlbGVjdGVkPy5pY29uICYmIDxTdmcgY2xhc3NOYW1lPVwic2l6ZS01IHNocmluay0wIHJvdW5kZWQtZnVsbFwiIG5hbWU9e3NlbGVjdGVkLmljb259IC8+fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJibG9jayB0cnVuY2F0ZVwiPntzZWxlY3RlZD8ubGFiZWx9Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAge3Nob3dDaGV2cm9uID8gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd25cbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2hldnJvbkNsYXNzZXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L0xpc3Rib3hCdXR0b24+XG5cbiAgICAgICAgICA8TGlzdGJveE9wdGlvbnNcbiAgICAgICAgICAgIGNsYXNzTmFtZT17b3B0aW9uc0NsYXNzZXN9XG4gICAgICAgICAgICB0cmFuc2l0aW9uXG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbiAmJiAoXG4gICAgICAgICAgICAgIDxTZWxlY3RPcHRpb24ga2V5PXtvcHRpb24/LmlkIHx8IG9wdGlvbj8ubGFiZWx9IG9wdGlvbj17b3B0aW9ufSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9MaXN0Ym94T3B0aW9ucz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0xpc3Rib3g+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgU2VsZWN0RmllbGQgPSBtZW1vKFNlbGVjdEZpZWxkQ29tcG9uZW50KTtcblNlbGVjdEZpZWxkLmRpc3BsYXlOYW1lID0gJ1NlbGVjdEZpZWxkJztcbiJdLCJuYW1lcyI6WyJMYWJlbCIsIkxpc3Rib3giLCJMaXN0Ym94QnV0dG9uIiwiTGlzdGJveE9wdGlvbnMiLCJjbiIsIkNoZXZyb25Eb3duIiwibWVtbyIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUlzTW9iaWxlIiwiZ2V0QmFja2dyb3VuZENsYXNzZXMiLCJnZXRPdXRsaW5lQ2xhc3NlcyIsImdldFRleHRDbGFzc2VzIiwidXNlR290aGFtRm9ybUZpZWxkIiwiZ2V0SW5wdXRCb3JkZXJDbGFzcyIsIlN2ZyIsIlNlbGVjdE9wdGlvbiIsIlNlbGVjdEZpZWxkQ29tcG9uZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUeXBlIiwiY2xhc3NOYW1lIiwiY29sb3IiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJsYWJlbENvbG9yIiwibmFtZSIsIm9wdGlvbnMiLCJzaG93Q2hldnJvbiIsImlzTW9iaWxlIiwiZm9ybSIsImxvY2FsVmFsdWUiLCJzZXRMb2NhbFZhbHVlIiwiZmllbGRWYWx1ZSIsInZhbHVlIiwibm9ybWFsaXplZEZpZWxkVmFsdWUiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJzZWxlY3RDbGFzc2VzIiwibmF0aXZlU2VsZWN0Q2xhc3NlcyIsImxhYmVsQ2xhc3NlcyIsIm9wdGlvbnNDbGFzc2VzIiwiaGFzRm9jdXMiLCJoYXNIb3ZlciIsImNoZXZyb25DbGFzc2VzIiwic2VsZWN0ZWQiLCJmaW5kIiwib3B0aW9uIiwib25DaGFuZ2UiLCJzZXRWYWx1ZSIsImNsZWFyRXJyb3IiLCJkaXYiLCJzZWxlY3QiLCJldmVudCIsInRhcmdldCIsIm1hcCIsImlkIiwiYXJpYS1oaWRkZW4iLCJoaWRkZW4iLCJzcGFuIiwiaW1hZ2UiLCJpbWciLCJhbHQiLCJzcmMiLCJpY29uIiwidHJhbnNpdGlvbiIsIlNlbGVjdEZpZWxkIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLFNBQVFBLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsUUFBTyxvQkFBb0I7QUFDaEYsU0FBUUMsRUFBRSxRQUFPLGVBQWU7QUFDaEMsU0FBUUMsV0FBVyxRQUFPLGVBQWU7QUFDekMsU0FBUUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBTyxRQUFRO0FBRTlDLFNBQVFDLFdBQVcsUUFBTyw2QkFBNkI7QUFDdkQsU0FBUUMsb0JBQW9CLEVBQUVDLGlCQUFpQixFQUFFQyxjQUFjLFFBQU8sNEJBQTRCO0FBQ2xHLFNBQVFDLGtCQUFrQixRQUFPLHlCQUF5QjtBQUMxRCxTQUF5QkMsbUJBQW1CLFFBQU8sOEJBQThCO0FBQ2pGLFNBQVFDLEdBQUcsUUFBTyxnQkFBZ0I7QUFDbEMsU0FBMkJDLFlBQVksUUFBTyxvQkFBb0I7QUFvQmxFLE1BQU1DLHVCQUE2QyxDQUFDLEVBQ2xEQyxrQkFBa0IsYUFBYSxFQUMvQkMsY0FBYyxPQUFPLEVBQ3JCQyxhQUFhLE9BQU8sRUFDcEJDLFlBQVksZ0dBQWdHLEVBQzVHQyxRQUFRLFNBQVMsRUFDakJDLFlBQVksRUFDWkMsS0FBSyxFQUNMQyxVQUFVLEVBQ1ZDLGFBQWEsU0FBUyxFQUN0QkMsSUFBSSxFQUNKQyxPQUFPLEVBQ1BDLGNBQWMsSUFBSSxFQUNuQjtJQUNDLE1BQU1DLFdBQVdyQjtJQUNqQixNQUFNc0IsT0FBT2xCLG1CQUFtQmM7SUFDaEMsTUFBTSxDQUFDSyxZQUFZQyxjQUFjLEdBQUd6QixTQUFTZSxnQkFBZ0I7SUFDN0QsTUFBTVcsYUFBYUgsTUFBTUksU0FBU0g7SUFDbEMsTUFBTUksdUJBQXVCRixlQUFlRyxhQUFhSCxlQUFlLE9BQU8sS0FBS0ksT0FBT0o7SUFDM0YsTUFBTUssZ0JBQWdCaEMsUUFBUSxJQUFNSCxHQUNsQyx3QkFDQVUsb0JBQW9CTSxZQUFZRCxhQUFhRyxPQUFPLGdCQUFnQkQsWUFBWTtRQUFDRDtRQUFZRDtRQUFhRztRQUFPRDtLQUFVO0lBRTdILE1BQU1tQixzQkFBc0JqQyxRQUFRLElBQU1ILEdBQ3hDbUMsZUFDQSxtQkFDQTtZQUFDLFNBQVNWO1FBQVcsSUFDcEI7UUFBQ1U7UUFBZVY7S0FBWTtJQUMvQixNQUFNWSxlQUFlbEMsUUFBUSxJQUFNSCxHQUNqQ3FCLFlBQ0EsK0JBQ0FiLGVBQWVjLGNBQ2Q7UUFBQ0Q7UUFBWUM7S0FBVztJQUMzQixNQUFNZ0IsaUJBQWlCbkMsUUFBUSxJQUFNSCxHQUNuQywyTUFDQU0scUJBQXFCLFVBQ3JCQyxrQkFBa0JXLE9BQU87WUFBQ3FCLFVBQVU7WUFBTUMsVUFBVTtRQUFJLEtBQ3ZEO1FBQUMxQjtRQUFpQkk7S0FBTTtJQUMzQixNQUFNdUIsaUJBQWlCdEMsUUFBUSxJQUFNSCxHQUNuQyw4RUFDQVEsZUFBZVUsU0FDZDtRQUFDQTtLQUFNO0lBQ1YsTUFBTXdCLFdBQVd2QyxRQUNmLElBQU1xQixRQUFRbUIsSUFBSSxDQUFDLENBQUNDLFNBQVdWLE9BQU9VLFFBQVFiLFdBQVdDLHVCQUN6RDtRQUFDQTtRQUFzQlI7S0FBUTtJQUdqQyxNQUFNcUIsV0FBVyxDQUFDZDtRQUNoQixJQUFHLENBQUNKLE1BQU07WUFDUkUsY0FBY0ssT0FBT0g7UUFDdkI7UUFDQUosTUFBTW1CLFNBQVN2QixNQUFNVyxPQUFPSDtRQUM1QkosTUFBTW9CLFdBQVd4QjtJQUNuQjtJQUVBLE9BQU9HLHlCQUNMLE1BQUNzQjtRQUFJL0IsV0FBVTs7MEJBQ2IsS0FBQ2dDO2dCQUNDaEMsV0FBV21CO2dCQUNYYixNQUFNQTtnQkFDTnNCLFVBQVUsQ0FBQ0ssUUFBVUwsU0FBU0ssTUFBTUMsTUFBTSxDQUFDcEIsS0FBSztnQkFDaERBLE9BQU9DOzBCQUNOUixRQUFRNEIsR0FBRyxDQUFDLENBQUNSLHVCQUNaLEtBQUNBO3dCQUF1QmIsT0FBT0csT0FBT1UsT0FBT2IsS0FBSztrQ0FBSWEsT0FBT3hCLEtBQUs7dUJBQXJEd0IsT0FBT1MsRUFBRTs7WUFHekI1Qiw0QkFDQyxLQUFDeEI7Z0JBQ0NxRCxlQUFZO2dCQUNackMsV0FBV2pCLEdBQUcsd0VBQXdFUSxlQUFlVTtpQkFFckc7O3VCQUdOLEtBQUM4QjtRQUFJL0IsV0FBVTtrQkFDYixjQUFBLE1BQUNwQjtZQUFRZ0QsVUFBVUE7WUFBVWQsT0FBT0M7OzhCQUNsQyxLQUFDcEM7b0JBQU1xQixXQUFXb0I7OEJBQ2ZqQjs7OEJBRUgsS0FBQzZCO29CQUFPTSxNQUFNO29CQUFDaEMsTUFBTUE7b0JBQU1zQixVQUFVLENBQUNLLFFBQVVMLFNBQVNLLE1BQU1DLE1BQU0sQ0FBQ3BCLEtBQUs7b0JBQUdBLE9BQU9DOzhCQUNsRlIsUUFBUTRCLEdBQUcsQ0FBQyxDQUFDUix1QkFDWixLQUFDQTs0QkFBdUJiLE9BQU9HLE9BQU9VLE9BQU9iLEtBQUs7c0NBQUlhLE9BQU94QixLQUFLOzJCQUFyRHdCLE9BQU9TLEVBQUU7OzhCQUcxQixNQUFDTDtvQkFBSS9CLFdBQVdqQixHQUFHLGlDQUFpQzt3QkFBQyxRQUFRb0I7b0JBQUs7O3NDQUNoRSxNQUFDdEI7NEJBQWNtQixXQUFXa0I7OzhDQUN4QixNQUFDcUI7b0NBQUt2QyxXQUFVOzt3Q0FDYnlCLFVBQVVlLHVCQUFTLEtBQUNDOzRDQUFJQyxLQUFJOzRDQUFHMUMsV0FBVTs0Q0FBK0IyQyxLQUFLbEIsU0FBU2UsS0FBSzs7d0NBQzNGZixVQUFVbUIsc0JBQVEsS0FBQ2xEOzRDQUFJTSxXQUFVOzRDQUErQk0sTUFBTW1CLFNBQVNtQixJQUFJOztzREFDcEYsTUFBQ0w7NENBQUt2QyxXQUFVOztnREFBa0J5QixVQUFVdEI7Z0RBQU07Ozs7O2dDQUVuREssNEJBQ0MsS0FBQ3hCO29DQUNDcUQsZUFBWTtvQ0FDWnJDLFdBQVd3QjtxQ0FFWDs7O3NDQUdOLEtBQUMxQzs0QkFDQ2tCLFdBQVdxQjs0QkFDWHdCLFVBQVU7c0NBRVR0QyxRQUFRNEIsR0FBRyxDQUFDLENBQUNSLFNBQVdBLHdCQUN2QixLQUFDaEM7b0NBQStDZ0MsUUFBUUE7bUNBQXJDQSxRQUFRUyxNQUFNVCxRQUFReEI7Ozs7Ozs7QUFPdkQ7QUFFQSxPQUFPLE1BQU0yQyw0QkFBYzdELEtBQUtXLHNCQUFzQjtBQUN0RGtELFlBQVlDLFdBQVcsR0FBRyJ9