@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.
- package/LICENSE +21 -0
- package/MIGRATION.md +36 -0
- package/README.md +768 -0
- package/docs/assets/gothamui-app-architecture.svg +159 -0
- package/docs/assets/gothamui-logo.png +0 -0
- package/docs/assets/gothamui-logo.svg +42 -0
- package/docs/render-performance.md +34 -0
- package/lib/actions/GothamActions.d.ts +42 -0
- package/lib/actions/GothamActions.js +67 -0
- package/lib/actions/MarkdownActions.d.ts +4 -0
- package/lib/actions/MarkdownActions.js +48 -0
- package/lib/app.d.ts +1 -0
- package/lib/app.js +198 -0
- package/lib/components/Alert/Alert.d.ts +8 -0
- package/lib/components/Alert/Alert.js +24 -0
- package/lib/components/Alert/Alert.stories.js +59 -0
- package/lib/components/AuthRoute/AuthRoute.d.ts +3 -0
- package/lib/components/AuthRoute/AuthRoute.js +21 -0
- package/lib/components/AuthRoute/AuthRoute.stories.js +45 -0
- package/lib/components/AutocompleteField/AutocompleteField.d.ts +24 -0
- package/lib/components/AutocompleteField/AutocompleteField.js +148 -0
- package/lib/components/AutocompleteField/AutocompleteField.stories.js +62 -0
- package/lib/components/Avatar/Avatar.d.ts +29 -0
- package/lib/components/Avatar/Avatar.js +154 -0
- package/lib/components/Avatar/Avatar.stories.js +105 -0
- package/lib/components/Badge/Badge.d.ts +9 -0
- package/lib/components/Badge/Badge.js +22 -0
- package/lib/components/Badge/Badge.stories.js +53 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.d.ts +19 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.js +74 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +95 -0
- package/lib/components/Button/Button.d.ts +25 -0
- package/lib/components/Button/Button.js +157 -0
- package/lib/components/Button/Button.stories.js +119 -0
- package/lib/components/Card/Card.d.ts +8 -0
- package/lib/components/Card/Card.js +39 -0
- package/lib/components/Card/Card.stories.js +60 -0
- package/lib/components/CategoryGrid/CategoryGrid.d.ts +15 -0
- package/lib/components/CategoryGrid/CategoryGrid.js +42 -0
- package/lib/components/CategoryGrid/CategoryGrid.stories.js +35 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.css +1 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.d.ts +3 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.js +28 -0
- package/lib/components/Chat/Avatar/Avatar.css +1 -0
- package/lib/components/Chat/Avatar/Avatar.d.ts +3 -0
- package/lib/components/Chat/Avatar/Avatar.js +72 -0
- package/lib/components/Chat/Button/Button.css +1 -0
- package/lib/components/Chat/Button/Button.d.ts +3 -0
- package/lib/components/Chat/Button/Button.js +37 -0
- package/lib/components/Chat/Chat.stories.js +688 -0
- package/lib/components/Chat/ChatItem/ChatItem.css +1 -0
- package/lib/components/Chat/ChatItem/ChatItem.d.ts +3 -0
- package/lib/components/Chat/ChatItem/ChatItem.js +183 -0
- package/lib/components/Chat/ChatList/ChatList.css +1 -0
- package/lib/components/Chat/ChatList/ChatList.d.ts +3 -0
- package/lib/components/Chat/ChatList/ChatList.js +84 -0
- package/lib/components/Chat/Circle/Circle.d.ts +3 -0
- package/lib/components/Chat/Circle/Circle.js +27 -0
- package/lib/components/Chat/Dropdown/Dropdown.css +1 -0
- package/lib/components/Chat/Dropdown/Dropdown.d.ts +3 -0
- package/lib/components/Chat/Dropdown/Dropdown.js +66 -0
- package/lib/components/Chat/FileMessage/FileMessage.css +1 -0
- package/lib/components/Chat/FileMessage/FileMessage.d.ts +3 -0
- package/lib/components/Chat/FileMessage/FileMessage.js +77 -0
- package/lib/components/Chat/Input/Input.css +1 -0
- package/lib/components/Chat/Input/Input.d.ts +3 -0
- package/lib/components/Chat/Input/Input.js +108 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.css +1 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.d.ts +3 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.js +36 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.css +1 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.d.ts +3 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.js +106 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.css +1 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.d.ts +3 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.js +26 -0
- package/lib/components/Chat/MeetingList/MeetingList.css +1 -0
- package/lib/components/Chat/MeetingList/MeetingList.d.ts +3 -0
- package/lib/components/Chat/MeetingList/MeetingList.js +52 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.css +1 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.d.ts +3 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.js +227 -0
- package/lib/components/Chat/MessageBox/MessageBox.css +1 -0
- package/lib/components/Chat/MessageBox/MessageBox.d.ts +3 -0
- package/lib/components/Chat/MessageBox/MessageBox.js +263 -0
- package/lib/components/Chat/MessageList/MessageList.css +1 -0
- package/lib/components/Chat/MessageList/MessageList.d.ts +2 -0
- package/lib/components/Chat/MessageList/MessageList.js +196 -0
- package/lib/components/Chat/Navbar/Navbar.css +1 -0
- package/lib/components/Chat/Navbar/Navbar.d.ts +3 -0
- package/lib/components/Chat/Navbar/Navbar.js +21 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.css +1 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.d.ts +3 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.js +73 -0
- package/lib/components/Chat/Popup/Popup.css +1 -0
- package/lib/components/Chat/Popup/Popup.d.ts +3 -0
- package/lib/components/Chat/Popup/Popup.js +45 -0
- package/lib/components/Chat/README.md +50 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.css +1 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.d.ts +3 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.js +42 -0
- package/lib/components/Chat/SideBar/SideBar.css +1 -0
- package/lib/components/Chat/SideBar/SideBar.d.ts +3 -0
- package/lib/components/Chat/SideBar/SideBar.js +21 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.css +1 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.d.ts +3 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.js +28 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.css +1 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.d.ts +3 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.js +14 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.css +1 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.d.ts +3 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.js +88 -0
- package/lib/components/Chat/assets/img/leftArrow.svg +6 -0
- package/lib/components/Chat/assets/img/rightArrow.svg +6 -0
- package/lib/components/Chat/index.d.ts +25 -0
- package/lib/components/Chat/index.js +27 -0
- package/lib/components/Chat/type.d.js +52 -0
- package/lib/components/Chat/utils/formatRelativeDate.d.ts +4 -0
- package/lib/components/Chat/utils/formatRelativeDate.js +110 -0
- package/lib/components/Checkbox/Checkbox.d.ts +15 -0
- package/lib/components/Checkbox/Checkbox.js +106 -0
- package/lib/components/Checkbox/Checkbox.stories.js +51 -0
- package/lib/components/ComponentUtils/renderWithAsChild.d.ts +9 -0
- package/lib/components/ComponentUtils/renderWithAsChild.js +27 -0
- package/lib/components/Container/Container.d.ts +7 -0
- package/lib/components/Container/Container.js +16 -0
- package/lib/components/Container/Container.stories.js +36 -0
- package/lib/components/DateField/DateField.d.ts +22 -0
- package/lib/components/DateField/DateField.js +145 -0
- package/lib/components/DateField/DateField.stories.js +125 -0
- package/lib/components/DateField/DatePicker.d.ts +9 -0
- package/lib/components/DateField/DatePicker.js +205 -0
- package/lib/components/DateField/DatePicker.stories.js +33 -0
- package/lib/components/DescriptionList/DescriptionList.d.ts +4 -0
- package/lib/components/DescriptionList/DescriptionList.js +19 -0
- package/lib/components/DescriptionList/DescriptionList.stories.js +34 -0
- package/lib/components/Dialog/Dialog.d.ts +25 -0
- package/lib/components/Dialog/Dialog.js +66 -0
- package/lib/components/Dialog/Dialog.stories.js +88 -0
- package/lib/components/DropUpload/DropUpload.d.ts +37 -0
- package/lib/components/DropUpload/DropUpload.js +323 -0
- package/lib/components/DropUpload/DropUpload.stories.js +48 -0
- package/lib/components/Empty/Empty.d.ts +11 -0
- package/lib/components/Empty/Empty.js +39 -0
- package/lib/components/Empty/Empty.stories.js +52 -0
- package/lib/components/EmptyState/EmptyState.d.ts +15 -0
- package/lib/components/EmptyState/EmptyState.js +44 -0
- package/lib/components/EmptyState/EmptyState.stories.js +36 -0
- package/lib/components/ErrorMessage/ErrorMessage.d.ts +7 -0
- package/lib/components/ErrorMessage/ErrorMessage.js +20 -0
- package/lib/components/ErrorMessage/ErrorMessage.stories.js +25 -0
- package/lib/components/FaqSection/FaqSection.d.ts +14 -0
- package/lib/components/FaqSection/FaqSection.js +37 -0
- package/lib/components/FaqSection/FaqSection.stories.js +31 -0
- package/lib/components/Fieldset/Fieldset.d.ts +21 -0
- package/lib/components/Fieldset/Fieldset.js +39 -0
- package/lib/components/Fieldset/Fieldset.stories.js +42 -0
- package/lib/components/Footer/Footer.d.ts +26 -0
- package/lib/components/Footer/Footer.js +119 -0
- package/lib/components/Footer/Footer.stories.js +184 -0
- package/lib/components/Form/Form.d.ts +42 -0
- package/lib/components/Form/Form.js +198 -0
- package/lib/components/Form/Form.stories.js +65 -0
- package/lib/components/Form/FormContext.d.ts +35 -0
- package/lib/components/Form/FormContext.js +71 -0
- package/lib/components/GothamRoute/GothamRoute.d.ts +0 -0
- package/lib/components/GothamRoute/GothamRoute.js +56 -0
- package/lib/components/GothamRouter/GothamRouter.d.ts +0 -0
- package/lib/components/GothamRouter/GothamRouter.js +52 -0
- package/lib/components/Heading/Heading.d.ts +7 -0
- package/lib/components/Heading/Heading.js +20 -0
- package/lib/components/Heading/Heading.stories.js +51 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.d.ts +15 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.js +34 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.stories.js +41 -0
- package/lib/components/InputField/InputField.d.ts +25 -0
- package/lib/components/InputField/InputField.js +68 -0
- package/lib/components/InputField/InputField.stories.js +58 -0
- package/lib/components/Item/Item.d.ts +25 -0
- package/lib/components/Item/Item.js +79 -0
- package/lib/components/Item/Item.stories.js +94 -0
- package/lib/components/Kbd/Kbd.d.ts +2 -0
- package/lib/components/Kbd/Kbd.js +9 -0
- package/lib/components/Kbd/Kbd.stories.js +24 -0
- package/lib/components/Label/Label.d.ts +11 -0
- package/lib/components/Label/Label.js +23 -0
- package/lib/components/Label/Label.stories.js +38 -0
- package/lib/components/Link/Link.d.ts +7 -0
- package/lib/components/Link/Link.js +13 -0
- package/lib/components/Link/Link.stories.js +28 -0
- package/lib/components/ListContainer/ListContainer.d.ts +8 -0
- package/lib/components/ListContainer/ListContainer.js +14 -0
- package/lib/components/ListContainer/ListContainer.stories.js +45 -0
- package/lib/components/Loader/Loader.d.ts +9 -0
- package/lib/components/Loader/Loader.js +36 -0
- package/lib/components/Loader/Loader.stories.js +94 -0
- package/lib/components/LogoCloud/LogoCloud.d.ts +15 -0
- package/lib/components/LogoCloud/LogoCloud.js +43 -0
- package/lib/components/LogoCloud/LogoCloud.stories.js +28 -0
- package/lib/components/Markdown/Markdown.d.ts +8 -0
- package/lib/components/Markdown/Markdown.js +64 -0
- package/lib/components/Markdown/Markdown.stories.js +34 -0
- package/lib/components/MediaLightbox/MediaLightbox.d.ts +22 -0
- package/lib/components/MediaLightbox/MediaLightbox.js +80 -0
- package/lib/components/MediaObject/MediaObject.d.ts +8 -0
- package/lib/components/MediaObject/MediaObject.js +37 -0
- package/lib/components/MediaObject/MediaObject.stories.js +28 -0
- package/lib/components/Navbar/Navbar.d.ts +43 -0
- package/lib/components/Navbar/Navbar.js +213 -0
- package/lib/components/Navbar/Navbar.stories.js +235 -0
- package/lib/components/NotFound/NotFound.d.ts +34 -0
- package/lib/components/NotFound/NotFound.js +351 -0
- package/lib/components/NotFound/NotFound.stories.js +80 -0
- package/lib/components/Notify/Notify.d.ts +18 -0
- package/lib/components/Notify/Notify.js +178 -0
- package/lib/components/Notify/Notify.stories.js +148 -0
- package/lib/components/Notify/NotifyExample.d.ts +1 -0
- package/lib/components/Notify/NotifyExample.js +174 -0
- package/lib/components/Notify/README.md +103 -0
- package/lib/components/Pagination/Pagination.d.ts +18 -0
- package/lib/components/Pagination/Pagination.js +225 -0
- package/lib/components/Pagination/Pagination.stories.js +69 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +12 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.js +88 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.stories.js +16 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.d.ts +18 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.js +113 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.stories.js +88 -0
- package/lib/components/Pricing/Pricing.d.ts +78 -0
- package/lib/components/Pricing/Pricing.js +764 -0
- package/lib/components/Pricing/Pricing.stories.js +146 -0
- package/lib/components/ProductGrid/ProductGrid.d.ts +23 -0
- package/lib/components/ProductGrid/ProductGrid.js +79 -0
- package/lib/components/ProductGrid/ProductGrid.stories.js +50 -0
- package/lib/components/ProgressSteps/ProgressSteps.d.ts +13 -0
- package/lib/components/ProgressSteps/ProgressSteps.js +51 -0
- package/lib/components/ProgressSteps/ProgressSteps.stories.js +35 -0
- package/lib/components/RadioField/RadioField.d.ts +16 -0
- package/lib/components/RadioField/RadioField.js +63 -0
- package/lib/components/RadioField/RadioField.stories.js +140 -0
- package/lib/components/ReviewList/ReviewList.d.ts +15 -0
- package/lib/components/ReviewList/ReviewList.js +51 -0
- package/lib/components/ReviewList/ReviewList.stories.js +29 -0
- package/lib/components/SectionHeader/SectionHeader.d.ts +9 -0
- package/lib/components/SectionHeader/SectionHeader.js +36 -0
- package/lib/components/SectionHeader/SectionHeader.stories.js +35 -0
- package/lib/components/SelectField/SelectField.d.ts +18 -0
- package/lib/components/SelectField/SelectField.js +145 -0
- package/lib/components/SelectField/SelectField.stories.js +155 -0
- package/lib/components/SelectField/SelectOption.d.ts +13 -0
- package/lib/components/SelectField/SelectOption.js +40 -0
- package/lib/components/SelectField/SelectOption.stories.js +40 -0
- package/lib/components/Separator/Separator.d.ts +6 -0
- package/lib/components/Separator/Separator.js +13 -0
- package/lib/components/Separator/Separator.stories.js +70 -0
- package/lib/components/Skeleton/Skeleton.d.ts +2 -0
- package/lib/components/Skeleton/Skeleton.js +9 -0
- package/lib/components/Skeleton/Skeleton.stories.js +24 -0
- package/lib/components/Svg/Svg.d.ts +9 -0
- package/lib/components/Svg/Svg.js +25 -0
- package/lib/components/Svg/Svg.stories.js +34 -0
- package/lib/components/Switch/Switch.d.ts +12 -0
- package/lib/components/Switch/Switch.js +54 -0
- package/lib/components/Switch/Switch.stories.js +61 -0
- package/lib/components/Table/Table.d.ts +18 -0
- package/lib/components/Table/Table.js +99 -0
- package/lib/components/Table/Table.stories.js +79 -0
- package/lib/components/Tabs/Tabs.d.ts +17 -0
- package/lib/components/Tabs/Tabs.js +85 -0
- package/lib/components/Tabs/Tabs.stories.js +45 -0
- package/lib/components/Text/Text.d.ts +5 -0
- package/lib/components/Text/Text.js +24 -0
- package/lib/components/Text/Text.stories.js +35 -0
- package/lib/components/TextField/TextField.d.ts +31 -0
- package/lib/components/TextField/TextField.js +91 -0
- package/lib/components/TextField/TextField.stories.js +158 -0
- package/lib/components/Textarea/Textarea.d.ts +5 -0
- package/lib/components/Textarea/Textarea.js +10 -0
- package/lib/components/Textarea/Textarea.stories.js +32 -0
- package/lib/components/index.d.ts +60 -0
- package/lib/components/index.js +62 -0
- package/lib/config/appConfig.d.ts +5 -0
- package/lib/config/appConfig.js +20 -0
- package/lib/constants/AuthConstants.d.ts +8 -0
- package/lib/constants/AuthConstants.js +9 -0
- package/lib/constants/GothamConstants.d.ts +24 -0
- package/lib/constants/GothamConstants.js +25 -0
- package/lib/constants/MarkdownConstants.d.ts +8 -0
- package/lib/constants/MarkdownConstants.js +9 -0
- package/lib/constants/MessageConstants.d.ts +10 -0
- package/lib/constants/MessageConstants.js +11 -0
- package/lib/docs/analytics.md +231 -0
- package/lib/docs/api-reference.md +364 -0
- package/lib/docs/comparison.md +83 -0
- package/lib/docs/containers.md +11 -0
- package/lib/docs/gettingStarted.md +338 -0
- package/lib/docs/payments.md +79 -0
- package/lib/editor/CodeEditor.d.ts +11 -0
- package/lib/editor/CodeEditor.js +15 -0
- package/lib/editor/CodeEditor.stories.js +24 -0
- package/lib/editor/index.d.ts +1 -0
- package/lib/editor/index.js +3 -0
- package/lib/errors/UserError.d.ts +8 -0
- package/lib/errors/UserError.js +12 -0
- package/lib/examples/OptimizedFormExample.d.ts +1 -0
- package/lib/examples/OptimizedFormExample.js +130 -0
- package/lib/form/index.d.ts +11 -0
- package/lib/form/index.js +13 -0
- package/lib/hooks/useIsMobile.d.ts +1 -0
- package/lib/hooks/useIsMobile.js +12 -0
- package/lib/i18n/index.d.ts +8 -0
- package/lib/i18n/index.js +7 -0
- package/lib/icons/Dual Ring-1s-100px.svg +1 -0
- package/lib/icons/gotham-logo.svg +17 -0
- package/lib/icons/gotham.svg +8 -0
- package/lib/icons/index.d.ts +5 -0
- package/lib/icons/index.js +6 -0
- package/lib/icons/pencil.svg +6 -0
- package/lib/img/arkhamjs-logo.png +0 -0
- package/lib/img/logo.png +0 -0
- package/lib/index.d.ts +25 -0
- package/lib/index.js +25 -0
- package/lib/router/index.d.ts +5 -0
- package/lib/router/index.js +6 -0
- package/lib/stores/GothamAppStore.d.ts +35 -0
- package/lib/stores/GothamAppStore.js +70 -0
- package/lib/stories/Button.d.ts +28 -0
- package/lib/stories/Button.js +22 -0
- package/lib/stories/Header.d.ts +12 -0
- package/lib/stories/Header.js +78 -0
- package/lib/stories/Page.d.ts +3 -0
- package/lib/stories/Page.js +108 -0
- package/lib/stories/assets/accessibility.png +0 -0
- package/lib/stories/assets/accessibility.svg +5 -0
- package/lib/stories/assets/addon-library.png +0 -0
- package/lib/stories/assets/assets.png +0 -0
- package/lib/stories/assets/context.png +0 -0
- package/lib/stories/assets/discord.svg +15 -0
- package/lib/stories/assets/docs.png +0 -0
- package/lib/stories/assets/figma-plugin.png +0 -0
- package/lib/stories/assets/github.svg +3 -0
- package/lib/stories/assets/share.png +0 -0
- package/lib/stories/assets/styling.png +0 -0
- package/lib/stories/assets/testing.png +0 -0
- package/lib/stories/assets/theming.png +0 -0
- package/lib/stories/assets/tutorials.svg +12 -0
- package/lib/stories/assets/youtube.svg +4 -0
- package/lib/stories/button.css +1 -0
- package/lib/stories/header.css +1 -0
- package/lib/stories/page.css +1 -0
- package/lib/styles/chat.css +1 -0
- package/lib/styles/index.css +2 -0
- package/lib/styles/tailwind.css +1 -0
- package/lib/types/assets.d.js +2 -0
- package/lib/types/gotham.d.ts +12 -0
- package/lib/types/gotham.js +3 -0
- package/lib/types/vitest-globals.d.js +3 -0
- package/lib/utils/GothamContext.d.ts +14 -0
- package/lib/utils/GothamContext.js +14 -0
- package/lib/utils/awsRum.d.ts +23 -0
- package/lib/utils/awsRum.js +50 -0
- package/lib/utils/colorUtils.d.ts +20 -0
- package/lib/utils/colorUtils.js +499 -0
- package/lib/utils/contentUtils.d.ts +2 -0
- package/lib/utils/contentUtils.js +18 -0
- package/lib/utils/i18nUtil.d.ts +1 -0
- package/lib/utils/i18nUtil.js +7 -0
- package/lib/utils/imageUtils.d.ts +5 -0
- package/lib/utils/imageUtils.js +48 -0
- package/lib/utils/interactionAnalytics.d.ts +10 -0
- package/lib/utils/interactionAnalytics.js +142 -0
- package/lib/utils/navEventQueue.d.ts +6 -0
- package/lib/utils/navEventQueue.js +50 -0
- package/lib/utils/refUtils.d.ts +2 -0
- package/lib/utils/refUtils.js +11 -0
- package/lib/utils/routeUtils.d.ts +12 -0
- package/lib/utils/routeUtils.js +109 -0
- package/lib/utils/sizeUtils.d.ts +5 -0
- package/lib/utils/sizeUtils.js +6 -0
- package/lib/utils/storyInteractions.d.ts +6 -0
- package/lib/utils/storyInteractions.js +45 -0
- package/lib/utils/storyUtils.d.ts +1 -0
- package/lib/utils/storyUtils.js +11 -0
- package/lib/utils/testUtils.d.ts +3 -0
- package/lib/utils/testUtils.js +56 -0
- package/lib/utils/timer.d.ts +21 -0
- package/lib/utils/timer.js +38 -0
- package/lib/utils/useBreakpoint.d.ts +6 -0
- package/lib/utils/useBreakpoint.js +56 -0
- package/lib/utils/viewPerformance.d.ts +34 -0
- package/lib/utils/viewPerformance.js +103 -0
- package/lib/utils/viewUtils.d.ts +9 -0
- package/lib/utils/viewUtils.js +44 -0
- package/lib/views/AuthSignInView/AuthSignInView.d.ts +20 -0
- package/lib/views/AuthSignInView/AuthSignInView.js +107 -0
- package/lib/views/AuthSignInView/AuthSignInView.stories.js +29 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.d.ts +21 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.js +146 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.stories.js +30 -0
- package/lib/views/AuthView/AuthView.d.ts +16 -0
- package/lib/views/AuthView/AuthView.js +60 -0
- package/lib/views/AuthView/AuthView.stories.js +34 -0
- package/lib/views/DefaultView/DefaultView.d.ts +5 -0
- package/lib/views/DefaultView/DefaultView.js +134 -0
- package/lib/views/Gotham/Gotham.d.ts +44 -0
- package/lib/views/Gotham/Gotham.js +24 -0
- package/lib/views/Gotham/Gotham.stories.js +31 -0
- package/lib/views/Gotham/GothamListeners.d.ts +0 -0
- package/lib/views/Gotham/GothamListeners.js +2 -0
- package/lib/views/Gotham/GothamProvider.d.ts +43 -0
- package/lib/views/Gotham/GothamProvider.js +217 -0
- package/lib/views/Gotham/GothamRoot.d.ts +6 -0
- package/lib/views/Gotham/GothamRoot.js +69 -0
- package/lib/views/HomeView/HomeView.d.ts +10 -0
- package/lib/views/HomeView/HomeView.js +134 -0
- package/lib/views/LoaderView/LoaderView.d.ts +8 -0
- package/lib/views/LoaderView/LoaderView.js +30 -0
- package/lib/views/MenuView/MenuView.d.ts +13 -0
- package/lib/views/MenuView/MenuView.js +305 -0
- package/lib/views/NotFoundView/NotFoundView.d.ts +2 -0
- package/lib/views/NotFoundView/NotFoundView.js +12 -0
- package/lib/views/index.d.ts +11 -0
- package/lib/views/index.js +13 -0
- package/package.json +202 -0
- 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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
|