@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,43 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import type { FluxFramework, FluxMiddlewareType, FluxOptions } from '@nlabs/arkhamjs';
|
|
3
|
+
import type { FC, ReactNode } from 'react';
|
|
4
|
+
import type { GothamRouteData } from '../../types/gotham.js';
|
|
5
|
+
import type { AwsRum } from '../../utils/awsRum.js';
|
|
6
|
+
export interface GothamProviderProps {
|
|
7
|
+
readonly children?: ReactNode;
|
|
8
|
+
readonly config: GothamConfiguration;
|
|
9
|
+
readonly session?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export type GothamPosition = 't' | 'tc' | 'tl' | 'tr' | 'b' | 'bc' | 'br' | 'bl';
|
|
12
|
+
export type GothamStatus = 'default' | 'error' | 'info' | 'success' | 'warning' | number;
|
|
13
|
+
export type ThemeDisplayMode = 'auto' | 'dark' | 'light';
|
|
14
|
+
export interface GothamConfiguration {
|
|
15
|
+
readonly analytics?: {
|
|
16
|
+
readonly interactions?: boolean;
|
|
17
|
+
};
|
|
18
|
+
readonly app?: {
|
|
19
|
+
readonly logo?: string;
|
|
20
|
+
readonly name?: string;
|
|
21
|
+
readonly title?: string;
|
|
22
|
+
readonly titleBarSeparator?: string;
|
|
23
|
+
};
|
|
24
|
+
readonly authRoute?: string;
|
|
25
|
+
readonly awsRum?: AwsRum;
|
|
26
|
+
readonly baseUrl?: string;
|
|
27
|
+
readonly config?: FluxOptions;
|
|
28
|
+
readonly displayMode?: ThemeDisplayMode;
|
|
29
|
+
readonly flux?: FluxFramework;
|
|
30
|
+
readonly isAuth?: () => boolean;
|
|
31
|
+
readonly middleware?: FluxMiddlewareType[];
|
|
32
|
+
readonly onInit?: () => void;
|
|
33
|
+
readonly routes?: GothamRouteData[];
|
|
34
|
+
readonly storageType?: 'local' | 'session' | false;
|
|
35
|
+
readonly stores?: unknown[];
|
|
36
|
+
readonly theme?: Record<string, unknown>;
|
|
37
|
+
readonly translations?: Record<string, unknown>;
|
|
38
|
+
readonly i18n?: typeof i18n;
|
|
39
|
+
}
|
|
40
|
+
export declare const defaultGothamConfig: GothamConfiguration;
|
|
41
|
+
export declare const init: (config: GothamConfiguration) => () => void;
|
|
42
|
+
export declare const signOut: (flux: FluxFramework) => () => Promise<void>;
|
|
43
|
+
export declare const GothamProvider: FC<GothamProviderProps>;
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2024-Present, Nitrogen Labs, Inc.
|
|
4
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
5
|
+
*/ import { Logger, LoggerDebugLevel } from '@nlabs/arkhamjs-middleware-logger';
|
|
6
|
+
import { BrowserStorage } from '@nlabs/arkhamjs-storage-browser';
|
|
7
|
+
import { useFlux } from '@nlabs/arkhamjs-utils-react';
|
|
8
|
+
import { merge } from '@nlabs/utils';
|
|
9
|
+
import i18n from 'i18next';
|
|
10
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
11
|
+
import { I18nextProvider, initReactI18next } from 'react-i18next';
|
|
12
|
+
import { createBrowserRouter, RouterProvider } from 'react-router';
|
|
13
|
+
import { GothamActions } from '../../actions/GothamActions.js';
|
|
14
|
+
import { Config } from '../../config/appConfig.js';
|
|
15
|
+
import { GothamConstants } from '../../constants/GothamConstants.js';
|
|
16
|
+
import { gothamApp } from '../../stores/GothamAppStore.js';
|
|
17
|
+
import { createAwsRumBrowserClient } from '../../utils/awsRum.js';
|
|
18
|
+
import { GothamContext } from '../../utils/GothamContext.js';
|
|
19
|
+
import { registerInteractionAnalytics } from '../../utils/interactionAnalytics.js';
|
|
20
|
+
import { registerFlux } from '../../utils/navEventQueue.js';
|
|
21
|
+
import { parseRoutes } from '../../utils/routeUtils.js';
|
|
22
|
+
import { GothamRoot } from './GothamRoot.js';
|
|
23
|
+
export const defaultGothamConfig = {
|
|
24
|
+
analytics: {
|
|
25
|
+
interactions: true
|
|
26
|
+
},
|
|
27
|
+
app: {
|
|
28
|
+
name: 'gotham',
|
|
29
|
+
title: 'GothamUI'
|
|
30
|
+
},
|
|
31
|
+
authRoute: '/',
|
|
32
|
+
baseUrl: '',
|
|
33
|
+
isAuth: ()=>false,
|
|
34
|
+
middleware: [],
|
|
35
|
+
routes: [],
|
|
36
|
+
storageType: 'session',
|
|
37
|
+
stores: [],
|
|
38
|
+
theme: {},
|
|
39
|
+
translations: {
|
|
40
|
+
translation: {}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const defaultAwsRum = createAwsRumBrowserClient();
|
|
44
|
+
export const init = (config)=>()=>{
|
|
45
|
+
const { onInit } = config;
|
|
46
|
+
GothamActions.init();
|
|
47
|
+
if (onInit) {
|
|
48
|
+
onInit();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
export const signOut = (flux)=>async ()=>{
|
|
52
|
+
await flux.clearAppData();
|
|
53
|
+
await GothamActions.loading(false);
|
|
54
|
+
const authRoute = Config.get('authRoute', '/');
|
|
55
|
+
GothamActions.navGoto(authRoute);
|
|
56
|
+
};
|
|
57
|
+
/* eslint-disable react-hooks/rules-of-hooks -- The compatibility rule does not recognize arrow-function components. */ export const GothamProvider = ({ config: appConfig })=>{
|
|
58
|
+
const flux = useFlux();
|
|
59
|
+
const config = useMemo(()=>merge({
|
|
60
|
+
...defaultGothamConfig,
|
|
61
|
+
analytics: {
|
|
62
|
+
...defaultGothamConfig.analytics
|
|
63
|
+
},
|
|
64
|
+
app: {
|
|
65
|
+
...defaultGothamConfig.app
|
|
66
|
+
},
|
|
67
|
+
theme: {},
|
|
68
|
+
translations: {
|
|
69
|
+
translation: {}
|
|
70
|
+
}
|
|
71
|
+
}, appConfig), [
|
|
72
|
+
appConfig
|
|
73
|
+
]);
|
|
74
|
+
const { isAuth, middleware, routes = [], storageType, stores, i18n: providedI18n, translations } = config;
|
|
75
|
+
const name = config?.app?.name;
|
|
76
|
+
const awsRum = config.awsRum || defaultAwsRum;
|
|
77
|
+
const [session, setSession] = useState({});
|
|
78
|
+
const [isFluxReady, setIsFluxReady] = useState(Boolean(flux?.isInit));
|
|
79
|
+
const router = useMemo(()=>createBrowserRouter([
|
|
80
|
+
{
|
|
81
|
+
Component: GothamRoot,
|
|
82
|
+
children: parseRoutes(routes),
|
|
83
|
+
index: false,
|
|
84
|
+
path: '/'
|
|
85
|
+
}
|
|
86
|
+
]), [
|
|
87
|
+
routes
|
|
88
|
+
]);
|
|
89
|
+
// Initialize i18next if translations are provided but no i18n instance is given
|
|
90
|
+
const i18nInstance = useMemo(()=>{
|
|
91
|
+
if (providedI18n) {
|
|
92
|
+
return providedI18n;
|
|
93
|
+
}
|
|
94
|
+
if (translations && Object.keys(translations).length > 0) {
|
|
95
|
+
// Create a new i18next instance and initialize it
|
|
96
|
+
const newI18n = i18n.createInstance();
|
|
97
|
+
newI18n.use(initReactI18next).init({
|
|
98
|
+
fallbackLng: 'en',
|
|
99
|
+
interpolation: {
|
|
100
|
+
escapeValue: false // React already escapes values
|
|
101
|
+
},
|
|
102
|
+
lng: 'en',
|
|
103
|
+
resources: translations
|
|
104
|
+
});
|
|
105
|
+
return newI18n;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}, [
|
|
109
|
+
providedI18n,
|
|
110
|
+
translations
|
|
111
|
+
]);
|
|
112
|
+
useEffect(()=>{
|
|
113
|
+
Config.set(config);
|
|
114
|
+
let isMounted = true;
|
|
115
|
+
const setupFlux = async ()=>{
|
|
116
|
+
if (!flux) {
|
|
117
|
+
if (isMounted) {
|
|
118
|
+
setIsFluxReady(true);
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const env = Config.get('environment');
|
|
123
|
+
const logger = new Logger({
|
|
124
|
+
debugLevel: env === 'development' ? LoggerDebugLevel.DISPATCH : LoggerDebugLevel.DISABLED
|
|
125
|
+
});
|
|
126
|
+
const storage = storageType ? new BrowserStorage({
|
|
127
|
+
type: storageType
|
|
128
|
+
}) : undefined;
|
|
129
|
+
const fluxMiddleware = [
|
|
130
|
+
logger,
|
|
131
|
+
...middleware || []
|
|
132
|
+
];
|
|
133
|
+
const fluxStores = [
|
|
134
|
+
gothamApp,
|
|
135
|
+
...stores || []
|
|
136
|
+
];
|
|
137
|
+
if (flux.isInit) {
|
|
138
|
+
await flux.addStores(fluxStores);
|
|
139
|
+
flux.addMiddleware(fluxMiddleware);
|
|
140
|
+
} else {
|
|
141
|
+
const fluxConfig = {
|
|
142
|
+
middleware: fluxMiddleware,
|
|
143
|
+
name,
|
|
144
|
+
stores: fluxStores,
|
|
145
|
+
...storage ? {
|
|
146
|
+
storage
|
|
147
|
+
} : {}
|
|
148
|
+
};
|
|
149
|
+
await flux.init(fluxConfig);
|
|
150
|
+
}
|
|
151
|
+
flux.on(GothamConstants.SIGN_OUT, signOut(flux));
|
|
152
|
+
flux.on(GothamConstants.UPDATE_SESSION, ({ session })=>{
|
|
153
|
+
setSession(session);
|
|
154
|
+
});
|
|
155
|
+
registerFlux(flux);
|
|
156
|
+
if (isMounted) {
|
|
157
|
+
setIsFluxReady(true);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
void setupFlux();
|
|
161
|
+
init(config);
|
|
162
|
+
return ()=>{
|
|
163
|
+
isMounted = false;
|
|
164
|
+
};
|
|
165
|
+
}, [
|
|
166
|
+
flux,
|
|
167
|
+
config,
|
|
168
|
+
middleware,
|
|
169
|
+
name,
|
|
170
|
+
storageType,
|
|
171
|
+
stores
|
|
172
|
+
]);
|
|
173
|
+
useEffect(()=>{
|
|
174
|
+
const unregister = config.analytics?.interactions === false ? undefined : registerInteractionAnalytics(awsRum);
|
|
175
|
+
return ()=>unregister?.();
|
|
176
|
+
}, [
|
|
177
|
+
awsRum,
|
|
178
|
+
config.analytics?.interactions
|
|
179
|
+
]);
|
|
180
|
+
const contextValue = useMemo(()=>({
|
|
181
|
+
Flux: flux,
|
|
182
|
+
awsRum,
|
|
183
|
+
isAuth,
|
|
184
|
+
session
|
|
185
|
+
}), [
|
|
186
|
+
flux,
|
|
187
|
+
awsRum,
|
|
188
|
+
isAuth,
|
|
189
|
+
session
|
|
190
|
+
]);
|
|
191
|
+
if (!isFluxReady) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
if (i18nInstance) {
|
|
195
|
+
return /*#__PURE__*/ _jsx(I18nextProvider, {
|
|
196
|
+
i18n: i18nInstance,
|
|
197
|
+
children: /*#__PURE__*/ _jsx(GothamContext.Provider, {
|
|
198
|
+
value: contextValue,
|
|
199
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
200
|
+
children: /*#__PURE__*/ _jsx(RouterProvider, {
|
|
201
|
+
router: router
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return /*#__PURE__*/ _jsx(GothamContext.Provider, {
|
|
208
|
+
value: contextValue,
|
|
209
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
210
|
+
children: /*#__PURE__*/ _jsx(RouterProvider, {
|
|
211
|
+
router: router
|
|
212
|
+
})
|
|
213
|
+
})
|
|
214
|
+
});
|
|
215
|
+
}; /* eslint-enable react-hooks/rules-of-hooks */
|
|
216
|
+
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy92aWV3cy9Hb3RoYW0vR290aGFtUHJvdmlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI0LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyRGVidWdMZXZlbH0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzLW1pZGRsZXdhcmUtbG9nZ2VyJztcbmltcG9ydCB7QnJvd3NlclN0b3JhZ2V9IGZyb20gJ0BubGFicy9hcmtoYW1qcy1zdG9yYWdlLWJyb3dzZXInO1xuaW1wb3J0IHt1c2VGbHV4fSBmcm9tICdAbmxhYnMvYXJraGFtanMtdXRpbHMtcmVhY3QnO1xuaW1wb3J0IHttZXJnZX0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCBpMThuIGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0kxOG5leHRQcm92aWRlciwgaW5pdFJlYWN0STE4bmV4dH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQge2NyZWF0ZUJyb3dzZXJSb3V0ZXIsIFJvdXRlclByb3ZpZGVyfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5pbXBvcnQge0dvdGhhbUFjdGlvbnN9IGZyb20gJy4uLy4uL2FjdGlvbnMvR290aGFtQWN0aW9ucy5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vLi4vY29uZmlnL2FwcENvbmZpZy5qcyc7XG5pbXBvcnQge0dvdGhhbUNvbnN0YW50c30gZnJvbSAnLi4vLi4vY29uc3RhbnRzL0dvdGhhbUNvbnN0YW50cy5qcyc7XG5pbXBvcnQge2dvdGhhbUFwcH0gZnJvbSAnLi4vLi4vc3RvcmVzL0dvdGhhbUFwcFN0b3JlLmpzJztcbmltcG9ydCB7Y3JlYXRlQXdzUnVtQnJvd3NlckNsaWVudH0gZnJvbSAnLi4vLi4vdXRpbHMvYXdzUnVtLmpzJztcbmltcG9ydCB7R290aGFtQ29udGV4dH0gZnJvbSAnLi4vLi4vdXRpbHMvR290aGFtQ29udGV4dC5qcyc7XG5pbXBvcnQge3JlZ2lzdGVySW50ZXJhY3Rpb25BbmFseXRpY3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyYWN0aW9uQW5hbHl0aWNzLmpzJztcbmltcG9ydCB7cmVnaXN0ZXJGbHV4fSBmcm9tICcuLi8uLi91dGlscy9uYXZFdmVudFF1ZXVlLmpzJztcbmltcG9ydCB7cGFyc2VSb3V0ZXN9IGZyb20gJy4uLy4uL3V0aWxzL3JvdXRlVXRpbHMuanMnO1xuaW1wb3J0IHtHb3RoYW1Sb290fSBmcm9tICcuL0dvdGhhbVJvb3QuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29yaywgRmx1eE1pZGRsZXdhcmVUeXBlLCBGbHV4T3B0aW9uc30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtGQywgUmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7R290aGFtUm91dGVEYXRhfSBmcm9tICcuLi8uLi90eXBlcy9nb3RoYW0uanMnO1xuaW1wb3J0IHR5cGUge0F3c1J1bX0gZnJvbSAnLi4vLi4vdXRpbHMvYXdzUnVtLmpzJztcbmltcG9ydCB0eXBlIHtDdXN0b21Sb3V0ZVByb3BzfSBmcm9tICcuLi8uLi91dGlscy9yb3V0ZVV0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBHb3RoYW1Qcm92aWRlclByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IGNvbmZpZzogR290aGFtQ29uZmlndXJhdGlvbjtcbiAgcmVhZG9ubHkgc2Vzc2lvbj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgdHlwZSBHb3RoYW1Qb3NpdGlvbiA9ICd0JyB8ICd0YycgfCAndGwnIHwgJ3RyJyB8ICdiJyB8ICdiYycgfCAnYnInIHwgJ2JsJztcbmV4cG9ydCB0eXBlIEdvdGhhbVN0YXR1cyA9ICdkZWZhdWx0JyB8ICdlcnJvcicgfCAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCBudW1iZXI7XG5leHBvcnQgdHlwZSBUaGVtZURpc3BsYXlNb2RlID0gJ2F1dG8nIHwgJ2RhcmsnIHwgJ2xpZ2h0JztcblxuZXhwb3J0IGludGVyZmFjZSBHb3RoYW1Db25maWd1cmF0aW9uIHtcbiAgcmVhZG9ubHkgYW5hbHl0aWNzPzoge1xuICAgIHJlYWRvbmx5IGludGVyYWN0aW9ucz86IGJvb2xlYW47XG4gIH07XG4gIHJlYWRvbmx5IGFwcD86IHtcbiAgICByZWFkb25seSBsb2dvPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGl0bGVCYXJTZXBhcmF0b3I/OiBzdHJpbmc7XG4gIH07XG4gIHJlYWRvbmx5IGF1dGhSb3V0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUnVtPzogQXdzUnVtO1xuICByZWFkb25seSBiYXNlVXJsPzogc3RyaW5nO1xuICByZWFkb25seSBjb25maWc/OiBGbHV4T3B0aW9ucztcbiAgcmVhZG9ubHkgZGlzcGxheU1vZGU/OiBUaGVtZURpc3BsYXlNb2RlO1xuICByZWFkb25seSBmbHV4PzogRmx1eEZyYW1ld29yaztcbiAgcmVhZG9ubHkgaXNBdXRoPzogKCkgPT4gYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWlkZGxld2FyZT86IEZsdXhNaWRkbGV3YXJlVHlwZVtdO1xuICByZWFkb25seSBvbkluaXQ/OiAoKSA9PiB2b2lkO1xuICByZWFkb25seSByb3V0ZXM/OiBHb3RoYW1Sb3V0ZURhdGFbXTtcbiAgcmVhZG9ubHkgc3RvcmFnZVR5cGU/OiAnbG9jYWwnIHwgJ3Nlc3Npb24nIHwgZmFsc2U7XG4gIHJlYWRvbmx5IHN0b3Jlcz86IHVua25vd25bXTtcbiAgcmVhZG9ubHkgdGhlbWU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGkxOG4/OiB0eXBlb2YgaTE4bjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRHb3RoYW1Db25maWc6IEdvdGhhbUNvbmZpZ3VyYXRpb24gPSB7XG4gIGFuYWx5dGljczoge1xuICAgIGludGVyYWN0aW9uczogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBuYW1lOiAnZ290aGFtJyxcbiAgICB0aXRsZTogJ0dvdGhhbVVJJ1xuICB9LFxuICBhdXRoUm91dGU6ICcvJyxcbiAgYmFzZVVybDogJycsXG4gIGlzQXV0aDogKCkgPT4gZmFsc2UsXG4gIG1pZGRsZXdhcmU6IFtdLFxuICByb3V0ZXM6IFtdLFxuICBzdG9yYWdlVHlwZTogJ3Nlc3Npb24nLFxuICBzdG9yZXM6IFtdLFxuICB0aGVtZToge30sXG4gIHRyYW5zbGF0aW9uczoge3RyYW5zbGF0aW9uOiB7fX1cbn07XG5cbmNvbnN0IGRlZmF1bHRBd3NSdW0gPSBjcmVhdGVBd3NSdW1Ccm93c2VyQ2xpZW50KCk7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gKGNvbmZpZzogR290aGFtQ29uZmlndXJhdGlvbikgPT4gKCk6IHZvaWQgPT4ge1xuICBjb25zdCB7b25Jbml0fSA9IGNvbmZpZztcbiAgR290aGFtQWN0aW9ucy5pbml0KCk7XG5cbiAgaWYob25Jbml0KSB7XG4gICAgb25Jbml0KCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaWduT3V0ID0gKGZsdXg6IEZsdXhGcmFtZXdvcmspID0+IGFzeW5jICgpID0+IHtcbiAgYXdhaXQgZmx1eC5jbGVhckFwcERhdGEoKTtcbiAgYXdhaXQgR290aGFtQWN0aW9ucy5sb2FkaW5nKGZhbHNlKTtcblxuICBjb25zdCBhdXRoUm91dGUgPSBDb25maWcuZ2V0KCdhdXRoUm91dGUnLCAnLycpIGFzIHN0cmluZztcbiAgR290aGFtQWN0aW9ucy5uYXZHb3RvKGF1dGhSb3V0ZSk7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAtLSBUaGUgY29tcGF0aWJpbGl0eSBydWxlIGRvZXMgbm90IHJlY29nbml6ZSBhcnJvdy1mdW5jdGlvbiBjb21wb25lbnRzLiAqL1xuZXhwb3J0IGNvbnN0IEdvdGhhbVByb3ZpZGVyOiBGQzxHb3RoYW1Qcm92aWRlclByb3BzPiA9ICh7Y29uZmlnOiBhcHBDb25maWd9KSA9PiB7XG4gIGNvbnN0IGZsdXggPSB1c2VGbHV4KCk7XG4gIGNvbnN0IGNvbmZpZzogR290aGFtQ29uZmlndXJhdGlvbiA9IHVzZU1lbW8oKCkgPT4gbWVyZ2Uoe1xuICAgIC4uLmRlZmF1bHRHb3RoYW1Db25maWcsXG4gICAgYW5hbHl0aWNzOiB7Li4uZGVmYXVsdEdvdGhhbUNvbmZpZy5hbmFseXRpY3N9LFxuICAgIGFwcDogey4uLmRlZmF1bHRHb3RoYW1Db25maWcuYXBwfSxcbiAgICB0aGVtZToge30sXG4gICAgdHJhbnNsYXRpb25zOiB7dHJhbnNsYXRpb246IHt9fVxuICB9LCBhcHBDb25maWcpLCBbYXBwQ29uZmlnXSk7XG4gIGNvbnN0IHtcbiAgICBpc0F1dGgsXG4gICAgbWlkZGxld2FyZSxcbiAgICByb3V0ZXMgPSBbXSxcbiAgICBzdG9yYWdlVHlwZSxcbiAgICBzdG9yZXMsXG4gICAgaTE4bjogcHJvdmlkZWRJMThuLFxuICAgIHRyYW5zbGF0aW9uc1xuICB9ID0gY29uZmlnO1xuICBjb25zdCBuYW1lID0gY29uZmlnPy5hcHA/Lm5hbWU7XG4gIGNvbnN0IGF3c1J1bSA9IGNvbmZpZy5hd3NSdW0gfHwgZGVmYXVsdEF3c1J1bTtcbiAgY29uc3QgW3Nlc3Npb24sIHNldFNlc3Npb25dID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbaXNGbHV4UmVhZHksIHNldElzRmx1eFJlYWR5XSA9IHVzZVN0YXRlKEJvb2xlYW4oKGZsdXggYXMgYW55KT8uaXNJbml0KSk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZU1lbW8oKCkgPT4gY3JlYXRlQnJvd3NlclJvdXRlcihcbiAgICBbXG4gICAgICB7XG4gICAgICAgIENvbXBvbmVudDogR290aGFtUm9vdCxcbiAgICAgICAgY2hpbGRyZW46IHBhcnNlUm91dGVzKHJvdXRlcyBhcyB1bmtub3duIGFzIEN1c3RvbVJvdXRlUHJvcHNbXSksXG4gICAgICAgIGluZGV4OiBmYWxzZSxcbiAgICAgICAgcGF0aDogJy8nXG4gICAgICB9XG4gICAgXVxuICApLCBbcm91dGVzXSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBpMThuZXh0IGlmIHRyYW5zbGF0aW9ucyBhcmUgcHJvdmlkZWQgYnV0IG5vIGkxOG4gaW5zdGFuY2UgaXMgZ2l2ZW5cbiAgY29uc3QgaTE4bkluc3RhbmNlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYocHJvdmlkZWRJMThuKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZWRJMThuO1xuICAgIH1cblxuICAgIGlmKHRyYW5zbGF0aW9ucyAmJiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBpMThuZXh0IGluc3RhbmNlIGFuZCBpbml0aWFsaXplIGl0XG4gICAgICBjb25zdCBuZXdJMThuID0gaTE4bi5jcmVhdGVJbnN0YW5jZSgpO1xuXG4gICAgICBuZXdJMThuXG4gICAgICAgIC51c2UoaW5pdFJlYWN0STE4bmV4dClcbiAgICAgICAgLmluaXQoe1xuICAgICAgICAgIGZhbGxiYWNrTG5nOiAnZW4nLFxuICAgICAgICAgIGludGVycG9sYXRpb246IHtcbiAgICAgICAgICAgIGVzY2FwZVZhbHVlOiBmYWxzZSAvLyBSZWFjdCBhbHJlYWR5IGVzY2FwZXMgdmFsdWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsbmc6ICdlbicsIC8vIGRlZmF1bHQgbGFuZ3VhZ2VcbiAgICAgICAgICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj5cbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXdJMThuO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBbcHJvdmlkZWRJMThuLCB0cmFuc2xhdGlvbnNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIENvbmZpZy5zZXQoY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBsZXQgaXNNb3VudGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHNldHVwRmx1eCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmKCFmbHV4KSB7XG4gICAgICAgIGlmKGlzTW91bnRlZCkge1xuICAgICAgICAgIHNldElzRmx1eFJlYWR5KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW52OiBzdHJpbmcgPSBDb25maWcuZ2V0KCdlbnZpcm9ubWVudCcpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGxvZ2dlcjogTG9nZ2VyID0gbmV3IExvZ2dlcih7XG4gICAgICAgIGRlYnVnTGV2ZWw6IGVudiA9PT0gJ2RldmVsb3BtZW50JyA/IExvZ2dlckRlYnVnTGV2ZWwuRElTUEFUQ0ggOiBMb2dnZXJEZWJ1Z0xldmVsLkRJU0FCTEVEXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0b3JhZ2U6IEJyb3dzZXJTdG9yYWdlIHwgdW5kZWZpbmVkID0gc3RvcmFnZVR5cGUgPyBuZXcgQnJvd3NlclN0b3JhZ2Uoe3R5cGU6IHN0b3JhZ2VUeXBlfSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmbHV4TWlkZGxld2FyZSA9IFtsb2dnZXIsIC4uLihtaWRkbGV3YXJlIHx8IFtdKV07XG4gICAgICBjb25zdCBmbHV4U3RvcmVzID0gW2dvdGhhbUFwcCwgLi4uKHN0b3JlcyB8fCBbXSldO1xuXG4gICAgICBpZigoZmx1eCBhcyBhbnkpLmlzSW5pdCkge1xuICAgICAgICBhd2FpdCBmbHV4LmFkZFN0b3JlcyhmbHV4U3RvcmVzKTtcbiAgICAgICAgZmx1eC5hZGRNaWRkbGV3YXJlKGZsdXhNaWRkbGV3YXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZsdXhDb25maWc6IEZsdXhPcHRpb25zID0ge1xuICAgICAgICAgIG1pZGRsZXdhcmU6IGZsdXhNaWRkbGV3YXJlLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RvcmVzOiBmbHV4U3RvcmVzLFxuICAgICAgICAgIC4uLihzdG9yYWdlID8ge3N0b3JhZ2V9IDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgZmx1eC5pbml0KGZsdXhDb25maWcpO1xuICAgICAgfVxuXG4gICAgICBmbHV4Lm9uKEdvdGhhbUNvbnN0YW50cy5TSUdOX09VVCwgc2lnbk91dChmbHV4KSk7XG4gICAgICBmbHV4Lm9uKEdvdGhhbUNvbnN0YW50cy5VUERBVEVfU0VTU0lPTiwgKHtzZXNzaW9ufSkgPT4ge1xuICAgICAgICBzZXRTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHJlZ2lzdGVyRmx1eChmbHV4KTtcbiAgICAgIGlmKGlzTW91bnRlZCkge1xuICAgICAgICBzZXRJc0ZsdXhSZWFkeSh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdm9pZCBzZXR1cEZsdXgoKTtcblxuICAgIGluaXQoY29uZmlnKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbZmx1eCwgY29uZmlnLCBtaWRkbGV3YXJlLCBuYW1lLCBzdG9yYWdlVHlwZSwgc3RvcmVzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1bnJlZ2lzdGVyID0gY29uZmlnLmFuYWx5dGljcz8uaW50ZXJhY3Rpb25zID09PSBmYWxzZVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogcmVnaXN0ZXJJbnRlcmFjdGlvbkFuYWx5dGljcyhhd3NSdW0pO1xuXG4gICAgcmV0dXJuICgpID0+IHVucmVnaXN0ZXI/LigpO1xuICB9LCBbYXdzUnVtLCBjb25maWcuYW5hbHl0aWNzPy5pbnRlcmFjdGlvbnNdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7Rmx1eDogZmx1eCwgYXdzUnVtLCBpc0F1dGgsIHNlc3Npb259KSwgW2ZsdXgsIGF3c1J1bSwgaXNBdXRoLCBzZXNzaW9uXSk7XG5cbiAgaWYoIWlzRmx1eFJlYWR5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZihpMThuSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThuSW5zdGFuY2V9PlxuICAgICAgICA8R290aGFtQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPFJvdXRlclByb3ZpZGVyIHJvdXRlcj17cm91dGVyfS8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvR290aGFtQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxHb3RoYW1Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAgPGRpdj5cbiAgICAgICAgPFJvdXRlclByb3ZpZGVyIHJvdXRlcj17cm91dGVyfS8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0dvdGhhbUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuLyogZXNsaW50LWVuYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAqL1xuIl0sIm5hbWVzIjpbIkxvZ2dlciIsIkxvZ2dlckRlYnVnTGV2ZWwiLCJCcm93c2VyU3RvcmFnZSIsInVzZUZsdXgiLCJtZXJnZSIsImkxOG4iLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJJMThuZXh0UHJvdmlkZXIiLCJpbml0UmVhY3RJMThuZXh0IiwiY3JlYXRlQnJvd3NlclJvdXRlciIsIlJvdXRlclByb3ZpZGVyIiwiR290aGFtQWN0aW9ucyIsIkNvbmZpZyIsIkdvdGhhbUNvbnN0YW50cyIsImdvdGhhbUFwcCIsImNyZWF0ZUF3c1J1bUJyb3dzZXJDbGllbnQiLCJHb3RoYW1Db250ZXh0IiwicmVnaXN0ZXJJbnRlcmFjdGlvbkFuYWx5dGljcyIsInJlZ2lzdGVyRmx1eCIsInBhcnNlUm91dGVzIiwiR290aGFtUm9vdCIsImRlZmF1bHRHb3RoYW1Db25maWciLCJhbmFseXRpY3MiLCJpbnRlcmFjdGlvbnMiLCJhcHAiLCJuYW1lIiwidGl0bGUiLCJhdXRoUm91dGUiLCJiYXNlVXJsIiwiaXNBdXRoIiwibWlkZGxld2FyZSIsInJvdXRlcyIsInN0b3JhZ2VUeXBlIiwic3RvcmVzIiwidGhlbWUiLCJ0cmFuc2xhdGlvbnMiLCJ0cmFuc2xhdGlvbiIsImRlZmF1bHRBd3NSdW0iLCJpbml0IiwiY29uZmlnIiwib25Jbml0Iiwic2lnbk91dCIsImZsdXgiLCJjbGVhckFwcERhdGEiLCJsb2FkaW5nIiwiZ2V0IiwibmF2R290byIsIkdvdGhhbVByb3ZpZGVyIiwiYXBwQ29uZmlnIiwicHJvdmlkZWRJMThuIiwiYXdzUnVtIiwic2Vzc2lvbiIsInNldFNlc3Npb24iLCJpc0ZsdXhSZWFkeSIsInNldElzRmx1eFJlYWR5IiwiQm9vbGVhbiIsImlzSW5pdCIsInJvdXRlciIsIkNvbXBvbmVudCIsImNoaWxkcmVuIiwiaW5kZXgiLCJwYXRoIiwiaTE4bkluc3RhbmNlIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIm5ld0kxOG4iLCJjcmVhdGVJbnN0YW5jZSIsInVzZSIsImZhbGxiYWNrTG5nIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibG5nIiwicmVzb3VyY2VzIiwic2V0IiwiaXNNb3VudGVkIiwic2V0dXBGbHV4IiwiZW52IiwibG9nZ2VyIiwiZGVidWdMZXZlbCIsIkRJU1BBVENIIiwiRElTQUJMRUQiLCJzdG9yYWdlIiwidHlwZSIsInVuZGVmaW5lZCIsImZsdXhNaWRkbGV3YXJlIiwiZmx1eFN0b3JlcyIsImFkZFN0b3JlcyIsImFkZE1pZGRsZXdhcmUiLCJmbHV4Q29uZmlnIiwib24iLCJTSUdOX09VVCIsIlVQREFURV9TRVNTSU9OIiwidW5yZWdpc3RlciIsImNvbnRleHRWYWx1ZSIsIkZsdXgiLCJQcm92aWRlciIsInZhbHVlIiwiZGl2Il0sIm1hcHBpbmdzIjoiO0FBQUE7OztDQUdDLEdBQ0QsU0FBUUEsTUFBTSxFQUFFQyxnQkFBZ0IsUUFBTyxvQ0FBb0M7QUFDM0UsU0FBUUMsY0FBYyxRQUFPLGtDQUFrQztBQUMvRCxTQUFRQyxPQUFPLFFBQU8sOEJBQThCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyxlQUFlO0FBQ25DLE9BQU9DLFVBQVUsVUFBVTtBQUMzQixTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFPLFFBQVE7QUFDbkQsU0FBUUMsZUFBZSxFQUFFQyxnQkFBZ0IsUUFBTyxnQkFBZ0I7QUFDaEUsU0FBUUMsbUJBQW1CLEVBQUVDLGNBQWMsUUFBTyxlQUFlO0FBRWpFLFNBQVFDLGFBQWEsUUFBTyxpQ0FBaUM7QUFDN0QsU0FBUUMsTUFBTSxRQUFPLDRCQUE0QjtBQUNqRCxTQUFRQyxlQUFlLFFBQU8scUNBQXFDO0FBQ25FLFNBQVFDLFNBQVMsUUFBTyxpQ0FBaUM7QUFDekQsU0FBUUMseUJBQXlCLFFBQU8sd0JBQXdCO0FBQ2hFLFNBQVFDLGFBQWEsUUFBTywrQkFBK0I7QUFDM0QsU0FBUUMsNEJBQTRCLFFBQU8sc0NBQXNDO0FBQ2pGLFNBQVFDLFlBQVksUUFBTywrQkFBK0I7QUFDMUQsU0FBUUMsV0FBVyxRQUFPLDRCQUE0QjtBQUN0RCxTQUFRQyxVQUFVLFFBQU8sa0JBQWtCO0FBNkMzQyxPQUFPLE1BQU1DLHNCQUEyQztJQUN0REMs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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
export declare const navBack: (history: any) => () => void;
|
|
3
|
+
export declare const navForward: (history: any) => () => void;
|
|
4
|
+
export declare const navGoto: (navigate: any) => (data: any) => void;
|
|
5
|
+
export declare const navReplace: (history: any) => (data: any) => void;
|
|
6
|
+
export declare const GothamRoot: FC;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
4
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
5
|
+
*/ import { useFluxListener } from '@nlabs/arkhamjs-utils-react';
|
|
6
|
+
import { useContext, useEffect, useRef } from 'react';
|
|
7
|
+
import { Outlet, useLocation, useMatches, useNavigate } from 'react-router';
|
|
8
|
+
import { Notify } from '../../components/Notify/Notify.js';
|
|
9
|
+
import { GothamConstants } from '../../constants/GothamConstants.js';
|
|
10
|
+
import { GothamContext } from '../../utils/GothamContext.js';
|
|
11
|
+
import { LoaderView } from '../LoaderView/LoaderView.js';
|
|
12
|
+
export const navBack = (history)=>()=>{
|
|
13
|
+
history.goBack();
|
|
14
|
+
};
|
|
15
|
+
export const navForward = (history)=>()=>{
|
|
16
|
+
history.goForward();
|
|
17
|
+
};
|
|
18
|
+
export const navGoto = (navigate)=>(data)=>{
|
|
19
|
+
const { params, path = '' } = data;
|
|
20
|
+
navigate(path, params);
|
|
21
|
+
};
|
|
22
|
+
export const navReplace = (history)=>(data)=>{
|
|
23
|
+
const { params, path = '' } = data;
|
|
24
|
+
history.replace(path, params);
|
|
25
|
+
};
|
|
26
|
+
export const GothamRoot = ()=>{
|
|
27
|
+
const { awsRum } = useContext(GothamContext);
|
|
28
|
+
const navigate = useNavigate();
|
|
29
|
+
const location = useLocation();
|
|
30
|
+
const matches = useMatches();
|
|
31
|
+
const lastTrackedPath = useRef(undefined);
|
|
32
|
+
useFluxListener(GothamConstants.NAV_BACK, navBack(navigate));
|
|
33
|
+
useFluxListener(GothamConstants.NAV_FORWARD, navForward(navigate));
|
|
34
|
+
useFluxListener(GothamConstants.NAV_GOTO, navGoto(navigate));
|
|
35
|
+
useFluxListener(GothamConstants.NAV_REPLACE, navReplace(navigate));
|
|
36
|
+
useEffect(()=>{
|
|
37
|
+
const analytics = [
|
|
38
|
+
...matches
|
|
39
|
+
].reverse().map((match)=>match.handle?.analytics).find(Boolean);
|
|
40
|
+
const path = analytics?.route || location.pathname;
|
|
41
|
+
const viewId = analytics?.viewId || path;
|
|
42
|
+
if (!awsRum || lastTrackedPath.current === viewId) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
lastTrackedPath.current = viewId;
|
|
46
|
+
awsRum.track({
|
|
47
|
+
name: 'page_view',
|
|
48
|
+
path,
|
|
49
|
+
properties: {
|
|
50
|
+
title: analytics?.title || document.title,
|
|
51
|
+
viewId
|
|
52
|
+
},
|
|
53
|
+
type: 'page_view'
|
|
54
|
+
});
|
|
55
|
+
}, [
|
|
56
|
+
awsRum,
|
|
57
|
+
location.pathname,
|
|
58
|
+
matches
|
|
59
|
+
]);
|
|
60
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
61
|
+
children: [
|
|
62
|
+
/*#__PURE__*/ _jsx(Outlet, {}),
|
|
63
|
+
/*#__PURE__*/ _jsx(Notify, {}),
|
|
64
|
+
/*#__PURE__*/ _jsx(LoaderView, {})
|
|
65
|
+
]
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy92aWV3cy9Hb3RoYW0vR290aGFtUm9vdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dXNlRmx1eExpc3RlbmVyfSBmcm9tICdAbmxhYnMvYXJraGFtanMtdXRpbHMtcmVhY3QnO1xuaW1wb3J0IHt1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtPdXRsZXQsIHVzZUxvY2F0aW9uLCB1c2VNYXRjaGVzLCB1c2VOYXZpZ2F0ZX0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHtOb3RpZnl9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTm90aWZ5L05vdGlmeS5qcyc7XG5pbXBvcnQge0dvdGhhbUNvbnN0YW50c30gZnJvbSAnLi4vLi4vY29uc3RhbnRzL0dvdGhhbUNvbnN0YW50cy5qcyc7XG5pbXBvcnQge0dvdGhhbUNvbnRleHR9IGZyb20gJy4uLy4uL3V0aWxzL0dvdGhhbUNvbnRleHQuanMnO1xuaW1wb3J0IHtMb2FkZXJWaWV3fSBmcm9tICcuLi9Mb2FkZXJWaWV3L0xvYWRlclZpZXcuanMnO1xuXG5pbXBvcnQgdHlwZSB7RkN9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIFJvdXRlQW5hbHl0aWNzIHtcbiAgcmVhZG9ubHkgcm91dGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICByZWFkb25seSB2aWV3SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IG5hdkJhY2sgPSAoaGlzdG9yeSkgPT4gKCk6IHZvaWQgPT4ge1xuICBoaXN0b3J5LmdvQmFjaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IG5hdkZvcndhcmQgPSAoaGlzdG9yeSkgPT4gKCk6IHZvaWQgPT4ge1xuICBoaXN0b3J5LmdvRm9yd2FyZCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IG5hdkdvdG8gPSAobmF2aWdhdGUpID0+IChkYXRhKTogdm9pZCA9PiB7XG4gIGNvbnN0IHtwYXJhbXMsIHBhdGggPSAnJ30gPSBkYXRhO1xuICBuYXZpZ2F0ZShwYXRoLCBwYXJhbXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IG5hdlJlcGxhY2UgPSAoaGlzdG9yeSkgPT4gKGRhdGEpOiB2b2lkID0+IHtcbiAgY29uc3Qge3BhcmFtcywgcGF0aCA9ICcnfSA9IGRhdGE7XG4gIGhpc3RvcnkucmVwbGFjZShwYXRoLCBwYXJhbXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IEdvdGhhbVJvb3Q6IEZDID0gKCkgPT4ge1xuICBjb25zdCB7YXdzUnVtfSA9IHVzZUNvbnRleHQoR290aGFtQ29udGV4dCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBtYXRjaGVzID0gdXNlTWF0Y2hlcygpO1xuICBjb25zdCBsYXN0VHJhY2tlZFBhdGggPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHVzZUZsdXhMaXN0ZW5lcihHb3RoYW1Db25zdGFudHMuTkFWX0JBQ0ssIG5hdkJhY2sobmF2aWdhdGUpKTtcbiAgdXNlRmx1eExpc3RlbmVyKEdvdGhhbUNvbnN0YW50cy5OQVZfRk9SV0FSRCwgbmF2Rm9yd2FyZChuYXZpZ2F0ZSkpO1xuICB1c2VGbHV4TGlzdGVuZXIoR290aGFtQ29uc3RhbnRzLk5BVl9HT1RPLCBuYXZHb3RvKG5hdmlnYXRlKSk7XG4gIHVzZUZsdXhMaXN0ZW5lcihHb3RoYW1Db25zdGFudHMuTkFWX1JFUExBQ0UsIG5hdlJlcGxhY2UobmF2aWdhdGUpKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFuYWx5dGljcyA9IFsuLi5tYXRjaGVzXVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLm1hcCgobWF0Y2gpID0+IChtYXRjaC5oYW5kbGUgYXMge2FuYWx5dGljcz86IFJvdXRlQW5hbHl0aWNzfSB8IHVuZGVmaW5lZCk/LmFuYWx5dGljcylcbiAgICAgIC5maW5kKEJvb2xlYW4pO1xuICAgIGNvbnN0IHBhdGggPSBhbmFseXRpY3M/LnJvdXRlIHx8IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGNvbnN0IHZpZXdJZCA9IGFuYWx5dGljcz8udmlld0lkIHx8IHBhdGg7XG5cbiAgICBpZighYXdzUnVtIHx8IGxhc3RUcmFja2VkUGF0aC5jdXJyZW50ID09PSB2aWV3SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYXN0VHJhY2tlZFBhdGguY3VycmVudCA9IHZpZXdJZDtcbiAgICBhd3NSdW0udHJhY2soe1xuICAgICAgbmFtZTogJ3BhZ2VfdmlldycsXG4gICAgICBwYXRoLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0aXRsZTogYW5hbHl0aWNzPy50aXRsZSB8fCBkb2N1bWVudC50aXRsZSxcbiAgICAgICAgdmlld0lkXG4gICAgICB9LFxuICAgICAgdHlwZTogJ3BhZ2VfdmlldydcbiAgICB9KTtcbiAgfSwgW2F3c1J1bSwgbG9jYXRpb24ucGF0aG5hbWUsIG1hdGNoZXNdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8T3V0bGV0Lz5cbiAgICAgIDxOb3RpZnkgLz5cbiAgICAgIDxMb2FkZXJWaWV3IC8+XG4gICAgPC8+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbInVzZUZsdXhMaXN0ZW5lciIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJPdXRsZXQiLCJ1c2VMb2NhdGlvbiIsInVzZU1hdGNoZXMiLCJ1c2VOYXZpZ2F0ZSIsIk5vdGlmeSIsIkdvdGhhbUNvbnN0YW50cyIsIkdvdGhhbUNvbnRleHQiLCJMb2FkZXJWaWV3IiwibmF2QmFjayIsImhpc3RvcnkiLCJnb0JhY2siLCJuYXZGb3J3YXJkIiwiZ29Gb3J3YXJkIiwibmF2R290byIsIm5hdmlnYXRlIiwiZGF0YSIsInBhcmFtcyIsInBhdGgiLCJuYXZSZXBsYWNlIiwicmVwbGFjZSIsIkdvdGhhbVJvb3QiLCJhd3NSdW0iLCJsb2NhdGlvbiIsIm1hdGNoZXMiLCJsYXN0VHJhY2tlZFBhdGgiLCJ1bmRlZmluZWQiLCJOQVZfQkFDSyIsIk5BVl9GT1JXQVJEIiwiTkFWX0dPVE8iLCJOQVZfUkVQTEFDRSIsImFuYWx5dGljcyIsInJldmVyc2UiLCJtYXAiLCJtYXRjaCIsImhhbmRsZSIsImZpbmQiLCJCb29sZWFuIiwicm91dGUiLCJwYXRobmFtZSIsInZpZXdJZCIsImN1cnJlbnQiLCJ0cmFjayIsIm5hbWUiLCJwcm9wZXJ0aWVzIiwidGl0bGUiLCJkb2N1bWVudCIsInR5cGUiXSwibWFwcGluZ3MiOiI7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxlQUFlLFFBQU8sOEJBQThCO0FBQzVELFNBQVFDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQU8sUUFBUTtBQUNwRCxTQUFRQyxNQUFNLEVBQUVDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sZUFBZTtBQUUxRSxTQUFRQyxNQUFNLFFBQU8sb0NBQW9DO0FBQ3pELFNBQVFDLGVBQWUsUUFBTyxxQ0FBcUM7QUFDbkUsU0FBUUMsYUFBYSxRQUFPLCtCQUErQjtBQUMzRCxTQUFRQyxVQUFVLFFBQU8sOEJBQThCO0FBVXZELE9BQU8sTUFBTUMsVUFBVSxDQUFDQyxVQUFZO1FBQ2xDQSxRQUFRQyxNQUFNO0lBQ2hCLEVBQUU7QUFFRixPQUFPLE1BQU1DLGFBQWEsQ0FBQ0YsVUFBWTtRQUNyQ0EsUUFBUUcsU0FBUztJQUNuQixFQUFFO0FBRUYsT0FBTyxNQUFNQyxVQUFVLENBQUNDLFdBQWEsQ0FBQ0M7UUFDcEMsTUFBTSxFQUFDQyxNQUFNLEVBQUVDLE9BQU8sRUFBRSxFQUFDLEdBQUdGO1FBQzVCRCxTQUFTRyxNQUFNRDtJQUNqQixFQUFFO0FBRUYsT0FBTyxNQUFNRSxhQUFhLENBQUNULFVBQVksQ0FBQ007UUFDdEMsTUFBTSxFQUFDQyxNQUFNLEVBQUVDLE9BQU8sRUFBRSxFQUFDLEdBQUdGO1FBQzVCTixRQUFRVSxPQUFPLENBQUNGLE1BQU1EO0lBQ3hCLEVBQUU7QUFFRixPQUFPLE1BQU1JLGFBQWlCO0lBQzVCLE1BQU0sRUFBQ0MsTUFBTSxFQUFDLEdBQUd4QixXQUFXUztJQUM1QixNQUFNUSxXQUFXWDtJQUNqQixNQUFNbUIsV0FBV3JCO0lBQ2pCLE1BQU1zQixVQUFVckI7SUFDaEIsTUFBTXNCLGtCQUFrQnpCLE9BQTJCMEI7SUFFbkQ3QixnQkFBZ0JTLGdCQUFnQnFCLFFBQVEsRUFBRWxCLFFBQVFNO0lBQ2xEbEIsZ0JBQWdCUyxnQkFBZ0JzQixXQUFXLEVBQUVoQixXQUFXRztJQUN4RGxCLGdCQUFnQlMsZ0JBQWdCdUIsUUFBUSxFQUFFZixRQUFRQztJQUNsRGxCLGdCQUFnQlMsZ0JBQWdCd0IsV0FBVyxFQUFFWCxXQUFXSjtJQUV4RGhCLFVBQVU7UUFDUixNQUFNZ0MsWUFBWTtlQUFJUDtTQUFRLENBQzNCUSxPQUFPLEdBQ1BDLEdBQUcsQ0FBQyxDQUFDQyxRQUFXQSxNQUFNQyxNQUFNLEVBQStDSixXQUMzRUssSUFBSSxDQUFDQztRQUNSLE1BQU1uQixPQUFPYSxXQUFXTyxTQUFTZixTQUFTZ0IsUUFBUTtRQUNsRCxNQUFNQyxTQUFTVCxXQUFXUyxVQUFVdEI7UUFFcEMsSUFBRyxDQUFDSSxVQUFVRyxnQkFBZ0JnQixPQUFPLEtBQUtELFFBQVE7WUFDaEQ7UUFDRjtRQUVBZixnQkFBZ0JnQixPQUFPLEdBQUdEO1FBQzFCbEIsT0FBT29CLEtBQUssQ0FBQztZQUNYQyxNQUFNO1lBQ056QjtZQUNBMEIsWUFBWTtnQkFDVkMsT0FBT2QsV0FBV2MsU0FBU0MsU0FBU0QsS0FBSztnQkFDekNMO1lBQ0Y7WUFDQU8sTUFBTTtRQUNSO0lBQ0YsR0FBRztRQUFDekI7UUFBUUMsU0FBU2dCLFFBQVE7UUFBRWY7S0FBUTtJQUV2QyxxQkFDRTs7MEJBQ0UsS0FBQ3ZCOzBCQUNELEtBQUNJOzBCQUNELEtBQUNHOzs7QUFHUCxFQUFFIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
export interface HomeViewProps {
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
title?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const HomeView: React.NamedExoticComponent<HomeViewProps>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
4
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
5
|
+
*/ import React, { memo, useState } from 'react';
|
|
6
|
+
import { useNavigate } from 'react-router';
|
|
7
|
+
const navItems = [
|
|
8
|
+
{
|
|
9
|
+
label: 'Home',
|
|
10
|
+
path: '/'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
label: 'About',
|
|
14
|
+
path: '/about'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
label: 'Contact',
|
|
18
|
+
path: '/contact'
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
const HomeViewComponent = ({ children, title = 'GothamUI' })=>{
|
|
22
|
+
const [mobileOpen, setMobileOpen] = useState(false);
|
|
23
|
+
const navigate = useNavigate();
|
|
24
|
+
const handleDrawerToggle = ()=>{
|
|
25
|
+
setMobileOpen(!mobileOpen);
|
|
26
|
+
};
|
|
27
|
+
const handleNavigation = (path)=>{
|
|
28
|
+
navigate(path);
|
|
29
|
+
setMobileOpen(false);
|
|
30
|
+
};
|
|
31
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
32
|
+
className: "flex flex-col min-h-screen",
|
|
33
|
+
children: [
|
|
34
|
+
/*#__PURE__*/ _jsxs("header", {
|
|
35
|
+
className: "bg-indigo-600 text-white shadow-md",
|
|
36
|
+
children: [
|
|
37
|
+
/*#__PURE__*/ _jsx("div", {
|
|
38
|
+
className: "container mx-auto px-4",
|
|
39
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
40
|
+
className: "flex items-center justify-between h-16",
|
|
41
|
+
children: [
|
|
42
|
+
/*#__PURE__*/ _jsx("div", {
|
|
43
|
+
className: "flex items-center sm:hidden",
|
|
44
|
+
children: /*#__PURE__*/ _jsxs("button", {
|
|
45
|
+
"aria-controls": "mobile-menu",
|
|
46
|
+
"aria-expanded": mobileOpen,
|
|
47
|
+
className: "inline-flex items-center justify-center p-2 rounded-md text-white hover:bg-indigo-500 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white",
|
|
48
|
+
onClick: handleDrawerToggle,
|
|
49
|
+
type: "button",
|
|
50
|
+
children: [
|
|
51
|
+
/*#__PURE__*/ _jsx("span", {
|
|
52
|
+
className: "sr-only",
|
|
53
|
+
children: "Open main menu"
|
|
54
|
+
}),
|
|
55
|
+
/*#__PURE__*/ _jsx("svg", {
|
|
56
|
+
"aria-hidden": "true",
|
|
57
|
+
className: `${mobileOpen ? 'hidden' : 'block'} h-6 w-6`,
|
|
58
|
+
fill: "none",
|
|
59
|
+
stroke: "currentColor",
|
|
60
|
+
viewBox: "0 0 24 24",
|
|
61
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
62
|
+
children: /*#__PURE__*/ _jsx("path", {
|
|
63
|
+
d: "M4 6h16M4 12h16M4 18h16",
|
|
64
|
+
strokeLinecap: "round",
|
|
65
|
+
strokeLinejoin: "round",
|
|
66
|
+
strokeWidth: 2
|
|
67
|
+
})
|
|
68
|
+
}),
|
|
69
|
+
/*#__PURE__*/ _jsx("svg", {
|
|
70
|
+
"aria-hidden": "true",
|
|
71
|
+
className: `${mobileOpen ? 'block' : 'hidden'} h-6 w-6`,
|
|
72
|
+
fill: "none",
|
|
73
|
+
stroke: "currentColor",
|
|
74
|
+
viewBox: "0 0 24 24",
|
|
75
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
76
|
+
children: /*#__PURE__*/ _jsx("path", {
|
|
77
|
+
d: "M6 18L18 6M6 6l12 12",
|
|
78
|
+
strokeLinecap: "round",
|
|
79
|
+
strokeLinejoin: "round",
|
|
80
|
+
strokeWidth: 2
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
]
|
|
84
|
+
})
|
|
85
|
+
}),
|
|
86
|
+
/*#__PURE__*/ _jsx("div", {
|
|
87
|
+
className: "flex-1 flex items-center justify-center sm:items-stretch sm:justify-start",
|
|
88
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
89
|
+
className: "flex-shrink-0 flex items-center",
|
|
90
|
+
children: /*#__PURE__*/ _jsx("h1", {
|
|
91
|
+
className: "text-xl font-bold",
|
|
92
|
+
children: title
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
/*#__PURE__*/ _jsx("div", {
|
|
97
|
+
className: "hidden sm:block sm:ml-6",
|
|
98
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
99
|
+
className: "flex space-x-4",
|
|
100
|
+
children: navItems.map(({ label, path })=>/*#__PURE__*/ _jsx("button", {
|
|
101
|
+
className: "text-white hover:bg-indigo-500 px-3 py-2 rounded-md text-sm font-medium",
|
|
102
|
+
onClick: ()=>handleNavigation(path),
|
|
103
|
+
children: label
|
|
104
|
+
}, path))
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
})
|
|
109
|
+
}),
|
|
110
|
+
/*#__PURE__*/ _jsx("div", {
|
|
111
|
+
className: `${mobileOpen ? 'block' : 'hidden'} sm:hidden`,
|
|
112
|
+
id: "mobile-menu",
|
|
113
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
114
|
+
className: "px-2 pt-2 pb-3 space-y-1",
|
|
115
|
+
children: navItems.map(({ label, path })=>/*#__PURE__*/ _jsx("button", {
|
|
116
|
+
className: "text-white hover:bg-indigo-500 block px-3 py-2 rounded-md text-base font-medium w-full text-left",
|
|
117
|
+
onClick: ()=>handleNavigation(path),
|
|
118
|
+
children: label
|
|
119
|
+
}, path))
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
]
|
|
123
|
+
}),
|
|
124
|
+
/*#__PURE__*/ _jsx("main", {
|
|
125
|
+
className: "flex-grow p-4",
|
|
126
|
+
children: children
|
|
127
|
+
})
|
|
128
|
+
]
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
export const HomeView = /*#__PURE__*/ memo(HomeViewComponent);
|
|
132
|
+
HomeView.displayName = 'HomeView';
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy92aWV3cy9Ib21lVmlldy9Ib21lVmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBSZWFjdCwge21lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZU5hdmlnYXRlfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5jb25zdCBuYXZJdGVtcyA9IFtcbiAge2xhYmVsOiAnSG9tZScsIHBhdGg6ICcvJ30sXG4gIHtsYWJlbDogJ0Fib3V0JywgcGF0aDogJy9hYm91dCd9LFxuICB7bGFiZWw6ICdDb250YWN0JywgcGF0aDogJy9jb250YWN0J31cbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9tZVZpZXdQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuY29uc3QgSG9tZVZpZXdDb21wb25lbnQ6IFJlYWN0LkZDPEhvbWVWaWV3UHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIHRpdGxlID0gJ0dvdGhhbVVJJ1xufSkgPT4ge1xuICBjb25zdCBbbW9iaWxlT3Blbiwgc2V0TW9iaWxlT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcblxuICBjb25zdCBoYW5kbGVEcmF3ZXJUb2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0TW9iaWxlT3BlbighbW9iaWxlT3Blbik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBuYXZpZ2F0ZShwYXRoKTtcbiAgICBzZXRNb2JpbGVPcGVuKGZhbHNlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBtaW4taC1zY3JlZW5cIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uIEJhciAqL31cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYmctaW5kaWdvLTYwMCB0ZXh0LXdoaXRlIHNoYWRvdy1tZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XG4gICAgICAgICAgICB7LyogTW9iaWxlIG1lbnUgYnV0dG9uICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzbTpoaWRkZW5cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJtb2JpbGUtbWVudVwiXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17bW9iaWxlT3Blbn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBob3ZlcjpiZy1pbmRpZ28tNTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1pbnNldCBmb2N1czpyaW5nLXdoaXRlXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEcmF3ZXJUb2dnbGV9XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+T3BlbiBtYWluIG1lbnU8L3NwYW4+XG4gICAgICAgICAgICAgICAgey8qIEljb24gd2hlbiBtZW51IGlzIGNsb3NlZCAqL31cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHttb2JpbGVPcGVuID8gJ2hpZGRlbicgOiAnYmxvY2snfSBoLTYgdy02YH1cbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNCA2aDE2TTQgMTJoMTZNNCAxOGgxNlwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgey8qIEljb24gd2hlbiBtZW51IGlzIG9wZW4gKi99XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7bW9iaWxlT3BlbiA/ICdibG9jaycgOiAnaGlkZGVuJ30gaC02IHctNmB9XG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogTG9nbyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOml0ZW1zLXN0cmV0Y2ggc206anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGRcIj57dGl0bGV9PC9oMT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIERlc2t0b3AgTmF2aWdhdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIHNtOmJsb2NrIHNtOm1sLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtNFwiPlxuICAgICAgICAgICAgICAgIHtuYXZJdGVtcy5tYXAoKHtsYWJlbCwgcGF0aH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3ZlcjpiZy1pbmRpZ28tNTAwIHB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhdGh9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU5hdmlnYXRpb24ocGF0aCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogTW9iaWxlIE5hdmlnYXRpb24gKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake21vYmlsZU9wZW4gPyAnYmxvY2snIDogJ2hpZGRlbid9IHNtOmhpZGRlbmB9XG4gICAgICAgICAgaWQ9XCJtb2JpbGUtbWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTIgcHQtMiBwYi0zIHNwYWNlLXktMVwiPlxuICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoe2xhYmVsLCBwYXRofSkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3ZlcjpiZy1pbmRpZ28tNTAwIGJsb2NrIHB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtYmFzZSBmb250LW1lZGl1bSB3LWZ1bGwgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICBrZXk9e3BhdGh9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTmF2aWdhdGlvbihwYXRoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgey8qIE1haW4gQ29udGVudCAqL31cbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cImZsZXgtZ3JvdyBwLTRcIj5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9tYWluPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IEhvbWVWaWV3ID0gbWVtbyhIb21lVmlld0NvbXBvbmVudCk7XG5Ib21lVmlldy5kaXNwbGF5TmFtZSA9ICdIb21lVmlldyc7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJtZW1vIiwidXNlU3RhdGUiLCJ1c2VOYXZpZ2F0ZSIsIm5hdkl0ZW1zIiwibGFiZWwiLCJwYXRoIiwiSG9tZVZpZXdDb21wb25lbnQiLCJjaGlsZHJlbiIsInRpdGxlIiwibW9iaWxlT3BlbiIsInNldE1vYmlsZU9wZW4iLCJuYXZpZ2F0ZSIsImhhbmRsZURyYXdlclRvZ2dsZSIsImhhbmRsZU5hdmlnYXRpb24iLCJkaXYiLCJjbGFzc05hbWUiLCJoZWFkZXIiLCJidXR0b24iLCJhcmlhLWNvbnRyb2xzIiwiYXJpYS1leHBhbmRlZCIsIm9uQ2xpY2siLCJ0eXBlIiwic3BhbiIsInN2ZyIsImFyaWEtaGlkZGVuIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJ4bWxucyIsImQiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImgxIiwibWFwIiwiaWQiLCJtYWluIiwiSG9tZVZpZXciLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLFNBQVFDLElBQUksRUFBRUMsUUFBUSxRQUFPLFFBQVE7QUFDNUMsU0FBUUMsV0FBVyxRQUFPLGVBQWU7QUFFekMsTUFBTUMsV0FBVztJQUNmO1FBQUNDLE9BQU87UUFBUUMsTUFBTTtJQUFHO0lBQ3pCO1FBQUNELE9BQU87UUFBU0MsTUFBTTtJQUFRO0lBQy9CO1FBQUNELE9BQU87UUFBV0MsTUFBTTtJQUFVO0NBQ3BDO0FBT0QsTUFBTUMsb0JBQTZDLENBQUMsRUFDbERDLFFBQVEsRUFDUkMsUUFBUSxVQUFVLEVBQ25CO0lBQ0MsTUFBTSxDQUFDQyxZQUFZQyxjQUFjLEdBQUdULFNBQVM7SUFDN0MsTUFBTVUsV0FBV1Q7SUFFakIsTUFBTVUscUJBQXFCO1FBQ3pCRixjQUFjLENBQUNEO0lBQ2pCO0lBRUEsTUFBTUksbUJBQW1CLENBQUNSO1FBQ3hCTSxTQUFTTjtRQUNUSyxjQUFjO0lBQ2hCO0lBRUEscUJBQ0UsTUFBQ0k7UUFBSUMsV0FBVTs7MEJBRWIsTUFBQ0M7Z0JBQU9ELFdBQVU7O2tDQUNoQixLQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYixjQUFBLE1BQUNEOzRCQUFJQyxXQUFVOzs4Q0FFYixLQUFDRDtvQ0FBSUMsV0FBVTs4Q0FDYixjQUFBLE1BQUNFO3dDQUNDQyxpQkFBYzt3Q0FDZEMsaUJBQWVWO3dDQUNmTSxXQUFVO3dDQUNWSyxTQUFTUjt3Q0FDVFMsTUFBSzs7MERBRUwsS0FBQ0M7Z0RBQUtQLFdBQVU7MERBQVU7OzBEQUUxQixLQUFDUTtnREFDQ0MsZUFBWTtnREFDWlQsV0FBVyxHQUFHTixhQUFhLFdBQVcsUUFBUSxRQUFRLENBQUM7Z0RBQ3ZEZ0IsTUFBSztnREFDTEMsUUFBTztnREFDUEMsU0FBUTtnREFDUkMsT0FBTTswREFFTixjQUFBLEtBQUN2QjtvREFDQ3dCLEdBQUU7b0RBQ0ZDLGVBQWM7b0RBQ2RDLGdCQUFlO29EQUNmQyxhQUFhOzs7MERBSWpCLEtBQUNUO2dEQUNDQyxlQUFZO2dEQUNaVCxXQUFXLEdBQUdOLGFBQWEsVUFBVSxTQUFTLFFBQVEsQ0FBQztnREFDdkRnQixNQUFLO2dEQUNMQyxRQUFPO2dEQUNQQyxTQUFRO2dEQUNSQyxPQUFNOzBEQUVOLGNBQUEsS0FBQ3ZCO29EQUNDd0IsR0FBRTtvREFDRkMsZUFBYztvREFDZEMsZ0JBQWU7b0RBQ2ZDLGFBQWE7Ozs7Ozs4Q0FPckIsS0FBQ2xCO29DQUFJQyxXQUFVOzhDQUNiLGNBQUEsS0FBQ0Q7d0NBQUlDLFdBQVU7a0RBQ2IsY0FBQSxLQUFDa0I7NENBQUdsQixXQUFVO3NEQUFxQlA7Ozs7OENBS3ZDLEtBQUNNO29DQUFJQyxXQUFVOzhDQUNiLGNBQUEsS0FBQ0Q7d0NBQUlDLFdBQVU7a0RBQ1paLFNBQVMrQixHQUFHLENBQUMsQ0FBQyxFQUFDOUIsS0FBSyxFQUFFQyxJQUFJLEVBQUMsaUJBQzFCLEtBQUNZO2dEQUNDRixXQUFVO2dEQUVWSyxTQUFTLElBQU1QLGlCQUFpQlI7MERBRS9CRDsrQ0FISUM7Ozs7OztrQ0FZakIsS0FBQ1M7d0JBQ0NDLFdBQVcsR0FBR04sYUFBYSxVQUFVLFNBQVMsVUFBVSxDQUFDO3dCQUN6RDBCLElBQUc7a0NBRUgsY0FBQSxLQUFDckI7NEJBQUlDLFdBQVU7c0NBQ1paLFNBQVMrQixHQUFHLENBQUMsQ0FBQyxFQUFDOUIsS0FBSyxFQUFFQyxJQUFJLEVBQUMsaUJBQzFCLEtBQUNZO29DQUNDRixXQUFVO29DQUVWSyxTQUFTLElBQU1QLGlCQUFpQlI7OENBRS9CRDttQ0FISUM7Ozs7OzBCQVdmLEtBQUMrQjtnQkFBS3JCLFdBQVU7MEJBQ2JSOzs7O0FBSVQ7QUFFQSxPQUFPLE1BQU04Qix5QkFBV3JDLEtBQUtNLG1CQUFtQjtBQUNoRCtCLFNBQVNDLFdBQVcsR0FBRyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface LoaderContent {
|
|
2
|
+
content?: string;
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare const toggleLoader: (setLoading: any, setLoaderContent: any) => ({ content, isLoading }: LoaderContent) => void;
|
|
6
|
+
declare const LoaderViewComponent: () => import("react").JSX.Element | null;
|
|
7
|
+
export declare const LoaderView: import("react").MemoExoticComponent<typeof LoaderViewComponent>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useFluxListener } from '@nlabs/arkhamjs-utils-react';
|
|
3
|
+
import { memo, useState } from 'react';
|
|
4
|
+
import { Loader } from '../../components/Loader/Loader.js';
|
|
5
|
+
import { GothamConstants } from '../../constants/GothamConstants.js';
|
|
6
|
+
export const toggleLoader = (setLoading, setLoaderContent)=>({ content, isLoading })=>{
|
|
7
|
+
setLoading(isLoading);
|
|
8
|
+
setLoaderContent(content);
|
|
9
|
+
};
|
|
10
|
+
const LoaderViewComponent = ()=>{
|
|
11
|
+
const [isLoading, setLoading] = useState(false);
|
|
12
|
+
const [content, setLoaderContent] = useState();
|
|
13
|
+
useFluxListener(GothamConstants.LOADING, ({ content, isLoading })=>{
|
|
14
|
+
setLoading(isLoading);
|
|
15
|
+
setLoaderContent(content);
|
|
16
|
+
});
|
|
17
|
+
if (!isLoading) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
21
|
+
className: "fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center",
|
|
22
|
+
children: /*#__PURE__*/ _jsx(Loader, {
|
|
23
|
+
content: content
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
export const LoaderView = /*#__PURE__*/ memo(LoaderViewComponent);
|
|
28
|
+
LoaderView.displayName = 'LoaderView';
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy92aWV3cy9Mb2FkZXJWaWV3L0xvYWRlclZpZXcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlRmx1eExpc3RlbmVyfSBmcm9tICdAbmxhYnMvYXJraGFtanMtdXRpbHMtcmVhY3QnO1xuaW1wb3J0IHttZW1vLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIvTG9hZGVyLmpzJztcbmltcG9ydCB7R290aGFtQ29uc3RhbnRzfSBmcm9tICcuLi8uLi9jb25zdGFudHMvR290aGFtQ29uc3RhbnRzLmpzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlckNvbnRlbnQge1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVMb2FkZXIgPSAoc2V0TG9hZGluZywgc2V0TG9hZGVyQ29udGVudCkgPT4gKHtjb250ZW50LCBpc0xvYWRpbmd9OiBMb2FkZXJDb250ZW50KSA9PiB7XG4gIHNldExvYWRpbmcoaXNMb2FkaW5nKTtcbiAgc2V0TG9hZGVyQ29udGVudChjb250ZW50KTtcbn07XG5cbmNvbnN0IExvYWRlclZpZXdDb21wb25lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbY29udGVudCwgc2V0TG9hZGVyQ29udGVudF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgdXNlRmx1eExpc3RlbmVyKEdvdGhhbUNvbnN0YW50cy5MT0FESU5HLCAoe2NvbnRlbnQsIGlzTG9hZGluZ306IExvYWRlckNvbnRlbnQpID0+IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZyk7XG4gICAgc2V0TG9hZGVyQ29udGVudChjb250ZW50KTtcbiAgfSk7XG5cbiAgaWYoIWlzTG9hZGluZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2sgYmctb3BhY2l0eS01MCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8TG9hZGVyIGNvbnRlbnQ9e2NvbnRlbnR9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgTG9hZGVyVmlldyA9IG1lbW8oTG9hZGVyVmlld0NvbXBvbmVudCk7XG5Mb2FkZXJWaWV3LmRpc3BsYXlOYW1lID0gJ0xvYWRlclZpZXcnO1xuIl0sIm5hbWVzIjpbInVzZUZsdXhMaXN0ZW5lciIsIm1lbW8iLCJ1c2VTdGF0ZSIsIkxvYWRlciIsIkdvdGhhbUNvbnN0YW50cyIsInRvZ2dsZUxvYWRlciIsInNldExvYWRpbmciLCJzZXRMb2FkZXJDb250ZW50IiwiY29udGVudCIsImlzTG9hZGluZyIsIkxvYWRlclZpZXdDb21wb25lbnQiLCJMT0FESU5HIiwiZGl2IiwiY2xhc3NOYW1lIiwiTG9hZGVyVmlldyIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsZUFBZSxRQUFPLDhCQUE4QjtBQUM1RCxTQUFRQyxJQUFJLEVBQUVDLFFBQVEsUUFBTyxRQUFRO0FBRXJDLFNBQVFDLE1BQU0sUUFBTyxvQ0FBb0M7QUFDekQsU0FBUUMsZUFBZSxRQUFPLHFDQUFxQztBQVFuRSxPQUFPLE1BQU1DLGVBQWUsQ0FBQ0MsWUFBWUMsbUJBQXFCLENBQUMsRUFBQ0MsT0FBTyxFQUFFQyxTQUFTLEVBQWdCO1FBQ2hHSCxXQUFXRztRQUNYRixpQkFBaUJDO0lBQ25CLEVBQUU7QUFFRixNQUFNRSxzQkFBc0I7SUFDMUIsTUFBTSxDQUFDRCxXQUFXSCxXQUFXLEdBQUdKLFNBQVM7SUFDekMsTUFBTSxDQUFDTSxTQUFTRCxpQkFBaUIsR0FBR0w7SUFFcENGLGdCQUFnQkksZ0JBQWdCTyxPQUFPLEVBQUUsQ0FBQyxFQUFDSCxPQUFPLEVBQUVDLFNBQVMsRUFBZ0I7UUFDM0VILFdBQVdHO1FBQ1hGLGlCQUFpQkM7SUFDbkI7SUFFQSxJQUFHLENBQUNDLFdBQVc7UUFDYixPQUFPO0lBQ1Q7SUFFQSxxQkFDRSxLQUFDRztRQUFJQyxXQUFVO2tCQUNiLGNBQUEsS0FBQ1Y7WUFBT0ssU0FBU0E7OztBQUd2QjtBQUVBLE9BQU8sTUFBTU0sMkJBQWFiLEtBQUtTLHFCQUFxQjtBQUNwREksV0FBV0MsV0FBVyxHQUFHIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ElementType } from 'react';
|
|
2
|
+
export type MenuItems = {
|
|
3
|
+
readonly current?: boolean;
|
|
4
|
+
readonly href: string;
|
|
5
|
+
readonly icon?: ElementType;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
};
|
|
8
|
+
export interface MenuViewProps {
|
|
9
|
+
sideMenuItems: MenuItems[];
|
|
10
|
+
userMenuItems: MenuItems[];
|
|
11
|
+
}
|
|
12
|
+
export declare const MenuView: import("react").NamedExoticComponent<MenuViewProps>;
|
|
13
|
+
export default MenuView;
|