@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,8 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
export type AlertVariant = 'default' | 'destructive';
|
|
3
|
+
export interface AlertProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
readonly variant?: AlertVariant;
|
|
5
|
+
}
|
|
6
|
+
export declare const Alert: ({ className, role, variant, ...props }: AlertProps) => import("react").JSX.Element;
|
|
7
|
+
export declare const AlertTitle: ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element;
|
|
8
|
+
export declare const AlertDescription: ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@nlabs/utils';
|
|
3
|
+
const variantClasses = {
|
|
4
|
+
default: 'bg-card text-card-foreground',
|
|
5
|
+
destructive: 'bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current'
|
|
6
|
+
};
|
|
7
|
+
export const Alert = ({ className, role = 'alert', variant = 'default', ...props })=>/*#__PURE__*/ _jsx("div", {
|
|
8
|
+
className: cn('relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border border-border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current', variantClasses[variant], className),
|
|
9
|
+
"data-slot": "alert",
|
|
10
|
+
role: role,
|
|
11
|
+
...props
|
|
12
|
+
});
|
|
13
|
+
export const AlertTitle = ({ className, ...props })=>/*#__PURE__*/ _jsx("div", {
|
|
14
|
+
className: cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className),
|
|
15
|
+
"data-slot": "alert-title",
|
|
16
|
+
...props
|
|
17
|
+
});
|
|
18
|
+
export const AlertDescription = ({ className, ...props })=>/*#__PURE__*/ _jsx("div", {
|
|
19
|
+
className: cn('col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed', className),
|
|
20
|
+
"data-slot": "alert-description",
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0FsZXJ0L0FsZXJ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7SFRNTEF0dHJpYnV0ZXN9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IHR5cGUgQWxlcnRWYXJpYW50ID0gJ2RlZmF1bHQnIHwgJ2Rlc3RydWN0aXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBBbGVydFByb3BzIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgcmVhZG9ubHkgdmFyaWFudD86IEFsZXJ0VmFyaWFudDtcbn1cblxuY29uc3QgdmFyaWFudENsYXNzZXM6IFJlY29yZDxBbGVydFZhcmlhbnQsIHN0cmluZz4gPSB7XG4gIGRlZmF1bHQ6ICdiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kJyxcbiAgZGVzdHJ1Y3RpdmU6ICdiZy1jYXJkIHRleHQtZGVzdHJ1Y3RpdmUgKjpkYXRhLVtzbG90PWFsZXJ0LWRlc2NyaXB0aW9uXTp0ZXh0LWRlc3RydWN0aXZlLzkwIFsmPnN2Z106dGV4dC1jdXJyZW50J1xufTtcblxuZXhwb3J0IGNvbnN0IEFsZXJ0ID0gKHtcbiAgY2xhc3NOYW1lLFxuICByb2xlID0gJ2FsZXJ0JyxcbiAgdmFyaWFudCA9ICdkZWZhdWx0JyxcbiAgLi4ucHJvcHNcbn06IEFsZXJ0UHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAncmVsYXRpdmUgZ3JpZCB3LWZ1bGwgZ3JpZC1jb2xzLVswXzFmcl0gaXRlbXMtc3RhcnQgZ2FwLXktMC41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ib3JkZXIgcHgtNCBweS0zIHRleHQtc20gaGFzLVs+c3ZnXTpncmlkLWNvbHMtW2NhbGModmFyKC0tc3BhY2luZykqNClfMWZyXSBoYXMtWz5zdmddOmdhcC14LTMgWyY+c3ZnXTpzaXplLTQgWyY+c3ZnXTp0cmFuc2xhdGUteS0wLjUgWyY+c3ZnXTp0ZXh0LWN1cnJlbnQnLFxuICAgICAgdmFyaWFudENsYXNzZXNbdmFyaWFudF0sXG4gICAgICBjbGFzc05hbWVcbiAgICApfVxuICAgIGRhdGEtc2xvdD1cImFsZXJ0XCJcbiAgICByb2xlPXtyb2xlfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCBjb25zdCBBbGVydFRpdGxlID0gKHtjbGFzc05hbWUsIC4uLnByb3BzfTogSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e2NuKCdjb2wtc3RhcnQtMiBsaW5lLWNsYW1wLTEgbWluLWgtNCBmb250LW1lZGl1bSB0cmFja2luZy10aWdodCcsIGNsYXNzTmFtZSl9XG4gICAgZGF0YS1zbG90PVwiYWxlcnQtdGl0bGVcIlxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCBjb25zdCBBbGVydERlc2NyaXB0aW9uID0gKHtjbGFzc05hbWUsIC4uLnByb3BzfTogSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e2NuKCdjb2wtc3RhcnQtMiBncmlkIGp1c3RpZnktaXRlbXMtc3RhcnQgZ2FwLTEgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfcF06bGVhZGluZy1yZWxheGVkJywgY2xhc3NOYW1lKX1cbiAgICBkYXRhLXNsb3Q9XCJhbGVydC1kZXNjcmlwdGlvblwiXG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcbiJdLCJuYW1lcyI6WyJjbiIsInZhcmlhbnRDbGFzc2VzIiwiZGVmYXVsdCIsImRlc3RydWN0aXZlIiwiQWxlcnQiLCJjbGFzc05hbWUiLCJyb2xlIiwidmFyaWFudCIsInByb3BzIiwiZGl2IiwiZGF0YS1zbG90IiwiQWxlcnRUaXRsZSIsIkFsZXJ0RGVzY3JpcHRpb24iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQVVoQyxNQUFNQyxpQkFBK0M7SUFDbkRDLFNBQVM7SUFDVEMsYUFBYTtBQUNmO0FBRUEsT0FBTyxNQUFNQyxRQUFRLENBQUMsRUFDcEJDLFNBQVMsRUFDVEMsT0FBTyxPQUFPLEVBQ2RDLFVBQVUsU0FBUyxFQUNuQixHQUFHQyxPQUNRLGlCQUNYLEtBQUNDO1FBQ0NKLFdBQVdMLEdBQ1QsbVBBQ0FDLGNBQWMsQ0FBQ00sUUFBUSxFQUN2QkY7UUFFRkssYUFBVTtRQUNWSixNQUFNQTtRQUNMLEdBQUdFLEtBQUs7T0FFWDtBQUVGLE9BQU8sTUFBTUcsYUFBYSxDQUFDLEVBQUNOLFNBQVMsRUFBRSxHQUFHRyxPQUFzQyxpQkFDOUUsS0FBQ0M7UUFDQ0osV0FBV0wsR0FBRywrREFBK0RLO1FBQzdFSyxhQUFVO1FBQ1QsR0FBR0YsS0FBSztPQUVYO0FBRUYsT0FBTyxNQUFNSSxtQkFBbUIsQ0FBQyxFQUFDUCxTQUFTLEVBQUUsR0FBR0csT0FBc0MsaUJBQ3BGLEtBQUNDO1FBQ0NKLFdBQVdMLEdBQUcsa0dBQWtHSztRQUNoSEssYUFBVTtRQUNULEdBQUdGLEtBQUs7T0FFWCJ9
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { focusCanvas } from '../../utils/storyInteractions.js';
|
|
4
|
+
import { Alert, AlertDescription, AlertTitle } from './Alert.js';
|
|
5
|
+
const meta = {
|
|
6
|
+
argTypes: {
|
|
7
|
+
variant: {
|
|
8
|
+
control: 'select',
|
|
9
|
+
options: [
|
|
10
|
+
'default',
|
|
11
|
+
'destructive'
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
component: Alert,
|
|
16
|
+
parameters: {
|
|
17
|
+
layout: 'centered'
|
|
18
|
+
},
|
|
19
|
+
title: 'Components/Alert'
|
|
20
|
+
};
|
|
21
|
+
export default meta;
|
|
22
|
+
export const Default = {
|
|
23
|
+
args: {
|
|
24
|
+
variant: 'default'
|
|
25
|
+
},
|
|
26
|
+
play: focusCanvas,
|
|
27
|
+
render: (args)=>/*#__PURE__*/ _jsxs(Alert, {
|
|
28
|
+
...args,
|
|
29
|
+
className: "max-w-md",
|
|
30
|
+
children: [
|
|
31
|
+
/*#__PURE__*/ _jsx(AlertTitle, {
|
|
32
|
+
children: "Deployment complete"
|
|
33
|
+
}),
|
|
34
|
+
/*#__PURE__*/ _jsx(AlertDescription, {
|
|
35
|
+
children: "The component package was published successfully."
|
|
36
|
+
})
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
export const Destructive = {
|
|
41
|
+
args: {
|
|
42
|
+
variant: 'destructive'
|
|
43
|
+
},
|
|
44
|
+
play: focusCanvas,
|
|
45
|
+
render: (args)=>/*#__PURE__*/ _jsxs(Alert, {
|
|
46
|
+
...args,
|
|
47
|
+
className: "max-w-md",
|
|
48
|
+
children: [
|
|
49
|
+
/*#__PURE__*/ _jsx(AlertTitle, {
|
|
50
|
+
children: "Build failed"
|
|
51
|
+
}),
|
|
52
|
+
/*#__PURE__*/ _jsx(AlertDescription, {
|
|
53
|
+
children: "Review the latest Storybook interaction output before releasing."
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
})
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0FsZXJ0L0FsZXJ0LnN0b3JpZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2ZvY3VzQ2FudmFzfSBmcm9tICcuLi8uLi91dGlscy9zdG9yeUludGVyYWN0aW9ucy5qcyc7XG5pbXBvcnQge0FsZXJ0LCBBbGVydERlc2NyaXB0aW9uLCBBbGVydFRpdGxlfSBmcm9tICcuL0FsZXJ0LmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5cbmNvbnN0IG1ldGE6IE1ldGE8dHlwZW9mIEFsZXJ0PiA9IHtcbiAgYXJnVHlwZXM6IHtcbiAgICB2YXJpYW50OiB7XG4gICAgICBjb250cm9sOiAnc2VsZWN0JyxcbiAgICAgIG9wdGlvbnM6IFsnZGVmYXVsdCcsICdkZXN0cnVjdGl2ZSddXG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IEFsZXJ0LFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgbGF5b3V0OiAnY2VudGVyZWQnXG4gIH0sXG4gIHRpdGxlOiAnQ29tcG9uZW50cy9BbGVydCdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgQWxlcnQ+O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdDogU3RvcnkgPSB7XG4gIGFyZ3M6IHtcbiAgICB2YXJpYW50OiAnZGVmYXVsdCdcbiAgfSxcbiAgcGxheTogZm9jdXNDYW52YXMsXG4gIHJlbmRlcjogKGFyZ3MpID0+IChcbiAgICA8QWxlcnQgey4uLmFyZ3N9IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICA8QWxlcnRUaXRsZT5EZXBsb3ltZW50IGNvbXBsZXRlPC9BbGVydFRpdGxlPlxuICAgICAgPEFsZXJ0RGVzY3JpcHRpb24+VGhlIGNvbXBvbmVudCBwYWNrYWdlIHdhcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LjwvQWxlcnREZXNjcmlwdGlvbj5cbiAgICA8L0FsZXJ0PlxuICApXG59O1xuXG5leHBvcnQgY29uc3QgRGVzdHJ1Y3RpdmU6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgdmFyaWFudDogJ2Rlc3RydWN0aXZlJ1xuICB9LFxuICBwbGF5OiBmb2N1c0NhbnZhcyxcbiAgcmVuZGVyOiAoYXJncykgPT4gKFxuICAgIDxBbGVydCB7Li4uYXJnc30gY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cbiAgICAgIDxBbGVydFRpdGxlPkJ1aWxkIGZhaWxlZDwvQWxlcnRUaXRsZT5cbiAgICAgIDxBbGVydERlc2NyaXB0aW9uPlJldmlldyB0aGUgbGF0ZXN0IFN0b3J5Ym9vayBpbnRlcmFjdGlvbiBvdXRwdXQgYmVmb3JlIHJlbGVhc2luZy48L0FsZXJ0RGVzY3JpcHRpb24+XG4gICAgPC9BbGVydD5cbiAgKVxufTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsImZvY3VzQ2FudmFzIiwiQWxlcnQiLCJBbGVydERlc2NyaXB0aW9uIiwiQWxlcnRUaXRsZSIsIm1ldGEiLCJhcmdUeXBlcyIsInZhcmlhbnQiLCJjb250cm9sIiwib3B0aW9ucyIsImNvbXBvbmVudCIsInBhcmFtZXRlcnMiLCJsYXlvdXQiLCJ0aXRsZSIsIkRlZmF1bHQiLCJhcmdzIiwicGxheSIsInJlbmRlciIsImNsYXNzTmFtZSIsIkRlc3RydWN0aXZlIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLFNBQVFDLFdBQVcsUUFBTyxtQ0FBbUM7QUFDN0QsU0FBUUMsS0FBSyxFQUFFQyxnQkFBZ0IsRUFBRUMsVUFBVSxRQUFPLGFBQWE7QUFJL0QsTUFBTUMsT0FBMkI7SUFDL0JDLFVBQVU7UUFDUkMsU0FBUztZQUNQQyxTQUFTO1lBQ1RDLFNBQVM7Z0JBQUM7Z0JBQVc7YUFBYztRQUNyQztJQUNGO0lBQ0FDLFdBQVdSO0lBQ1hTLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVSLEtBQUs7QUFJcEIsT0FBTyxNQUFNUyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKUixTQUFTO0lBQ1g7SUFDQVMsTUFBTWY7SUFDTmdCLFFBQVEsQ0FBQ0YscUJBQ1AsTUFBQ2I7WUFBTyxHQUFHYSxJQUFJO1lBQUVHLFdBQVU7OzhCQUN6QixLQUFDZDs4QkFBVzs7OEJBQ1osS0FBQ0Q7OEJBQWlCOzs7O0FBR3hCLEVBQUU7QUFFRixPQUFPLE1BQU1nQixjQUFxQjtJQUNoQ0osTUFBTTtRQUNKUixTQUFTO0lBQ1g7SUFDQVMsTUFBTWY7SUFDTmdCLFFBQVEsQ0FBQ0YscUJBQ1AsTUFBQ2I7WUFBTyxHQUFHYSxJQUFJO1lBQUVHLFdBQVU7OzhCQUN6QixLQUFDZDs4QkFBVzs7OEJBQ1osS0FBQ0Q7OEJBQWlCOzs7O0FBR3hCLEVBQUUifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } 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 { Navigate, useLocation } from 'react-router';
|
|
6
|
+
import { Config } from '../../config/appConfig.js';
|
|
7
|
+
export const AuthRoute = ({ children })=>{
|
|
8
|
+
const location = useLocation();
|
|
9
|
+
const isAuth = Config.get('isAuth', ()=>false);
|
|
10
|
+
const authRoute = Config.get('authRoute', '/');
|
|
11
|
+
if (isAuth && isAuth()) {
|
|
12
|
+
return children;
|
|
13
|
+
}
|
|
14
|
+
const redirect = encodeURIComponent(`${location.pathname}${location.search}${location.hash}`);
|
|
15
|
+
return /*#__PURE__*/ _jsx(Navigate, {
|
|
16
|
+
replace: true,
|
|
17
|
+
to: `${authRoute}?redirect=${redirect}`
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0F1dGhSb3V0ZS9BdXRoUm91dGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge05hdmlnYXRlLCB1c2VMb2NhdGlvbn0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9hcHBDb25maWcuanMnO1xuXG5leHBvcnQgY29uc3QgQXV0aFJvdXRlID0gKHtjaGlsZHJlbn0pID0+IHtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBpc0F1dGggPSBDb25maWcuZ2V0KCdpc0F1dGgnLCAoKSA9PiBmYWxzZSkgYXMgKCkgPT4gYm9vbGVhbjtcbiAgY29uc3QgYXV0aFJvdXRlID0gQ29uZmlnLmdldCgnYXV0aFJvdXRlJywgJy8nKSBhcyBzdHJpbmc7XG5cbiAgaWYoaXNBdXRoICYmIGlzQXV0aCgpKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgY29uc3QgcmVkaXJlY3QgPSBlbmNvZGVVUklDb21wb25lbnQoYCR7bG9jYXRpb24ucGF0aG5hbWV9JHtsb2NhdGlvbi5zZWFyY2h9JHtsb2NhdGlvbi5oYXNofWApO1xuICByZXR1cm4gPE5hdmlnYXRlIHJlcGxhY2UgdG89e2Ake2F1dGhSb3V0ZX0/cmVkaXJlY3Q9JHtyZWRpcmVjdH1gfSAvPjtcbn07Il0sIm5hbWVzIjpbIk5hdmlnYXRlIiwidXNlTG9jYXRpb24iLCJDb25maWciLCJBdXRoUm91dGUiLCJjaGlsZHJlbiIsImxvY2F0aW9uIiwiaXNBdXRoIiwiZ2V0IiwiYXV0aFJvdXRlIiwicmVkaXJlY3QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJyZXBsYWNlIiwidG8iXSwibWFwcGluZ3MiOiI7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLEVBQUVDLFdBQVcsUUFBTyxlQUFlO0FBRW5ELFNBQVFDLE1BQU0sUUFBTyw0QkFBNEI7QUFFakQsT0FBTyxNQUFNQyxZQUFZLENBQUMsRUFBQ0MsUUFBUSxFQUFDO0lBQ2xDLE1BQU1DLFdBQVdKO0lBQ2pCLE1BQU1LLFNBQVNKLE9BQU9LLEdBQUcsQ0FBQyxVQUFVLElBQU07SUFDMUMsTUFBTUMsWUFBWU4sT0FBT0ssR0FBRyxDQUFDLGFBQWE7SUFFMUMsSUFBR0QsVUFBVUEsVUFBVTtRQUNyQixPQUFPRjtJQUNUO0lBRUEsTUFBTUssV0FBV0MsbUJBQW1CLEdBQUdMLFNBQVNNLFFBQVEsR0FBR04sU0FBU08sTUFBTSxHQUFHUCxTQUFTUSxJQUFJLEVBQUU7SUFDNUYscUJBQU8sS0FBQ2I7UUFBU2MsT0FBTztRQUFDQyxJQUFJLEdBQUdQLFVBQVUsVUFBVSxFQUFFQyxVQUFVOztBQUNsRSxFQUFFIn0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { MemoryRouter } from 'react-router';
|
|
4
|
+
import { Config } from '../../config/appConfig.js';
|
|
5
|
+
import { focusCanvas } from '../../utils/storyInteractions.js';
|
|
6
|
+
import { AuthRoute } from './AuthRoute.js';
|
|
7
|
+
const meta = {
|
|
8
|
+
argTypes: {
|
|
9
|
+
children: {
|
|
10
|
+
control: 'text'
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
component: AuthRoute,
|
|
14
|
+
parameters: {
|
|
15
|
+
layout: 'centered'
|
|
16
|
+
},
|
|
17
|
+
title: 'Components/AuthRoute'
|
|
18
|
+
};
|
|
19
|
+
export default meta;
|
|
20
|
+
export const Default = {
|
|
21
|
+
args: {
|
|
22
|
+
children: 'Authenticated content'
|
|
23
|
+
},
|
|
24
|
+
play: focusCanvas,
|
|
25
|
+
render: (args)=>/*#__PURE__*/ _jsx(AuthenticatedRouteStory, {
|
|
26
|
+
...args
|
|
27
|
+
})
|
|
28
|
+
};
|
|
29
|
+
const AuthenticatedRouteStory = (args)=>{
|
|
30
|
+
Config.set({
|
|
31
|
+
isAuth: ()=>true
|
|
32
|
+
});
|
|
33
|
+
return /*#__PURE__*/ _jsx(MemoryRouter, {
|
|
34
|
+
initialEntries: [
|
|
35
|
+
'/secure'
|
|
36
|
+
],
|
|
37
|
+
children: /*#__PURE__*/ _jsx(AuthRoute, {
|
|
38
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
39
|
+
children: args.children
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0F1dGhSb3V0ZS9BdXRoUm91dGUuc3Rvcmllcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWVtb3J5Um91dGVyfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9hcHBDb25maWcuanMnO1xuaW1wb3J0IHtmb2N1c0NhbnZhc30gZnJvbSAnLi4vLi4vdXRpbHMvc3RvcnlJbnRlcmFjdGlvbnMuanMnO1xuaW1wb3J0IHtBdXRoUm91dGV9IGZyb20gJy4vQXV0aFJvdXRlLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5cbmNvbnN0IG1ldGE6IE1ldGE8dHlwZW9mIEF1dGhSb3V0ZT4gPSB7XG4gIGFyZ1R5cGVzOiB7XG4gICAgY2hpbGRyZW46IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0J1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50OiBBdXRoUm91dGUsXG4gIHBhcmFtZXRlcnM6IHtcbiAgICBsYXlvdXQ6ICdjZW50ZXJlZCdcbiAgfSxcbiAgdGl0bGU6ICdDb21wb25lbnRzL0F1dGhSb3V0ZSdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgQXV0aFJvdXRlPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHQ6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgY2hpbGRyZW46ICdBdXRoZW50aWNhdGVkIGNvbnRlbnQnXG4gIH0sXG4gIHBsYXk6IGZvY3VzQ2FudmFzLFxuICByZW5kZXI6IChhcmdzKSA9PiAoXG4gICAgPEF1dGhlbnRpY2F0ZWRSb3V0ZVN0b3J5IHsuLi5hcmdzfSAvPlxuICApXG59O1xuXG5jb25zdCBBdXRoZW50aWNhdGVkUm91dGVTdG9yeSA9IChhcmdzOiB7Y2hpbGRyZW4/OiBzdHJpbmd9KSA9PiB7XG4gIENvbmZpZy5zZXQoe2lzQXV0aDogKCkgPT4gdHJ1ZX0pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbW9yeVJvdXRlciBpbml0aWFsRW50cmllcz17Wycvc2VjdXJlJ119PlxuICAgICAgPEF1dGhSb3V0ZT5cbiAgICAgICAgPGRpdj57YXJncy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgIDwvQXV0aFJvdXRlPlxuICAgIDwvTWVtb3J5Um91dGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIk1lbW9yeVJvdXRlciIsIkNvbmZpZyIsImZvY3VzQ2FudmFzIiwiQXV0aFJvdXRlIiwibWV0YSIsImFyZ1R5cGVzIiwiY2hpbGRyZW4iLCJjb250cm9sIiwiY29tcG9uZW50IiwicGFyYW1ldGVycyIsImxheW91dCIsInRpdGxlIiwiRGVmYXVsdCIsImFyZ3MiLCJwbGF5IiwicmVuZGVyIiwiQXV0aGVudGljYXRlZFJvdXRlU3RvcnkiLCJzZXQiLCJpc0F1dGgiLCJpbml0aWFsRW50cmllcyIsImRpdiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxZQUFZLFFBQU8sZUFBZTtBQUMxQyxTQUFRQyxNQUFNLFFBQU8sNEJBQTRCO0FBQ2pELFNBQVFDLFdBQVcsUUFBTyxtQ0FBbUM7QUFDN0QsU0FBUUMsU0FBUyxRQUFPLGlCQUFpQjtBQUl6QyxNQUFNQyxPQUErQjtJQUNuQ0MsVUFBVTtRQUNSQyxVQUFVO1lBQ1JDLFNBQVM7UUFDWDtJQUNGO0lBQ0FDLFdBQVdMO0lBQ1hNLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVQLEtBQUs7QUFJcEIsT0FBTyxNQUFNUSxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKUCxVQUFVO0lBQ1o7SUFDQVEsTUFBTVo7SUFDTmEsUUFBUSxDQUFDRixxQkFDUCxLQUFDRztZQUF5QixHQUFHSCxJQUFJOztBQUVyQyxFQUFFO0FBRUYsTUFBTUcsMEJBQTBCLENBQUNIO0lBQy9CWixPQUFPZ0IsR0FBRyxDQUFDO1FBQUNDLFFBQVEsSUFBTTtJQUFJO0lBRTlCLHFCQUNFLEtBQUNsQjtRQUFhbUIsZ0JBQWdCO1lBQUM7U0FBVTtrQkFDdkMsY0FBQSxLQUFDaEI7c0JBQ0MsY0FBQSxLQUFDaUI7MEJBQUtQLEtBQUtQLFFBQVE7Ozs7QUFJM0IifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ChangeEvent } from 'react';
|
|
2
|
+
import type { TextFieldProps } from '../TextField/TextField.js';
|
|
3
|
+
export type AutocompleteSuggestion = {
|
|
4
|
+
readonly [key: string]: unknown;
|
|
5
|
+
readonly address?: string;
|
|
6
|
+
readonly city?: string;
|
|
7
|
+
readonly country?: string;
|
|
8
|
+
readonly label?: string;
|
|
9
|
+
readonly latitude?: unknown;
|
|
10
|
+
readonly location?: string;
|
|
11
|
+
readonly longitude?: unknown;
|
|
12
|
+
readonly state?: string;
|
|
13
|
+
};
|
|
14
|
+
export interface AutocompleteFieldProps<TSuggestion = AutocompleteSuggestion> extends Omit<TextFieldProps, 'onChange' | 'value'> {
|
|
15
|
+
readonly [key: string]: unknown;
|
|
16
|
+
readonly defaultValue?: string;
|
|
17
|
+
readonly getList?: (value: string) => Promise<readonly TSuggestion[]>;
|
|
18
|
+
readonly onChange?: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
19
|
+
readonly onSelected?: (data: {
|
|
20
|
+
readonly suggestion: TSuggestion;
|
|
21
|
+
}) => void;
|
|
22
|
+
readonly value?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const AutocompleteField: <TSuggestion = AutocompleteSuggestion>({ defaultValue, getList, label, name, onChange, onSelected, placeholder, type, value, ...props }: AutocompleteFieldProps<TSuggestion>) => import("react").JSX.Element;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
4
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
5
|
+
*/ import { useEffect, useRef, useState } from 'react';
|
|
6
|
+
import { TextField } from '../TextField/TextField.js';
|
|
7
|
+
const getSuggestionLabel = (suggestion)=>{
|
|
8
|
+
const directLabel = suggestion.location || suggestion.address || suggestion.label;
|
|
9
|
+
if (directLabel) {
|
|
10
|
+
return String(directLabel);
|
|
11
|
+
}
|
|
12
|
+
return [
|
|
13
|
+
suggestion.city,
|
|
14
|
+
suggestion.state,
|
|
15
|
+
suggestion.country
|
|
16
|
+
].filter(Boolean).join(', ');
|
|
17
|
+
};
|
|
18
|
+
export const AutocompleteField = ({ defaultValue = '', getList, label, name, onChange, onSelected, placeholder, type = 'text', value, ...props })=>{
|
|
19
|
+
const externalValue = String(value ?? defaultValue ?? '');
|
|
20
|
+
const [query, setQuery] = useState(externalValue);
|
|
21
|
+
const [suggestions, setSuggestions] = useState([]);
|
|
22
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
23
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
24
|
+
const externalValueRef = useRef(externalValue);
|
|
25
|
+
const requestIdRef = useRef(0);
|
|
26
|
+
const selectedQueryRef = useRef('');
|
|
27
|
+
useEffect(()=>{
|
|
28
|
+
const nextValue = String(value ?? defaultValue ?? '');
|
|
29
|
+
if (nextValue !== externalValueRef.current) {
|
|
30
|
+
externalValueRef.current = nextValue;
|
|
31
|
+
setQuery(nextValue);
|
|
32
|
+
}
|
|
33
|
+
}, [
|
|
34
|
+
defaultValue,
|
|
35
|
+
value
|
|
36
|
+
]);
|
|
37
|
+
useEffect(()=>{
|
|
38
|
+
const requestId = ++requestIdRef.current;
|
|
39
|
+
if (selectedQueryRef.current === query) {
|
|
40
|
+
selectedQueryRef.current = '';
|
|
41
|
+
setIsLoading(false);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
if (!getList || query.trim().length < 2) {
|
|
45
|
+
setSuggestions((current)=>current.length ? [] : current);
|
|
46
|
+
setIsOpen(false);
|
|
47
|
+
setIsLoading(false);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
setIsLoading(true);
|
|
51
|
+
getList(query).then((nextSuggestions)=>{
|
|
52
|
+
if (requestIdRef.current !== requestId) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const safeSuggestions = Array.isArray(nextSuggestions) ? nextSuggestions : [];
|
|
56
|
+
setSuggestions(safeSuggestions);
|
|
57
|
+
setIsOpen(safeSuggestions.length > 0);
|
|
58
|
+
}).catch(()=>{
|
|
59
|
+
if (requestIdRef.current !== requestId) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
setSuggestions([]);
|
|
63
|
+
setIsOpen(false);
|
|
64
|
+
}).finally(()=>{
|
|
65
|
+
if (requestIdRef.current === requestId) {
|
|
66
|
+
setIsLoading(false);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return ()=>{
|
|
70
|
+
requestIdRef.current += 1;
|
|
71
|
+
};
|
|
72
|
+
}, [
|
|
73
|
+
getList,
|
|
74
|
+
query
|
|
75
|
+
]);
|
|
76
|
+
const selectSuggestion = (suggestion)=>{
|
|
77
|
+
const nextLabel = getSuggestionLabel(suggestion);
|
|
78
|
+
selectedQueryRef.current = nextLabel;
|
|
79
|
+
setQuery(nextLabel);
|
|
80
|
+
setSuggestions([]);
|
|
81
|
+
setIsOpen(false);
|
|
82
|
+
onSelected?.({
|
|
83
|
+
suggestion
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
87
|
+
className: "app-autocomplete-field",
|
|
88
|
+
children: [
|
|
89
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
90
|
+
...props,
|
|
91
|
+
autoComplete: "off",
|
|
92
|
+
label: label,
|
|
93
|
+
name: name,
|
|
94
|
+
onBlur: (event)=>{
|
|
95
|
+
window.setTimeout(()=>setIsOpen(false), 120);
|
|
96
|
+
onSelected?.({
|
|
97
|
+
suggestion: {
|
|
98
|
+
location: event.currentTarget.value
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
onChange: (event)=>{
|
|
103
|
+
setQuery(event.currentTarget.value);
|
|
104
|
+
onChange?.(event);
|
|
105
|
+
},
|
|
106
|
+
onFocus: ()=>setIsOpen(suggestions.length > 0),
|
|
107
|
+
placeholder: placeholder,
|
|
108
|
+
type: type,
|
|
109
|
+
value: query
|
|
110
|
+
}),
|
|
111
|
+
isOpen ? /*#__PURE__*/ _jsx("div", {
|
|
112
|
+
className: "app-autocomplete-list",
|
|
113
|
+
role: "listbox",
|
|
114
|
+
children: suggestions.map((suggestion, index)=>{
|
|
115
|
+
const displaySuggestion = suggestion;
|
|
116
|
+
const suggestionLabel = getSuggestionLabel(displaySuggestion);
|
|
117
|
+
return /*#__PURE__*/ _jsxs("button", {
|
|
118
|
+
className: "app-autocomplete-option",
|
|
119
|
+
onMouseDown: (event)=>{
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
selectSuggestion(suggestion);
|
|
122
|
+
},
|
|
123
|
+
role: "option",
|
|
124
|
+
type: "button",
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ _jsx("span", {
|
|
127
|
+
children: suggestionLabel
|
|
128
|
+
}),
|
|
129
|
+
displaySuggestion.latitude && displaySuggestion.longitude ? /*#__PURE__*/ _jsxs("small", {
|
|
130
|
+
children: [
|
|
131
|
+
Number(displaySuggestion.latitude).toFixed(3),
|
|
132
|
+
", ",
|
|
133
|
+
Number(displaySuggestion.longitude).toFixed(3)
|
|
134
|
+
]
|
|
135
|
+
}) : null
|
|
136
|
+
]
|
|
137
|
+
}, `${suggestionLabel}-${index}`);
|
|
138
|
+
})
|
|
139
|
+
}) : null,
|
|
140
|
+
isLoading ? /*#__PURE__*/ _jsx("span", {
|
|
141
|
+
className: "app-autocomplete-status",
|
|
142
|
+
children: "Searching..."
|
|
143
|
+
}) : null
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0F1dG9jb21wbGV0ZUZpZWxkL0F1dG9jb21wbGV0ZUZpZWxkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtUZXh0RmllbGR9IGZyb20gJy4uL1RleHRGaWVsZC9UZXh0RmllbGQuanMnO1xuXG5pbXBvcnQgdHlwZSB7Q2hhbmdlRXZlbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtUZXh0RmllbGRQcm9wc30gZnJvbSAnLi4vVGV4dEZpZWxkL1RleHRGaWVsZC5qcyc7XG5cbmV4cG9ydCB0eXBlIEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24gPSB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIHJlYWRvbmx5IGFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNpdHk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvdW50cnk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xuICByZWFkb25seSBsYXRpdHVkZT86IHVua25vd247XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBsb25naXR1ZGU/OiB1bmtub3duO1xuICByZWFkb25seSBzdGF0ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlRmllbGRQcm9wczxUU3VnZ2VzdGlvbiA9IEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24+IGV4dGVuZHMgT21pdDxUZXh0RmllbGRQcm9wcywgJ29uQ2hhbmdlJyB8ICd2YWx1ZSc+IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcmVhZG9ubHkgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICByZWFkb25seSBnZXRMaXN0PzogKHZhbHVlOiBzdHJpbmcpID0+IFByb21pc2U8cmVhZG9ubHkgVFN1Z2dlc3Rpb25bXT47XG4gIHJlYWRvbmx5IG9uQ2hhbmdlPzogKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uU2VsZWN0ZWQ/OiAoZGF0YToge3JlYWRvbmx5IHN1Z2dlc3Rpb246IFRTdWdnZXN0aW9ufSkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGdldFN1Z2dlc3Rpb25MYWJlbCA9IChzdWdnZXN0aW9uOiBBdXRvY29tcGxldGVTdWdnZXN0aW9uKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGlyZWN0TGFiZWwgPSBzdWdnZXN0aW9uLmxvY2F0aW9uIHx8IHN1Z2dlc3Rpb24uYWRkcmVzcyB8fCBzdWdnZXN0aW9uLmxhYmVsO1xuXG4gIGlmKGRpcmVjdExhYmVsKSB7XG4gICAgcmV0dXJuIFN0cmluZyhkaXJlY3RMYWJlbCk7XG4gIH1cblxuICByZXR1cm4gW3N1Z2dlc3Rpb24uY2l0eSwgc3VnZ2VzdGlvbi5zdGF0ZSwgc3VnZ2VzdGlvbi5jb3VudHJ5XS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBBdXRvY29tcGxldGVGaWVsZCA9IDxUU3VnZ2VzdGlvbiA9IEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24+KHtcbiAgZGVmYXVsdFZhbHVlID0gJycsXG4gIGdldExpc3QsXG4gIGxhYmVsLFxuICBuYW1lLFxuICBvbkNoYW5nZSxcbiAgb25TZWxlY3RlZCxcbiAgcGxhY2Vob2xkZXIsXG4gIHR5cGUgPSAndGV4dCcsXG4gIHZhbHVlLFxuICAuLi5wcm9wc1xufTogQXV0b2NvbXBsZXRlRmllbGRQcm9wczxUU3VnZ2VzdGlvbj4pID0+IHtcbiAgY29uc3QgZXh0ZXJuYWxWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gJycpO1xuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlKGV4dGVybmFsVmFsdWUpO1xuICBjb25zdCBbc3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlPHJlYWRvbmx5IFRTdWdnZXN0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZXh0ZXJuYWxWYWx1ZVJlZiA9IHVzZVJlZihleHRlcm5hbFZhbHVlKTtcbiAgY29uc3QgcmVxdWVzdElkUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBzZWxlY3RlZFF1ZXJ5UmVmID0gdXNlUmVmKCcnKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gJycpO1xuXG4gICAgaWYobmV4dFZhbHVlICE9PSBleHRlcm5hbFZhbHVlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGV4dGVybmFsVmFsdWVSZWYuY3VycmVudCA9IG5leHRWYWx1ZTtcbiAgICAgIHNldFF1ZXJ5KG5leHRWYWx1ZSk7XG4gICAgfVxuICB9LCBbZGVmYXVsdFZhbHVlLCB2YWx1ZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gKytyZXF1ZXN0SWRSZWYuY3VycmVudDtcblxuICAgIGlmKHNlbGVjdGVkUXVlcnlSZWYuY3VycmVudCA9PT0gcXVlcnkpIHtcbiAgICAgIHNlbGVjdGVkUXVlcnlSZWYuY3VycmVudCA9ICcnO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYoIWdldExpc3QgfHwgcXVlcnkudHJpbSgpLmxlbmd0aCA8IDIpIHtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKChjdXJyZW50KSA9PiAoY3VycmVudC5sZW5ndGggPyBbXSA6IGN1cnJlbnQpKTtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG5cbiAgICBnZXRMaXN0KHF1ZXJ5KVxuICAgICAgLnRoZW4oKG5leHRTdWdnZXN0aW9ucykgPT4ge1xuICAgICAgICBpZihyZXF1ZXN0SWRSZWYuY3VycmVudCAhPT0gcmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2FmZVN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShuZXh0U3VnZ2VzdGlvbnMpID8gbmV4dFN1Z2dlc3Rpb25zIDogW107XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKHNhZmVTdWdnZXN0aW9ucyk7XG4gICAgICAgIHNldElzT3BlbihzYWZlU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgaWYocmVxdWVzdElkUmVmLmN1cnJlbnQgIT09IHJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmKHJlcXVlc3RJZFJlZi5jdXJyZW50ID09PSByZXF1ZXN0SWQpIHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVxdWVzdElkUmVmLmN1cnJlbnQgKz0gMTtcbiAgICB9O1xuICB9LCBbZ2V0TGlzdCwgcXVlcnldKTtcblxuICBjb25zdCBzZWxlY3RTdWdnZXN0aW9uID0gKHN1Z2dlc3Rpb246IFRTdWdnZXN0aW9uKSA9PiB7XG4gICAgY29uc3QgbmV4dExhYmVsID0gZ2V0U3VnZ2VzdGlvbkxhYmVsKHN1Z2dlc3Rpb24gYXMgQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbik7XG4gICAgc2VsZWN0ZWRRdWVyeVJlZi5jdXJyZW50ID0gbmV4dExhYmVsO1xuICAgIHNldFF1ZXJ5KG5leHRMYWJlbCk7XG4gICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgb25TZWxlY3RlZD8uKHtzdWdnZXN0aW9ufSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFwcC1hdXRvY29tcGxldGUtZmllbGRcIj5cbiAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSwgMTIwKTtcbiAgICAgICAgICBvblNlbGVjdGVkPy4oe3N1Z2dlc3Rpb246IHtsb2NhdGlvbjogZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZX0gYXMgVFN1Z2dlc3Rpb259KTtcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4ge1xuICAgICAgICAgIHNldFF1ZXJ5KGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICAgIG9uQ2hhbmdlPy4oZXZlbnQpO1xuICAgICAgICB9fVxuICAgICAgICBvbkZvY3VzPXsoKSA9PiBzZXRJc09wZW4oc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgdmFsdWU9e3F1ZXJ5fVxuICAgICAgLz5cbiAgICAgIHtpc09wZW4gPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBwLWF1dG9jb21wbGV0ZS1saXN0XCIgcm9sZT1cImxpc3Rib3hcIj5cbiAgICAgICAgICB7c3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheVN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uIGFzIEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb247XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uTGFiZWwgPSBnZXRTdWdnZXN0aW9uTGFiZWwoZGlzcGxheVN1Z2dlc3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYXBwLWF1dG9jb21wbGV0ZS1vcHRpb25cIlxuICAgICAgICAgICAgICAgIGtleT17YCR7c3VnZ2VzdGlvbkxhYmVsfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbik7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3N1Z2dlc3Rpb25MYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAge2Rpc3BsYXlTdWdnZXN0aW9uLmxhdGl0dWRlICYmIGRpc3BsYXlTdWdnZXN0aW9uLmxvbmdpdHVkZSA/IChcbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57TnVtYmVyKGRpc3BsYXlTdWdnZXN0aW9uLmxhdGl0dWRlKS50b0ZpeGVkKDMpfSwge051bWJlcihkaXNwbGF5U3VnZ2VzdGlvbi5sb25naXR1ZGUpLnRvRml4ZWQoMyl9PC9zbWFsbD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuICAgICAge2lzTG9hZGluZyA/IDxzcGFuIGNsYXNzTmFtZT1cImFwcC1hdXRvY29tcGxldGUtc3RhdHVzXCI+U2VhcmNoaW5nLi4uPC9zcGFuPiA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiVGV4dEZpZWxkIiwiZ2V0U3VnZ2VzdGlvbkxhYmVsIiwic3VnZ2VzdGlvbiIsImRpcmVjdExhYmVsIiwibG9jYXRpb24iLCJhZGRyZXNzIiwibGFiZWwiLCJTdHJpbmciLCJjaXR5Iiwic3RhdGUiLCJjb3VudHJ5IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJBdXRvY29tcGxldGVGaWVsZCIsImRlZmF1bHRWYWx1ZSIsImdldExpc3QiLCJuYW1lIiwib25DaGFuZ2UiLCJvblNlbGVjdGVkIiwicGxhY2Vob2xkZXIiLCJ0eXBlIiwidmFsdWUiLCJwcm9wcyIsImV4dGVybmFsVmFsdWUiLCJxdWVyeSIsInNldFF1ZXJ5Iiwic3VnZ2VzdGlvbnMiLCJzZXRTdWdnZXN0aW9ucyIsImlzT3BlbiIsInNldElzT3BlbiIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsImV4dGVybmFsVmFsdWVSZWYiLCJyZXF1ZXN0SWRSZWYiLCJzZWxlY3RlZFF1ZXJ5UmVmIiwibmV4dFZhbHVlIiwiY3VycmVudCIsInJlcXVlc3RJZCIsInVuZGVmaW5lZCIsInRyaW0iLCJsZW5ndGgiLCJ0aGVuIiwibmV4dFN1Z2dlc3Rpb25zIiwic2FmZVN1Z2dlc3Rpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiY2F0Y2giLCJmaW5hbGx5Iiwic2VsZWN0U3VnZ2VzdGlvbiIsIm5leHRMYWJlbCIsImRpdiIsImNsYXNzTmFtZSIsImF1dG9Db21wbGV0ZSIsIm9uQmx1ciIsImV2ZW50Iiwid2luZG93Iiwic2V0VGltZW91dCIsImN1cnJlbnRUYXJnZXQiLCJvbkZvY3VzIiwicm9sZSIsIm1hcCIsImluZGV4IiwiZGlzcGxheVN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uTGFiZWwiLCJidXR0b24iLCJvbk1vdXNlRG93biIsInByZXZlbnREZWZhdWx0Iiwic3BhbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic21hbGwiLCJOdW1iZXIiLCJ0b0ZpeGVkIl0sIm1hcHBpbmdzIjoiO0FBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBTyxRQUFRO0FBRWxELFNBQVFDLFNBQVMsUUFBTyw0QkFBNEI7QUEwQnBELE1BQU1DLHFCQUFxQixDQUFDQztJQUMxQixNQUFNQyxjQUFjRCxXQUFXRSxRQUFRLElBQUlGLFdBQVdHLE9BQU8sSUFBSUgsV0FBV0ksS0FBSztJQUVqRixJQUFHSCxhQUFhO1FBQ2QsT0FBT0ksT0FBT0o7SUFDaEI7SUFFQSxPQUFPO1FBQUNELFdBQVdNLElBQUk7UUFBRU4sV0FBV08sS0FBSztRQUFFUCxXQUFXUSxPQUFPO0tBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxTQUFTQyxJQUFJLENBQUM7QUFDdEY7QUFFQSxPQUFPLE1BQU1DLG9CQUFvQixDQUF1QyxFQUN0RUMsZUFBZSxFQUFFLEVBQ2pCQyxPQUFPLEVBQ1BWLEtBQUssRUFDTFcsSUFBSSxFQUNKQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxPQUFPLE1BQU0sRUFDYkMsS0FBSyxFQUNMLEdBQUdDLE9BQ2lDO0lBQ3BDLE1BQU1DLGdCQUFnQmpCLE9BQU9lLFNBQVNQLGdCQUFnQjtJQUN0RCxNQUFNLENBQUNVLE9BQU9DLFNBQVMsR0FBRzNCLFNBQVN5QjtJQUNuQyxNQUFNLENBQUNHLGFBQWFDLGVBQWUsR0FBRzdCLFNBQWlDLEVBQUU7SUFDekUsTUFBTSxDQUFDOEIsUUFBUUMsVUFBVSxHQUFHL0IsU0FBUztJQUNyQyxNQUFNLENBQUNnQyxXQUFXQyxhQUFhLEdBQUdqQyxTQUFTO0lBQzNDLE1BQU1rQyxtQkFBbUJuQyxPQUFPMEI7SUFDaEMsTUFBTVUsZUFBZXBDLE9BQU87SUFDNUIsTUFBTXFDLG1CQUFtQnJDLE9BQU87SUFFaENELFVBQVU7UUFDUixNQUFNdUMsWUFBWTdCLE9BQU9lLFNBQVNQLGdCQUFnQjtRQUVsRCxJQUFHcUIsY0FBY0gsaUJBQWlCSSxPQUFPLEVBQUU7WUFDekNKLGlCQUFpQkksT0FBTyxHQUFHRDtZQUMzQlYsU0FBU1U7UUFDWDtJQUNGLEdBQUc7UUFBQ3JCO1FBQWNPO0tBQU07SUFFeEJ6QixVQUFVO1FBQ1IsTUFBTXlDLFlBQVksRUFBRUosYUFBYUcsT0FBTztRQUV4QyxJQUFHRixpQkFBaUJFLE9BQU8sS0FBS1osT0FBTztZQUNyQ1UsaUJBQWlCRSxPQUFPLEdBQUc7WUFDM0JMLGFBQWE7WUFDYixPQUFPTztRQUNUO1FBRUEsSUFBRyxDQUFDdkIsV0FBV1MsTUFBTWUsSUFBSSxHQUFHQyxNQUFNLEdBQUcsR0FBRztZQUN0Q2IsZUFBZSxDQUFDUyxVQUFhQSxRQUFRSSxNQUFNLEdBQUcsRUFBRSxHQUFHSjtZQUNuRFAsVUFBVTtZQUNWRSxhQUFhO1lBQ2IsT0FBT087UUFDVDtRQUVBUCxhQUFhO1FBRWJoQixRQUFRUyxPQUNMaUIsSUFBSSxDQUFDLENBQUNDO1lBQ0wsSUFBR1QsYUFBYUcsT0FBTyxLQUFLQyxXQUFXO2dCQUNyQztZQUNGO1lBRUEsTUFBTU0sa0JBQWtCQyxNQUFNQyxPQUFPLENBQUNILG1CQUFtQkEsa0JBQWtCLEVBQUU7WUFDN0VmLGVBQWVnQjtZQUNmZCxVQUFVYyxnQkFBZ0JILE1BQU0sR0FBRztRQUNyQyxHQUNDTSxLQUFLLENBQUM7WUFDTCxJQUFHYixhQUFhRyxPQUFPLEtBQUtDLFdBQVc7Z0JBQ3JDO1lBQ0Y7WUFFQVYsZUFBZSxFQUFFO1lBQ2pCRSxVQUFVO1FBQ1osR0FDQ2tCLE9BQU8sQ0FBQztZQUNQLElBQUdkLGFBQWFHLE9BQU8sS0FBS0MsV0FBVztnQkFDckNOLGFBQWE7WUFDZjtRQUNGO1FBQ0YsT0FBTztZQUNMRSxhQUFhRyxPQUFPLElBQUk7UUFDMUI7SUFDRixHQUFHO1FBQUNyQjtRQUFTUztLQUFNO0lBRW5CLE1BQU13QixtQkFBbUIsQ0FBQy9DO1FBQ3hCLE1BQU1nRCxZQUFZakQsbUJBQW1CQztRQUNyQ2lDLGlCQUFpQkUsT0FBTyxHQUFHYTtRQUMzQnhCLFNBQVN3QjtRQUNUdEIsZUFBZSxFQUFFO1FBQ2pCRSxVQUFVO1FBQ1ZYLGFBQWE7WUFBQ2pCO1FBQVU7SUFDMUI7SUFFQSxxQkFDRSxNQUFDaUQ7UUFBSUMsV0FBVTs7MEJBQ2IsS0FBQ3BEO2dCQUNFLEdBQUd1QixLQUFLO2dCQUNUOEIsY0FBYTtnQkFDYi9DLE9BQU9BO2dCQUNQVyxNQUFNQTtnQkFDTnFDLFFBQVEsQ0FBQ0M7b0JBQ1BDLE9BQU9DLFVBQVUsQ0FBQyxJQUFNM0IsVUFBVSxRQUFRO29CQUMxQ1gsYUFBYTt3QkFBQ2pCLFlBQVk7NEJBQUNFLFVBQVVtRCxNQUFNRyxhQUFhLENBQUNwQyxLQUFLO3dCQUFBO29CQUFnQjtnQkFDaEY7Z0JBQ0FKLFVBQVUsQ0FBQ3FDO29CQUNUN0IsU0FBUzZCLE1BQU1HLGFBQWEsQ0FBQ3BDLEtBQUs7b0JBQ2xDSixXQUFXcUM7Z0JBQ2I7Z0JBQ0FJLFNBQVMsSUFBTTdCLFVBQVVILFlBQVljLE1BQU0sR0FBRztnQkFDOUNyQixhQUFhQTtnQkFDYkMsTUFBTUE7Z0JBQ05DLE9BQU9HOztZQUVSSSx1QkFDQyxLQUFDc0I7Z0JBQUlDLFdBQVU7Z0JBQXdCUSxNQUFLOzBCQUN6Q2pDLFlBQVlrQyxHQUFHLENBQUMsQ0FBQzNELFlBQVk0RDtvQkFDNUIsTUFBTUMsb0JBQW9CN0Q7b0JBQzFCLE1BQU04RCxrQkFBa0IvRCxtQkFBbUI4RDtvQkFFM0MscUJBQ0UsTUFBQ0U7d0JBQ0NiLFdBQVU7d0JBRVZjLGFBQWEsQ0FBQ1g7NEJBQ1pBLE1BQU1ZLGNBQWM7NEJBQ3BCbEIsaUJBQWlCL0M7d0JBQ25CO3dCQUNBMEQsTUFBSzt3QkFDTHZDLE1BQUs7OzBDQUNMLEtBQUMrQzswQ0FBTUo7OzRCQUNORCxrQkFBa0JNLFFBQVEsSUFBSU4sa0JBQWtCTyxTQUFTLGlCQUN4RCxNQUFDQzs7b0NBQU9DLE9BQU9ULGtCQUFrQk0sUUFBUSxFQUFFSSxPQUFPLENBQUM7b0NBQUc7b0NBQUdELE9BQU9ULGtCQUFrQk8sU0FBUyxFQUFFRyxPQUFPLENBQUM7O2lDQUNuRzs7dUJBVkMsR0FBR1QsZ0JBQWdCLENBQUMsRUFBRUYsT0FBTztnQkFheEM7aUJBRUE7WUFDSC9CLDBCQUFZLEtBQUNxQztnQkFBS2hCLFdBQVU7MEJBQTBCO2lCQUFzQjs7O0FBR25GLEVBQUUifQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { interactWithCanvas } from '../../utils/storyInteractions.js';
|
|
4
|
+
import { AutocompleteField } from './AutocompleteField.js';
|
|
5
|
+
const suggestions = [
|
|
6
|
+
{
|
|
7
|
+
city: 'Gotham',
|
|
8
|
+
country: 'USA',
|
|
9
|
+
latitude: 40.712,
|
|
10
|
+
location: 'Gotham City',
|
|
11
|
+
longitude: -74.006,
|
|
12
|
+
state: 'NJ'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
city: 'Metropolis',
|
|
16
|
+
country: 'USA',
|
|
17
|
+
latitude: 38.907,
|
|
18
|
+
location: 'Metropolis Central',
|
|
19
|
+
longitude: -77.037,
|
|
20
|
+
state: 'NY'
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
const AutocompleteStory = (args)=>/*#__PURE__*/ _jsx("div", {
|
|
24
|
+
className: "w-96",
|
|
25
|
+
children: /*#__PURE__*/ _jsx(AutocompleteField, {
|
|
26
|
+
...args,
|
|
27
|
+
getList: async (value)=>suggestions.filter((suggestion)=>suggestion.location.toLowerCase().includes(value.toLowerCase()))
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
const meta = {
|
|
31
|
+
argTypes: {
|
|
32
|
+
defaultValue: {
|
|
33
|
+
control: 'text'
|
|
34
|
+
},
|
|
35
|
+
label: {
|
|
36
|
+
control: 'text'
|
|
37
|
+
},
|
|
38
|
+
name: {
|
|
39
|
+
control: 'text'
|
|
40
|
+
},
|
|
41
|
+
placeholder: {
|
|
42
|
+
control: 'text'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
component: AutocompleteField,
|
|
46
|
+
parameters: {
|
|
47
|
+
layout: 'centered'
|
|
48
|
+
},
|
|
49
|
+
title: 'Components/Form/AutocompleteField'
|
|
50
|
+
};
|
|
51
|
+
export default meta;
|
|
52
|
+
export const Default = {
|
|
53
|
+
args: {
|
|
54
|
+
label: 'Location',
|
|
55
|
+
name: 'location',
|
|
56
|
+
placeholder: 'Search locations'
|
|
57
|
+
},
|
|
58
|
+
play: interactWithCanvas,
|
|
59
|
+
render: AutocompleteStory
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL0F1dG9jb21wbGV0ZUZpZWxkL0F1dG9jb21wbGV0ZUZpZWxkLnN0b3JpZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7aW50ZXJhY3RXaXRoQ2FudmFzfSBmcm9tICcuLi8uLi91dGlscy9zdG9yeUludGVyYWN0aW9ucy5qcyc7XG5pbXBvcnQge0F1dG9jb21wbGV0ZUZpZWxkfSBmcm9tICcuL0F1dG9jb21wbGV0ZUZpZWxkLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5pbXBvcnQgdHlwZSB7Q29tcG9uZW50UHJvcHN9IGZyb20gJ3JlYWN0JztcblxuY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gIHtjaXR5OiAnR290aGFtJywgY291bnRyeTogJ1VTQScsIGxhdGl0dWRlOiA0MC43MTIsIGxvY2F0aW9uOiAnR290aGFtIENpdHknLCBsb25naXR1ZGU6IC03NC4wMDYsIHN0YXRlOiAnTkonfSxcbiAge2NpdHk6ICdNZXRyb3BvbGlzJywgY291bnRyeTogJ1VTQScsIGxhdGl0dWRlOiAzOC45MDcsIGxvY2F0aW9uOiAnTWV0cm9wb2xpcyBDZW50cmFsJywgbG9uZ2l0dWRlOiAtNzcuMDM3LCBzdGF0ZTogJ05ZJ31cbl07XG5cbmNvbnN0IEF1dG9jb21wbGV0ZVN0b3J5ID0gKGFyZ3M6IENvbXBvbmVudFByb3BzPHR5cGVvZiBBdXRvY29tcGxldGVGaWVsZD4pID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJ3LTk2XCI+XG4gICAgPEF1dG9jb21wbGV0ZUZpZWxkXG4gICAgICB7Li4uYXJnc31cbiAgICAgIGdldExpc3Q9e2FzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiBzdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24ubG9jYXRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKSl9XG4gICAgLz5cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCBtZXRhOiBNZXRhPHR5cGVvZiBBdXRvY29tcGxldGVGaWVsZD4gPSB7XG4gIGFyZ1R5cGVzOiB7XG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICBjb250cm9sOiAndGV4dCdcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICBjb250cm9sOiAndGV4dCdcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0J1xuICAgIH0sXG4gICAgcGxhY2Vob2xkZXI6IHtcbiAgICAgIGNvbnRyb2w6ICd0ZXh0J1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50OiBBdXRvY29tcGxldGVGaWVsZCxcbiAgcGFyYW1ldGVyczoge1xuICAgIGxheW91dDogJ2NlbnRlcmVkJ1xuICB9LFxuICB0aXRsZTogJ0NvbXBvbmVudHMvRm9ybS9BdXRvY29tcGxldGVGaWVsZCdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgQXV0b2NvbXBsZXRlRmllbGQ+O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdDogU3RvcnkgPSB7XG4gIGFyZ3M6IHtcbiAgICBsYWJlbDogJ0xvY2F0aW9uJyxcbiAgICBuYW1lOiAnbG9jYXRpb24nLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoIGxvY2F0aW9ucydcbiAgfSxcbiAgcGxheTogaW50ZXJhY3RXaXRoQ2FudmFzLFxuICByZW5kZXI6IEF1dG9jb21wbGV0ZVN0b3J5XG59O1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwiaW50ZXJhY3RXaXRoQ2FudmFzIiwiQXV0b2NvbXBsZXRlRmllbGQiLCJzdWdnZXN0aW9ucyIsImNpdHkiLCJjb3VudHJ5IiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInN0YXRlIiwiQXV0b2NvbXBsZXRlU3RvcnkiLCJhcmdzIiwiZGl2IiwiY2xhc3NOYW1lIiwiZ2V0TGlzdCIsInZhbHVlIiwiZmlsdGVyIiwic3VnZ2VzdGlvbiIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJtZXRhIiwiYXJnVHlwZXMiLCJkZWZhdWx0VmFsdWUiLCJjb250cm9sIiwibGFiZWwiLCJuYW1lIiwicGxhY2Vob2xkZXIiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJEZWZhdWx0IiwicGxheSIsInJlbmRlciJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUUxQixTQUFRQyxrQkFBa0IsUUFBTyxtQ0FBbUM7QUFDcEUsU0FBUUMsaUJBQWlCLFFBQU8seUJBQXlCO0FBS3pELE1BQU1DLGNBQWM7SUFDbEI7UUFBQ0MsTUFBTTtRQUFVQyxTQUFTO1FBQU9DLFVBQVU7UUFBUUMsVUFBVTtRQUFlQyxXQUFXLENBQUM7UUFBUUMsT0FBTztJQUFJO0lBQzNHO1FBQUNMLE1BQU07UUFBY0MsU0FBUztRQUFPQyxVQUFVO1FBQVFDLFVBQVU7UUFBc0JDLFdBQVcsQ0FBQztRQUFRQyxPQUFPO0lBQUk7Q0FDdkg7QUFFRCxNQUFNQyxvQkFBb0IsQ0FBQ0MscUJBQ3pCLEtBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsY0FBQSxLQUFDWDtZQUNFLEdBQUdTLElBQUk7WUFDUkcsU0FBUyxPQUFPQyxRQUFrQlosWUFBWWEsTUFBTSxDQUFDLENBQUNDLGFBQWVBLFdBQVdWLFFBQVEsQ0FBQ1csV0FBVyxHQUFHQyxRQUFRLENBQUNKLE1BQU1HLFdBQVc7OztBQUt2SSxNQUFNRSxPQUF1QztJQUMzQ0MsVUFBVTtRQUNSQyxjQUFjO1lBQ1pDLFNBQVM7UUFDWDtRQUNBQyxPQUFPO1lBQ0xELFNBQVM7UUFDWDtRQUNBRSxNQUFNO1lBQ0pGLFNBQVM7UUFDWDtRQUNBRyxhQUFhO1lBQ1hILFNBQVM7UUFDWDtJQUNGO0lBQ0FJLFdBQVd6QjtJQUNYMEIsWUFBWTtRQUNWQyxRQUFRO0lBQ1Y7SUFDQUMsT0FBTztBQUNUO0FBRUEsZUFBZVYsS0FBSztBQUlwQixPQUFPLE1BQU1XLFVBQWlCO0lBQzVCcEIsTUFBTTtRQUNKYSxPQUFPO1FBQ1BDLE1BQU07UUFDTkMsYUFBYTtJQUNmO0lBQ0FNLE1BQU0vQjtJQUNOZ0MsUUFBUXZCO0FBQ1YsRUFBRSJ9
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes, HTMLAttributes, ImgHTMLAttributes, ReactNode, SyntheticEvent } from 'react';
|
|
2
|
+
export type AvatarSize = 'default' | 'sm' | 'lg';
|
|
3
|
+
type AvatarImageEventHandler = (event: SyntheticEvent<HTMLImageElement>) => void;
|
|
4
|
+
export interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onError' | 'onLoad'> {
|
|
5
|
+
readonly alt?: string;
|
|
6
|
+
readonly initials?: ReactNode;
|
|
7
|
+
readonly onError?: AvatarImageEventHandler;
|
|
8
|
+
readonly onLoad?: AvatarImageEventHandler;
|
|
9
|
+
readonly size?: AvatarSize;
|
|
10
|
+
readonly square?: boolean;
|
|
11
|
+
readonly src?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const Avatar: ({ alt, children, className, initials, onError, onLoad, size, square, src, ...props }: AvatarProps) => import("react").JSX.Element;
|
|
14
|
+
export declare const AvatarImage: ({ alt, className, onError, onLoad, ...props }: ImgHTMLAttributes<HTMLImageElement>) => import("react").JSX.Element;
|
|
15
|
+
export declare const AvatarFallback: ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element | null;
|
|
16
|
+
export declare const AvatarBadge: ({ className, ...props }: HTMLAttributes<HTMLSpanElement>) => import("react").JSX.Element;
|
|
17
|
+
export interface AvatarButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onError' | 'onLoad'> {
|
|
18
|
+
readonly alt?: string;
|
|
19
|
+
readonly initials?: ReactNode;
|
|
20
|
+
readonly onError?: AvatarImageEventHandler;
|
|
21
|
+
readonly onLoad?: AvatarImageEventHandler;
|
|
22
|
+
readonly size?: AvatarSize;
|
|
23
|
+
readonly square?: boolean;
|
|
24
|
+
readonly src?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const AvatarButton: ({ alt, children, className, initials, onError, onLoad, size, square, src, type, ...props }: AvatarButtonProps) => import("react").JSX.Element;
|
|
27
|
+
export declare const AvatarGroup: ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element;
|
|
28
|
+
export declare const AvatarGroupCount: ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element;
|
|
29
|
+
export {};
|