@ilo-org/react 0.0.1
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/.eslintrc.js +36 -0
- package/.storybook/main.js +28 -0
- package/.storybook/manager-head.html +7 -0
- package/.storybook/manager.js +6 -0
- package/.storybook/preview.tsx +33 -0
- package/.storybook/styles.scss +1 -0
- package/.storybook/theme.js +11 -0
- package/.turbo/turbo-build.log +513 -0
- package/.turbo/turbo-check.log +5 -0
- package/.turbo/turbo-test.log +1676 -0
- package/=6.4.0 +115 -0
- package/=7.21.4 +21 -0
- package/LICENSE +201 -0
- package/README.md +11 -0
- package/lib/index.esm.js +24 -0
- package/lib/index.esm.js.map +1 -0
- package/lib/index.js +24 -0
- package/lib/index.js.map +1 -0
- package/package.json +115 -0
- package/rollup.config.js +40 -0
- package/src/__tests__/Accordion.test.tsx +52 -0
- package/src/__tests__/Button.test.tsx +60 -0
- package/src/__tests__/Callout.test.tsx +41 -0
- package/src/__tests__/ContextMenu.test.tsx +19 -0
- package/src/__tests__/Dropdown.test.tsx +38 -0
- package/src/__tests__/Form.test.tsx +34 -0
- package/src/__tests__/Heading.test.tsx +51 -0
- package/src/__tests__/Hero.test.tsx +22 -0
- package/src/__tests__/Image.test.tsx +21 -0
- package/src/__tests__/LinkList.test.tsx +17 -0
- package/src/__tests__/List.test.tsx +37 -0
- package/src/__tests__/Loading.text.tsx +33 -0
- package/src/__tests__/Notification.test.tsx +39 -0
- package/src/__tests__/Pagination.test.tsx +58 -0
- package/src/__tests__/Profile.test.tsx +48 -0
- package/src/__tests__/ReadMore.test.tsx +42 -0
- package/src/__tests__/RichText.test.tsx +16 -0
- package/src/__tests__/SearchField.test.tsx +35 -0
- package/src/__tests__/TableOfContents.test.tsx +12 -0
- package/src/__tests__/Tag.test.tsx +10 -0
- package/src/components/Accordion/Accordion.args.ts +19 -0
- package/src/components/Accordion/Accordion.props.d.ts +39 -0
- package/src/components/Accordion/Accordion.tsx +70 -0
- package/src/components/Accordion/AccordionButton.props.d.ts +13 -0
- package/src/components/Accordion/AccordionButton.tsx +60 -0
- package/src/components/Accordion/AccordionItem.props.d.ts +25 -0
- package/src/components/Accordion/AccordionItem.tsx +33 -0
- package/src/components/Accordion/AccordionPanel.props.d.ts +20 -0
- package/src/components/Accordion/AccordionPanel.tsx +47 -0
- package/src/components/Accordion/index.ts +4 -0
- package/src/components/Button/Button.args.ts +353 -0
- package/src/components/Button/Button.props.d.ts +74 -0
- package/src/components/Button/Button.tsx +67 -0
- package/src/components/Button/index.ts +1 -0
- package/src/components/Callout/Callout.args.ts +64 -0
- package/src/components/Callout/Callout.props.d.ts +61 -0
- package/src/components/Callout/Callout.tsx +80 -0
- package/src/components/Callout/index.ts +1 -0
- package/src/components/Checkbox/Checkbox.args.ts +22 -0
- package/src/components/Checkbox/Checkbox.props.d.ts +61 -0
- package/src/components/Checkbox/Checkbox.tsx +92 -0
- package/src/components/Checkbox/index.ts +1 -0
- package/src/components/ChoiceGroup/ChoiceGroup.args.ts +90 -0
- package/src/components/ChoiceGroup/ChoiceGroup.props.d.ts +57 -0
- package/src/components/ChoiceGroup/ChoiceGroup.tsx +42 -0
- package/src/components/ChoiceGroup/index.ts +1 -0
- package/src/components/Collapse/Collapse.props.d.ts +92 -0
- package/src/components/Collapse/Collapse.tsx +130 -0
- package/src/components/Collapse/index.ts +1 -0
- package/src/components/ContextMenu/ContextMenu.args.ts +62 -0
- package/src/components/ContextMenu/ContextMenu.props.d.ts +28 -0
- package/src/components/ContextMenu/ContextMenu.tsx +32 -0
- package/src/components/ContextMenu/index.ts +1 -0
- package/src/components/Credit/Credit.args.ts +14 -0
- package/src/components/Credit/Credit.props.d.ts +11 -0
- package/src/components/Credit/Credit.tsx +41 -0
- package/src/components/Credit/index.ts +1 -0
- package/src/components/DatePicker/DatePicker.args.ts +82 -0
- package/src/components/DatePicker/DatePicker.props.d.ts +68 -0
- package/src/components/DatePicker/DatePicker.tsx +119 -0
- package/src/components/DatePicker/index.ts +1 -0
- package/src/components/Dropdown/Dropdown.args.ts +220 -0
- package/src/components/Dropdown/Dropdown.props.d.ts +84 -0
- package/src/components/Dropdown/Dropdown.tsx +82 -0
- package/src/components/Dropdown/index.ts +1 -0
- package/src/components/Empty/Empty.args.ts +14 -0
- package/src/components/Empty/Empty.props.d.ts +6 -0
- package/src/components/Empty/Empty.tsx +16 -0
- package/src/components/Empty/index.ts +1 -0
- package/src/components/Fieldset/Fieldset.props.d.ts +36 -0
- package/src/components/Fieldset/Fieldset.tsx +90 -0
- package/src/components/Fieldset/index.ts +1 -0
- package/src/components/FileUpload/FileUpload.args.ts +62 -0
- package/src/components/FileUpload/FileUpload.props.d.ts +63 -0
- package/src/components/FileUpload/FileUpload.tsx +82 -0
- package/src/components/FileUpload/index.ts +1 -0
- package/src/components/Form/Form.args.ts +265 -0
- package/src/components/Form/Form.props.d.ts +84 -0
- package/src/components/Form/Form.tsx +83 -0
- package/src/components/Form/index.ts +1 -0
- package/src/components/FormElement/FormElement.props.d.ts +53 -0
- package/src/components/FormElement/FormElement.tsx +26 -0
- package/src/components/FormElement/index.ts +1 -0
- package/src/components/FormGroup/FormGroup.args.ts +84 -0
- package/src/components/FormGroup/FormGroup.props.d.ts +71 -0
- package/src/components/FormGroup/FormGroup.tsx +73 -0
- package/src/components/FormGroup/index.ts +1 -0
- package/src/components/GlobalProvider/GlobalProvider.props.d.ts +15 -0
- package/src/components/GlobalProvider/GlobalProvider.tsx +27 -0
- package/src/components/GlobalProvider/index.js +4 -0
- package/src/components/Heading/Heading.args.ts +46 -0
- package/src/components/Heading/Heading.props.d.ts +24 -0
- package/src/components/Heading/Heading.tsx +28 -0
- package/src/components/Heading/index.ts +1 -0
- package/src/components/Hero/Hero.args.ts +296 -0
- package/src/components/Hero/Hero.props.d.ts +29 -0
- package/src/components/Hero/Hero.tsx +35 -0
- package/src/components/Hero/HeroCard.props.d.ts +65 -0
- package/src/components/Hero/HeroCard.tsx +53 -0
- package/src/components/Hero/index.ts +2 -0
- package/src/components/Icon/Icon.args.ts +15 -0
- package/src/components/Icon/Icon.props.d.ts +16 -0
- package/src/components/Icon/Icon.tsx +25 -0
- package/src/components/Icon/index.ts +1 -0
- package/src/components/Image/Image.args.ts +35 -0
- package/src/components/Image/Image.props.d.ts +38 -0
- package/src/components/Image/Image.tsx +51 -0
- package/src/components/Image/index.ts +1 -0
- package/src/components/Input/Input.args.ts +139 -0
- package/src/components/Input/Input.props.d.ts +63 -0
- package/src/components/Input/Input.tsx +63 -0
- package/src/components/Input/index.ts +1 -0
- package/src/components/Link/Link.args.ts +36 -0
- package/src/components/Link/Link.props.d.ts +34 -0
- package/src/components/Link/Link.tsx +49 -0
- package/src/components/Link/index.ts +1 -0
- package/src/components/LinkList/LinkList.args.ts +193 -0
- package/src/components/LinkList/LinkList.props.d.ts +52 -0
- package/src/components/LinkList/LinkList.tsx +59 -0
- package/src/components/LinkList/index.ts +1 -0
- package/src/components/List/List.args.ts +38 -0
- package/src/components/List/List.props.d.ts +36 -0
- package/src/components/List/List.tsx +47 -0
- package/src/components/List/ListItem.props.d.ts +25 -0
- package/src/components/List/ListItem.tsx +23 -0
- package/src/components/List/index.ts +2 -0
- package/src/components/Loading/Loading.args.ts +55 -0
- package/src/components/Loading/Loading.props.d.ts +23 -0
- package/src/components/Loading/Loading.tsx +24 -0
- package/src/components/Loading/index.ts +1 -0
- package/src/components/Notification/Notification.args.ts +157 -0
- package/src/components/Notification/Notification.props.d.ts +67 -0
- package/src/components/Notification/Notification.tsx +78 -0
- package/src/components/Notification/index.ts +1 -0
- package/src/components/NumberPicker/NumberPicker.args.ts +58 -0
- package/src/components/NumberPicker/NumberPicker.props.d.ts +56 -0
- package/src/components/NumberPicker/NumberPicker.tsx +65 -0
- package/src/components/NumberPicker/index.ts +1 -0
- package/src/components/Pagination/Pagination.args.ts +43 -0
- package/src/components/Pagination/Pagination.props.d.ts +66 -0
- package/src/components/Pagination/Pagination.tsx +114 -0
- package/src/components/Pagination/index.ts +1 -0
- package/src/components/Profile/Profile.args.ts +58 -0
- package/src/components/Profile/Profile.props.d.ts +43 -0
- package/src/components/Profile/Profile.tsx +43 -0
- package/src/components/Profile/index.ts +1 -0
- package/src/components/Radio/Radio.args.ts +22 -0
- package/src/components/Radio/Radio.props.d.ts +61 -0
- package/src/components/Radio/Radio.tsx +64 -0
- package/src/components/Radio/index.ts +1 -0
- package/src/components/ReadMore/ReadMore.props.d.ts +38 -0
- package/src/components/ReadMore/ReadMore.tsx +55 -0
- package/src/components/ReadMore/index.ts +1 -0
- package/src/components/ReadMore/readMore.args.ts +35 -0
- package/src/components/RichText/RichText.props.d.ts +11 -0
- package/src/components/RichText/RichText.tsx +22 -0
- package/src/components/RichText/index.ts +1 -0
- package/src/components/RichText/richText.args.ts +15 -0
- package/src/components/SearchField/SearchField.args.ts +73 -0
- package/src/components/SearchField/SearchField.props.d.ts +35 -0
- package/src/components/SearchField/SearchField.tsx +55 -0
- package/src/components/SearchField/index.ts +1 -0
- package/src/components/TableOfContents/TableOfContents.args.ts +35 -0
- package/src/components/TableOfContents/TableOfContents.props.d.ts +23 -0
- package/src/components/TableOfContents/TableOfContents.tsx +32 -0
- package/src/components/TableOfContents/index.ts +1 -0
- package/src/components/Tag/Tag.args.ts +15 -0
- package/src/components/Tag/Tag.props.d.ts +34 -0
- package/src/components/Tag/Tag.tsx +99 -0
- package/src/components/Tag/TagSet.args.ts +39 -0
- package/src/components/Tag/TagSet.props.d.ts +36 -0
- package/src/components/Tag/TagSet.tsx +71 -0
- package/src/components/Tag/index.ts +2 -0
- package/src/components/Textarea/Textarea.args.ts +62 -0
- package/src/components/Textarea/Textarea.props.d.ts +71 -0
- package/src/components/Textarea/Textarea.tsx +67 -0
- package/src/components/Textarea/index.ts +1 -0
- package/src/components/Tooltip/Tooltip.args.ts +43 -0
- package/src/components/Tooltip/Tooltip.props.d.ts +48 -0
- package/src/components/Tooltip/Tooltip.tsx +139 -0
- package/src/components/Tooltip/index.ts +1 -0
- package/src/components/Video/Video.args.ts +81 -0
- package/src/components/Video/Video.props.d.ts +82 -0
- package/src/components/Video/Video.tsx +29 -0
- package/src/components/Video/VideoPlayer.props.d.ts +80 -0
- package/src/components/Video/VideoPlayer.tsx +285 -0
- package/src/components/Video/index.ts +1 -0
- package/src/hooks/useGlobalSettings.ts +13 -0
- package/src/hooks/useVideoPlayer.ts +85 -0
- package/src/index.ts +19 -0
- package/src/public/favicon.ico +0 -0
- package/src/public/index.html +43 -0
- package/src/public/logo192.png +0 -0
- package/src/public/logo512.png +0 -0
- package/src/public/manifest.json +25 -0
- package/src/public/robots.txt +3 -0
- package/src/setup.ts +6 -0
- package/src/stories/Accordion.stories.tsx +94 -0
- package/src/stories/Button.stories.tsx +491 -0
- package/src/stories/Callout.stories.tsx +154 -0
- package/src/stories/ContextMenu.stories.tsx +72 -0
- package/src/stories/Dropdown.stories.tsx +85 -0
- package/src/stories/Empty.stories.tsx +48 -0
- package/src/stories/Form.stories.tsx +67 -0
- package/src/stories/Heading.stories.tsx +191 -0
- package/src/stories/Hero.stories.tsx +129 -0
- package/src/stories/Image.stories.tsx +71 -0
- package/src/stories/Introduction.stories.mdx +12 -0
- package/src/stories/Link.stories.tsx +99 -0
- package/src/stories/LinkList.stories.tsx +68 -0
- package/src/stories/List.stories.tsx +246 -0
- package/src/stories/Loading.stories.tsx +103 -0
- package/src/stories/Notification.stories.tsx +154 -0
- package/src/stories/Pagination.stories.tsx +63 -0
- package/src/stories/Profile.stories.tsx +84 -0
- package/src/stories/ReadMore.stories.tsx +80 -0
- package/src/stories/RichText.stories.tsx +59 -0
- package/src/stories/SearchField.stories.tsx +87 -0
- package/src/stories/TableOfContents.stories.tsx +50 -0
- package/src/stories/Tag.stories.tsx +194 -0
- package/src/stories/Tooltip.stories.tsx +83 -0
- package/src/stories/Video.stories.tsx +69 -0
- package/src/stories/assets/code-brackets.svg +1 -0
- package/src/stories/assets/colors.svg +1 -0
- package/src/stories/assets/comments.svg +1 -0
- package/src/stories/assets/direction.svg +1 -0
- package/src/stories/assets/flow.svg +1 -0
- package/src/stories/assets/plugin.svg +1 -0
- package/src/stories/assets/repo.svg +1 -0
- package/src/stories/assets/stackalt.svg +1 -0
- package/src/types/index.ts +49 -0
- package/src/types/temp.d.ts +9 -0
- package/src/utils/checkArrayDuplicates.ts +3 -0
- package/src/utils/createChainedFunction.ts +31 -0
- package/src/utils/getDefaultDimensionValue.ts +28 -0
- package/src/utils/hoursMinutesSeconds.ts +8 -0
- package/src/utils/transitionEndListener.ts +29 -0
- package/src/utils/triggerBrowserReflow.ts +4 -0
- package/storybook-static/0.f9bb25299a048d2bb825.manager.bundle.js +2 -0
- package/storybook-static/0.f9bb25299a048d2bb825.manager.bundle.js.LICENSE.txt +8 -0
- package/storybook-static/01daf23af61cc99e9d75.woff2 +0 -0
- package/storybook-static/06a2da828c8b6497ba7a.woff +0 -0
- package/storybook-static/0fa24adac56865ac7e5f.ttf +0 -0
- package/storybook-static/12ec02e7e66abaf38243.eot +0 -0
- package/storybook-static/164.8f6e5926.iframe.bundle.js +2 -0
- package/storybook-static/164.8f6e5926.iframe.bundle.js.LICENSE.txt +8 -0
- package/storybook-static/181.1d6d475b.iframe.bundle.js +1 -0
- package/storybook-static/1cc3364249fd0db446ad.ttf +0 -0
- package/storybook-static/1dbed2ef5cef8fcb4cbe.ttf +0 -0
- package/storybook-static/1fa1c16a4a45d13f0df8.ttf +0 -0
- package/storybook-static/23cdaa8575b5e003dcde.eot +0 -0
- package/storybook-static/248db78ddf1e3568728d.woff +0 -0
- package/storybook-static/27d33755a2b827666dc5.woff +0 -0
- package/storybook-static/29.8e0bc9a8.iframe.bundle.js +2 -0
- package/storybook-static/29.8e0bc9a8.iframe.bundle.js.LICENSE.txt +102 -0
- package/storybook-static/2ac1a95228cf06e17040.woff2 +0 -0
- package/storybook-static/337.b8defe66.iframe.bundle.js +2 -0
- package/storybook-static/337.b8defe66.iframe.bundle.js.LICENSE.txt +11 -0
- package/storybook-static/3579203659b1428de036.eot +0 -0
- package/storybook-static/36229f80a738c199462d.woff2 +0 -0
- package/storybook-static/409a9c398a28ee4d74ff.eot +0 -0
- package/storybook-static/431.8ab7c276.iframe.bundle.js +1 -0
- package/storybook-static/431.b32fed6077acc140df7c.manager.bundle.js +1 -0
- package/storybook-static/4bf5fc6f93ba10519c82.eot +0 -0
- package/storybook-static/51d7da3f5e58e3a24a84.woff +0 -0
- package/storybook-static/697.1f42ad69d33c2733c631.manager.bundle.js +1 -0
- package/storybook-static/697.9e56beef.iframe.bundle.js +1 -0
- package/storybook-static/6a159f0a2005668f1f78.woff +0 -0
- package/storybook-static/6f781753b674130d947a.ttf +0 -0
- package/storybook-static/70a240717e773fe567b3.woff2 +0 -0
- package/storybook-static/720.f44d4e1f5203b6083ae4.manager.bundle.js +1 -0
- package/storybook-static/730.1240c246.iframe.bundle.js +1 -0
- package/storybook-static/730.7223b772132e3e068755.manager.bundle.js +1 -0
- package/storybook-static/73ba1c910e0f7bfc6b18.woff2 +0 -0
- package/storybook-static/88739612501023fa15e3.woff +0 -0
- package/storybook-static/8a142c29a318c432117a.woff +0 -0
- package/storybook-static/914.8ddb80ae2badda1468b0.manager.bundle.js +2 -0
- package/storybook-static/914.8ddb80ae2badda1468b0.manager.bundle.js.LICENSE.txt +94 -0
- package/storybook-static/978.236a5d9d5736517b960e.manager.bundle.js +2 -0
- package/storybook-static/978.236a5d9d5736517b960e.manager.bundle.js.LICENSE.txt +12 -0
- package/storybook-static/978.32e8032b.iframe.bundle.js +2 -0
- package/storybook-static/978.32e8032b.iframe.bundle.js.LICENSE.txt +12 -0
- package/storybook-static/9db5d05810cb98f2831f.ttf +0 -0
- package/storybook-static/9ff97e342523931a4992.eot +0 -0
- package/storybook-static/a40d436619020fb67db5.woff +0 -0
- package/storybook-static/a41d7e330757fb4b2125.woff2 +0 -0
- package/storybook-static/ab3494afe25b712485ed.woff +0 -0
- package/storybook-static/b53d0e74edc5a5fbef0a.ttf +0 -0
- package/storybook-static/b70a9c0ad8e8b43f5e6c.ttf +0 -0
- package/storybook-static/c12a83f816844ff94375.ttf +0 -0
- package/storybook-static/c5116d16544f932eba4b.eot +0 -0
- package/storybook-static/c807e115c00aaffbac11.woff2 +0 -0
- package/storybook-static/cadb6b94d6b0ecc3a86a.woff2 +0 -0
- package/storybook-static/d0cff1b064bcd84324fe.eot +0 -0
- package/storybook-static/d3434771ad7e9030387e.ttf +0 -0
- package/storybook-static/d8610c2a4fe5c177f4f6.woff +0 -0
- package/storybook-static/d970f426740b938f39e1.woff +0 -0
- package/storybook-static/d9c7eba773ff1c8df5bb.eot +0 -0
- package/storybook-static/dd4645bdb2f1e1a47ed7.woff2 +0 -0
- package/storybook-static/e0a63577ac642885f067.eot +0 -0
- package/storybook-static/e2625b8a1277972c9240.ttf +0 -0
- package/storybook-static/f469ea3aa8aacf7ad83a.eot +0 -0
- package/storybook-static/f632ebfa0d7b7085d542.woff2 +0 -0
- package/storybook-static/f93e2252d7112c3bcca5.woff2 +0 -0
- package/storybook-static/favicon.ico +0 -0
- package/storybook-static/iframe.html +348 -0
- package/storybook-static/index.html +59 -0
- package/storybook-static/main.01e6a863.iframe.bundle.js +1 -0
- package/storybook-static/main.dc406261155f1ebb44ce.manager.bundle.js +1 -0
- package/storybook-static/reactPlayerDailyMotion.469cc00f.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerFacebook.1423bb15.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerFilePlayer.e19e24a0.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerKaltura.d1eb0868.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerMixcloud.9f1b1691.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerPreview.9295696b.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerSoundCloud.d420395c.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerStreamable.9b655bf3.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerTwitch.e90e6dea.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerVidyard.a37ae6b3.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerVimeo.a7f367ee.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerWistia.fb351944.iframe.bundle.js +1 -0
- package/storybook-static/reactPlayerYouTube.3514e11a.iframe.bundle.js +1 -0
- package/storybook-static/runtime~main.012769eac0433a7ec083.manager.bundle.js +1 -0
- package/storybook-static/runtime~main.f3168ed5.iframe.bundle.js +1 -0
- package/storybook-static/static/css/main.3d116812.css +3 -0
- package/storybook-static/static/css/main.3d116812.css.map +1 -0
- package/tsconfig.build.json +15 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { NotificationProps } from "./Notification.props";
|
|
2
|
+
|
|
3
|
+
const hascta: NotificationProps = {
|
|
4
|
+
className: "storybook",
|
|
5
|
+
closelabel: "Close",
|
|
6
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
7
|
+
cta: {
|
|
8
|
+
label: "Optional CTA",
|
|
9
|
+
url: "http://www.google.com",
|
|
10
|
+
},
|
|
11
|
+
headline: "With CTA",
|
|
12
|
+
placement: "inline",
|
|
13
|
+
type: "info",
|
|
14
|
+
timestamp: {
|
|
15
|
+
human: "Dec 7, 2022",
|
|
16
|
+
unix: "1670389200",
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const nocta: NotificationProps = {
|
|
21
|
+
className: "storybook",
|
|
22
|
+
closelabel: "Close",
|
|
23
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
24
|
+
headline: "Notification Info",
|
|
25
|
+
placement: "inline",
|
|
26
|
+
type: "info",
|
|
27
|
+
timestamp: {
|
|
28
|
+
human: "Dec 7, 2022",
|
|
29
|
+
unix: "1670389200",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const error: NotificationProps = {
|
|
34
|
+
className: "storybook",
|
|
35
|
+
closelabel: "Close",
|
|
36
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
37
|
+
headline: "Notification Error",
|
|
38
|
+
placement: "inline",
|
|
39
|
+
type: "error",
|
|
40
|
+
timestamp: {
|
|
41
|
+
human: "Dec 7, 2022",
|
|
42
|
+
unix: "1670389200",
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const success: NotificationProps = {
|
|
47
|
+
className: "storybook",
|
|
48
|
+
closelabel: "Close",
|
|
49
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
50
|
+
headline: "Notification Success",
|
|
51
|
+
placement: "inline",
|
|
52
|
+
type: "success",
|
|
53
|
+
timestamp: {
|
|
54
|
+
human: "Dec 7, 2022",
|
|
55
|
+
unix: "1670389200",
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const warning: NotificationProps = {
|
|
60
|
+
className: "storybook",
|
|
61
|
+
closelabel: "Close",
|
|
62
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
63
|
+
headline: "Notification Warning",
|
|
64
|
+
placement: "inline",
|
|
65
|
+
type: "warning",
|
|
66
|
+
timestamp: {
|
|
67
|
+
human: "Dec 7, 2022",
|
|
68
|
+
unix: "1670389200",
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const hasctadialog: NotificationProps = {
|
|
73
|
+
className: "storybook",
|
|
74
|
+
closelabel: "Close",
|
|
75
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
76
|
+
cta: {
|
|
77
|
+
label: "Optional CTA",
|
|
78
|
+
url: "http://www.google.com",
|
|
79
|
+
},
|
|
80
|
+
headline: "Notification With CTA",
|
|
81
|
+
placement: "dialog",
|
|
82
|
+
type: "info",
|
|
83
|
+
timestamp: {
|
|
84
|
+
human: "Dec 7, 2022",
|
|
85
|
+
unix: "1670389200",
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const infodialog: NotificationProps = {
|
|
90
|
+
className: "storybook",
|
|
91
|
+
closelabel: "Close",
|
|
92
|
+
copy: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
93
|
+
headline: "Notification Info",
|
|
94
|
+
placement: "dialog",
|
|
95
|
+
type: "info",
|
|
96
|
+
timestamp: {
|
|
97
|
+
human: "Dec 7, 2022",
|
|
98
|
+
unix: "1670389200",
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const errordialog: NotificationProps = {
|
|
103
|
+
className: "storybook",
|
|
104
|
+
closelabel: "Close",
|
|
105
|
+
copy: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.",
|
|
106
|
+
headline: "Notification Error",
|
|
107
|
+
placement: "dialog",
|
|
108
|
+
type: "error",
|
|
109
|
+
timestamp: {
|
|
110
|
+
human: "Dec 7, 2022",
|
|
111
|
+
unix: "1670389200",
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const successdialog: NotificationProps = {
|
|
116
|
+
className: "storybook",
|
|
117
|
+
closelabel: "Close",
|
|
118
|
+
copy: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.",
|
|
119
|
+
headline: "Notification Success",
|
|
120
|
+
placement: "dialog",
|
|
121
|
+
type: "success",
|
|
122
|
+
timestamp: {
|
|
123
|
+
human: "Dec 7, 2022",
|
|
124
|
+
unix: "1670389200",
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const warningdialog: NotificationProps = {
|
|
129
|
+
className: "storybook",
|
|
130
|
+
closelabel: "Close",
|
|
131
|
+
copy: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.",
|
|
132
|
+
headline: "Notification Warning",
|
|
133
|
+
placement: "dialog",
|
|
134
|
+
type: "warning",
|
|
135
|
+
timestamp: {
|
|
136
|
+
human: "Dec 7, 2022",
|
|
137
|
+
unix: "1670389200",
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Sample prop definitions for Notification's enumerable properties (imported in stories and test)
|
|
143
|
+
*/
|
|
144
|
+
const NotificationArgs = {
|
|
145
|
+
error,
|
|
146
|
+
errordialog,
|
|
147
|
+
hascta,
|
|
148
|
+
hasctadialog,
|
|
149
|
+
infodialog,
|
|
150
|
+
nocta,
|
|
151
|
+
success,
|
|
152
|
+
successdialog,
|
|
153
|
+
warning,
|
|
154
|
+
warningdialog,
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export default NotificationArgs;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { notificationPlacement, notificationTypes } from "../../types";
|
|
2
|
+
|
|
3
|
+
interface CTAProps {
|
|
4
|
+
/**
|
|
5
|
+
* Specify the label of the CTA
|
|
6
|
+
*/
|
|
7
|
+
label?: string;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Specify the url of the CTA
|
|
11
|
+
*/
|
|
12
|
+
url?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface TimeStampProps {
|
|
16
|
+
/**
|
|
17
|
+
* Specify the human-readable time
|
|
18
|
+
*/
|
|
19
|
+
human?: string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Specify the UNIX timestamp
|
|
23
|
+
*/
|
|
24
|
+
unix?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface NotificationProps {
|
|
28
|
+
/**
|
|
29
|
+
* Specify an optional className to be added to your Notification component.
|
|
30
|
+
*/
|
|
31
|
+
className?: string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Specify the label for the close button
|
|
35
|
+
*/
|
|
36
|
+
closelabel?: Required<string>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Specify the copy
|
|
40
|
+
*/
|
|
41
|
+
copy?: Required<string>;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Specify the settings for an option CTA
|
|
45
|
+
*/
|
|
46
|
+
cta?: CTAProps;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Specify the headline
|
|
50
|
+
*/
|
|
51
|
+
headline?: Required<string>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Specify whether the notification is inline in the DOM or absolutely-positioned at a higher z-index
|
|
55
|
+
*/
|
|
56
|
+
placement?: Required<notificationPlacement>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Specify an optional timestamp
|
|
60
|
+
*/
|
|
61
|
+
timestamp?: TimeStampProps;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Specify the icon for the Notification
|
|
65
|
+
*/
|
|
66
|
+
type?: notificationTypes;
|
|
67
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { FC, useState } from "react";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import useGlobalSettings from "../../hooks/useGlobalSettings";
|
|
4
|
+
import { NotificationProps } from "./Notification.props";
|
|
5
|
+
import { ButtonProps } from "../Button/Button.props";
|
|
6
|
+
import { Button } from "../Button";
|
|
7
|
+
|
|
8
|
+
const Notification: FC<NotificationProps> = ({
|
|
9
|
+
className,
|
|
10
|
+
closelabel,
|
|
11
|
+
copy,
|
|
12
|
+
cta,
|
|
13
|
+
headline,
|
|
14
|
+
placement,
|
|
15
|
+
timestamp,
|
|
16
|
+
type,
|
|
17
|
+
}) => {
|
|
18
|
+
const { prefix } = useGlobalSettings();
|
|
19
|
+
|
|
20
|
+
const [display, setDisplay] = useState(true);
|
|
21
|
+
|
|
22
|
+
const baseClass = `${prefix}--notification`;
|
|
23
|
+
const notificationClasses = classNames(className, {
|
|
24
|
+
[baseClass]: true,
|
|
25
|
+
[`${baseClass}--${placement}`]: placement,
|
|
26
|
+
[`icon icon--${type}`]: type,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const ctaprops: ButtonProps = {
|
|
30
|
+
callback: false,
|
|
31
|
+
className: `${baseClass}--cta`,
|
|
32
|
+
children: false,
|
|
33
|
+
label: cta?.label,
|
|
34
|
+
size: "small",
|
|
35
|
+
type: "secondary",
|
|
36
|
+
url: cta?.url,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* On click, close
|
|
41
|
+
*/
|
|
42
|
+
const handleClick = () => {
|
|
43
|
+
setDisplay(false);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<>
|
|
48
|
+
{display && (
|
|
49
|
+
<div
|
|
50
|
+
className={notificationClasses}
|
|
51
|
+
role="status"
|
|
52
|
+
aria-live="polite"
|
|
53
|
+
aria-relevant="additions"
|
|
54
|
+
>
|
|
55
|
+
<div className={`${baseClass}--content`}>
|
|
56
|
+
<h2 className={`${baseClass}--headline`}>{headline}</h2>
|
|
57
|
+
<p className={`${baseClass}--copy`}>{copy}</p>
|
|
58
|
+
{timestamp && (
|
|
59
|
+
<time className={`${baseClass}--date`} dateTime={timestamp.unix}>
|
|
60
|
+
{timestamp.human}
|
|
61
|
+
</time>
|
|
62
|
+
)}
|
|
63
|
+
{cta && <Button {...ctaprops} />}
|
|
64
|
+
</div>
|
|
65
|
+
<button
|
|
66
|
+
className={`${baseClass}--close`}
|
|
67
|
+
type="button"
|
|
68
|
+
onClick={() => handleClick()}
|
|
69
|
+
>
|
|
70
|
+
<span>{closelabel}</span>
|
|
71
|
+
</button>
|
|
72
|
+
</div>
|
|
73
|
+
)}
|
|
74
|
+
</>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export default Notification;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Notification } from "./Notification";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { NumberPickerProps } from "./NumberPicker.props";
|
|
2
|
+
|
|
3
|
+
const basic: NumberPickerProps = {
|
|
4
|
+
callback: "",
|
|
5
|
+
disabled: false,
|
|
6
|
+
error: false,
|
|
7
|
+
helper: false,
|
|
8
|
+
label: "Number Picker Field Label",
|
|
9
|
+
name: "text",
|
|
10
|
+
placeholder: "Number Picker Field",
|
|
11
|
+
required: false,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const hashelper: NumberPickerProps = {
|
|
15
|
+
callback: "",
|
|
16
|
+
disabled: false,
|
|
17
|
+
error: false,
|
|
18
|
+
helper: "Here is the helper text",
|
|
19
|
+
label: "Number Picker Field Label",
|
|
20
|
+
name: "text",
|
|
21
|
+
placeholder: "Number Picker Field",
|
|
22
|
+
required: false,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const haserror: NumberPickerProps = {
|
|
26
|
+
callback: "",
|
|
27
|
+
disabled: false,
|
|
28
|
+
error: "This one has an error",
|
|
29
|
+
helper: false,
|
|
30
|
+
label: "Number Picker Field Label",
|
|
31
|
+
name: "text",
|
|
32
|
+
placeholder: "Number Picker Field",
|
|
33
|
+
required: false,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const hastooltip: NumberPickerProps = {
|
|
37
|
+
callback: "",
|
|
38
|
+
disabled: false,
|
|
39
|
+
error: false,
|
|
40
|
+
helper: false,
|
|
41
|
+
label: "Number Picker Field Label",
|
|
42
|
+
name: "text",
|
|
43
|
+
placeholder: "Number Picker Field",
|
|
44
|
+
required: false,
|
|
45
|
+
tooltip: "This is the tooltip",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Sample prop definitions NumberPicker's enumerable properties (imported in stories and test)
|
|
50
|
+
*/
|
|
51
|
+
const NumberPickerArgs = {
|
|
52
|
+
basic,
|
|
53
|
+
hashelper,
|
|
54
|
+
haserror,
|
|
55
|
+
hastooltip,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default NumberPickerArgs;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface NumberPickerProps {
|
|
2
|
+
/**
|
|
3
|
+
* The input's onChange callback.
|
|
4
|
+
*/
|
|
5
|
+
callback: function;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Specify an optional className to be added to your input.
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Is the input disabled?
|
|
14
|
+
*/
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Does the input have an error?
|
|
19
|
+
*/
|
|
20
|
+
error?: string | false;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The input's helper text
|
|
24
|
+
*/
|
|
25
|
+
helper: string | false;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The input's id attribute
|
|
29
|
+
*/
|
|
30
|
+
id?: string;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Does this input have a label?
|
|
34
|
+
*/
|
|
35
|
+
label: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The input's name attribute
|
|
39
|
+
*/
|
|
40
|
+
name?: Required<string>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Specify an optional className to be added to your NumberPicker component.
|
|
44
|
+
*/
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Specify whether this input is required
|
|
49
|
+
*/
|
|
50
|
+
required?: boolean;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Does this NumberPicker have a tooltip?
|
|
54
|
+
*/
|
|
55
|
+
tooltip?: string;
|
|
56
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import useGlobalSettings from "../../hooks/useGlobalSettings";
|
|
4
|
+
import { NumberPickerProps } from "./NumberPicker.props";
|
|
5
|
+
import { Fieldset } from "../Fieldset";
|
|
6
|
+
import { FormElement } from "../FormElement";
|
|
7
|
+
|
|
8
|
+
const NumberPicker: FC<NumberPickerProps> = ({
|
|
9
|
+
callback,
|
|
10
|
+
disabled = false,
|
|
11
|
+
error,
|
|
12
|
+
helper,
|
|
13
|
+
id,
|
|
14
|
+
label,
|
|
15
|
+
name,
|
|
16
|
+
placeholder,
|
|
17
|
+
required,
|
|
18
|
+
tooltip,
|
|
19
|
+
}) => {
|
|
20
|
+
const { prefix } = useGlobalSettings();
|
|
21
|
+
const baseClass = `${prefix}--numberpicker`;
|
|
22
|
+
|
|
23
|
+
const NumberPickerClasses = classNames("", {
|
|
24
|
+
[baseClass]: true,
|
|
25
|
+
[`error`]: error,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* On change, if there is a callback, call it
|
|
30
|
+
*/
|
|
31
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
32
|
+
if (callback) {
|
|
33
|
+
callback(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Fieldset legend={false} fieldsetid={false}>
|
|
39
|
+
<FormElement
|
|
40
|
+
elemid={name as any}
|
|
41
|
+
label={label}
|
|
42
|
+
helper={helper as any}
|
|
43
|
+
error={error as any}
|
|
44
|
+
required={required as any}
|
|
45
|
+
tooltip={tooltip}
|
|
46
|
+
type={"text"}
|
|
47
|
+
>
|
|
48
|
+
<input
|
|
49
|
+
id={id ? id : name}
|
|
50
|
+
name={name}
|
|
51
|
+
onChange={handleChange}
|
|
52
|
+
disabled={disabled}
|
|
53
|
+
placeholder={placeholder}
|
|
54
|
+
required={required as any}
|
|
55
|
+
type={"text"}
|
|
56
|
+
className={`${NumberPickerClasses} ${prefix}--input`}
|
|
57
|
+
pattern="[0-9]*"
|
|
58
|
+
inputMode="numeric"
|
|
59
|
+
/>
|
|
60
|
+
</FormElement>
|
|
61
|
+
</Fieldset>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default NumberPicker;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as NumberPicker } from "./NumberPicker";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PaginationProps } from "./Pagination.props";
|
|
2
|
+
|
|
3
|
+
const pagination: PaginationProps = {
|
|
4
|
+
className: "storybook",
|
|
5
|
+
callback: "",
|
|
6
|
+
currentPage: 1,
|
|
7
|
+
firstPageUrl: "https://www.google.com?s=first",
|
|
8
|
+
firstPageTitle: "First",
|
|
9
|
+
lastPageUrl: "https://www.google.com?s=last",
|
|
10
|
+
lastPageTitle: "Last",
|
|
11
|
+
nextPageUrl: "https://www.google.com?s=next",
|
|
12
|
+
nextPageTitle: "Next",
|
|
13
|
+
pageCountPreposition: "of",
|
|
14
|
+
prevPageUrl: "https://www.google.com?s=prev",
|
|
15
|
+
prevPageTitle: "Prev",
|
|
16
|
+
totalPages: 8,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const firstDisabled: PaginationProps = {
|
|
20
|
+
className: "storybook",
|
|
21
|
+
callback: "",
|
|
22
|
+
currentPage: 0,
|
|
23
|
+
firstPageUrl: "https://www.google.com?s=first",
|
|
24
|
+
firstPageTitle: "First",
|
|
25
|
+
lastPageUrl: "https://www.google.com?s=last",
|
|
26
|
+
lastPageTitle: "Last",
|
|
27
|
+
nextPageUrl: "https://www.google.com?s=next",
|
|
28
|
+
nextPageTitle: "Next",
|
|
29
|
+
pageCountPreposition: "of",
|
|
30
|
+
prevPageUrl: "https://www.google.com?s=prev",
|
|
31
|
+
prevPageTitle: "Prev",
|
|
32
|
+
totalPages: 1,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Sample prop definitions for Pagination's enumerable properties (imported in stories and test)
|
|
37
|
+
*/
|
|
38
|
+
const PaginationArgs = {
|
|
39
|
+
pagination,
|
|
40
|
+
firstDisabled,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default PaginationArgs;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface PaginationProps {
|
|
2
|
+
/**
|
|
3
|
+
* Specify the callback of your Button.
|
|
4
|
+
*/
|
|
5
|
+
callback: function;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Specify an optional className to be added to your Pagination component.
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* current page number that the user is on, zero-indexed
|
|
14
|
+
*/
|
|
15
|
+
currentPage: number;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* link to the first page
|
|
19
|
+
*/
|
|
20
|
+
firstPageUrl: string;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* title label for the first page
|
|
24
|
+
*/
|
|
25
|
+
firstPageTitle: string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* link to the last page
|
|
29
|
+
*/
|
|
30
|
+
lastPageUrl: string;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* title label for the last page
|
|
34
|
+
*/
|
|
35
|
+
lastPageTitle: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* linking word for the page counts
|
|
39
|
+
*/
|
|
40
|
+
pageCountPreposition?: string;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* link the following page
|
|
44
|
+
*/
|
|
45
|
+
nextPageUrl: string;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* title label for the next page
|
|
49
|
+
*/
|
|
50
|
+
nextPageTitle: string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* link of the previous page
|
|
54
|
+
*/
|
|
55
|
+
prevPageUrl: string;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* title label for the prev page
|
|
59
|
+
*/
|
|
60
|
+
prevPageTitle: string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* total number of pages that are available
|
|
64
|
+
*/
|
|
65
|
+
totalPages: number;
|
|
66
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import useGlobalSettings from "../../hooks/useGlobalSettings";
|
|
4
|
+
import { PaginationProps } from "./Pagination.props";
|
|
5
|
+
|
|
6
|
+
const Pagination: FC<PaginationProps> = ({
|
|
7
|
+
className,
|
|
8
|
+
callback,
|
|
9
|
+
currentPage,
|
|
10
|
+
firstPageUrl,
|
|
11
|
+
firstPageTitle = "First page",
|
|
12
|
+
lastPageUrl,
|
|
13
|
+
lastPageTitle = "Last page",
|
|
14
|
+
nextPageUrl,
|
|
15
|
+
nextPageTitle = "Next page",
|
|
16
|
+
pageCountPreposition = "of",
|
|
17
|
+
prevPageUrl,
|
|
18
|
+
prevPageTitle = "Previous page",
|
|
19
|
+
totalPages,
|
|
20
|
+
}) => {
|
|
21
|
+
const { prefix } = useGlobalSettings();
|
|
22
|
+
|
|
23
|
+
const baseClass = `${prefix}--pagination`;
|
|
24
|
+
const paginationClasses = classNames(className, {
|
|
25
|
+
[baseClass]: true,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const isFirst = currentPage === 0;
|
|
29
|
+
const isLast = currentPage + 1 === totalPages;
|
|
30
|
+
|
|
31
|
+
const firstClasses = classNames(className, {
|
|
32
|
+
[`${baseClass}--first-page`]: true,
|
|
33
|
+
[`${baseClass}--link`]: true,
|
|
34
|
+
[`${baseClass}--disable`]: isFirst,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const prevClasses = classNames(className, {
|
|
38
|
+
[`${baseClass}--prev-page`]: true,
|
|
39
|
+
[`${baseClass}--link`]: true,
|
|
40
|
+
[`${baseClass}--disable`]: isFirst,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const nextClasses = classNames(className, {
|
|
44
|
+
[`${baseClass}--next-page`]: true,
|
|
45
|
+
[`${baseClass}--link`]: true,
|
|
46
|
+
[`${baseClass}--disable`]: isLast,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const lastClasses = classNames(className, {
|
|
50
|
+
[`${baseClass}--last-page`]: true,
|
|
51
|
+
[`${baseClass}--link`]: true,
|
|
52
|
+
[`${baseClass}--disable`]: isLast,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* On click, if there is a callback, call it
|
|
57
|
+
*/
|
|
58
|
+
const handleClick = (e: React.MouseEvent<Element, MouseEvent>) => {
|
|
59
|
+
if (callback) {
|
|
60
|
+
callback(e);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<div className={paginationClasses}>
|
|
66
|
+
<div className={`${baseClass}--previous-set`}>
|
|
67
|
+
<a
|
|
68
|
+
className={firstClasses}
|
|
69
|
+
onClick={(e) => handleClick(e)}
|
|
70
|
+
href={firstPageUrl}
|
|
71
|
+
title={firstPageTitle}
|
|
72
|
+
>
|
|
73
|
+
{firstPageTitle}
|
|
74
|
+
</a>
|
|
75
|
+
|
|
76
|
+
<a
|
|
77
|
+
className={prevClasses}
|
|
78
|
+
onClick={(e) => handleClick(e)}
|
|
79
|
+
href={prevPageUrl}
|
|
80
|
+
title={prevPageTitle}
|
|
81
|
+
>
|
|
82
|
+
{prevPageTitle}
|
|
83
|
+
</a>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<p className={`${baseClass}--page`}>
|
|
87
|
+
<span>{currentPage + 1}</span> {pageCountPreposition}{" "}
|
|
88
|
+
<span>{totalPages}</span>
|
|
89
|
+
</p>
|
|
90
|
+
|
|
91
|
+
<div className={`${baseClass}--next-set`}>
|
|
92
|
+
<a
|
|
93
|
+
className={nextClasses}
|
|
94
|
+
onClick={(e) => handleClick(e)}
|
|
95
|
+
href={nextPageUrl}
|
|
96
|
+
title={nextPageTitle}
|
|
97
|
+
>
|
|
98
|
+
{nextPageTitle}
|
|
99
|
+
</a>
|
|
100
|
+
|
|
101
|
+
<a
|
|
102
|
+
className={lastClasses}
|
|
103
|
+
onClick={(e) => handleClick(e)}
|
|
104
|
+
href={lastPageUrl}
|
|
105
|
+
title={lastPageTitle}
|
|
106
|
+
>
|
|
107
|
+
{lastPageTitle}
|
|
108
|
+
</a>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export default Pagination;
|