@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,103 @@
|
|
|
1
|
+
# Notify Component
|
|
2
|
+
|
|
3
|
+
The Notify component provides a customizable notification system for displaying alerts, messages, and interactive notifications to users.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Multiple Severity Levels**: Support for error, warning, info, and success notifications
|
|
8
|
+
- **Customizable Positioning**: Position notifications at any corner or edge of the screen
|
|
9
|
+
- **Auto-dismiss**: Automatically hide notifications after a configurable duration
|
|
10
|
+
- **Interactive Actions**: Add buttons or icon buttons for user interaction
|
|
11
|
+
- **Tailwind CSS Styling**: Fully styled with Tailwind CSS for easy customization
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import {GothamActions} from '@actions/GothamActions';
|
|
17
|
+
|
|
18
|
+
// Basic notification
|
|
19
|
+
GothamActions.notify({
|
|
20
|
+
message: 'This is a basic notification',
|
|
21
|
+
autoHideDuration: 5000
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Notification with severity
|
|
25
|
+
GothamActions.notify({
|
|
26
|
+
message: 'Operation completed successfully',
|
|
27
|
+
severity: 'success'
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Notification with custom position
|
|
31
|
+
GothamActions.notify({
|
|
32
|
+
message: 'This appears in the top right',
|
|
33
|
+
anchorOrigin: {
|
|
34
|
+
horizontal: 'right',
|
|
35
|
+
vertical: 'top'
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Notification with actions
|
|
40
|
+
GothamActions.notify({
|
|
41
|
+
message: 'Would you like to undo?',
|
|
42
|
+
actions: [
|
|
43
|
+
{
|
|
44
|
+
label: 'Undo',
|
|
45
|
+
onClick: (key) => {
|
|
46
|
+
console.log('Undo clicked', key);
|
|
47
|
+
// Perform undo action
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
icon: 'close',
|
|
52
|
+
onClick: (key) => {
|
|
53
|
+
console.log('Close clicked', key);
|
|
54
|
+
GothamActions.notifyClose();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Props
|
|
62
|
+
|
|
63
|
+
The `GothamNotifyParams` interface accepts the following properties:
|
|
64
|
+
|
|
65
|
+
| Property | Type | Default | Description |
|
|
66
|
+
|----------|------|---------|-------------|
|
|
67
|
+
| `message` | ReactElement \| string | - | The content of the notification |
|
|
68
|
+
| `severity` | 'error' \| 'warning' \| 'info' \| 'success' | - | The severity level of the notification |
|
|
69
|
+
| `autoHideDuration` | number | 3000 | Time in milliseconds before automatically dismissing |
|
|
70
|
+
| `anchorOrigin` | { horizontal: 'left' \| 'center' \| 'right', vertical: 'top' \| 'bottom' } | { horizontal: 'left', vertical: 'bottom' } | Position of the notification |
|
|
71
|
+
| `actions` | GothamNotifyAction[] | [] | Array of action buttons to display |
|
|
72
|
+
|
|
73
|
+
### GothamNotifyAction
|
|
74
|
+
|
|
75
|
+
| Property | Type | Description |
|
|
76
|
+
|----------|------|-------------|
|
|
77
|
+
| `icon` | string | Icon name to display (uses the Svg component) |
|
|
78
|
+
| `label` | string | Text label for the button |
|
|
79
|
+
| `onClick` | (key: string) => void | Callback function when the action is clicked |
|
|
80
|
+
|
|
81
|
+
## Implementation Details
|
|
82
|
+
|
|
83
|
+
The Notify component uses:
|
|
84
|
+
|
|
85
|
+
- **Headless UI's Transition** for smooth enter/exit animations
|
|
86
|
+
- **Custom Button and IconButton components** built with Tailwind CSS
|
|
87
|
+
- **Custom Alert component** with appropriate styling for each severity level
|
|
88
|
+
- **ArkhamJS Flux architecture** for state management and event handling
|
|
89
|
+
|
|
90
|
+
## Tailwind CSS Classes
|
|
91
|
+
|
|
92
|
+
The component uses the following Tailwind CSS utility classes:
|
|
93
|
+
|
|
94
|
+
- Positioning: `fixed`, `top-4`, `bottom-4`, `left-4`, `right-4`, etc.
|
|
95
|
+
- Layout: `flex`, `items-center`, `justify-between`, etc.
|
|
96
|
+
- Spacing: `p-4`, `m-4`, `space-x-2`, etc.
|
|
97
|
+
- Visual: `shadow-lg`, `rounded-lg`, `bg-white`, etc.
|
|
98
|
+
- Colors: `bg-red-500`, `bg-blue-500`, `bg-green-500`, `bg-yellow-500`, etc.
|
|
99
|
+
- Transitions: `transform`, `transition`, `duration-300`, etc.
|
|
100
|
+
|
|
101
|
+
## Customization
|
|
102
|
+
|
|
103
|
+
To customize the appearance of the notifications, you can modify the Tailwind CSS classes in the component or extend the Tailwind configuration to include your project's design tokens.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type PaginationVariant = 'centered' | 'simple';
|
|
2
|
+
export type PaginationResultLabel = 'items' | 'results';
|
|
3
|
+
export interface PaginationProps {
|
|
4
|
+
readonly className?: string;
|
|
5
|
+
readonly currentPage: number;
|
|
6
|
+
readonly pageSize?: number;
|
|
7
|
+
readonly nextLabel?: string;
|
|
8
|
+
readonly onPageChange?: (page: number) => void;
|
|
9
|
+
readonly pageLabel?: (page: number) => string;
|
|
10
|
+
readonly previousLabel?: string;
|
|
11
|
+
readonly resultLabel?: PaginationResultLabel;
|
|
12
|
+
readonly showLabels?: boolean;
|
|
13
|
+
readonly siblingCount?: number;
|
|
14
|
+
readonly totalItems?: number;
|
|
15
|
+
readonly totalPages: number;
|
|
16
|
+
readonly variant?: PaginationVariant;
|
|
17
|
+
}
|
|
18
|
+
export declare const Pagination: ({ className, currentPage, pageSize, nextLabel, onPageChange, pageLabel, previousLabel, resultLabel, showLabels, siblingCount, totalItems, totalPages, variant }: PaginationProps) => import("react").JSX.Element | null;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@nlabs/utils';
|
|
3
|
+
import { ChevronLeft } from 'lucide-react';
|
|
4
|
+
const clampPage = (page, totalPages)=>Math.min(Math.max(page, 1), Math.max(totalPages, 1));
|
|
5
|
+
const createRange = (start, end)=>Array.from({
|
|
6
|
+
length: end - start + 1
|
|
7
|
+
}, (_, index)=>start + index);
|
|
8
|
+
const getPaginationItems = (currentPage, totalPages, siblingCount)=>{
|
|
9
|
+
if (totalPages <= 0) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const safeCurrentPage = clampPage(currentPage, totalPages);
|
|
13
|
+
const totalPageNumbers = siblingCount + 5;
|
|
14
|
+
if (totalPages <= totalPageNumbers) {
|
|
15
|
+
return createRange(1, totalPages).map((page)=>({
|
|
16
|
+
page,
|
|
17
|
+
type: 'page'
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
const leftSiblingIndex = Math.max(safeCurrentPage - siblingCount, 1);
|
|
21
|
+
const rightSiblingIndex = Math.min(safeCurrentPage + siblingCount, totalPages);
|
|
22
|
+
const shouldShowLeftEllipsis = leftSiblingIndex > 2;
|
|
23
|
+
const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;
|
|
24
|
+
if (!shouldShowLeftEllipsis) {
|
|
25
|
+
const leftRange = createRange(1, 3 + siblingCount * 2);
|
|
26
|
+
return [
|
|
27
|
+
...leftRange.map((page)=>({
|
|
28
|
+
page,
|
|
29
|
+
type: 'page'
|
|
30
|
+
})),
|
|
31
|
+
{
|
|
32
|
+
id: 'ellipsis-right',
|
|
33
|
+
type: 'ellipsis'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
page: totalPages,
|
|
37
|
+
type: 'page'
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
if (!shouldShowRightEllipsis) {
|
|
42
|
+
const rightRange = createRange(totalPages - (2 + siblingCount * 2), totalPages);
|
|
43
|
+
return [
|
|
44
|
+
{
|
|
45
|
+
page: 1,
|
|
46
|
+
type: 'page'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'ellipsis-left',
|
|
50
|
+
type: 'ellipsis'
|
|
51
|
+
},
|
|
52
|
+
...rightRange.map((page)=>({
|
|
53
|
+
page,
|
|
54
|
+
type: 'page'
|
|
55
|
+
}))
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
const middleRange = createRange(leftSiblingIndex, rightSiblingIndex);
|
|
59
|
+
return [
|
|
60
|
+
{
|
|
61
|
+
page: 1,
|
|
62
|
+
type: 'page'
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'ellipsis-left',
|
|
66
|
+
type: 'ellipsis'
|
|
67
|
+
},
|
|
68
|
+
...middleRange.map((page)=>({
|
|
69
|
+
page,
|
|
70
|
+
type: 'page'
|
|
71
|
+
})),
|
|
72
|
+
{
|
|
73
|
+
id: 'ellipsis-right',
|
|
74
|
+
type: 'ellipsis'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
page: totalPages,
|
|
78
|
+
type: 'page'
|
|
79
|
+
}
|
|
80
|
+
];
|
|
81
|
+
};
|
|
82
|
+
const buttonBaseClasses = [
|
|
83
|
+
'inline-flex',
|
|
84
|
+
'items-center',
|
|
85
|
+
'text-sm',
|
|
86
|
+
'font-medium',
|
|
87
|
+
'transition-colors',
|
|
88
|
+
'disabled:pointer-events-none',
|
|
89
|
+
'disabled:opacity-50'
|
|
90
|
+
].join(' ');
|
|
91
|
+
const PaginationButton = ({ children, className, ...props })=>/*#__PURE__*/ _jsx("button", {
|
|
92
|
+
className: cn(buttonBaseClasses, className),
|
|
93
|
+
type: "button",
|
|
94
|
+
...props,
|
|
95
|
+
children: children
|
|
96
|
+
});
|
|
97
|
+
export const Pagination = ({ className, currentPage, pageSize = 10, nextLabel = 'Next', onPageChange, pageLabel = (page)=>page.toString(), previousLabel = 'Previous', resultLabel = 'results', showLabels = true, siblingCount = 1, totalItems, totalPages, variant = 'simple' })=>{
|
|
98
|
+
const safeCurrentPage = clampPage(currentPage, totalPages);
|
|
99
|
+
const safeTotalItems = totalItems ?? totalPages * pageSize;
|
|
100
|
+
const rangeStart = safeTotalItems === 0 ? 0 : (safeCurrentPage - 1) * pageSize + 1;
|
|
101
|
+
const rangeEnd = Math.min(safeCurrentPage * pageSize, safeTotalItems);
|
|
102
|
+
const isPreviousDisabled = safeCurrentPage <= 1;
|
|
103
|
+
const isNextDisabled = safeCurrentPage >= totalPages;
|
|
104
|
+
const handlePageChange = (page)=>{
|
|
105
|
+
if (page === safeCurrentPage || page < 1 || page > totalPages) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
onPageChange?.(page);
|
|
109
|
+
};
|
|
110
|
+
if (totalPages <= 1) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
if (variant === 'centered') {
|
|
114
|
+
return /*#__PURE__*/ _jsxs("nav", {
|
|
115
|
+
"aria-label": "Pagination",
|
|
116
|
+
className: cn('flex items-center justify-between border-t border-gray-200 px-4 sm:px-0 dark:border-white/10', className),
|
|
117
|
+
children: [
|
|
118
|
+
/*#__PURE__*/ _jsx("div", {
|
|
119
|
+
className: "-mt-px flex w-0 flex-1",
|
|
120
|
+
children: /*#__PURE__*/ _jsxs(PaginationButton, {
|
|
121
|
+
"aria-label": previousLabel,
|
|
122
|
+
className: "border-t-2 border-transparent pt-4 pr-1 text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200",
|
|
123
|
+
disabled: isPreviousDisabled,
|
|
124
|
+
onClick: ()=>handlePageChange(safeCurrentPage - 1),
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ _jsx(ChevronLeft, {
|
|
127
|
+
"aria-hidden": "true",
|
|
128
|
+
className: "mr-3 size-5 text-gray-400 dark:text-gray-500"
|
|
129
|
+
}),
|
|
130
|
+
showLabels ? previousLabel : /*#__PURE__*/ _jsx("span", {
|
|
131
|
+
className: "sr-only",
|
|
132
|
+
children: previousLabel
|
|
133
|
+
})
|
|
134
|
+
]
|
|
135
|
+
})
|
|
136
|
+
}),
|
|
137
|
+
/*#__PURE__*/ _jsx("div", {
|
|
138
|
+
className: "hidden md:-mt-px md:flex",
|
|
139
|
+
children: getPaginationItems(safeCurrentPage, totalPages, siblingCount).map((item)=>item.type === 'ellipsis' ? /*#__PURE__*/ _jsx("span", {
|
|
140
|
+
className: "inline-flex items-center border-t-2 border-transparent px-4 pt-4 text-sm font-medium text-gray-500 dark:text-gray-400",
|
|
141
|
+
children: "..."
|
|
142
|
+
}, item.id) : /*#__PURE__*/ _jsx(PaginationButton, {
|
|
143
|
+
"aria-current": item.page === safeCurrentPage ? 'page' : undefined,
|
|
144
|
+
"aria-label": pageLabel(item.page),
|
|
145
|
+
className: cn('border-t-2 px-4 pt-4', item.page === safeCurrentPage ? 'border-indigo-500 text-indigo-600 dark:border-indigo-400 dark:text-indigo-400' : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200'),
|
|
146
|
+
onClick: ()=>handlePageChange(item.page),
|
|
147
|
+
children: item.page
|
|
148
|
+
}, item.page))
|
|
149
|
+
}),
|
|
150
|
+
/*#__PURE__*/ _jsx("div", {
|
|
151
|
+
className: "-mt-px flex w-0 flex-1 justify-end",
|
|
152
|
+
children: /*#__PURE__*/ _jsxs(PaginationButton, {
|
|
153
|
+
"aria-label": nextLabel,
|
|
154
|
+
className: "border-t-2 border-transparent pt-4 pl-1 text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-white/20 dark:hover:text-gray-200",
|
|
155
|
+
disabled: isNextDisabled,
|
|
156
|
+
onClick: ()=>handlePageChange(safeCurrentPage + 1),
|
|
157
|
+
children: [
|
|
158
|
+
showLabels ? nextLabel : /*#__PURE__*/ _jsx("span", {
|
|
159
|
+
className: "sr-only",
|
|
160
|
+
children: nextLabel
|
|
161
|
+
}),
|
|
162
|
+
/*#__PURE__*/ _jsx(ChevronLeft, {
|
|
163
|
+
"aria-hidden": "true",
|
|
164
|
+
className: "ml-3 size-5 rotate-180 text-gray-400 dark:text-gray-500"
|
|
165
|
+
})
|
|
166
|
+
]
|
|
167
|
+
})
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return /*#__PURE__*/ _jsxs("nav", {
|
|
173
|
+
"aria-label": "Pagination",
|
|
174
|
+
className: cn('flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 dark:border-white/10 dark:bg-transparent', className),
|
|
175
|
+
children: [
|
|
176
|
+
/*#__PURE__*/ _jsx("div", {
|
|
177
|
+
className: "hidden sm:block",
|
|
178
|
+
children: /*#__PURE__*/ _jsxs("p", {
|
|
179
|
+
className: "text-sm text-gray-700 dark:text-gray-300",
|
|
180
|
+
children: [
|
|
181
|
+
"Showing ",
|
|
182
|
+
/*#__PURE__*/ _jsx("span", {
|
|
183
|
+
className: "font-medium",
|
|
184
|
+
children: rangeStart
|
|
185
|
+
}),
|
|
186
|
+
" to ",
|
|
187
|
+
/*#__PURE__*/ _jsx("span", {
|
|
188
|
+
className: "font-medium",
|
|
189
|
+
children: rangeEnd
|
|
190
|
+
}),
|
|
191
|
+
" of",
|
|
192
|
+
' ',
|
|
193
|
+
/*#__PURE__*/ _jsx("span", {
|
|
194
|
+
className: "font-medium",
|
|
195
|
+
children: safeTotalItems
|
|
196
|
+
}),
|
|
197
|
+
" ",
|
|
198
|
+
resultLabel
|
|
199
|
+
]
|
|
200
|
+
})
|
|
201
|
+
}),
|
|
202
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
203
|
+
className: "flex flex-1 justify-between sm:justify-end",
|
|
204
|
+
children: [
|
|
205
|
+
/*#__PURE__*/ _jsx(PaginationButton, {
|
|
206
|
+
"aria-label": previousLabel,
|
|
207
|
+
className: "relative rounded-md bg-white px-3 py-2 font-semibold text-gray-700 inset-ring inset-ring-gray-300 hover:bg-gray-50 dark:bg-white/10 dark:text-gray-200 dark:inset-ring-white/5 dark:hover:bg-white/20",
|
|
208
|
+
disabled: isPreviousDisabled,
|
|
209
|
+
onClick: ()=>handlePageChange(safeCurrentPage - 1),
|
|
210
|
+
children: previousLabel
|
|
211
|
+
}),
|
|
212
|
+
/*#__PURE__*/ _jsx(PaginationButton, {
|
|
213
|
+
"aria-label": nextLabel,
|
|
214
|
+
className: "relative ml-3 rounded-md bg-white px-3 py-2 font-semibold text-gray-700 inset-ring inset-ring-gray-300 hover:bg-gray-50 dark:bg-white/10 dark:text-gray-200 dark:inset-ring-white/5 dark:hover:bg-white/20",
|
|
215
|
+
disabled: isNextDisabled,
|
|
216
|
+
onClick: ()=>handlePageChange(safeCurrentPage + 1),
|
|
217
|
+
children: nextLabel
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
})
|
|
221
|
+
]
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7Q2hldnJvbkxlZnR9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5cbmltcG9ydCB0eXBlIHtCdXR0b25IVE1MQXR0cmlidXRlcywgUmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25WYXJpYW50ID0gJ2NlbnRlcmVkJyB8ICdzaW1wbGUnO1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblJlc3VsdExhYmVsID0gJ2l0ZW1zJyB8ICdyZXN1bHRzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUHJvcHMge1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHBhZ2VTaXplPzogbnVtYmVyO1xuICByZWFkb25seSBuZXh0TGFiZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9uUGFnZUNoYW5nZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHBhZ2VMYWJlbD86IChwYWdlOiBudW1iZXIpID0+IHN0cmluZztcbiAgcmVhZG9ubHkgcHJldmlvdXNMYWJlbD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzdWx0TGFiZWw/OiBQYWdpbmF0aW9uUmVzdWx0TGFiZWw7XG4gIHJlYWRvbmx5IHNob3dMYWJlbHM/OiBib29sZWFuO1xuICByZWFkb25seSBzaWJsaW5nQ291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvdGFsSXRlbXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdmFyaWFudD86IFBhZ2luYXRpb25WYXJpYW50O1xufVxuXG5jb25zdCBjbGFtcFBhZ2UgPSAocGFnZTogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIpID0+IE1hdGgubWluKE1hdGgubWF4KHBhZ2UsIDEpLCBNYXRoLm1heCh0b3RhbFBhZ2VzLCAxKSk7XG5cbmNvbnN0IGNyZWF0ZVJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PlxuICBBcnJheS5mcm9tKHtsZW5ndGg6IGVuZCAtIHN0YXJ0ICsgMX0sIChfLCBpbmRleCkgPT4gc3RhcnQgKyBpbmRleCk7XG5cbmNvbnN0IGdldFBhZ2luYXRpb25JdGVtcyA9IChjdXJyZW50UGFnZTogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIsIHNpYmxpbmdDb3VudDogbnVtYmVyKSA9PiB7XG4gIGlmKHRvdGFsUGFnZXMgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHNhZmVDdXJyZW50UGFnZSA9IGNsYW1wUGFnZShjdXJyZW50UGFnZSwgdG90YWxQYWdlcyk7XG4gIGNvbnN0IHRvdGFsUGFnZU51bWJlcnMgPSBzaWJsaW5nQ291bnQgKyA1O1xuXG4gIGlmKHRvdGFsUGFnZXMgPD0gdG90YWxQYWdlTnVtYmVycykge1xuICAgIHJldHVybiBjcmVhdGVSYW5nZSgxLCB0b3RhbFBhZ2VzKS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpO1xuICB9XG5cbiAgY29uc3QgbGVmdFNpYmxpbmdJbmRleCA9IE1hdGgubWF4KHNhZmVDdXJyZW50UGFnZSAtIHNpYmxpbmdDb3VudCwgMSk7XG4gIGNvbnN0IHJpZ2h0U2libGluZ0luZGV4ID0gTWF0aC5taW4oc2FmZUN1cnJlbnRQYWdlICsgc2libGluZ0NvdW50LCB0b3RhbFBhZ2VzKTtcbiAgY29uc3Qgc2hvdWxkU2hvd0xlZnRFbGxpcHNpcyA9IGxlZnRTaWJsaW5nSW5kZXggPiAyO1xuICBjb25zdCBzaG91bGRTaG93UmlnaHRFbGxpcHNpcyA9IHJpZ2h0U2libGluZ0luZGV4IDwgdG90YWxQYWdlcyAtIDE7XG5cbiAgaWYoIXNob3VsZFNob3dMZWZ0RWxsaXBzaXMpIHtcbiAgICBjb25zdCBsZWZ0UmFuZ2UgPSBjcmVhdGVSYW5nZSgxLCAzICsgc2libGluZ0NvdW50ICogMik7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmxlZnRSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpLFxuICAgICAge2lkOiAnZWxsaXBzaXMtcmlnaHQnLCB0eXBlOiAnZWxsaXBzaXMnfSBhcyBjb25zdCxcbiAgICAgIHtwYWdlOiB0b3RhbFBhZ2VzLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0XG4gICAgXTtcbiAgfVxuXG4gIGlmKCFzaG91bGRTaG93UmlnaHRFbGxpcHNpcykge1xuICAgIGNvbnN0IHJpZ2h0UmFuZ2UgPSBjcmVhdGVSYW5nZSh0b3RhbFBhZ2VzIC0gKDIgKyBzaWJsaW5nQ291bnQgKiAyKSwgdG90YWxQYWdlcyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtwYWdlOiAxLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0LFxuICAgICAge2lkOiAnZWxsaXBzaXMtbGVmdCcsIHR5cGU6ICdlbGxpcHNpcyd9IGFzIGNvbnN0LFxuICAgICAgLi4ucmlnaHRSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0IG1pZGRsZVJhbmdlID0gY3JlYXRlUmFuZ2UobGVmdFNpYmxpbmdJbmRleCwgcmlnaHRTaWJsaW5nSW5kZXgpO1xuICByZXR1cm4gW1xuICAgIHtwYWdlOiAxLCB0eXBlOiAncGFnZSd9IGFzIGNvbnN0LFxuICAgIHtpZDogJ2VsbGlwc2lzLWxlZnQnLCB0eXBlOiAnZWxsaXBzaXMnfSBhcyBjb25zdCxcbiAgICAuLi5taWRkbGVSYW5nZS5tYXAoKHBhZ2UpID0+ICh7cGFnZSwgdHlwZTogJ3BhZ2UnfSBhcyBjb25zdCkpLFxuICAgIHtpZDogJ2VsbGlwc2lzLXJpZ2h0JywgdHlwZTogJ2VsbGlwc2lzJ30gYXMgY29uc3QsXG4gICAge3BhZ2U6IHRvdGFsUGFnZXMsIHR5cGU6ICdwYWdlJ30gYXMgY29uc3RcbiAgXTtcbn07XG5cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gW1xuICAnaW5saW5lLWZsZXgnLFxuICAnaXRlbXMtY2VudGVyJyxcbiAgJ3RleHQtc20nLFxuICAnZm9udC1tZWRpdW0nLFxuICAndHJhbnNpdGlvbi1jb2xvcnMnLFxuICAnZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZScsXG4gICdkaXNhYmxlZDpvcGFjaXR5LTUwJ1xuXS5qb2luKCcgJyk7XG5cbmNvbnN0IFBhZ2luYXRpb25CdXR0b24gPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+ICYge3JlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdE5vZGV9KSA9PiAoXG4gIDxidXR0b25cbiAgICBjbGFzc05hbWU9e2NuKGJ1dHRvbkJhc2VDbGFzc2VzLCBjbGFzc05hbWUpfVxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHsuLi5wcm9wc31cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9idXR0b24+XG4pO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvbiA9ICh7XG4gIGNsYXNzTmFtZSxcbiAgY3VycmVudFBhZ2UsXG4gIHBhZ2VTaXplID0gMTAsXG4gIG5leHRMYWJlbCA9ICdOZXh0JyxcbiAgb25QYWdlQ2hhbmdlLFxuICBwYWdlTGFiZWwgPSAocGFnZSkgPT4gcGFnZS50b1N0cmluZygpLFxuICBwcmV2aW91c0xhYmVsID0gJ1ByZXZpb3VzJyxcbiAgcmVzdWx0TGFiZWwgPSAncmVzdWx0cycsXG4gIHNob3dMYWJlbHMgPSB0cnVlLFxuICBzaWJsaW5nQ291bnQgPSAxLFxuICB0b3RhbEl0ZW1zLFxuICB0b3RhbFBhZ2VzLFxuICB2YXJpYW50ID0gJ3NpbXBsZSdcbn06IFBhZ2luYXRpb25Qcm9wcykgPT4ge1xuICBjb25zdCBzYWZlQ3VycmVudFBhZ2UgPSBjbGFtcFBhZ2UoY3VycmVudFBhZ2UsIHRvdGFsUGFnZXMpO1xuICBjb25zdCBzYWZlVG90YWxJdGVtcyA9IHRvdGFsSXRlbXMgPz8gdG90YWxQYWdlcyAqIHBhZ2VTaXplO1xuICBjb25zdCByYW5nZVN0YXJ0ID0gc2FmZVRvdGFsSXRlbXMgPT09IDAgPyAwIDogKHNhZmVDdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemUgKyAxO1xuICBjb25zdCByYW5nZUVuZCA9IE1hdGgubWluKHNhZmVDdXJyZW50UGFnZSAqIHBhZ2VTaXplLCBzYWZlVG90YWxJdGVtcyk7XG4gIGNvbnN0IGlzUHJldmlvdXNEaXNhYmxlZCA9IHNhZmVDdXJyZW50UGFnZSA8PSAxO1xuICBjb25zdCBpc05leHREaXNhYmxlZCA9IHNhZmVDdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzO1xuXG4gIGNvbnN0IGhhbmRsZVBhZ2VDaGFuZ2UgPSAocGFnZTogbnVtYmVyKSA9PiB7XG4gICAgaWYocGFnZSA9PT0gc2FmZUN1cnJlbnRQYWdlIHx8IHBhZ2UgPCAxIHx8IHBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlPy4ocGFnZSk7XG4gIH07XG5cbiAgaWYodG90YWxQYWdlcyA8PSAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZih2YXJpYW50ID09PSAnY2VudGVyZWQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxuYXZcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB4LTQgc206cHgtMCBkYXJrOmJvcmRlci13aGl0ZS8xMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LXB4IGZsZXggdy0wIGZsZXgtMVwiPlxuICAgICAgICAgIDxQYWdpbmF0aW9uQnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtwcmV2aW91c0xhYmVsfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHQtNCBwci0xIHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNQcmV2aW91c0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShzYWZlQ3VycmVudFBhZ2UgLSAxKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkxlZnQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwibXItMyBzaXplLTUgdGV4dC1ncmF5LTQwMCBkYXJrOnRleHQtZ3JheS01MDBcIiAvPlxuICAgICAgICAgICAge3Nob3dMYWJlbHMgPyBwcmV2aW91c0xhYmVsIDogPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntwcmV2aW91c0xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDotbXQtcHggbWQ6ZmxleFwiPlxuICAgICAgICAgIHtnZXRQYWdpbmF0aW9uSXRlbXMoc2FmZUN1cnJlbnRQYWdlLCB0b3RhbFBhZ2VzLCBzaWJsaW5nQ291bnQpLm1hcCgoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZWxsaXBzaXMnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHgtNCBwdC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBhZ2luYXRpb25CdXR0b25cbiAgICAgICAgICAgICAga2V5PXtpdGVtLnBhZ2V9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXRlbS5wYWdlID09PSBzYWZlQ3VycmVudFBhZ2UgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhZ2VMYWJlbChpdGVtLnBhZ2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdib3JkZXItdC0yIHB4LTQgcHQtNCcsXG4gICAgICAgICAgICAgICAgaXRlbS5wYWdlID09PSBzYWZlQ3VycmVudFBhZ2VcbiAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1pbmRpZ28tNTAwIHRleHQtaW5kaWdvLTYwMCBkYXJrOmJvcmRlci1pbmRpZ28tNDAwIGRhcms6dGV4dC1pbmRpZ28tNDAwJ1xuICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShpdGVtLnBhZ2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbS5wYWdlfVxuICAgICAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC1weCBmbGV4IHctMCBmbGV4LTEganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICA8UGFnaW5hdGlvbkJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bmV4dExhYmVsfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQtMiBib3JkZXItdHJhbnNwYXJlbnQgcHQtNCBwbC0xIHRleHQtZ3JheS01MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIGhvdmVyOnRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGRhcms6aG92ZXI6dGV4dC1ncmF5LTIwMFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNOZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQYWdlQ2hhbmdlKHNhZmVDdXJyZW50UGFnZSArIDEpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzaG93TGFiZWxzID8gbmV4dExhYmVsIDogPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntuZXh0TGFiZWx9PC9zcGFuPn1cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJtbC0zIHNpemUtNSByb3RhdGUtMTgwIHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwXCIgLz5cbiAgICAgICAgICA8L1BhZ2luYXRpb25CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uYXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG5hdlxuICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcHgtNCBweS0zIHNtOnB4LTYgZGFyazpib3JkZXItd2hpdGUvMTAgZGFyazpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBzbTpibG9ja1wiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwXCI+XG4gICAgICAgICAgU2hvd2luZyA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntyYW5nZVN0YXJ0fTwvc3Bhbj4gdG8gPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57cmFuZ2VFbmR9PC9zcGFuPiBvZnsnICd9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57c2FmZVRvdGFsSXRlbXN9PC9zcGFuPiB7cmVzdWx0TGFiZWx9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGp1c3RpZnktYmV0d2VlbiBzbTpqdXN0aWZ5LWVuZFwiPlxuICAgICAgICA8UGFnaW5hdGlvbkJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9e3ByZXZpb3VzTGFiZWx9XG4gICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgcm91bmRlZC1tZCBiZy13aGl0ZSBweC0zIHB5LTIgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIGluc2V0LXJpbmcgaW5zZXQtcmluZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTUwIGRhcms6Ymctd2hpdGUvMTAgZGFyazp0ZXh0LWdyYXktMjAwIGRhcms6aW5zZXQtcmluZy13aGl0ZS81IGRhcms6aG92ZXI6Ymctd2hpdGUvMjBcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc1ByZXZpb3VzRGlzYWJsZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShzYWZlQ3VycmVudFBhZ2UgLSAxKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtwcmV2aW91c0xhYmVsfVxuICAgICAgICA8L1BhZ2luYXRpb25CdXR0b24+XG4gICAgICAgIDxQYWdpbmF0aW9uQnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD17bmV4dExhYmVsfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG1sLTMgcm91bmRlZC1tZCBiZy13aGl0ZSBweC0zIHB5LTIgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIGluc2V0LXJpbmcgaW5zZXQtcmluZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTUwIGRhcms6Ymctd2hpdGUvMTAgZGFyazp0ZXh0LWdyYXktMjAwIGRhcms6aW5zZXQtcmluZy13aGl0ZS81IGRhcms6aG92ZXI6Ymctd2hpdGUvMjBcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc05leHREaXNhYmxlZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQYWdlQ2hhbmdlKHNhZmVDdXJyZW50UGFnZSArIDEpfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRMYWJlbH1cbiAgICAgICAgPC9QYWdpbmF0aW9uQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbImNuIiwiQ2hldnJvbkxlZnQiLCJjbGFtcFBhZ2UiLCJwYWdlIiwidG90YWxQYWdlcyIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjcmVhdGVSYW5nZSIsInN0YXJ0IiwiZW5kIiwiQXJyYXkiLCJmcm9tIiwibGVuZ3RoIiwiXyIsImluZGV4IiwiZ2V0UGFnaW5hdGlvbkl0ZW1zIiwiY3VycmVudFBhZ2UiLCJzaWJsaW5nQ291bnQiLCJzYWZlQ3VycmVudFBhZ2UiLCJ0b3RhbFBhZ2VOdW1iZXJzIiwibWFwIiwidHlwZSIsImxlZnRTaWJsaW5nSW5kZXgiLCJyaWdodFNpYmxpbmdJbmRleCIsInNob3VsZFNob3dMZWZ0RWxsaXBzaXMiLCJzaG91bGRTaG93UmlnaHRFbGxpcHNpcyIsImxlZnRSYW5nZSIsImlkIiwicmlnaHRSYW5nZSIsIm1pZGRsZVJhbmdlIiwiYnV0dG9uQmFzZUNsYXNzZXMiLCJqb2luIiwiUGFnaW5hdGlvbkJ1dHRvbiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJidXR0b24iLCJQYWdpbmF0aW9uIiwicGFnZVNpemUiLCJuZXh0TGFiZWwiLCJvblBhZ2VDaGFuZ2UiLCJwYWdlTGFiZWwiLCJ0b1N0cmluZyIsInByZXZpb3VzTGFiZWwiLCJyZXN1bHRMYWJlbCIsInNob3dMYWJlbHMiLCJ0b3RhbEl0ZW1zIiwidmFyaWFudCIsInNhZmVUb3RhbEl0ZW1zIiwicmFuZ2VTdGFydCIsInJhbmdlRW5kIiwiaXNQcmV2aW91c0Rpc2FibGVkIiwiaXNOZXh0RGlzYWJsZWQiLCJoYW5kbGVQYWdlQ2hhbmdlIiwibmF2IiwiYXJpYS1sYWJlbCIsImRpdiIsImRpc2FibGVkIiwib25DbGljayIsImFyaWEtaGlkZGVuIiwic3BhbiIsIml0ZW0iLCJhcmlhLWN1cnJlbnQiLCJ1bmRlZmluZWQiLCJwIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsRUFBRSxRQUFPLGVBQWU7QUFDaEMsU0FBUUMsV0FBVyxRQUFPLGVBQWU7QUF1QnpDLE1BQU1DLFlBQVksQ0FBQ0MsTUFBY0MsYUFBdUJDLEtBQUtDLEdBQUcsQ0FBQ0QsS0FBS0UsR0FBRyxDQUFDSixNQUFNLElBQUlFLEtBQUtFLEdBQUcsQ0FBQ0gsWUFBWTtBQUV6RyxNQUFNSSxjQUFjLENBQUNDLE9BQWVDLE1BQ2xDQyxNQUFNQyxJQUFJLENBQUM7UUFBQ0MsUUFBUUgsTUFBTUQsUUFBUTtJQUFDLEdBQUcsQ0FBQ0ssR0FBR0MsUUFBVU4sUUFBUU07QUFFOUQsTUFBTUMscUJBQXFCLENBQUNDLGFBQXFCYixZQUFvQmM7SUFDbkUsSUFBR2QsY0FBYyxHQUFHO1FBQ2xCLE9BQU8sRUFBRTtJQUNYO0lBRUEsTUFBTWUsa0JBQWtCakIsVUFBVWUsYUFBYWI7SUFDL0MsTUFBTWdCLG1CQUFtQkYsZUFBZTtJQUV4QyxJQUFHZCxjQUFjZ0Isa0JBQWtCO1FBQ2pDLE9BQU9aLFlBQVksR0FBR0osWUFBWWlCLEdBQUcsQ0FBQyxDQUFDbEIsT0FBVSxDQUFBO2dCQUFDQTtnQkFBTW1CLE1BQU07WUFBTSxDQUFBO0lBQ3RFO0lBRUEsTUFBTUMsbUJBQW1CbEIsS0FBS0UsR0FBRyxDQUFDWSxrQkFBa0JELGNBQWM7SUFDbEUsTUFBTU0sb0JBQW9CbkIsS0FBS0MsR0FBRyxDQUFDYSxrQkFBa0JELGNBQWNkO0lBQ25FLE1BQU1xQix5QkFBeUJGLG1CQUFtQjtJQUNsRCxNQUFNRywwQkFBMEJGLG9CQUFvQnBCLGFBQWE7SUFFakUsSUFBRyxDQUFDcUIsd0JBQXdCO1FBQzFCLE1BQU1FLFlBQVluQixZQUFZLEdBQUcsSUFBSVUsZUFBZTtRQUNwRCxPQUFPO2VBQ0ZTLFVBQVVOLEdBQUcsQ0FBQyxDQUFDbEIsT0FBVSxDQUFBO29CQUFDQTtvQkFBTW1CLE1BQU07Z0JBQU0sQ0FBQTtZQUMvQztnQkFBQ00sSUFBSTtnQkFBa0JOLE1BQU07WUFBVTtZQUN2QztnQkFBQ25CLE1BQU1DO2dCQUFZa0IsTUFBTTtZQUFNO1NBQ2hDO0lBQ0g7SUFFQSxJQUFHLENBQUNJLHlCQUF5QjtRQUMzQixNQUFNRyxhQUFhckIsWUFBWUosYUFBYyxDQUFBLElBQUljLGVBQWUsQ0FBQSxHQUFJZDtRQUNwRSxPQUFPO1lBQ0w7Z0JBQUNELE1BQU07Z0JBQUdtQixNQUFNO1lBQU07WUFDdEI7Z0JBQUNNLElBQUk7Z0JBQWlCTixNQUFNO1lBQVU7ZUFDbkNPLFdBQVdSLEdBQUcsQ0FBQyxDQUFDbEIsT0FBVSxDQUFBO29CQUFDQTtvQkFBTW1CLE1BQU07Z0JBQU0sQ0FBQTtTQUNqRDtJQUNIO0lBRUEsTUFBTVEsY0FBY3RCLFlBQVllLGtCQUFrQkM7SUFDbEQsT0FBTztRQUNMO1lBQUNyQixNQUFNO1lBQUdtQixNQUFNO1FBQU07UUFDdEI7WUFBQ00sSUFBSTtZQUFpQk4sTUFBTTtRQUFVO1dBQ25DUSxZQUFZVCxHQUFHLENBQUMsQ0FBQ2xCLE9BQVUsQ0FBQTtnQkFBQ0E7Z0JBQU1tQixNQUFNO1lBQU0sQ0FBQTtRQUNqRDtZQUFDTSxJQUFJO1lBQWtCTixNQUFNO1FBQVU7UUFDdkM7WUFBQ25CLE1BQU1DO1lBQVlrQixNQUFNO1FBQU07S0FDaEM7QUFDSDtBQUVBLE1BQU1TLG9CQUFvQjtJQUN4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNELENBQUNDLElBQUksQ0FBQztBQUVQLE1BQU1DLG1CQUFtQixDQUFDLEVBQ3hCQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVCxHQUFHQyxPQUNzRSxpQkFDekUsS0FBQ0M7UUFDQ0YsV0FBV25DLEdBQUcrQixtQkFBbUJJO1FBQ2pDYixNQUFLO1FBQ0osR0FBR2MsS0FBSztrQkFFUkY7O0FBSUwsT0FBTyxNQUFNSSxhQUFhLENBQUMsRUFDekJILFNBQVMsRUFDVGxCLFdBQVcsRUFDWHNCLFdBQVcsRUFBRSxFQUNiQyxZQUFZLE1BQU0sRUFDbEJDLFlBQVksRUFDWkMsWUFBWSxDQUFDdkMsT0FBU0EsS0FBS3dDLFFBQVEsRUFBRSxFQUNyQ0MsZ0JBQWdCLFVBQVUsRUFDMUJDLGNBQWMsU0FBUyxFQUN2QkMsYUFBYSxJQUFJLEVBQ2pCNUIsZUFBZSxDQUFDLEVBQ2hCNkIsVUFBVSxFQUNWM0MsVUFBVSxFQUNWNEMsVUFBVSxRQUFRLEVBQ0Y7SUFDaEIsTUFBTTdCLGtCQUFrQmpCLFVBQVVlLGFBQWFiO0lBQy9DLE1BQU02QyxpQkFBaUJGLGNBQWMzQyxhQUFhbUM7SUFDbEQsTUFBTVcsYUFBYUQsbUJBQW1CLElBQUksSUFBSSxBQUFDOUIsQ0FBQUEsa0JBQWtCLENBQUEsSUFBS29CLFdBQVc7SUFDakYsTUFBTVksV0FBVzlDLEtBQUtDLEdBQUcsQ0FBQ2Esa0JBQWtCb0IsVUFBVVU7SUFDdEQsTUFBTUcscUJBQXFCakMsbUJBQW1CO0lBQzlDLE1BQU1rQyxpQkFBaUJsQyxtQkFBbUJmO0lBRTFDLE1BQU1rRCxtQkFBbUIsQ0FBQ25EO1FBQ3hCLElBQUdBLFNBQVNnQixtQkFBbUJoQixPQUFPLEtBQUtBLE9BQU9DLFlBQVk7WUFDNUQ7UUFDRjtRQUVBcUMsZUFBZXRDO0lBQ2pCO0lBRUEsSUFBR0MsY0FBYyxHQUFHO1FBQ2xCLE9BQU87SUFDVDtJQUVBLElBQUc0QyxZQUFZLFlBQVk7UUFDekIscUJBQ0UsTUFBQ087WUFDQ0MsY0FBVztZQUNYckIsV0FBV25DLEdBQ1QsZ0dBQ0FtQzs7OEJBR0YsS0FBQ3NCO29CQUFJdEIsV0FBVTs4QkFDYixjQUFBLE1BQUNGO3dCQUNDdUIsY0FBWVo7d0JBQ1pULFdBQVU7d0JBQ1Z1QixVQUFVTjt3QkFDVk8sU0FBUyxJQUFNTCxpQkFBaUJuQyxrQkFBa0I7OzBDQUVsRCxLQUFDbEI7Z0NBQVkyRCxlQUFZO2dDQUFPekIsV0FBVTs7NEJBQ3pDVyxhQUFhRiw4QkFBZ0IsS0FBQ2lCO2dDQUFLMUIsV0FBVTswQ0FBV1M7Ozs7OzhCQUk3RCxLQUFDYTtvQkFBSXRCLFdBQVU7OEJBQ1puQixtQkFBbUJHLGlCQUFpQmYsWUFBWWMsY0FBY0csR0FBRyxDQUFDLENBQUN5QyxPQUFTQSxLQUFLeEMsSUFBSSxLQUFLLDJCQUN6RixLQUFDdUM7NEJBRUMxQixXQUFVO3NDQUNYOzJCQUZNMkIsS0FBS2xDLEVBQUUsa0JBTWQsS0FBQ0s7NEJBRUM4QixnQkFBY0QsS0FBSzNELElBQUksS0FBS2dCLGtCQUFrQixTQUFTNkM7NEJBQ3ZEUixjQUFZZCxVQUFVb0IsS0FBSzNELElBQUk7NEJBQy9CZ0MsV0FBV25DLEdBQ1Qsd0JBQ0E4RCxLQUFLM0QsSUFBSSxLQUFLZ0Isa0JBQ1Ysa0ZBQ0E7NEJBRU53QyxTQUFTLElBQU1MLGlCQUFpQlEsS0FBSzNELElBQUk7c0NBRXhDMkQsS0FBSzNELElBQUk7MkJBWEwyRCxLQUFLM0QsSUFBSTs7OEJBZ0JwQixLQUFDc0Q7b0JBQUl0QixXQUFVOzhCQUNiLGNBQUEsTUFBQ0Y7d0JBQ0N1QixjQUFZaEI7d0JBQ1pMLFdBQVU7d0JBQ1Z1QixVQUFVTDt3QkFDVk0sU0FBUyxJQUFNTCxpQkFBaUJuQyxrQkFBa0I7OzRCQUVqRDJCLGFBQWFOLDBCQUFZLEtBQUNxQjtnQ0FBSzFCLFdBQVU7MENBQVdLOzswQ0FDckQsS0FBQ3ZDO2dDQUFZMkQsZUFBWTtnQ0FBT3pCLFdBQVU7Ozs7Ozs7SUFLcEQ7SUFFQSxxQkFDRSxNQUFDb0I7UUFDQ0MsY0FBVztRQUNYckIsV0FBV25DLEdBQ1Qsa0lBQ0FtQzs7MEJBR0YsS0FBQ3NCO2dCQUFJdEIsV0FBVTswQkFDYixjQUFBLE1BQUM4QjtvQkFBRTlCLFdBQVU7O3dCQUEyQztzQ0FDOUMsS0FBQzBCOzRCQUFLMUIsV0FBVTtzQ0FBZWU7O3dCQUFrQjtzQ0FBSSxLQUFDVzs0QkFBSzFCLFdBQVU7c0NBQWVnQjs7d0JBQWdCO3dCQUFJO3NDQUNoSCxLQUFDVTs0QkFBSzFCLFdBQVU7c0NBQWVjOzt3QkFBc0I7d0JBQUVKOzs7OzBCQUkzRCxNQUFDWTtnQkFBSXRCLFdBQVU7O2tDQUNiLEtBQUNGO3dCQUNDdUIsY0FBWVo7d0JBQ1pULFdBQVU7d0JBQ1Z1QixVQUFVTjt3QkFDVk8sU0FBUyxJQUFNTCxpQkFBaUJuQyxrQkFBa0I7a0NBRWpEeUI7O2tDQUVILEtBQUNYO3dCQUNDdUIsY0FBWWhCO3dCQUNaTCxXQUFVO3dCQUNWdUIsVUFBVUw7d0JBQ1ZNLFNBQVMsSUFBTUwsaUJBQWlCbkMsa0JBQWtCO2tDQUVqRHFCOzs7Ozs7QUFLWCxFQUFFIn0=
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Pagination as PaginationComponent } from './Pagination.js';
|
|
4
|
+
import { interactWithCanvas } from '../../utils/storyInteractions.js';
|
|
5
|
+
const PaginationStory = (args)=>{
|
|
6
|
+
const [currentPage, setCurrentPage] = useState(args.currentPage);
|
|
7
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
8
|
+
className: "w-full max-w-4xl bg-white p-6 dark:bg-black-dark",
|
|
9
|
+
children: /*#__PURE__*/ _jsx(PaginationComponent, {
|
|
10
|
+
...args,
|
|
11
|
+
currentPage: currentPage,
|
|
12
|
+
onPageChange: setCurrentPage
|
|
13
|
+
})
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const meta = {
|
|
17
|
+
argTypes: {
|
|
18
|
+
currentPage: {
|
|
19
|
+
control: 'number'
|
|
20
|
+
},
|
|
21
|
+
pageSize: {
|
|
22
|
+
control: 'number'
|
|
23
|
+
},
|
|
24
|
+
siblingCount: {
|
|
25
|
+
control: 'number'
|
|
26
|
+
},
|
|
27
|
+
totalItems: {
|
|
28
|
+
control: 'number'
|
|
29
|
+
},
|
|
30
|
+
totalPages: {
|
|
31
|
+
control: 'number'
|
|
32
|
+
},
|
|
33
|
+
variant: {
|
|
34
|
+
control: 'select',
|
|
35
|
+
options: [
|
|
36
|
+
'centered',
|
|
37
|
+
'simple'
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
component: PaginationComponent,
|
|
42
|
+
parameters: {
|
|
43
|
+
layout: 'centered'
|
|
44
|
+
},
|
|
45
|
+
title: 'Components/Pagination'
|
|
46
|
+
};
|
|
47
|
+
export default meta;
|
|
48
|
+
export const Centered = {
|
|
49
|
+
args: {
|
|
50
|
+
currentPage: 2,
|
|
51
|
+
totalPages: 10,
|
|
52
|
+
variant: 'centered'
|
|
53
|
+
},
|
|
54
|
+
play: interactWithCanvas,
|
|
55
|
+
render: PaginationStory
|
|
56
|
+
};
|
|
57
|
+
export const Simple = {
|
|
58
|
+
args: {
|
|
59
|
+
currentPage: 1,
|
|
60
|
+
pageSize: 10,
|
|
61
|
+
totalItems: 97,
|
|
62
|
+
totalPages: 10,
|
|
63
|
+
variant: 'simple'
|
|
64
|
+
},
|
|
65
|
+
play: interactWithCanvas,
|
|
66
|
+
render: PaginationStory
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi5zdG9yaWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7UGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICcuL1BhZ2luYXRpb24uanMnO1xuaW1wb3J0IHtpbnRlcmFjdFdpdGhDYW52YXN9IGZyb20gJy4uLy4uL3V0aWxzL3N0b3J5SW50ZXJhY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5pbXBvcnQgdHlwZSB7Q29tcG9uZW50UHJvcHN9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUGFnaW5hdGlvblN0b3J5ID0gKGFyZ3M6IENvbXBvbmVudFByb3BzPHR5cGVvZiBQYWdpbmF0aW9uQ29tcG9uZW50PikgPT4ge1xuICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKGFyZ3MuY3VycmVudFBhZ2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctNHhsIGJnLXdoaXRlIHAtNiBkYXJrOmJnLWJsYWNrLWRhcmtcIj5cbiAgICAgIDxQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAgICAgIHsuLi5hcmdzfVxuICAgICAgICBjdXJyZW50UGFnZT17Y3VycmVudFBhZ2V9XG4gICAgICAgIG9uUGFnZUNoYW5nZT17c2V0Q3VycmVudFBhZ2V9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgbWV0YTogTWV0YTx0eXBlb2YgUGFnaW5hdGlvbkNvbXBvbmVudD4gPSB7XG4gIGFyZ1R5cGVzOiB7XG4gICAgY3VycmVudFBhZ2U6IHtcbiAgICAgIGNvbnRyb2w6ICdudW1iZXInXG4gICAgfSxcbiAgICBwYWdlU2l6ZToge1xuICAgICAgY29udHJvbDogJ251bWJlcidcbiAgICB9LFxuICAgIHNpYmxpbmdDb3VudDoge1xuICAgICAgY29udHJvbDogJ251bWJlcidcbiAgICB9LFxuICAgIHRvdGFsSXRlbXM6IHtcbiAgICAgIGNvbnRyb2w6ICdudW1iZXInXG4gICAgfSxcbiAgICB0b3RhbFBhZ2VzOiB7XG4gICAgICBjb250cm9sOiAnbnVtYmVyJ1xuICAgIH0sXG4gICAgdmFyaWFudDoge1xuICAgICAgY29udHJvbDogJ3NlbGVjdCcsXG4gICAgICBvcHRpb25zOiBbJ2NlbnRlcmVkJywgJ3NpbXBsZSddXG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IFBhZ2luYXRpb25Db21wb25lbnQsXG4gIHBhcmFtZXRlcnM6IHtcbiAgICBsYXlvdXQ6ICdjZW50ZXJlZCdcbiAgfSxcbiAgdGl0bGU6ICdDb21wb25lbnRzL1BhZ2luYXRpb24nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXRhO1xuXG50eXBlIFN0b3J5ID0gU3RvcnlPYmo8dHlwZW9mIFBhZ2luYXRpb25Db21wb25lbnQ+O1xuXG5leHBvcnQgY29uc3QgQ2VudGVyZWQ6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgY3VycmVudFBhZ2U6IDIsXG4gICAgdG90YWxQYWdlczogMTAsXG4gICAgdmFyaWFudDogJ2NlbnRlcmVkJ1xuICB9LFxuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXMsXG4gIHJlbmRlcjogUGFnaW5hdGlvblN0b3J5XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlOiBTdG9yeSA9IHtcbiAgYXJnczoge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VTaXplOiAxMCxcbiAgICB0b3RhbEl0ZW1zOiA5NyxcbiAgICB0b3RhbFBhZ2VzOiAxMCxcbiAgICB2YXJpYW50OiAnc2ltcGxlJ1xuICB9LFxuICBwbGF5OiBpbnRlcmFjdFdpdGhDYW52YXMsXG4gIHJlbmRlcjogUGFnaW5hdGlvblN0b3J5XG59O1xuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwiUGFnaW5hdGlvbiIsIlBhZ2luYXRpb25Db21wb25lbnQiLCJpbnRlcmFjdFdpdGhDYW52YXMiLCJQYWdpbmF0aW9uU3RvcnkiLCJhcmdzIiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsImRpdiIsImNsYXNzTmFtZSIsIm9uUGFnZUNoYW5nZSIsIm1ldGEiLCJhcmdUeXBlcyIsImNvbnRyb2wiLCJwYWdlU2l6ZSIsInNpYmxpbmdDb3VudCIsInRvdGFsSXRlbXMiLCJ0b3RhbFBhZ2VzIiwidmFyaWFudCIsIm9wdGlvbnMiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJDZW50ZXJlZCIsInBsYXkiLCJyZW5kZXIiLCJTaW1wbGUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxRQUFRLFFBQU8sUUFBUTtBQUUvQixTQUFRQyxjQUFjQyxtQkFBbUIsUUFBTyxrQkFBa0I7QUFDbEUsU0FBUUMsa0JBQWtCLFFBQU8sbUNBQW1DO0FBS3BFLE1BQU1DLGtCQUFrQixDQUFDQztJQUN2QixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1AsU0FBU0ssS0FBS0MsV0FBVztJQUUvRCxxQkFDRSxLQUFDRTtRQUFJQyxXQUFVO2tCQUNiLGNBQUEsS0FBQ1A7WUFDRSxHQUFHRyxJQUFJO1lBQ1JDLGFBQWFBO1lBQ2JJLGNBQWNIOzs7QUFJdEI7QUFFQSxNQUFNSSxPQUF5QztJQUM3Q0MsVUFBVTtRQUNSTixhQUFhO1lBQ1hPLFNBQVM7UUFDWDtRQUNBQyxVQUFVO1lBQ1JELFNBQVM7UUFDWDtRQUNBRSxjQUFjO1lBQ1pGLFNBQVM7UUFDWDtRQUNBRyxZQUFZO1lBQ1ZILFNBQVM7UUFDWDtRQUNBSSxZQUFZO1lBQ1ZKLFNBQVM7UUFDWDtRQUNBSyxTQUFTO1lBQ1BMLFNBQVM7WUFDVE0sU0FBUztnQkFBQztnQkFBWTthQUFTO1FBQ2pDO0lBQ0Y7SUFDQUMsV0FBV2xCO0lBQ1htQixZQUFZO1FBQ1ZDLFFBQVE7SUFDVjtJQUNBQyxPQUFPO0FBQ1Q7QUFFQSxlQUFlWixLQUFLO0FBSXBCLE9BQU8sTUFBTWEsV0FBa0I7SUFDN0JuQixNQUFNO1FBQ0pDLGFBQWE7UUFDYlcsWUFBWTtRQUNaQyxTQUFTO0lBQ1g7SUFDQU8sTUFBTXRCO0lBQ051QixRQUFRdEI7QUFDVixFQUFFO0FBRUYsT0FBTyxNQUFNdUIsU0FBZ0I7SUFDM0J0QixNQUFNO1FBQ0pDLGFBQWE7UUFDYlEsVUFBVTtRQUNWRSxZQUFZO1FBQ1pDLFlBQVk7UUFDWkMsU0FBUztJQUNYO0lBQ0FPLE1BQU10QjtJQUNOdUIsUUFBUXRCO0FBQ1YsRUFBRSJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
export type PasswordStrength = {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly score: number;
|
|
5
|
+
};
|
|
6
|
+
export interface PasswordStrengthMeterProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
readonly password: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const getPasswordStrength: (password: string) => PasswordStrength;
|
|
10
|
+
declare const PasswordStrengthMeterComponent: ({ className, password, ...props }: PasswordStrengthMeterProps) => import("react").JSX.Element | null;
|
|
11
|
+
export declare const PasswordStrengthMeter: import("react").MemoExoticComponent<typeof PasswordStrengthMeterComponent>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@nlabs/utils';
|
|
3
|
+
import { memo } from 'react';
|
|
4
|
+
export const getPasswordStrength = (password)=>{
|
|
5
|
+
if (password.length < 8) {
|
|
6
|
+
return {
|
|
7
|
+
label: 'Too short',
|
|
8
|
+
score: 0
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const checks = [
|
|
12
|
+
true,
|
|
13
|
+
/[A-Za-z]/.test(password),
|
|
14
|
+
/\d/.test(password),
|
|
15
|
+
/[^A-Za-z0-9]/.test(password)
|
|
16
|
+
];
|
|
17
|
+
const score = checks.filter(Boolean).length;
|
|
18
|
+
const labels = [
|
|
19
|
+
'Too short',
|
|
20
|
+
'Weak',
|
|
21
|
+
'Fair',
|
|
22
|
+
'Good',
|
|
23
|
+
'Strong'
|
|
24
|
+
];
|
|
25
|
+
return {
|
|
26
|
+
label: labels[score] || 'Strong',
|
|
27
|
+
score
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
const getSegmentClass = (score, segment)=>{
|
|
31
|
+
if (segment > score) {
|
|
32
|
+
return 'bg-muted dark:bg-muted-dark';
|
|
33
|
+
}
|
|
34
|
+
if (score <= 1) {
|
|
35
|
+
return 'bg-red-500';
|
|
36
|
+
}
|
|
37
|
+
if (score === 2) {
|
|
38
|
+
return 'bg-amber-500';
|
|
39
|
+
}
|
|
40
|
+
if (score === 3) {
|
|
41
|
+
return 'bg-primary dark:bg-primary-dark';
|
|
42
|
+
}
|
|
43
|
+
return 'bg-emerald-600';
|
|
44
|
+
};
|
|
45
|
+
const PasswordStrengthMeterComponent = ({ className, password, ...props })=>{
|
|
46
|
+
if (!password) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const strength = getPasswordStrength(password);
|
|
50
|
+
const segments = [
|
|
51
|
+
1,
|
|
52
|
+
2,
|
|
53
|
+
3,
|
|
54
|
+
4
|
|
55
|
+
];
|
|
56
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
57
|
+
"aria-label": `Password strength: ${strength.label}`,
|
|
58
|
+
className: cn('grid gap-1.5', className),
|
|
59
|
+
"data-slot": "password-strength-meter",
|
|
60
|
+
role: "status",
|
|
61
|
+
...props,
|
|
62
|
+
children: [
|
|
63
|
+
/*#__PURE__*/ _jsx("div", {
|
|
64
|
+
"aria-hidden": true,
|
|
65
|
+
className: "grid grid-cols-4 gap-1.5",
|
|
66
|
+
children: segments.map((segment)=>/*#__PURE__*/ _jsx("span", {
|
|
67
|
+
className: cn('h-1.5 rounded-full transition-colors', getSegmentClass(strength.score, segment))
|
|
68
|
+
}, segment))
|
|
69
|
+
}),
|
|
70
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
71
|
+
className: "m-0 flex items-center justify-between text-xs text-muted-foreground dark:text-muted-foreground-dark",
|
|
72
|
+
children: [
|
|
73
|
+
/*#__PURE__*/ _jsx("span", {
|
|
74
|
+
children: "Password strength"
|
|
75
|
+
}),
|
|
76
|
+
/*#__PURE__*/ _jsx("strong", {
|
|
77
|
+
className: "text-foreground dark:text-foreground-dark",
|
|
78
|
+
children: strength.label
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
]
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
export const PasswordStrengthMeter = /*#__PURE__*/ memo(PasswordStrengthMeterComponent);
|
|
86
|
+
PasswordStrengthMeter.displayName = 'PasswordStrengthMeter';
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkU3RyZW5ndGhNZXRlci9QYXNzd29yZFN0cmVuZ3RoTWV0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y259IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge21lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUge0hUTUxBdHRyaWJ1dGVzfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFBhc3N3b3JkU3RyZW5ndGggPSB7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3JlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkU3RyZW5ndGhNZXRlclByb3BzIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkU3RyZW5ndGggPSAocGFzc3dvcmQ6IHN0cmluZyk6IFBhc3N3b3JkU3RyZW5ndGggPT4ge1xuICBpZihwYXNzd29yZC5sZW5ndGggPCA4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiAnVG9vIHNob3J0JyxcbiAgICAgIHNjb3JlOiAwXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNoZWNrcyA9IFtcbiAgICB0cnVlLFxuICAgIC9bQS1aYS16XS8udGVzdChwYXNzd29yZCksXG4gICAgL1xcZC8udGVzdChwYXNzd29yZCksXG4gICAgL1teQS1aYS16MC05XS8udGVzdChwYXNzd29yZClcbiAgXTtcbiAgY29uc3Qgc2NvcmUgPSBjaGVja3MuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgY29uc3QgbGFiZWxzID0gWydUb28gc2hvcnQnLCAnV2VhaycsICdGYWlyJywgJ0dvb2QnLCAnU3Ryb25nJ107XG5cbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogbGFiZWxzW3Njb3JlXSB8fCAnU3Ryb25nJyxcbiAgICBzY29yZVxuICB9O1xufTtcblxuY29uc3QgZ2V0U2VnbWVudENsYXNzID0gKHNjb3JlOiBudW1iZXIsIHNlZ21lbnQ6IG51bWJlcikgPT4ge1xuICBpZihzZWdtZW50ID4gc2NvcmUpIHtcbiAgICByZXR1cm4gJ2JnLW11dGVkIGRhcms6YmctbXV0ZWQtZGFyayc7XG4gIH1cblxuICBpZihzY29yZSA8PSAxKSB7XG4gICAgcmV0dXJuICdiZy1yZWQtNTAwJztcbiAgfVxuXG4gIGlmKHNjb3JlID09PSAyKSB7XG4gICAgcmV0dXJuICdiZy1hbWJlci01MDAnO1xuICB9XG5cbiAgaWYoc2NvcmUgPT09IDMpIHtcbiAgICByZXR1cm4gJ2JnLXByaW1hcnkgZGFyazpiZy1wcmltYXJ5LWRhcmsnO1xuICB9XG5cbiAgcmV0dXJuICdiZy1lbWVyYWxkLTYwMCc7XG59O1xuXG5jb25zdCBQYXNzd29yZFN0cmVuZ3RoTWV0ZXJDb21wb25lbnQgPSAoe1xuICBjbGFzc05hbWUsXG4gIHBhc3N3b3JkLFxuICAuLi5wcm9wc1xufTogUGFzc3dvcmRTdHJlbmd0aE1ldGVyUHJvcHMpID0+IHtcbiAgaWYoIXBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdHJlbmd0aCA9IGdldFBhc3N3b3JkU3RyZW5ndGgocGFzc3dvcmQpO1xuICBjb25zdCBzZWdtZW50cyA9IFsxLCAyLCAzLCA0XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGFyaWEtbGFiZWw9e2BQYXNzd29yZCBzdHJlbmd0aDogJHtzdHJlbmd0aC5sYWJlbH1gfVxuICAgICAgY2xhc3NOYW1lPXtjbignZ3JpZCBnYXAtMS41JywgY2xhc3NOYW1lKX1cbiAgICAgIGRhdGEtc2xvdD1cInBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyXCJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgey4uLnByb3BzfT5cbiAgICAgIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNCBnYXAtMS41XCI+XG4gICAgICAgIHtzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaC0xLjUgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tY29sb3JzJywgZ2V0U2VnbWVudENsYXNzKHN0cmVuZ3RoLnNjb3JlLCBzZWdtZW50KSl9XG4gICAgICAgICAgICBrZXk9e3NlZ21lbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzTmFtZT1cIm0tMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQtZGFya1wiPlxuICAgICAgICA8c3Bhbj5QYXNzd29yZCBzdHJlbmd0aDwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9XCJ0ZXh0LWZvcmVncm91bmQgZGFyazp0ZXh0LWZvcmVncm91bmQtZGFya1wiPntzdHJlbmd0aC5sYWJlbH08L3N0cm9uZz5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBQYXNzd29yZFN0cmVuZ3RoTWV0ZXIgPSBtZW1vKFBhc3N3b3JkU3RyZW5ndGhNZXRlckNvbXBvbmVudCk7XG5QYXNzd29yZFN0cmVuZ3RoTWV0ZXIuZGlzcGxheU5hbWUgPSAnUGFzc3dvcmRTdHJlbmd0aE1ldGVyJztcbiJdLCJuYW1lcyI6WyJjbiIsIm1lbW8iLCJnZXRQYXNzd29yZFN0cmVuZ3RoIiwicGFzc3dvcmQiLCJsZW5ndGgiLCJsYWJlbCIsInNjb3JlIiwiY2hlY2tzIiwidGVzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJsYWJlbHMiLCJnZXRTZWdtZW50Q2xhc3MiLCJzZWdtZW50IiwiUGFzc3dvcmRTdHJlbmd0aE1ldGVyQ29tcG9uZW50IiwiY2xhc3NOYW1lIiwicHJvcHMiLCJzdHJlbmd0aCIsInNlZ21lbnRzIiwiZGl2IiwiYXJpYS1sYWJlbCIsImRhdGEtc2xvdCIsInJvbGUiLCJhcmlhLWhpZGRlbiIsIm1hcCIsInNwYW4iLCJwIiwic3Ryb25nIiwiUGFzc3dvcmRTdHJlbmd0aE1ldGVyIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxFQUFFLFFBQU8sZUFBZTtBQUNoQyxTQUFRQyxJQUFJLFFBQU8sUUFBUTtBQWEzQixPQUFPLE1BQU1DLHNCQUFzQixDQUFDQztJQUNsQyxJQUFHQSxTQUFTQyxNQUFNLEdBQUcsR0FBRztRQUN0QixPQUFPO1lBQ0xDLE9BQU87WUFDUEMsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNQyxTQUFTO1FBQ2I7UUFDQSxXQUFXQyxJQUFJLENBQUNMO1FBQ2hCLEtBQUtLLElBQUksQ0FBQ0w7UUFDVixlQUFlSyxJQUFJLENBQUNMO0tBQ3JCO0lBQ0QsTUFBTUcsUUFBUUMsT0FBT0UsTUFBTSxDQUFDQyxTQUFTTixNQUFNO0lBQzNDLE1BQU1PLFNBQVM7UUFBQztRQUFhO1FBQVE7UUFBUTtRQUFRO0tBQVM7SUFFOUQsT0FBTztRQUNMTixPQUFPTSxNQUFNLENBQUNMLE1BQU0sSUFBSTtRQUN4QkE7SUFDRjtBQUNGLEVBQUU7QUFFRixNQUFNTSxrQkFBa0IsQ0FBQ04sT0FBZU87SUFDdEMsSUFBR0EsVUFBVVAsT0FBTztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxTQUFTLEdBQUc7UUFDYixPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxVQUFVLEdBQUc7UUFDZCxPQUFPO0lBQ1Q7SUFFQSxJQUFHQSxVQUFVLEdBQUc7UUFDZCxPQUFPO0lBQ1Q7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxNQUFNUSxpQ0FBaUMsQ0FBQyxFQUN0Q0MsU0FBUyxFQUNUWixRQUFRLEVBQ1IsR0FBR2EsT0FDd0I7SUFDM0IsSUFBRyxDQUFDYixVQUFVO1FBQ1osT0FBTztJQUNUO0lBRUEsTUFBTWMsV0FBV2Ysb0JBQW9CQztJQUNyQyxNQUFNZSxXQUFXO1FBQUM7UUFBRztRQUFHO1FBQUc7S0FBRTtJQUU3QixxQkFDRSxNQUFDQztRQUNDQyxjQUFZLENBQUMsbUJBQW1CLEVBQUVILFNBQVNaLEtBQUssRUFBRTtRQUNsRFUsV0FBV2YsR0FBRyxnQkFBZ0JlO1FBQzlCTSxhQUFVO1FBQ1ZDLE1BQUs7UUFDSixHQUFHTixLQUFLOzswQkFDVCxLQUFDRztnQkFBSUksYUFBVztnQkFBQ1IsV0FBVTswQkFDeEJHLFNBQVNNLEdBQUcsQ0FBQyxDQUFDWCx3QkFDYixLQUFDWTt3QkFDQ1YsV0FBV2YsR0FBRyx3Q0FBd0NZLGdCQUFnQkssU0FBU1gsS0FBSyxFQUFFTzt1QkFDakZBOzswQkFJWCxNQUFDYTtnQkFBRVgsV0FBVTs7a0NBQ1gsS0FBQ1U7a0NBQUs7O2tDQUNOLEtBQUNFO3dCQUFPWixXQUFVO2tDQUE2Q0UsU0FBU1osS0FBSzs7Ozs7O0FBSXJGO0FBRUEsT0FBTyxNQUFNdUIsc0NBQXdCM0IsS0FBS2EsZ0NBQWdDO0FBQzFFYyxzQkFBc0JDLFdBQVcsR0FBRyJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PasswordStrengthMeter } from './PasswordStrengthMeter.js';
|
|
2
|
+
const meta = {
|
|
3
|
+
component: PasswordStrengthMeter,
|
|
4
|
+
parameters: {
|
|
5
|
+
layout: 'padded'
|
|
6
|
+
},
|
|
7
|
+
title: 'Application UI/Forms/PasswordStrengthMeter'
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
export const Default = {
|
|
11
|
+
args: {
|
|
12
|
+
password: 'CorrectHorse123!'
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkU3RyZW5ndGhNZXRlci9QYXNzd29yZFN0cmVuZ3RoTWV0ZXIuc3Rvcmllcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTWV0ZXJ9IGZyb20gJy4vUGFzc3dvcmRTdHJlbmd0aE1ldGVyLmpzJztcblxuaW1wb3J0IHR5cGUge01ldGEsIFN0b3J5T2JqfSBmcm9tICdAbmxhYnMvbGV4L3N0b3J5Ym9vayc7XG5cbmNvbnN0IG1ldGE6IE1ldGE8dHlwZW9mIFBhc3N3b3JkU3RyZW5ndGhNZXRlcj4gPSB7XG4gIGNvbXBvbmVudDogUGFzc3dvcmRTdHJlbmd0aE1ldGVyLFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgbGF5b3V0OiAncGFkZGVkJ1xuICB9LFxuICB0aXRsZTogJ0FwcGxpY2F0aW9uIFVJL0Zvcm1zL1Bhc3N3b3JkU3RyZW5ndGhNZXRlcidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGE7XG5cbnR5cGUgU3RvcnkgPSBTdG9yeU9iajx0eXBlb2YgUGFzc3dvcmRTdHJlbmd0aE1ldGVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHQ6IFN0b3J5ID0ge1xuICBhcmdzOiB7XG4gICAgcGFzc3dvcmQ6ICdDb3JyZWN0SG9yc2UxMjMhJ1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIlBhc3N3b3JkU3RyZW5ndGhNZXRlciIsIm1ldGEiLCJjb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibGF5b3V0IiwidGl0bGUiLCJEZWZhdWx0IiwiYXJncyIsInBhc3N3b3JkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxxQkFBcUIsUUFBTyw2QkFBNkI7QUFJakUsTUFBTUMsT0FBMkM7SUFDL0NDLFdBQVdGO0lBQ1hHLFlBQVk7UUFDVkMsUUFBUTtJQUNWO0lBQ0FDLE9BQU87QUFDVDtBQUVBLGVBQWVKLEtBQUs7QUFJcEIsT0FBTyxNQUFNSyxVQUFpQjtJQUM1QkMsTUFBTTtRQUNKQyxVQUFVO0lBQ1o7QUFDRixFQUFFIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface PaymentMethodPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
3
|
+
readonly actionIcon?: ReactNode;
|
|
4
|
+
readonly addLabel?: string;
|
|
5
|
+
readonly brand?: string;
|
|
6
|
+
readonly description?: ReactNode;
|
|
7
|
+
readonly emptyDescription?: ReactNode;
|
|
8
|
+
readonly emptyTitle?: ReactNode;
|
|
9
|
+
readonly isAdding?: boolean;
|
|
10
|
+
readonly isRemoving?: boolean;
|
|
11
|
+
readonly last4?: string;
|
|
12
|
+
readonly onAdd: () => void;
|
|
13
|
+
readonly onRemove?: () => void;
|
|
14
|
+
readonly removeLabel?: string;
|
|
15
|
+
readonly replaceLabel?: string;
|
|
16
|
+
readonly title?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare const PaymentMethodPanel: (paymentMethodPanelProps: PaymentMethodPanelProps) => import("react").JSX.Element;
|