@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,64 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { memo, useEffect, useMemo, useState } from 'react';
3
+ import ReactMarkdown from 'react-markdown';
4
+ import { fetchJsonFromUrl, parseTemplate } from '../../utils/contentUtils.js';
5
+ const defaultStyles = {
6
+ backgroundColor: 'transparent',
7
+ height: '100%',
8
+ overflow: 'auto',
9
+ width: '100%'
10
+ };
11
+ const emptyValues = {};
12
+ const MarkdownComponent = ({ className = '', content, url, values = emptyValues })=>{
13
+ const [remoteContent, setRemoteContent] = useState({
14
+ content: '',
15
+ url: ''
16
+ });
17
+ useEffect(()=>{
18
+ if (!url) {
19
+ return undefined;
20
+ }
21
+ let active = true;
22
+ const loadContent = async ()=>{
23
+ try {
24
+ const data = await fetchJsonFromUrl(url);
25
+ if (active) {
26
+ setRemoteContent({
27
+ content: data,
28
+ url
29
+ });
30
+ }
31
+ } catch {
32
+ if (active) {
33
+ setRemoteContent({
34
+ content: 'Error loading content',
35
+ url
36
+ });
37
+ }
38
+ }
39
+ };
40
+ void loadContent();
41
+ return ()=>{
42
+ active = false;
43
+ };
44
+ }, [
45
+ url
46
+ ]);
47
+ const remoteSource = remoteContent.url === url ? remoteContent.content : '';
48
+ const source = url ? remoteSource : content ?? '';
49
+ const markdown = useMemo(()=>parseTemplate(source, values), [
50
+ source,
51
+ values
52
+ ]);
53
+ return /*#__PURE__*/ _jsx("div", {
54
+ className: `markdown-container ${className}`.trim(),
55
+ style: defaultStyles,
56
+ children: /*#__PURE__*/ _jsx(ReactMarkdown, {
57
+ children: markdown
58
+ })
59
+ });
60
+ };
61
+ export const Markdown = /*#__PURE__*/ memo(MarkdownComponent);
62
+ Markdown.displayName = 'Markdown';
63
+
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL01hcmtkb3duL01hcmtkb3duLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHttZW1vLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNYXJrZG93biBmcm9tICdyZWFjdC1tYXJrZG93bic7XG5cbmltcG9ydCB7ZmV0Y2hKc29uRnJvbVVybCwgcGFyc2VUZW1wbGF0ZX0gZnJvbSAnLi4vLi4vdXRpbHMvY29udGVudFV0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXJrZG93blByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIHZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5jb25zdCBkZWZhdWx0U3R5bGVzOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGhlaWdodDogJzEwMCUnLFxuICBvdmVyZmxvdzogJ2F1dG8nLFxuICB3aWR0aDogJzEwMCUnXG59O1xuXG5jb25zdCBlbXB0eVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuY29uc3QgTWFya2Rvd25Db21wb25lbnQ6IFJlYWN0LkZDPE1hcmtkb3duUHJvcHM+ID0gKHtcbiAgY2xhc3NOYW1lID0gJycsXG4gIGNvbnRlbnQsXG4gIHVybCxcbiAgdmFsdWVzID0gZW1wdHlWYWx1ZXNcbn0pID0+IHtcbiAgY29uc3QgW3JlbW90ZUNvbnRlbnQsIHNldFJlbW90ZUNvbnRlbnRdID0gdXNlU3RhdGUoe2NvbnRlbnQ6ICcnLCB1cmw6ICcnfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZighdXJsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcbiAgICBjb25zdCBsb2FkQ29udGVudCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb25Gcm9tVXJsPHN0cmluZz4odXJsKTtcbiAgICAgICAgaWYoYWN0aXZlKSB7XG4gICAgICAgICAgc2V0UmVtb3RlQ29udGVudCh7Y29udGVudDogZGF0YSwgdXJsfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIGlmKGFjdGl2ZSkge1xuICAgICAgICAgIHNldFJlbW90ZUNvbnRlbnQoe2NvbnRlbnQ6ICdFcnJvciBsb2FkaW5nIGNvbnRlbnQnLCB1cmx9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2b2lkIGxvYWRDb250ZW50KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFt1cmxdKTtcblxuICBjb25zdCByZW1vdGVTb3VyY2UgPSByZW1vdGVDb250ZW50LnVybCA9PT0gdXJsID8gcmVtb3RlQ29udGVudC5jb250ZW50IDogJyc7XG4gIGNvbnN0IHNvdXJjZSA9IHVybCA/IHJlbW90ZVNvdXJjZSA6IGNvbnRlbnQgPz8gJyc7XG4gIGNvbnN0IG1hcmtkb3duID0gdXNlTWVtbygoKSA9PiBwYXJzZVRlbXBsYXRlKHNvdXJjZSwgdmFsdWVzKSwgW3NvdXJjZSwgdmFsdWVzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YG1hcmtkb3duLWNvbnRhaW5lciAke2NsYXNzTmFtZX1gLnRyaW0oKX0gc3R5bGU9e2RlZmF1bHRTdHlsZXN9PlxuICAgICAgPFJlYWN0TWFya2Rvd24+e21hcmtkb3dufTwvUmVhY3RNYXJrZG93bj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBNYXJrZG93biA9IG1lbW8oTWFya2Rvd25Db21wb25lbnQpO1xuTWFya2Rvd24uZGlzcGxheU5hbWUgPSAnTWFya2Rvd24nO1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwibWVtbyIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIlJlYWN0TWFya2Rvd24iLCJmZXRjaEpzb25Gcm9tVXJsIiwicGFyc2VUZW1wbGF0ZSIsImRlZmF1bHRTdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIndpZHRoIiwiZW1wdHlWYWx1ZXMiLCJNYXJrZG93bkNvbXBvbmVudCIsImNsYXNzTmFtZSIsImNvbnRlbnQiLCJ1cmwiLCJ2YWx1ZXMiLCJyZW1vdGVDb250ZW50Iiwic2V0UmVtb3RlQ29udGVudCIsInVuZGVmaW5lZCIsImFjdGl2ZSIsImxvYWRDb250ZW50IiwiZGF0YSIsInJlbW90ZVNvdXJjZSIsInNvdXJjZSIsIm1hcmtkb3duIiwiZGl2IiwidHJpbSIsInN0eWxlIiwiTWFya2Rvd24iLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFNBQVFDLElBQUksRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBTyxRQUFRO0FBQ2hFLE9BQU9DLG1CQUFtQixpQkFBaUI7QUFFM0MsU0FBUUMsZ0JBQWdCLEVBQUVDLGFBQWEsUUFBTyw4QkFBOEI7QUFTNUUsTUFBTUMsZ0JBQXFDO0lBQ3pDQyxpQkFBaUI7SUFDakJDLFFBQVE7SUFDUkMsVUFBVTtJQUNWQyxPQUFPO0FBQ1Q7QUFFQSxNQUFNQyxjQUF1QyxDQUFDO0FBRTlDLE1BQU1DLG9CQUE2QyxDQUFDLEVBQ2xEQyxZQUFZLEVBQUUsRUFDZEMsT0FBTyxFQUNQQyxHQUFHLEVBQ0hDLFNBQVNMLFdBQVcsRUFDckI7SUFDQyxNQUFNLENBQUNNLGVBQWVDLGlCQUFpQixHQUFHaEIsU0FBUztRQUFDWSxTQUFTO1FBQUlDLEtBQUs7SUFBRTtJQUV4RWYsVUFBVTtRQUNSLElBQUcsQ0FBQ2UsS0FBSztZQUNQLE9BQU9JO1FBQ1Q7UUFDQSxJQUFJQyxTQUFTO1FBQ2IsTUFBTUMsY0FBYztZQUNsQixJQUFJO2dCQUNGLE1BQU1DLE9BQU8sTUFBTWxCLGlCQUF5Qlc7Z0JBQzVDLElBQUdLLFFBQVE7b0JBQ1RGLGlCQUFpQjt3QkFBQ0osU0FBU1E7d0JBQU1QO29CQUFHO2dCQUN0QztZQUNGLEVBQUUsT0FBSztnQkFDTCxJQUFHSyxRQUFRO29CQUNURixpQkFBaUI7d0JBQUNKLFNBQVM7d0JBQXlCQztvQkFBRztnQkFDekQ7WUFDRjtRQUNGO1FBRUEsS0FBS007UUFDTCxPQUFPO1lBQ0xELFNBQVM7UUFDWDtJQUNGLEdBQUc7UUFBQ0w7S0FBSTtJQUVSLE1BQU1RLGVBQWVOLGNBQWNGLEdBQUcsS0FBS0EsTUFBTUUsY0FBY0gsT0FBTyxHQUFHO0lBQ3pFLE1BQU1VLFNBQVNULE1BQU1RLGVBQWVULFdBQVc7SUFDL0MsTUFBTVcsV0FBV3hCLFFBQVEsSUFBTUksY0FBY21CLFFBQVFSLFNBQVM7UUFBQ1E7UUFBUVI7S0FBTztJQUU5RSxxQkFDRSxLQUFDVTtRQUFJYixXQUFXLENBQUMsbUJBQW1CLEVBQUVBLFdBQVcsQ0FBQ2MsSUFBSTtRQUFJQyxPQUFPdEI7a0JBQy9ELGNBQUEsS0FBQ0g7c0JBQWVzQjs7O0FBR3RCO0FBRUEsT0FBTyxNQUFNSSx5QkFBVzlCLEtBQUthLG1CQUFtQjtBQUNoRGlCLFNBQVNDLFdBQVcsR0FBRyJ9
@@ -0,0 +1,34 @@
1
+ import { Markdown } from '../../index.js';
2
+ import { focusCanvas } from '../../utils/storyInteractions.js';
3
+ const meta = {
4
+ argTypes: {
5
+ className: {
6
+ control: 'text'
7
+ },
8
+ content: {
9
+ control: 'text'
10
+ }
11
+ },
12
+ component: Markdown,
13
+ parameters: {
14
+ docs: {
15
+ description: {
16
+ component: 'Renders inline or remote Markdown content with optional template values. Publicly import it from `@nlabs/gothamui` or `@nlabs/gothamui/components`.'
17
+ }
18
+ }
19
+ },
20
+ tags: [
21
+ 'autodocs'
22
+ ],
23
+ title: 'Components/Markdown'
24
+ };
25
+ export default meta;
26
+ export const Primary = {
27
+ args: {
28
+ className: 'test',
29
+ content: '# Hello\n**Bold text**\n*Italic text*\n- List item'
30
+ },
31
+ play: focusCanvas
32
+ };
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL01hcmtkb3duL01hcmtkb3duLnN0b3JpZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFya2Rvd259IGZyb20gJy4uLy4uL2luZGV4LmpzJztcbmltcG9ydCB7Zm9jdXNDYW52YXN9IGZyb20gJy4uLy4uL3V0aWxzL3N0b3J5SW50ZXJhY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5cbmNvbnN0IG1ldGE6IE1ldGE8dHlwZW9mIE1hcmtkb3duPiA9IHtcbiAgYXJnVHlwZXM6IHtcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0J1xuICAgIH0sXG4gICAgY29udGVudDoge1xuICAgICAgY29udHJvbDogJ3RleHQnXG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IE1hcmtkb3duLFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgY29tcG9uZW50OiAnUmVuZGVycyBpbmxpbmUgb3IgcmVtb3RlIE1hcmtkb3duIGNvbnRlbnQgd2l0aCBvcHRpb25hbCB0ZW1wbGF0ZSB2YWx1ZXMuIFB1YmxpY2x5IGltcG9ydCBpdCBmcm9tIGBAbmxhYnMvZ290aGFtdWlgIG9yIGBAbmxhYnMvZ290aGFtdWkvY29tcG9uZW50c2AuJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgdGFnczogWydhdXRvZG9jcyddLFxuICB0aXRsZTogJ0NvbXBvbmVudHMvTWFya2Rvd24nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXRhO1xudHlwZSBTdG9yeSA9IFN0b3J5T2JqPHR5cGVvZiBNYXJrZG93bj47XG5cbmV4cG9ydCBjb25zdCBQcmltYXJ5OiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGNsYXNzTmFtZTogJ3Rlc3QnLFxuICAgIGNvbnRlbnQ6ICcjIEhlbGxvXFxuKipCb2xkIHRleHQqKlxcbipJdGFsaWMgdGV4dCpcXG4tIExpc3QgaXRlbSdcbiAgfSxcbiAgcGxheTogZm9jdXNDYW52YXNcbn07XG4iXSwibmFtZXMiOlsiTWFya2Rvd24iLCJmb2N1c0NhbnZhcyIsIm1ldGEiLCJhcmdUeXBlcyIsImNsYXNzTmFtZSIsImNvbnRyb2wiLCJjb250ZW50IiwiY29tcG9uZW50IiwicGFyYW1ldGVycyIsImRvY3MiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsIlByaW1hcnkiLCJhcmdzIiwicGxheSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLGlCQUFpQjtBQUN4QyxTQUFRQyxXQUFXLFFBQU8sbUNBQW1DO0FBSTdELE1BQU1DLE9BQThCO0lBQ2xDQyxVQUFVO1FBQ1JDLFdBQVc7WUFDVEMsU0FBUztRQUNYO1FBQ0FDLFNBQVM7WUFDUEQsU0FBUztRQUNYO0lBQ0Y7SUFDQUUsV0FBV1A7SUFDWFEsWUFBWTtRQUNWQyxNQUFNO1lBQ0pDLGFBQWE7Z0JBQ1hILFdBQVc7WUFDYjtRQUNGO0lBQ0Y7SUFDQUksTUFBTTtRQUFDO0tBQVc7SUFDbEJDLE9BQU87QUFDVDtBQUVBLGVBQWVWLEtBQUs7QUFHcEIsT0FBTyxNQUFNVyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKVixXQUFXO1FBQ1hFLFNBQVM7SUFDWDtJQUNBUyxNQUFNZDtBQUNSLEVBQUUifQ==
@@ -0,0 +1,22 @@
1
+ import 'yet-another-react-lightbox/styles.css';
2
+ import type { FC } from 'react';
3
+ type LightboxNavDirection = 'next' | 'prev';
4
+ export interface MediaLightboxProps {
5
+ readonly close?: () => void;
6
+ readonly enableVideo?: boolean;
7
+ readonly hideNavigationWhenSingle?: boolean;
8
+ readonly index?: number;
9
+ readonly on?: Record<string, unknown>;
10
+ readonly open?: boolean;
11
+ readonly plugins?: unknown[];
12
+ readonly render?: Record<string, unknown>;
13
+ readonly slides?: unknown[];
14
+ readonly toolbar?: Record<string, unknown>;
15
+ readonly video?: Record<string, unknown>;
16
+ }
17
+ export declare const MediaLightboxCloseButton: () => import("react").JSX.Element;
18
+ export declare const MediaLightboxNavButton: FC<{
19
+ readonly direction: LightboxNavDirection;
20
+ }>;
21
+ export declare const MediaLightbox: import("react").NamedExoticComponent<MediaLightboxProps>;
22
+ export {};
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ import { memo, useMemo } from 'react';
4
+ import Lightbox, { useController, useNavigationState } from 'yet-another-react-lightbox';
5
+ import Video from 'yet-another-react-lightbox/plugins/video';
6
+ import 'yet-another-react-lightbox/styles.css';
7
+ import { ChevronLeft, ChevronRight, X } from '../../icons/index.js';
8
+ export const MediaLightboxCloseButton = ()=>{
9
+ const { close } = useController();
10
+ return /*#__PURE__*/ _jsx("button", {
11
+ "aria-label": "Close",
12
+ className: "fixed top-4 right-4 z-[10001] inline-flex size-11 cursor-pointer items-center justify-center border-0 bg-transparent p-0 text-white/90 hover:text-white focus-visible:text-white",
13
+ onClick: ()=>close(),
14
+ type: "button",
15
+ children: /*#__PURE__*/ _jsx(X, {
16
+ "aria-hidden": "true",
17
+ size: 28
18
+ })
19
+ });
20
+ };
21
+ export const MediaLightboxNavButton = ({ direction })=>{
22
+ const { next, prev } = useController();
23
+ const { nextDisabled, prevDisabled } = useNavigationState();
24
+ const isPrev = direction === 'prev';
25
+ const disabled = isPrev ? prevDisabled : nextDisabled;
26
+ const label = isPrev ? 'Previous' : 'Next';
27
+ const onClick = isPrev ? prev : next;
28
+ const Icon = isPrev ? ChevronLeft : ChevronRight;
29
+ return /*#__PURE__*/ _jsx("button", {
30
+ "aria-label": label,
31
+ className: cn('yarl__button', `yarl__navigation_${direction}`),
32
+ disabled: disabled,
33
+ onClick: ()=>onClick(),
34
+ type: "button",
35
+ children: /*#__PURE__*/ _jsx(Icon, {
36
+ "aria-hidden": "true",
37
+ size: 24
38
+ })
39
+ });
40
+ };
41
+ const emptyItems = [];
42
+ const emptyRender = {};
43
+ const MediaLightboxComponent = ({ close, enableVideo = false, hideNavigationWhenSingle = false, index = 0, on, open = false, plugins = emptyItems, render = emptyRender, slides = emptyItems, toolbar, video })=>{
44
+ const showNavigation = !hideNavigationWhenSingle || slides.length > 1;
45
+ const lightboxPlugins = useMemo(()=>enableVideo ? [
46
+ Video,
47
+ ...plugins
48
+ ] : plugins, [
49
+ enableVideo,
50
+ plugins
51
+ ]);
52
+ const lightboxRender = useMemo(()=>({
53
+ ...render,
54
+ buttonClose: ()=>/*#__PURE__*/ _jsx(MediaLightboxCloseButton, {}),
55
+ buttonNext: ()=>showNavigation ? /*#__PURE__*/ _jsx(MediaLightboxNavButton, {
56
+ direction: "next"
57
+ }) : null,
58
+ buttonPrev: ()=>showNavigation ? /*#__PURE__*/ _jsx(MediaLightboxNavButton, {
59
+ direction: "prev"
60
+ }) : null
61
+ }), [
62
+ render,
63
+ showNavigation
64
+ ]);
65
+ return /*#__PURE__*/ _jsx(Lightbox, {
66
+ close: close,
67
+ index: index,
68
+ on: on,
69
+ open: open,
70
+ plugins: lightboxPlugins,
71
+ render: lightboxRender,
72
+ slides: slides,
73
+ toolbar: toolbar,
74
+ video: video
75
+ });
76
+ };
77
+ export const MediaLightbox = /*#__PURE__*/ memo(MediaLightboxComponent);
78
+ MediaLightbox.displayName = 'MediaLightbox';
79
+
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL01lZGlhTGlnaHRib3gvTWVkaWFMaWdodGJveC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7bWVtbywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExpZ2h0Ym94LCB7dXNlQ29udHJvbGxlciwgdXNlTmF2aWdhdGlvblN0YXRlfSBmcm9tICd5ZXQtYW5vdGhlci1yZWFjdC1saWdodGJveCc7XG5pbXBvcnQgVmlkZW8gZnJvbSAneWV0LWFub3RoZXItcmVhY3QtbGlnaHRib3gvcGx1Z2lucy92aWRlbyc7XG5pbXBvcnQgJ3lldC1hbm90aGVyLXJlYWN0LWxpZ2h0Ym94L3N0eWxlcy5jc3MnO1xuXG5pbXBvcnQge0NoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQsIFh9IGZyb20gJy4uLy4uL2ljb25zL2luZGV4LmpzJztcblxuaW1wb3J0IHR5cGUge0ZDfSBmcm9tICdyZWFjdCc7XG5cbnR5cGUgTGlnaHRib3hOYXZEaXJlY3Rpb24gPSAnbmV4dCcgfCAncHJldic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaWdodGJveFByb3BzIHtcbiAgcmVhZG9ubHkgY2xvc2U/OiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBlbmFibGVWaWRlbz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGhpZGVOYXZpZ2F0aW9uV2hlblNpbmdsZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGluZGV4PzogbnVtYmVyO1xuICByZWFkb25seSBvbj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBvcGVuPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGx1Z2lucz86IHVua25vd25bXTtcbiAgcmVhZG9ubHkgcmVuZGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHNsaWRlcz86IHVua25vd25bXTtcbiAgcmVhZG9ubHkgdG9vbGJhcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSB2aWRlbz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgY29uc3QgTWVkaWFMaWdodGJveENsb3NlQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7Y2xvc2V9ID0gdXNlQ29udHJvbGxlcigpO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIGNsYXNzTmFtZT1cImZpeGVkIHRvcC00IHJpZ2h0LTQgei1bMTAwMDFdIGlubGluZS1mbGV4IHNpemUtMTEgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LXdoaXRlLzkwIGhvdmVyOnRleHQtd2hpdGUgZm9jdXMtdmlzaWJsZTp0ZXh0LXdoaXRlXCJcbiAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKCl9XG4gICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICA8WCBhcmlhLWhpZGRlbj1cInRydWVcIiBzaXplPXsyOH0gLz5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBNZWRpYUxpZ2h0Ym94TmF2QnV0dG9uOiBGQzx7cmVhZG9ubHkgZGlyZWN0aW9uOiBMaWdodGJveE5hdkRpcmVjdGlvbn0+ID0gKHtkaXJlY3Rpb259KSA9PiB7XG4gIGNvbnN0IHtuZXh0LCBwcmV2fSA9IHVzZUNvbnRyb2xsZXIoKTtcbiAgY29uc3Qge25leHREaXNhYmxlZCwgcHJldkRpc2FibGVkfSA9IHVzZU5hdmlnYXRpb25TdGF0ZSgpO1xuICBjb25zdCBpc1ByZXYgPSBkaXJlY3Rpb24gPT09ICdwcmV2JztcbiAgY29uc3QgZGlzYWJsZWQgPSBpc1ByZXYgPyBwcmV2RGlzYWJsZWQgOiBuZXh0RGlzYWJsZWQ7XG4gIGNvbnN0IGxhYmVsID0gaXNQcmV2ID8gJ1ByZXZpb3VzJyA6ICdOZXh0JztcbiAgY29uc3Qgb25DbGljayA9IGlzUHJldiA/IHByZXYgOiBuZXh0O1xuICBjb25zdCBJY29uID0gaXNQcmV2ID8gQ2hldnJvbkxlZnQgOiBDaGV2cm9uUmlnaHQ7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPXtsYWJlbH1cbiAgICAgIGNsYXNzTmFtZT17Y24oJ3lhcmxfX2J1dHRvbicsIGB5YXJsX19uYXZpZ2F0aW9uXyR7ZGlyZWN0aW9ufWApfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17KCkgPT4gb25DbGljaygpfVxuICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPEljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc2l6ZT17MjR9IC8+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBlbXB0eUl0ZW1zOiB1bmtub3duW10gPSBbXTtcbmNvbnN0IGVtcHR5UmVuZGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5jb25zdCBNZWRpYUxpZ2h0Ym94Q29tcG9uZW50OiBGQzxNZWRpYUxpZ2h0Ym94UHJvcHM+ID0gKHtcbiAgY2xvc2UsXG4gIGVuYWJsZVZpZGVvID0gZmFsc2UsXG4gIGhpZGVOYXZpZ2F0aW9uV2hlblNpbmdsZSA9IGZhbHNlLFxuICBpbmRleCA9IDAsXG4gIG9uLFxuICBvcGVuID0gZmFsc2UsXG4gIHBsdWdpbnMgPSBlbXB0eUl0ZW1zLFxuICByZW5kZXIgPSBlbXB0eVJlbmRlcixcbiAgc2xpZGVzID0gZW1wdHlJdGVtcyxcbiAgdG9vbGJhcixcbiAgdmlkZW9cbn0pID0+IHtcbiAgY29uc3Qgc2hvd05hdmlnYXRpb24gPSAhaGlkZU5hdmlnYXRpb25XaGVuU2luZ2xlIHx8IHNsaWRlcy5sZW5ndGggPiAxO1xuICBjb25zdCBsaWdodGJveFBsdWdpbnMgPSB1c2VNZW1vKCgpID0+IChlbmFibGVWaWRlbyA/IFtWaWRlbywgLi4ucGx1Z2luc10gOiBwbHVnaW5zKSwgW2VuYWJsZVZpZGVvLCBwbHVnaW5zXSk7XG4gIGNvbnN0IGxpZ2h0Ym94UmVuZGVyID0gdXNlTWVtbygoKSA9PiAoe1xuICAgIC4uLnJlbmRlcixcbiAgICBidXR0b25DbG9zZTogKCkgPT4gPE1lZGlhTGlnaHRib3hDbG9zZUJ1dHRvbiAvPixcbiAgICBidXR0b25OZXh0OiAoKSA9PiAoc2hvd05hdmlnYXRpb24gPyA8TWVkaWFMaWdodGJveE5hdkJ1dHRvbiBkaXJlY3Rpb249XCJuZXh0XCIgLz4gOiBudWxsKSxcbiAgICBidXR0b25QcmV2OiAoKSA9PiAoc2hvd05hdmlnYXRpb24gPyA8TWVkaWFMaWdodGJveE5hdkJ1dHRvbiBkaXJlY3Rpb249XCJwcmV2XCIgLz4gOiBudWxsKVxuICB9KSwgW3JlbmRlciwgc2hvd05hdmlnYXRpb25dKTtcblxuICByZXR1cm4gKFxuICAgIDxMaWdodGJveFxuICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgb249e29uIGFzIGFueX1cbiAgICAgIG9wZW49e29wZW59XG4gICAgICBwbHVnaW5zPXtsaWdodGJveFBsdWdpbnMgYXMgYW55fVxuICAgICAgcmVuZGVyPXtsaWdodGJveFJlbmRlcn1cbiAgICAgIHNsaWRlcz17c2xpZGVzIGFzIGFueX1cbiAgICAgIHRvb2xiYXI9e3Rvb2xiYXIgYXMgYW55fVxuICAgICAgdmlkZW89e3ZpZGVvIGFzIGFueX1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IE1lZGlhTGlnaHRib3ggPSBtZW1vKE1lZGlhTGlnaHRib3hDb21wb25lbnQpO1xuTWVkaWFMaWdodGJveC5kaXNwbGF5TmFtZSA9ICdNZWRpYUxpZ2h0Ym94JztcbiJdLCJuYW1lcyI6WyJjbiIsIm1lbW8iLCJ1c2VNZW1vIiwiTGlnaHRib3giLCJ1c2VDb250cm9sbGVyIiwidXNlTmF2aWdhdGlvblN0YXRlIiwiVmlkZW8iLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIlgiLCJNZWRpYUxpZ2h0Ym94Q2xvc2VCdXR0b24iLCJjbG9zZSIsImJ1dHRvbiIsImFyaWEtbGFiZWwiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwidHlwZSIsImFyaWEtaGlkZGVuIiwic2l6ZSIsIk1lZGlhTGlnaHRib3hOYXZCdXR0b24iLCJkaXJlY3Rpb24iLCJuZXh0IiwicHJldiIsIm5leHREaXNhYmxlZCIsInByZXZEaXNhYmxlZCIsImlzUHJldiIsImRpc2FibGVkIiwibGFiZWwiLCJJY29uIiwiZW1wdHlJdGVtcyIsImVtcHR5UmVuZGVyIiwiTWVkaWFMaWdodGJveENvbXBvbmVudCIsImVuYWJsZVZpZGVvIiwiaGlkZU5hdmlnYXRpb25XaGVuU2luZ2xlIiwiaW5kZXgiLCJvbiIsIm9wZW4iLCJwbHVnaW5zIiwicmVuZGVyIiwic2xpZGVzIiwidG9vbGJhciIsInZpZGVvIiwic2hvd05hdmlnYXRpb24iLCJsZW5ndGgiLCJsaWdodGJveFBsdWdpbnMiLCJsaWdodGJveFJlbmRlciIsImJ1dHRvbkNsb3NlIiwiYnV0dG9uTmV4dCIsImJ1dHRvblByZXYiLCJNZWRpYUxpZ2h0Ym94IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQUNoQyxTQUFRQyxJQUFJLEVBQUVDLE9BQU8sUUFBTyxRQUFRO0FBQ3BDLE9BQU9DLFlBQVdDLGFBQWEsRUFBRUMsa0JBQWtCLFFBQU8sNkJBQTZCO0FBQ3ZGLE9BQU9DLFdBQVcsMkNBQTJDO0FBQzdELE9BQU8sd0NBQXdDO0FBRS9DLFNBQVFDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxDQUFDLFFBQU8sdUJBQXVCO0FBb0JsRSxPQUFPLE1BQU1DLDJCQUEyQjtJQUN0QyxNQUFNLEVBQUNDLEtBQUssRUFBQyxHQUFHUDtJQUVoQixxQkFDRSxLQUFDUTtRQUNDQyxjQUFXO1FBQ1hDLFdBQVU7UUFDVkMsU0FBUyxJQUFNSjtRQUNmSyxNQUFLO2tCQUNMLGNBQUEsS0FBQ1A7WUFBRVEsZUFBWTtZQUFPQyxNQUFNOzs7QUFHbEMsRUFBRTtBQUVGLE9BQU8sTUFBTUMseUJBQXlFLENBQUMsRUFBQ0MsU0FBUyxFQUFDO0lBQ2hHLE1BQU0sRUFBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUMsR0FBR2xCO0lBQ3JCLE1BQU0sRUFBQ21CLFlBQVksRUFBRUMsWUFBWSxFQUFDLEdBQUduQjtJQUNyQyxNQUFNb0IsU0FBU0wsY0FBYztJQUM3QixNQUFNTSxXQUFXRCxTQUFTRCxlQUFlRDtJQUN6QyxNQUFNSSxRQUFRRixTQUFTLGFBQWE7SUFDcEMsTUFBTVYsVUFBVVUsU0FBU0gsT0FBT0Q7SUFDaEMsTUFBTU8sT0FBT0gsU0FBU2xCLGNBQWNDO0lBRXBDLHFCQUNFLEtBQUNJO1FBQ0NDLGNBQVljO1FBQ1piLFdBQVdkLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUVvQixXQUFXO1FBQzdETSxVQUFVQTtRQUNWWCxTQUFTLElBQU1BO1FBQ2ZDLE1BQUs7a0JBQ0wsY0FBQSxLQUFDWTtZQUFLWCxlQUFZO1lBQU9DLE1BQU07OztBQUdyQyxFQUFFO0FBRUYsTUFBTVcsYUFBd0IsRUFBRTtBQUNoQyxNQUFNQyxjQUF1QyxDQUFDO0FBRTlDLE1BQU1DLHlCQUFpRCxDQUFDLEVBQ3REcEIsS0FBSyxFQUNMcUIsY0FBYyxLQUFLLEVBQ25CQywyQkFBMkIsS0FBSyxFQUNoQ0MsUUFBUSxDQUFDLEVBQ1RDLEVBQUUsRUFDRkMsT0FBTyxLQUFLLEVBQ1pDLFVBQVVSLFVBQVUsRUFDcEJTLFNBQVNSLFdBQVcsRUFDcEJTLFNBQVNWLFVBQVUsRUFDbkJXLE9BQU8sRUFDUEMsS0FBSyxFQUNOO0lBQ0MsTUFBTUMsaUJBQWlCLENBQUNULDRCQUE0Qk0sT0FBT0ksTUFBTSxHQUFHO0lBQ3BFLE1BQU1DLGtCQUFrQjFDLFFBQVEsSUFBTzhCLGNBQWM7WUFBQzFCO2VBQVUrQjtTQUFRLEdBQUdBLFNBQVU7UUFBQ0w7UUFBYUs7S0FBUTtJQUMzRyxNQUFNUSxpQkFBaUIzQyxRQUFRLElBQU8sQ0FBQTtZQUNwQyxHQUFHb0MsTUFBTTtZQUNUUSxhQUFhLGtCQUFNLEtBQUNwQztZQUNwQnFDLFlBQVksSUFBT0wsK0JBQWlCLEtBQUN2QjtvQkFBdUJDLFdBQVU7cUJBQVk7WUFDbEY0QixZQUFZLElBQU9OLCtCQUFpQixLQUFDdkI7b0JBQXVCQyxXQUFVO3FCQUFZO1FBQ3BGLENBQUEsR0FBSTtRQUFDa0I7UUFBUUk7S0FBZTtJQUU1QixxQkFDRSxLQUFDdkM7UUFDQ1EsT0FBT0E7UUFDUHVCLE9BQU9BO1FBQ1BDLElBQUlBO1FBQ0pDLE1BQU1BO1FBQ05DLFNBQVNPO1FBQ1ROLFFBQVFPO1FBQ1JOLFFBQVFBO1FBQ1JDLFNBQVNBO1FBQ1RDLE9BQU9BOztBQUdiO0FBRUEsT0FBTyxNQUFNUSw4QkFBZ0JoRCxLQUFLOEIsd0JBQXdCO0FBQzFEa0IsY0FBY0MsV0FBVyxHQUFHIn0=
@@ -0,0 +1,8 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface MediaObjectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
3
+ readonly align?: 'start' | 'center' | 'end' | 'stretch';
4
+ readonly description?: ReactNode;
5
+ readonly media: ReactNode;
6
+ readonly title?: ReactNode;
7
+ }
8
+ export declare const MediaObject: ({ align, children, className, description, media, title, ...props }: MediaObjectProps) => import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ const alignClasses = {
4
+ center: 'items-center',
5
+ end: 'items-end',
6
+ start: 'items-start',
7
+ stretch: 'items-stretch'
8
+ };
9
+ export const MediaObject = ({ align = 'start', children, className, description, media, title, ...props })=>/*#__PURE__*/ _jsxs("div", {
10
+ className: cn('flex gap-4', alignClasses[align], className),
11
+ "data-slot": "media-object",
12
+ ...props,
13
+ children: [
14
+ /*#__PURE__*/ _jsx("div", {
15
+ className: "shrink-0",
16
+ "data-slot": "media-object-media",
17
+ children: media
18
+ }),
19
+ /*#__PURE__*/ _jsxs("div", {
20
+ className: "min-w-0 flex-1",
21
+ "data-slot": "media-object-content",
22
+ children: [
23
+ title ? /*#__PURE__*/ _jsx("h3", {
24
+ className: "text-base font-semibold text-foreground dark:text-foreground-dark",
25
+ children: title
26
+ }) : null,
27
+ description ? /*#__PURE__*/ _jsx("p", {
28
+ className: "mt-1 text-sm/6 text-muted-foreground dark:text-muted-foreground-dark",
29
+ children: description
30
+ }) : null,
31
+ children
32
+ ]
33
+ })
34
+ ]
35
+ });
36
+
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL01lZGlhT2JqZWN0L01lZGlhT2JqZWN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7SFRNTEF0dHJpYnV0ZXMsIFJlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhT2JqZWN0UHJvcHMgZXh0ZW5kcyBPbWl0PEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiwgJ3RpdGxlJz4ge1xuICByZWFkb25seSBhbGlnbj86ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ3N0cmV0Y2gnO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgbWVkaWE6IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgdGl0bGU/OiBSZWFjdE5vZGU7XG59XG5cbmNvbnN0IGFsaWduQ2xhc3NlczogUmVjb3JkPE5vbk51bGxhYmxlPE1lZGlhT2JqZWN0UHJvcHNbJ2FsaWduJ10+LCBzdHJpbmc+ID0ge1xuICBjZW50ZXI6ICdpdGVtcy1jZW50ZXInLFxuICBlbmQ6ICdpdGVtcy1lbmQnLFxuICBzdGFydDogJ2l0ZW1zLXN0YXJ0JyxcbiAgc3RyZXRjaDogJ2l0ZW1zLXN0cmV0Y2gnXG59O1xuXG5leHBvcnQgY29uc3QgTWVkaWFPYmplY3QgPSAoe1xuICBhbGlnbiA9ICdzdGFydCcsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGRlc2NyaXB0aW9uLFxuICBtZWRpYSxcbiAgdGl0bGUsXG4gIC4uLnByb3BzXG59OiBNZWRpYU9iamVjdFByb3BzKSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCBnYXAtNCcsIGFsaWduQ2xhc3Nlc1thbGlnbl0sIGNsYXNzTmFtZSl9IGRhdGEtc2xvdD1cIm1lZGlhLW9iamVjdFwiIHsuLi5wcm9wc30+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMFwiIGRhdGEtc2xvdD1cIm1lZGlhLW9iamVjdC1tZWRpYVwiPnttZWRpYX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgZmxleC0xXCIgZGF0YS1zbG90PVwibWVkaWEtb2JqZWN0LWNvbnRlbnRcIj5cbiAgICAgIHt0aXRsZSA/IDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQgZGFyazp0ZXh0LWZvcmVncm91bmQtZGFya1wiPnt0aXRsZX08L2gzPiA6IG51bGx9XG4gICAgICB7ZGVzY3JpcHRpb24gPyA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQtc20vNiB0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQtZGFya1wiPntkZXNjcmlwdGlvbn08L3A+IDogbnVsbH1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4pO1xuIl0sIm5hbWVzIjpbImNuIiwiYWxpZ25DbGFzc2VzIiwiY2VudGVyIiwiZW5kIiwic3RhcnQiLCJzdHJldGNoIiwiTWVkaWFPYmplY3QiLCJhbGlnbiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVzY3JpcHRpb24iLCJtZWRpYSIsInRpdGxlIiwicHJvcHMiLCJkaXYiLCJkYXRhLXNsb3QiLCJoMyIsInAiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQVdoQyxNQUFNQyxlQUF1RTtJQUMzRUMsUUFBUTtJQUNSQyxLQUFLO0lBQ0xDLE9BQU87SUFDUEMsU0FBUztBQUNYO0FBRUEsT0FBTyxNQUFNQyxjQUFjLENBQUMsRUFDMUJDLFFBQVEsT0FBTyxFQUNmQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVEMsV0FBVyxFQUNYQyxLQUFLLEVBQ0xDLEtBQUssRUFDTCxHQUFHQyxPQUNjLGlCQUNqQixNQUFDQztRQUFJTCxXQUFXVCxHQUFHLGNBQWNDLFlBQVksQ0FBQ00sTUFBTSxFQUFFRTtRQUFZTSxhQUFVO1FBQWdCLEdBQUdGLEtBQUs7OzBCQUNsRyxLQUFDQztnQkFBSUwsV0FBVTtnQkFBV00sYUFBVTswQkFBc0JKOzswQkFDMUQsTUFBQ0c7Z0JBQUlMLFdBQVU7Z0JBQWlCTSxhQUFVOztvQkFDdkNILHNCQUFRLEtBQUNJO3dCQUFHUCxXQUFVO2tDQUFxRUc7eUJBQWM7b0JBQ3pHRiw0QkFBYyxLQUFDTzt3QkFBRVIsV0FBVTtrQ0FBd0VDO3lCQUFtQjtvQkFDdEhGOzs7O09BR0wifQ==
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { FileText } from 'lucide-react';
3
+ import React from 'react';
4
+ import { interactWithCanvas } from '../../utils/storyInteractions.js';
5
+ import { MediaObject } from './MediaObject.js';
6
+ const meta = {
7
+ component: MediaObject,
8
+ parameters: {
9
+ layout: 'padded'
10
+ },
11
+ title: 'Application UI/Layout/MediaObject'
12
+ };
13
+ export default meta;
14
+ export const Default = {
15
+ args: {
16
+ description: 'A flexible media object for list rows, feeds, and compact summaries.',
17
+ media: /*#__PURE__*/ _jsx("div", {
18
+ className: "flex size-12 items-center justify-center rounded-md bg-muted text-primary",
19
+ children: /*#__PURE__*/ _jsx(FileText, {
20
+ className: "size-6"
21
+ })
22
+ }),
23
+ title: 'Project brief'
24
+ },
25
+ play: interactWithCanvas
26
+ };
27
+
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL01lZGlhT2JqZWN0L01lZGlhT2JqZWN0LnN0b3JpZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmlsZVRleHR9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge2ludGVyYWN0V2l0aENhbnZhc30gZnJvbSAnLi4vLi4vdXRpbHMvc3RvcnlJbnRlcmFjdGlvbnMuanMnO1xuaW1wb3J0IHtNZWRpYU9iamVjdH0gZnJvbSAnLi9NZWRpYU9iamVjdC5qcyc7XG5cbmltcG9ydCB0eXBlIHtNZXRhLCBTdG9yeU9ian0gZnJvbSAnQG5sYWJzL2xleC9zdG9yeWJvb2snO1xuXG5jb25zdCBtZXRhOiBNZXRhPHR5cGVvZiBNZWRpYU9iamVjdD4gPSB7XG4gIGNvbXBvbmVudDogTWVkaWFPYmplY3QsXG4gIHBhcmFtZXRlcnM6IHtcbiAgICBsYXlvdXQ6ICdwYWRkZWQnXG4gIH0sXG4gIHRpdGxlOiAnQXBwbGljYXRpb24gVUkvTGF5b3V0L01lZGlhT2JqZWN0J1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWV0YTtcblxudHlwZSBTdG9yeSA9IFN0b3J5T2JqPHR5cGVvZiBNZWRpYU9iamVjdD47XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0OiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQSBmbGV4aWJsZSBtZWRpYSBvYmplY3QgZm9yIGxpc3Qgcm93cywgZmVlZHMsIGFuZCBjb21wYWN0IHN1bW1hcmllcy4nLFxuICAgIG1lZGlhOiA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS0xMiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBiZy1tdXRlZCB0ZXh0LXByaW1hcnlcIj48RmlsZVRleHQgY2xhc3NOYW1lPVwic2l6ZS02XCIgLz48L2Rpdj4sXG4gICAgdGl0bGU6ICdQcm9qZWN0IGJyaWVmJ1xuICB9LFxuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXNcbn07XG4iXSwibmFtZXMiOlsiRmlsZVRleHQiLCJSZWFjdCIsImludGVyYWN0V2l0aENhbnZhcyIsIk1lZGlhT2JqZWN0IiwibWV0YSIsImNvbXBvbmVudCIsInBhcmFtZXRlcnMiLCJsYXlvdXQiLCJ0aXRsZSIsIkRlZmF1bHQiLCJhcmdzIiwiZGVzY3JpcHRpb24iLCJtZWRpYSIsImRpdiIsImNsYXNzTmFtZSIsInBsYXkiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxRQUFRLFFBQU8sZUFBZTtBQUN0QyxPQUFPQyxXQUFXLFFBQVE7QUFFMUIsU0FBUUMsa0JBQWtCLFFBQU8sbUNBQW1DO0FBQ3BFLFNBQVFDLFdBQVcsUUFBTyxtQkFBbUI7QUFJN0MsTUFBTUMsT0FBaUM7SUFDckNDLFdBQVdGO0lBQ1hHLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVKLEtBQUs7QUFJcEIsT0FBTyxNQUFNSyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKQyxhQUFhO1FBQ2JDLHFCQUFPLEtBQUNDO1lBQUlDLFdBQVU7c0JBQTRFLGNBQUEsS0FBQ2Q7Z0JBQVNjLFdBQVU7OztRQUN0SE4sT0FBTztJQUNUO0lBQ0FPLE1BQU1iO0FBQ1IsRUFBRSJ9
@@ -0,0 +1,43 @@
1
+ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, ElementType, FC, HTMLAttributes, ReactNode, Ref } from 'react';
2
+ export interface NavbarProps extends HTMLAttributes<HTMLElement> {
3
+ readonly as?: ElementType;
4
+ readonly asChild?: boolean;
5
+ readonly children?: ReactNode;
6
+ readonly isFloating?: boolean;
7
+ readonly isSticky?: boolean;
8
+ readonly mobileMenu?: ReactNode;
9
+ readonly mobileMenuLabel?: string;
10
+ readonly mobileMenuTitle?: ReactNode;
11
+ readonly ref?: Ref<HTMLElement>;
12
+ readonly transparentOnScroll?: boolean;
13
+ readonly transparentScrollBackdropFilter?: string;
14
+ readonly transparentScrollThreshold?: number;
15
+ }
16
+ export interface NavbarSectionProps extends HTMLAttributes<HTMLDivElement> {
17
+ readonly children?: ReactNode;
18
+ readonly ref?: Ref<HTMLDivElement>;
19
+ }
20
+ export interface NavbarItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'type'> {
21
+ readonly as?: ElementType;
22
+ readonly asChild?: boolean;
23
+ readonly children?: ReactNode;
24
+ readonly current?: boolean;
25
+ readonly href?: AnchorHTMLAttributes<HTMLAnchorElement>['href'];
26
+ readonly ref?: Ref<HTMLElement>;
27
+ readonly type?: ButtonHTMLAttributes<HTMLButtonElement>['type'];
28
+ }
29
+ export declare const Navbar: FC<NavbarProps>;
30
+ export declare const NavbarSection: ({ children, className, ref, ...props }: NavbarSectionProps) => import("react").JSX.Element;
31
+ export declare const NavbarItem: ({ as, asChild, children, className, current, href, ref, type, ...props }: NavbarItemProps) => import("react").JSX.Element | null;
32
+ export interface NavbarLabelProps extends HTMLAttributes<HTMLSpanElement> {
33
+ readonly ref?: Ref<HTMLSpanElement>;
34
+ }
35
+ export declare const NavbarLabel: ({ className, ref, ...props }: NavbarLabelProps) => import("react").JSX.Element;
36
+ export interface NavbarSpacerProps extends HTMLAttributes<HTMLDivElement> {
37
+ readonly ref?: Ref<HTMLDivElement>;
38
+ }
39
+ export declare const NavbarSpacer: ({ className, ref, ...props }: NavbarSpacerProps) => import("react").JSX.Element;
40
+ export interface NavbarDividerProps extends HTMLAttributes<HTMLDivElement> {
41
+ readonly ref?: Ref<HTMLDivElement>;
42
+ }
43
+ export declare const NavbarDivider: ({ className, ref, ...props }: NavbarDividerProps) => import("react").JSX.Element;
@@ -0,0 +1,213 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { cn } from '@nlabs/utils';
3
+ import { Menu, X } from 'lucide-react';
4
+ import { useEffect, useId, useState } from 'react';
5
+ import { createPortal } from 'react-dom';
6
+ import { renderWithAsChild } from '../ComponentUtils/renderWithAsChild.js';
7
+ const getTransparentScrollThreshold = (threshold)=>threshold > 1 ? threshold : window.innerHeight * threshold;
8
+ const getNavbarScrollState = (isAtTop, isMobileMenuOpen, transparentOnScroll)=>{
9
+ if (!transparentOnScroll) {
10
+ return undefined;
11
+ }
12
+ return isMobileMenuOpen || !isAtTop ? 'scrolled' : 'at-top';
13
+ };
14
+ // The compatibility rule does not recognize arrow-function components that delegate rendering.
15
+ /* eslint-disable react-hooks/rules-of-hooks */ export const Navbar = ({ as = 'nav', asChild = false, children, className, isFloating = false, isSticky = false, mobileMenu, mobileMenuLabel = 'Open navigation menu', mobileMenuTitle = 'Navigation', ref, style, transparentOnScroll = false, transparentScrollBackdropFilter = 'blur(12px)', transparentScrollThreshold = 0.1, ...props })=>{
16
+ const [isAtTop, setIsAtTop] = useState(true);
17
+ const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
18
+ const mobileMenuId = useId();
19
+ useEffect(()=>{
20
+ if (!transparentOnScroll) {
21
+ return undefined;
22
+ }
23
+ const onScroll = ()=>{
24
+ const threshold = getTransparentScrollThreshold(transparentScrollThreshold);
25
+ setIsAtTop(window.scrollY < threshold);
26
+ };
27
+ onScroll();
28
+ window.addEventListener('resize', onScroll, {
29
+ passive: true
30
+ });
31
+ window.addEventListener('scroll', onScroll, {
32
+ passive: true
33
+ });
34
+ return ()=>{
35
+ window.removeEventListener('resize', onScroll);
36
+ window.removeEventListener('scroll', onScroll);
37
+ };
38
+ }, [
39
+ transparentOnScroll,
40
+ transparentScrollThreshold
41
+ ]);
42
+ useEffect(()=>{
43
+ if (!isMobileMenuOpen) {
44
+ return undefined;
45
+ }
46
+ const bodyOverflow = document.body.style.overflow;
47
+ const bodyOverscrollBehavior = document.body.style.overscrollBehavior;
48
+ const htmlOverflow = document.documentElement.style.overflow;
49
+ const htmlOverscrollBehavior = document.documentElement.style.overscrollBehavior;
50
+ document.body.style.overflow = 'hidden';
51
+ document.body.style.overscrollBehavior = 'none';
52
+ document.documentElement.style.overflow = 'hidden';
53
+ document.documentElement.style.overscrollBehavior = 'none';
54
+ const onKeyDown = (event)=>{
55
+ if (event.key === 'Escape') {
56
+ setIsMobileMenuOpen(false);
57
+ }
58
+ };
59
+ document.addEventListener('keydown', onKeyDown);
60
+ return ()=>{
61
+ document.body.style.overflow = bodyOverflow;
62
+ document.body.style.overscrollBehavior = bodyOverscrollBehavior;
63
+ document.documentElement.style.overflow = htmlOverflow;
64
+ document.documentElement.style.overscrollBehavior = htmlOverscrollBehavior;
65
+ document.removeEventListener('keydown', onKeyDown);
66
+ };
67
+ }, [
68
+ isMobileMenuOpen
69
+ ]);
70
+ const scrollState = getNavbarScrollState(isAtTop, isMobileMenuOpen, transparentOnScroll);
71
+ const navbarStyle = scrollState === 'scrolled' ? {
72
+ WebkitBackdropFilter: transparentScrollBackdropFilter,
73
+ backdropFilter: transparentScrollBackdropFilter,
74
+ ...style
75
+ } : style;
76
+ const mobileMenuPortal = mobileMenu && typeof document !== 'undefined' ? /*#__PURE__*/ createPortal(/*#__PURE__*/ _jsxs(_Fragment, {
77
+ children: [
78
+ /*#__PURE__*/ _jsx("div", {
79
+ "aria-hidden": !isMobileMenuOpen,
80
+ className: cn('fixed inset-0 z-30 bg-black/45 opacity-0 backdrop-blur-md transition-opacity duration-200 lg:hidden', isMobileMenuOpen ? 'pointer-events-auto opacity-100' : 'pointer-events-none'),
81
+ "data-slot": "navbar-mobile-overlay",
82
+ onClick: ()=>setIsMobileMenuOpen(false),
83
+ style: {
84
+ WebkitBackdropFilter: 'blur(12px)',
85
+ backdropFilter: 'blur(12px)'
86
+ }
87
+ }),
88
+ /*#__PURE__*/ _jsxs("aside", {
89
+ "aria-label": "Mobile navigation",
90
+ className: cn('fixed inset-y-0 right-0 z-50 grid w-[min(86vw,22rem)] grid-rows-[auto_1fr] gap-4 overflow-hidden overscroll-contain border-l border-white/15 bg-[rgba(16,22,36,.78)] p-5 text-white shadow-2xl backdrop-blur-xl transition-transform duration-200 lg:hidden', isMobileMenuOpen ? 'translate-x-0' : 'translate-x-full'),
91
+ "data-slot": "navbar-mobile-menu",
92
+ id: mobileMenuId,
93
+ style: {
94
+ WebkitBackdropFilter: 'blur(24px)',
95
+ backdropFilter: 'blur(24px)'
96
+ },
97
+ children: [
98
+ /*#__PURE__*/ _jsxs("div", {
99
+ className: "flex items-center justify-between gap-3",
100
+ children: [
101
+ /*#__PURE__*/ _jsx("div", {
102
+ className: "min-w-0 text-base font-semibold",
103
+ children: mobileMenuTitle
104
+ }),
105
+ /*#__PURE__*/ _jsx("button", {
106
+ "aria-label": "Close navigation menu",
107
+ className: "inline-flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-current transition-colors hover:bg-current/10 focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-current",
108
+ "data-slot": "navbar-mobile-close",
109
+ onClick: ()=>setIsMobileMenuOpen(false),
110
+ type: "button",
111
+ children: /*#__PURE__*/ _jsx(X, {
112
+ "aria-hidden": "true",
113
+ className: "size-5"
114
+ })
115
+ })
116
+ ]
117
+ }),
118
+ /*#__PURE__*/ _jsx("div", {
119
+ className: "min-h-0 overflow-y-auto",
120
+ onClick: ()=>setIsMobileMenuOpen(false),
121
+ children: mobileMenu
122
+ })
123
+ ]
124
+ })
125
+ ]
126
+ }), document.body) : null;
127
+ const renderedChildren = /*#__PURE__*/ _jsxs(_Fragment, {
128
+ children: [
129
+ children,
130
+ mobileMenu ? /*#__PURE__*/ _jsx("button", {
131
+ "aria-controls": mobileMenuId,
132
+ "aria-expanded": isMobileMenuOpen,
133
+ "aria-label": mobileMenuLabel,
134
+ className: "ml-auto mr-3 inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-current transition-colors hover:bg-current/10 focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-current lg:hidden",
135
+ "data-slot": "navbar-mobile-trigger",
136
+ onClick: ()=>setIsMobileMenuOpen((value)=>!value),
137
+ type: "button",
138
+ children: /*#__PURE__*/ _jsx(Menu, {
139
+ "aria-hidden": "true",
140
+ className: "size-5"
141
+ })
142
+ }) : null,
143
+ mobileMenuPortal
144
+ ]
145
+ });
146
+ return renderWithAsChild({
147
+ as,
148
+ asChild,
149
+ children: renderedChildren,
150
+ className: cn('flex min-h-14 w-full items-center gap-3 border-b border-border bg-background px-4 text-sm text-foreground sm:px-6', isFloating && 'mx-auto mt-4 min-h-16 w-[calc(100%-2rem)] max-w-5xl rounded-full !border !border-border/70 !bg-background/80 px-5 backdrop-blur-md sm:px-6', isSticky && !isMobileMenuOpen && (isFloating ? 'sticky top-4 z-40' : 'sticky top-0 z-40'), transparentOnScroll && [
151
+ 'inset-x-0 z-40 border-transparent bg-transparent text-white transition-[background-color,backdrop-filter,border-color,color] duration-200',
152
+ isFloating ? 'top-4' : 'top-0',
153
+ isSticky && !isMobileMenuOpen ? 'sticky' : 'fixed',
154
+ isFloating ? 'data-[scroll-state=scrolled]:!border-border/70 data-[scroll-state=scrolled]:!bg-background/80 data-[scroll-state=scrolled]:text-foreground' : 'data-[scroll-state=scrolled]:border-border/70 data-[scroll-state=scrolled]:bg-background/80 data-[scroll-state=scrolled]:text-foreground data-[scroll-state=scrolled]:backdrop-blur-md'
155
+ ], className),
156
+ 'data-floating': isFloating ? 'true' : undefined,
157
+ 'data-mobile-menu-open': isMobileMenuOpen ? 'true' : undefined,
158
+ 'data-scroll-state': scrollState,
159
+ 'data-sticky': isSticky ? 'true' : undefined,
160
+ 'data-transparent-on-scroll': transparentOnScroll ? 'true' : undefined,
161
+ ref,
162
+ style: navbarStyle,
163
+ ...props
164
+ }, {
165
+ 'data-slot': 'navbar'
166
+ });
167
+ };
168
+ /* eslint-enable react-hooks/rules-of-hooks */ export const NavbarSection = ({ children, className, ref, ...props })=>/*#__PURE__*/ _jsx("div", {
169
+ className: cn('flex min-w-0 items-center gap-1.5', className),
170
+ "data-slot": "navbar-section",
171
+ ref: ref,
172
+ ...props,
173
+ children: children
174
+ });
175
+ export const NavbarItem = ({ as, asChild = false, children, className, current = false, href, ref, type = 'button', ...props })=>{
176
+ const component = as ?? (href ? 'a' : 'button');
177
+ return renderWithAsChild({
178
+ 'aria-current': current ? 'page' : undefined,
179
+ as: component,
180
+ asChild,
181
+ children,
182
+ className: cn('group/navbar-item relative inline-flex min-h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-3 py-2 font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary data-[current=true]:text-foreground [&>svg]:size-5 [&>svg]:shrink-0', current && 'after:absolute after:inset-x-3 after:-bottom-[9px] after:h-0.5 after:rounded-full after:bg-current', className),
183
+ 'data-current': current ? 'true' : undefined,
184
+ href,
185
+ ref,
186
+ type: href ? undefined : type,
187
+ ...props
188
+ }, {
189
+ 'data-slot': 'navbar-item'
190
+ });
191
+ };
192
+ export const NavbarLabel = ({ className, ref, ...props })=>/*#__PURE__*/ _jsx("span", {
193
+ className: cn('truncate', className),
194
+ "data-slot": "navbar-label",
195
+ ref: ref,
196
+ ...props
197
+ });
198
+ export const NavbarSpacer = ({ className, ref, ...props })=>/*#__PURE__*/ _jsx("div", {
199
+ "aria-hidden": "true",
200
+ className: cn('min-w-4 flex-1', className),
201
+ "data-slot": "navbar-spacer",
202
+ ref: ref,
203
+ ...props
204
+ });
205
+ export const NavbarDivider = ({ className, ref, ...props })=>/*#__PURE__*/ _jsx("div", {
206
+ "aria-hidden": "true",
207
+ className: cn('mx-2 h-6 w-px shrink-0 bg-border', className),
208
+ "data-slot": "navbar-divider",
209
+ ref: ref,
210
+ ...props
211
+ });
212
+
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL05hdmJhci9OYXZiYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y259IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge01lbnUsIFh9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlSWQsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJztcblxuaW1wb3J0IHtyZW5kZXJXaXRoQXNDaGlsZH0gZnJvbSAnLi4vQ29tcG9uZW50VXRpbHMvcmVuZGVyV2l0aEFzQ2hpbGQuanMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFuY2hvckhUTUxBdHRyaWJ1dGVzLFxuICBCdXR0b25IVE1MQXR0cmlidXRlcyxcbiAgRWxlbWVudFR5cGUsXG4gIEZDLFxuICBIVE1MQXR0cmlidXRlcyxcbiAgUmVhY3ROb2RlLFxuICBSZWZcbn0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBnZXRUcmFuc3BhcmVudFNjcm9sbFRocmVzaG9sZCA9ICh0aHJlc2hvbGQ6IG51bWJlcikgPT4gKFxuICB0aHJlc2hvbGQgPiAxID8gdGhyZXNob2xkIDogd2luZG93LmlubmVySGVpZ2h0ICogdGhyZXNob2xkXG4pO1xuXG50eXBlIE5hdmJhclNjcm9sbFN0YXRlID0gJ2F0LXRvcCcgfCAnc2Nyb2xsZWQnIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXROYXZiYXJTY3JvbGxTdGF0ZSA9IChcbiAgaXNBdFRvcDogYm9vbGVhbixcbiAgaXNNb2JpbGVNZW51T3BlbjogYm9vbGVhbixcbiAgdHJhbnNwYXJlbnRPblNjcm9sbDogYm9vbGVhblxuKTogTmF2YmFyU2Nyb2xsU3RhdGUgPT4ge1xuICBpZighdHJhbnNwYXJlbnRPblNjcm9sbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gaXNNb2JpbGVNZW51T3BlbiB8fCAhaXNBdFRvcCA/ICdzY3JvbGxlZCcgOiAnYXQtdG9wJztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2YmFyUHJvcHMgZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4ge1xuICByZWFkb25seSBhcz86IEVsZW1lbnRUeXBlO1xuICByZWFkb25seSBhc0NoaWxkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IGlzRmxvYXRpbmc/OiBib29sZWFuO1xuICByZWFkb25seSBpc1N0aWNreT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1vYmlsZU1lbnU/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IG1vYmlsZU1lbnVMYWJlbD86IHN0cmluZztcbiAgcmVhZG9ubHkgbW9iaWxlTWVudVRpdGxlPzogUmVhY3ROb2RlO1xuICByZWFkb25seSByZWY/OiBSZWY8SFRNTEVsZW1lbnQ+O1xuICByZWFkb25seSB0cmFuc3BhcmVudE9uU2Nyb2xsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNwYXJlbnRTY3JvbGxCYWNrZHJvcEZpbHRlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhbnNwYXJlbnRTY3JvbGxUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2YmFyU2VjdGlvblByb3BzIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IHJlZj86IFJlZjxIVE1MRGl2RWxlbWVudD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2YmFySXRlbVByb3BzIGV4dGVuZHMgT21pdDxCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sICdjaGlsZHJlbicgfCAndHlwZSc+IHtcbiAgcmVhZG9ubHkgYXM/OiBFbGVtZW50VHlwZTtcbiAgcmVhZG9ubHkgYXNDaGlsZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICByZWFkb25seSBjdXJyZW50PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaHJlZj86IEFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PlsnaHJlZiddO1xuICByZWFkb25seSByZWY/OiBSZWY8SFRNTEVsZW1lbnQ+O1xuICByZWFkb25seSB0eXBlPzogQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+Wyd0eXBlJ107XG59XG5cbi8vIFRoZSBjb21wYXRpYmlsaXR5IHJ1bGUgZG9lcyBub3QgcmVjb2duaXplIGFycm93LWZ1bmN0aW9uIGNvbXBvbmVudHMgdGhhdCBkZWxlZ2F0ZSByZW5kZXJpbmcuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAqL1xuZXhwb3J0IGNvbnN0IE5hdmJhcjogRkM8TmF2YmFyUHJvcHM+ID0gKHtcbiAgYXMgPSAnbmF2JyxcbiAgYXNDaGlsZCA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBpc0Zsb2F0aW5nID0gZmFsc2UsXG4gIGlzU3RpY2t5ID0gZmFsc2UsXG4gIG1vYmlsZU1lbnUsXG4gIG1vYmlsZU1lbnVMYWJlbCA9ICdPcGVuIG5hdmlnYXRpb24gbWVudScsXG4gIG1vYmlsZU1lbnVUaXRsZSA9ICdOYXZpZ2F0aW9uJyxcbiAgcmVmLFxuICBzdHlsZSxcbiAgdHJhbnNwYXJlbnRPblNjcm9sbCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudFNjcm9sbEJhY2tkcm9wRmlsdGVyID0gJ2JsdXIoMTJweCknLFxuICB0cmFuc3BhcmVudFNjcm9sbFRocmVzaG9sZCA9IDAuMSxcbiAgLi4ucHJvcHNcbn06IE5hdmJhclByb3BzKSA9PiB7XG4gIGNvbnN0IFtpc0F0VG9wLCBzZXRJc0F0VG9wXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbaXNNb2JpbGVNZW51T3Blbiwgc2V0SXNNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG1vYmlsZU1lbnVJZCA9IHVzZUlkKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZighdHJhbnNwYXJlbnRPblNjcm9sbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IGdldFRyYW5zcGFyZW50U2Nyb2xsVGhyZXNob2xkKHRyYW5zcGFyZW50U2Nyb2xsVGhyZXNob2xkKTtcblxuICAgICAgc2V0SXNBdFRvcCh3aW5kb3cuc2Nyb2xsWSA8IHRocmVzaG9sZCk7XG4gICAgfTtcblxuICAgIG9uU2Nyb2xsKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uU2Nyb2xsLCB7cGFzc2l2ZTogdHJ1ZX0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwge3Bhc3NpdmU6IHRydWV9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25TY3JvbGwpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICB9O1xuICB9LCBbdHJhbnNwYXJlbnRPblNjcm9sbCwgdHJhbnNwYXJlbnRTY3JvbGxUaHJlc2hvbGRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmKCFpc01vYmlsZU1lbnVPcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG4gICAgY29uc3QgYm9keU92ZXJzY3JvbGxCZWhhdmlvciA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yO1xuICAgIGNvbnN0IGh0bWxPdmVyZmxvdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdztcbiAgICBjb25zdCBodG1sT3ZlcnNjcm9sbEJlaGF2aW9yID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJzY3JvbGxCZWhhdmlvcjtcblxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJzY3JvbGxCZWhhdmlvciA9ICdub25lJztcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJ25vbmUnO1xuXG4gICAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZihldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHNldElzTW9iaWxlTWVudU9wZW4oZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IGJvZHlPdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gYm9keU92ZXJzY3JvbGxCZWhhdmlvcjtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IGh0bWxPdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSBodG1sT3ZlcnNjcm9sbEJlaGF2aW9yO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgfTtcbiAgfSwgW2lzTW9iaWxlTWVudU9wZW5dKTtcblxuICBjb25zdCBzY3JvbGxTdGF0ZSA9IGdldE5hdmJhclNjcm9sbFN0YXRlKGlzQXRUb3AsIGlzTW9iaWxlTWVudU9wZW4sIHRyYW5zcGFyZW50T25TY3JvbGwpO1xuICBjb25zdCBuYXZiYXJTdHlsZSA9IHNjcm9sbFN0YXRlID09PSAnc2Nyb2xsZWQnID8ge1xuICAgIFdlYmtpdEJhY2tkcm9wRmlsdGVyOiB0cmFuc3BhcmVudFNjcm9sbEJhY2tkcm9wRmlsdGVyLFxuICAgIGJhY2tkcm9wRmlsdGVyOiB0cmFuc3BhcmVudFNjcm9sbEJhY2tkcm9wRmlsdGVyLFxuICAgIC4uLnN0eWxlXG4gIH0gOiBzdHlsZTtcblxuICBjb25zdCBtb2JpbGVNZW51UG9ydGFsID0gbW9iaWxlTWVudSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gY3JlYXRlUG9ydGFsKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIGFyaWEtaGlkZGVuPXshaXNNb2JpbGVNZW51T3Blbn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnZml4ZWQgaW5zZXQtMCB6LTMwIGJnLWJsYWNrLzQ1IG9wYWNpdHktMCBiYWNrZHJvcC1ibHVyLW1kIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgbGc6aGlkZGVuJyxcbiAgICAgICAgICBpc01vYmlsZU1lbnVPcGVuID8gJ3BvaW50ZXItZXZlbnRzLWF1dG8gb3BhY2l0eS0xMDAnIDogJ3BvaW50ZXItZXZlbnRzLW5vbmUnXG4gICAgICAgICl9XG4gICAgICAgIGRhdGEtc2xvdD1cIm5hdmJhci1tb2JpbGUtb3ZlcmxheVwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzTW9iaWxlTWVudU9wZW4oZmFsc2UpfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIFdlYmtpdEJhY2tkcm9wRmlsdGVyOiAnYmx1cigxMnB4KScsXG4gICAgICAgICAgYmFja2Ryb3BGaWx0ZXI6ICdibHVyKDEycHgpJ1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxhc2lkZVxuICAgICAgICBhcmlhLWxhYmVsPVwiTW9iaWxlIG5hdmlnYXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmaXhlZCBpbnNldC15LTAgcmlnaHQtMCB6LTUwIGdyaWQgdy1bbWluKDg2dncsMjJyZW0pXSBncmlkLXJvd3MtW2F1dG9fMWZyXSBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gb3ZlcnNjcm9sbC1jb250YWluIGJvcmRlci1sIGJvcmRlci13aGl0ZS8xNSBiZy1bcmdiYSgxNiwyMiwzNiwuNzgpXSBwLTUgdGV4dC13aGl0ZSBzaGFkb3ctMnhsIGJhY2tkcm9wLWJsdXIteGwgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwIGxnOmhpZGRlbicsXG4gICAgICAgICAgaXNNb2JpbGVNZW51T3BlbiA/ICd0cmFuc2xhdGUteC0wJyA6ICd0cmFuc2xhdGUteC1mdWxsJ1xuICAgICAgICApfVxuICAgICAgICBkYXRhLXNsb3Q9XCJuYXZiYXItbW9iaWxlLW1lbnVcIlxuICAgICAgICBpZD17bW9iaWxlTWVudUlkfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIFdlYmtpdEJhY2tkcm9wRmlsdGVyOiAnYmx1cigyNHB4KScsXG4gICAgICAgICAgYmFja2Ryb3BGaWx0ZXI6ICdibHVyKDI0cHgpJ1xuICAgICAgICB9fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGRcIj57bW9iaWxlTWVudVRpdGxlfTwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBuYXZpZ2F0aW9uIG1lbnVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggc2l6ZS05IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHRleHQtY3VycmVudCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1jdXJyZW50LzEwIGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLWN1cnJlbnRcIlxuICAgICAgICAgICAgZGF0YS1zbG90PVwibmF2YmFyLW1vYmlsZS1jbG9zZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc01vYmlsZU1lbnVPcGVuKGZhbHNlKX1cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIDxYIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzTmFtZT1cInNpemUtNVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvXCIgb25DbGljaz17KCkgPT4gc2V0SXNNb2JpbGVNZW51T3BlbihmYWxzZSl9PlxuICAgICAgICAgIHttb2JpbGVNZW51fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgPC8+LFxuICAgIGRvY3VtZW50LmJvZHlcbiAgKSA6IG51bGw7XG5cbiAgY29uc3QgcmVuZGVyZWRDaGlsZHJlbiA9IChcbiAgICA8PlxuICAgICAge2NoaWxkcmVufVxuICAgICAge21vYmlsZU1lbnUgPyAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhcmlhLWNvbnRyb2xzPXttb2JpbGVNZW51SWR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17aXNNb2JpbGVNZW51T3Blbn1cbiAgICAgICAgICBhcmlhLWxhYmVsPXttb2JpbGVNZW51TGFiZWx9XG4gICAgICAgICAgY2xhc3NOYW1lPVwibWwtYXV0byBtci0zIGlubGluZS1mbGV4IHNpemUtMTAgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWN1cnJlbnQvMTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtY3VycmVudCBsZzpoaWRkZW5cIlxuICAgICAgICAgIGRhdGEtc2xvdD1cIm5hdmJhci1tb2JpbGUtdHJpZ2dlclwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNNb2JpbGVNZW51T3BlbigodmFsdWUpID0+ICF2YWx1ZSl9XG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgIDxNZW51IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzTmFtZT1cInNpemUtNVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7bW9iaWxlTWVudVBvcnRhbH1cbiAgICA8Lz5cbiAgKTtcblxuICByZXR1cm4gcmVuZGVyV2l0aEFzQ2hpbGQoXG4gICAge1xuICAgICAgYXMsXG4gICAgICBhc0NoaWxkLFxuICAgICAgY2hpbGRyZW46IHJlbmRlcmVkQ2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWU6IGNuKFxuICAgICAgICAnZmxleCBtaW4taC0xNCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zIGJvcmRlci1iIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBweC00IHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIHNtOnB4LTYnLFxuICAgICAgICBpc0Zsb2F0aW5nICYmICdteC1hdXRvIG10LTQgbWluLWgtMTYgdy1bY2FsYygxMDAlLTJyZW0pXSBtYXgtdy01eGwgcm91bmRlZC1mdWxsICFib3JkZXIgIWJvcmRlci1ib3JkZXIvNzAgIWJnLWJhY2tncm91bmQvODAgcHgtNSBiYWNrZHJvcC1ibHVyLW1kIHNtOnB4LTYnLFxuICAgICAgICBpc1N0aWNreSAmJiAhaXNNb2JpbGVNZW51T3BlbiAmJiAoaXNGbG9hdGluZyA/ICdzdGlja3kgdG9wLTQgei00MCcgOiAnc3RpY2t5IHRvcC0wIHotNDAnKSxcbiAgICAgICAgdHJhbnNwYXJlbnRPblNjcm9sbCAmJiBbXG4gICAgICAgICAgJ2luc2V0LXgtMCB6LTQwIGJvcmRlci10cmFuc3BhcmVudCBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3IsYmFja2Ryb3AtZmlsdGVyLGJvcmRlci1jb2xvcixjb2xvcl0gZHVyYXRpb24tMjAwJyxcbiAgICAgICAgICBpc0Zsb2F0aW5nID8gJ3RvcC00JyA6ICd0b3AtMCcsXG4gICAgICAgICAgaXNTdGlja3kgJiYgIWlzTW9iaWxlTWVudU9wZW4gPyAnc3RpY2t5JyA6ICdmaXhlZCcsXG4gICAgICAgICAgaXNGbG9hdGluZ1xuICAgICAgICAgICAgPyAnZGF0YS1bc2Nyb2xsLXN0YXRlPXNjcm9sbGVkXTohYm9yZGVyLWJvcmRlci83MCBkYXRhLVtzY3JvbGwtc3RhdGU9c2Nyb2xsZWRdOiFiZy1iYWNrZ3JvdW5kLzgwIGRhdGEtW3Njcm9sbC1zdGF0ZT1zY3JvbGxlZF06dGV4dC1mb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgOiAnZGF0YS1bc2Nyb2xsLXN0YXRlPXNjcm9sbGVkXTpib3JkZXItYm9yZGVyLzcwIGRhdGEtW3Njcm9sbC1zdGF0ZT1zY3JvbGxlZF06YmctYmFja2dyb3VuZC84MCBkYXRhLVtzY3JvbGwtc3RhdGU9c2Nyb2xsZWRdOnRleHQtZm9yZWdyb3VuZCBkYXRhLVtzY3JvbGwtc3RhdGU9c2Nyb2xsZWRdOmJhY2tkcm9wLWJsdXItbWQnXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKSxcbiAgICAgICdkYXRhLWZsb2F0aW5nJzogaXNGbG9hdGluZyA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICdkYXRhLW1vYmlsZS1tZW51LW9wZW4nOiBpc01vYmlsZU1lbnVPcGVuID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgJ2RhdGEtc2Nyb2xsLXN0YXRlJzogc2Nyb2xsU3RhdGUsXG4gICAgICAnZGF0YS1zdGlja3knOiBpc1N0aWNreSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICdkYXRhLXRyYW5zcGFyZW50LW9uLXNjcm9sbCc6IHRyYW5zcGFyZW50T25TY3JvbGwgPyAndHJ1ZScgOiB1bmRlZmluZWQsXG4gICAgICByZWYsXG4gICAgICBzdHlsZTogbmF2YmFyU3R5bGUsXG4gICAgICAuLi5wcm9wc1xuICAgIH0sXG4gICAge1xuICAgICAgJ2RhdGEtc2xvdCc6ICduYXZiYXInXG4gICAgfVxuICApO1xufTtcbi8qIGVzbGludC1lbmFibGUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgKi9cblxuZXhwb3J0IGNvbnN0IE5hdmJhclNlY3Rpb24gPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICByZWYsXG4gIC4uLnByb3BzXG59OiBOYXZiYXJTZWN0aW9uUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTEuNScsIGNsYXNzTmFtZSl9XG4gICAgZGF0YS1zbG90PVwibmF2YmFyLXNlY3Rpb25cIlxuICAgIHJlZj17cmVmfVxuICAgIHsuLi5wcm9wc31cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9kaXY+XG4pO1xuXG5leHBvcnQgY29uc3QgTmF2YmFySXRlbSA9ICh7XG4gIGFzLFxuICBhc0NoaWxkID0gZmFsc2UsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGN1cnJlbnQgPSBmYWxzZSxcbiAgaHJlZixcbiAgcmVmLFxuICB0eXBlID0gJ2J1dHRvbicsXG4gIC4uLnByb3BzXG59OiBOYXZiYXJJdGVtUHJvcHMpID0+IHtcbiAgY29uc3QgY29tcG9uZW50ID0gYXMgPz8gKGhyZWYgPyAnYScgOiAnYnV0dG9uJyk7XG5cbiAgcmV0dXJuIHJlbmRlcldpdGhBc0NoaWxkKFxuICAgIHtcbiAgICAgICdhcmlhLWN1cnJlbnQnOiBjdXJyZW50ID8gJ3BhZ2UnIDogdW5kZWZpbmVkLFxuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIGFzQ2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZTogY24oXG4gICAgICAgICdncm91cC9uYXZiYXItaXRlbSByZWxhdGl2ZSBpbmxpbmUtZmxleCBtaW4taC05IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtcHJpbWFyeSBkYXRhLVtjdXJyZW50PXRydWVdOnRleHQtZm9yZWdyb3VuZCBbJj5zdmddOnNpemUtNSBbJj5zdmddOnNocmluay0wJyxcbiAgICAgICAgY3VycmVudCAmJiAnYWZ0ZXI6YWJzb2x1dGUgYWZ0ZXI6aW5zZXQteC0zIGFmdGVyOi1ib3R0b20tWzlweF0gYWZ0ZXI6aC0wLjUgYWZ0ZXI6cm91bmRlZC1mdWxsIGFmdGVyOmJnLWN1cnJlbnQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICksXG4gICAgICAnZGF0YS1jdXJyZW50JzogY3VycmVudCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIGhyZWYsXG4gICAgICByZWYsXG4gICAgICB0eXBlOiBocmVmID8gdW5kZWZpbmVkIDogdHlwZSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSxcbiAgICB7XG4gICAgICAnZGF0YS1zbG90JzogJ25hdmJhci1pdGVtJ1xuICAgIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2YmFyTGFiZWxQcm9wcyBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPEhUTUxTcGFuRWxlbWVudD4ge1xuICByZWFkb25seSByZWY/OiBSZWY8SFRNTFNwYW5FbGVtZW50Pjtcbn1cblxuZXhwb3J0IGNvbnN0IE5hdmJhckxhYmVsID0gKHtcbiAgY2xhc3NOYW1lLFxuICByZWYsXG4gIC4uLnByb3BzXG59OiBOYXZiYXJMYWJlbFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY2xhc3NOYW1lPXtjbigndHJ1bmNhdGUnLCBjbGFzc05hbWUpfVxuICAgIGRhdGEtc2xvdD1cIm5hdmJhci1sYWJlbFwiXG4gICAgcmVmPXtyZWZ9XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBOYXZiYXJTcGFjZXJQcm9wcyBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiB7XG4gIHJlYWRvbmx5IHJlZj86IFJlZjxIVE1MRGl2RWxlbWVudD47XG59XG5cbmV4cG9ydCBjb25zdCBOYXZiYXJTcGFjZXIgPSAoe1xuICBjbGFzc05hbWUsXG4gIHJlZixcbiAgLi4ucHJvcHNcbn06IE5hdmJhclNwYWNlclByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGNsYXNzTmFtZT17Y24oJ21pbi13LTQgZmxleC0xJywgY2xhc3NOYW1lKX1cbiAgICBkYXRhLXNsb3Q9XCJuYXZiYXItc3BhY2VyXCJcbiAgICByZWY9e3JlZn1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmJhckRpdmlkZXJQcm9wcyBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiB7XG4gIHJlYWRvbmx5IHJlZj86IFJlZjxIVE1MRGl2RWxlbWVudD47XG59XG5cbmV4cG9ydCBjb25zdCBOYXZiYXJEaXZpZGVyID0gKHtcbiAgY2xhc3NOYW1lLFxuICByZWYsXG4gIC4uLnByb3BzXG59OiBOYXZiYXJEaXZpZGVyUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgY2xhc3NOYW1lPXtjbignbXgtMiBoLTYgdy1weCBzaHJpbmstMCBiZy1ib3JkZXInLCBjbGFzc05hbWUpfVxuICAgIGRhdGEtc2xvdD1cIm5hdmJhci1kaXZpZGVyXCJcbiAgICByZWY9e3JlZn1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuIl0sIm5hbWVzIjpbImNuIiwiTWVudSIsIlgiLCJ1c2VFZmZlY3QiLCJ1c2VJZCIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwicmVuZGVyV2l0aEFzQ2hpbGQiLCJnZXRUcmFuc3BhcmVudFNjcm9sbFRocmVzaG9sZCIsInRocmVzaG9sZCIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwiZ2V0TmF2YmFyU2Nyb2xsU3RhdGUiLCJpc0F0VG9wIiwiaXNNb2JpbGVNZW51T3BlbiIsInRyYW5zcGFyZW50T25TY3JvbGwiLCJ1bmRlZmluZWQiLCJOYXZiYXIiLCJhcyIsImFzQ2hpbGQiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImlzRmxvYXRpbmciLCJpc1N0aWNreSIsIm1vYmlsZU1lbnUiLCJtb2JpbGVNZW51TGFiZWwiLCJtb2JpbGVNZW51VGl0bGUiLCJyZWYiLCJzdHlsZSIsInRyYW5zcGFyZW50U2Nyb2xsQmFja2Ryb3BGaWx0ZXIiLCJ0cmFuc3BhcmVudFNjcm9sbFRocmVzaG9sZCIsInByb3BzIiwic2V0SXNBdFRvcCIsInNldElzTW9iaWxlTWVudU9wZW4iLCJtb2JpbGVNZW51SWQiLCJvblNjcm9sbCIsInNjcm9sbFkiLCJhZGRFdmVudExpc3RlbmVyIiwicGFzc2l2ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJib2R5T3ZlcmZsb3ciLCJkb2N1bWVudCIsImJvZHkiLCJvdmVyZmxvdyIsImJvZHlPdmVyc2Nyb2xsQmVoYXZpb3IiLCJvdmVyc2Nyb2xsQmVoYXZpb3IiLCJodG1sT3ZlcmZsb3ciLCJkb2N1bWVudEVsZW1lbnQiLCJodG1sT3ZlcnNjcm9sbEJlaGF2aW9yIiwib25LZXlEb3duIiwiZXZlbnQiLCJrZXkiLCJzY3JvbGxTdGF0ZSIsIm5hdmJhclN0eWxlIiwiV2Via2l0QmFja2Ryb3BGaWx0ZXIiLCJiYWNrZHJvcEZpbHRlciIsIm1vYmlsZU1lbnVQb3J0YWwiLCJkaXYiLCJhcmlhLWhpZGRlbiIsImRhdGEtc2xvdCIsIm9uQ2xpY2siLCJhc2lkZSIsImFyaWEtbGFiZWwiLCJpZCIsImJ1dHRvbiIsInR5cGUiLCJyZW5kZXJlZENoaWxkcmVuIiwiYXJpYS1jb250cm9scyIsImFyaWEtZXhwYW5kZWQiLCJ2YWx1ZSIsIk5hdmJhclNlY3Rpb24iLCJOYXZiYXJJdGVtIiwiY3VycmVudCIsImhyZWYiLCJjb21wb25lbnQiLCJOYXZiYXJMYWJlbCIsInNwYW4iLCJOYXZiYXJTcGFjZXIiLCJOYXZiYXJEaXZpZGVyIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsRUFBRSxRQUFPLGVBQWU7QUFDaEMsU0FBUUMsSUFBSSxFQUFFQyxDQUFDLFFBQU8sZUFBZTtBQUNyQyxTQUFRQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxRQUFPLFFBQVE7QUFDakQsU0FBUUMsWUFBWSxRQUFPLFlBQVk7QUFFdkMsU0FBUUMsaUJBQWlCLFFBQU8seUNBQXlDO0FBWXpFLE1BQU1DLGdDQUFnQyxDQUFDQyxZQUNyQ0EsWUFBWSxJQUFJQSxZQUFZQyxPQUFPQyxXQUFXLEdBQUdGO0FBS25ELE1BQU1HLHVCQUF1QixDQUMzQkMsU0FDQUMsa0JBQ0FDO0lBRUEsSUFBRyxDQUFDQSxxQkFBcUI7UUFDdkIsT0FBT0M7SUFDVDtJQUVBLE9BQU9GLG9CQUFvQixDQUFDRCxVQUFVLGFBQWE7QUFDckQ7QUFnQ0EsK0ZB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