@universal-tennis/ui-shared 0.1.96 → 0.2.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/.eslintignore +1 -1
- package/.eslintrc.js +73 -73
- package/.storybook/main.js +16 -16
- package/.storybook/preview.js +17 -17
- package/.storybook/typography.css +5 -26
- package/.storybook/variables.css +16 -16
- package/README.md +129 -129
- package/dist/App.d.ts +1 -1
- package/dist/stories/Button.d.ts +27 -0
- package/dist/stories/Button.js +51 -0
- package/dist/stories/Button.js.map +1 -0
- package/dist/stories/Button.stories.d.ts +15 -0
- package/dist/stories/Button.stories.js +34 -0
- package/dist/stories/Button.stories.js.map +1 -0
- package/dist/stories/Header.d.ts +19 -0
- package/dist/stories/Header.js +31 -0
- package/dist/stories/Header.js.map +1 -0
- package/dist/stories/Header.stories.d.ts +11 -0
- package/dist/stories/Header.stories.js +20 -0
- package/dist/stories/Header.stories.js.map +1 -0
- package/dist/stories/Page.d.ts +1 -0
- package/dist/stories/Page.js +38 -0
- package/dist/stories/Page.js.map +1 -0
- package/dist/stories/Page.stories.d.ts +11 -0
- package/dist/stories/Page.stories.js +30 -0
- package/dist/stories/Page.stories.js.map +1 -0
- package/dist/stories/assets/comments.svg +1 -0
- package/dist/stories/assets/css/typography.css +5 -26
- package/dist/stories/assets/css/variables.css +15 -15
- package/dist/stories/assets/direction.svg +1 -0
- package/dist/stories/assets/icon-chat-blue.svg +10 -10
- package/dist/stories/assets/utr-sports-logo.svg +9 -9
- package/dist/stories/atoms/Button/Button.d.ts +1 -1
- package/dist/stories/atoms/Button/Button.js.map +1 -1
- package/dist/stories/atoms/Button/index.d.ts +1 -0
- package/dist/stories/atoms/Button/index.js +2 -0
- package/dist/stories/atoms/Button/index.js.map +1 -0
- package/dist/stories/atoms/Button.d.ts +7 -0
- package/dist/stories/atoms/Button.js +20 -0
- package/dist/stories/atoms/Button.js.map +1 -0
- package/dist/stories/atoms/Button.stories.d.ts +13 -0
- package/dist/stories/atoms/Button.stories.js +22 -0
- package/dist/stories/atoms/Button.stories.js.map +1 -0
- package/dist/stories/atoms/Icons/AddIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/AvailabilityMaybeIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/AvailabilityNoIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/AvailabilityNotSetIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/AvailabilityYesIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/BallInMotionIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/CalendarIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/ClockIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/CloseIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/DeleteIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/DoublePersonIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/EditIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/LeftChevronIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/LineIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/LocationIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/MessageIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/PickleballBallIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/RightChevronIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SessionIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SinglePersonIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SinglePersonV2Icon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SocialMediaFacebookIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SocialMediaInstagramIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SocialMediaTikTokIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SocialMediaXIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SocialMediaYoutubeIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SwapIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/SwapNoBorderIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/TennisBallIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/VerifiedIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/VisibilityIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/VisibilityOffIcon.d.ts +2 -2
- package/dist/stories/atoms/Icons/WinnerIndicatorIcon.d.ts +2 -2
- package/dist/stories/atoms/Typography/Typography.d.ts +2 -2
- package/dist/stories/atoms/Typography/Typography.js.map +1 -1
- package/dist/stories/atoms/Typography/index.d.ts +1 -0
- package/dist/stories/atoms/Typography/index.js +2 -0
- package/dist/stories/atoms/Typography/index.js.map +1 -0
- package/dist/stories/atoms/UTMap/UTMap.d.ts +2 -2
- package/dist/stories/molecules/AvatarWithName/AvatarWithName.d.ts +2 -2
- package/dist/stories/molecules/Cards/ContactCard.d.ts +2 -2
- package/dist/stories/molecules/Cards/DrawCard.d.ts +2 -2
- package/dist/stories/molecules/Cards/DrawCard.js.map +1 -1
- package/dist/stories/molecules/Cards/TeamCard.d.ts +2 -2
- package/dist/stories/molecules/Cards/TeamDrawCard.d.ts +2 -2
- package/dist/stories/molecules/Cards/shared.d.ts +1 -4
- package/dist/stories/molecules/FooterSection/FooterSection.d.ts +2 -2
- package/dist/stories/molecules/GlobalNavItem/GlobalNavItem.d.ts +2 -2
- package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.d.ts +2 -2
- package/dist/stories/organisms/Footer/Footer.d.ts +2 -2
- package/dist/stories/organisms/Footer/Footer.js +2 -6
- package/dist/stories/organisms/Footer/Footer.js.map +1 -1
- package/dist/stories/organisms/GlobalNavigation/GlobalNavigation.d.ts +2 -2
- package/dist/stories/organisms/GlobalNavigation/GlobalNavigation.js.map +1 -1
- package/dist/stories/organisms/Modals/FullPageModal.d.ts +2 -2
- package/dist/stories/organisms/Tables/DrawCardTable.d.ts +2 -2
- package/dist/stories/organisms/Tables/DrawCardTable.js +2 -2
- package/dist/stories/organisms/Tables/SortableTable.d.ts +2 -2
- package/dist/stories/organisms/Tables/SortableTable.js.map +1 -1
- package/dist/stories/organisms/Tables/TeamDrawCardTable/DesktopTableRows.d.ts +2 -2
- package/dist/stories/organisms/Tables/TeamDrawCardTable/MobileTableRows.d.ts +2 -2
- package/dist/stories/organisms/Tables/TeamDrawCardTable/TeamDrawCardTable.d.ts +2 -2
- package/dist/stories/organisms/Tables/mockData.d.ts +2 -2
- package/dist/stories/utils/constants.js.map +1 -1
- package/infrastructure/azure-pipelines.yml +112 -112
- package/package.json +99 -99
- package/public/index.html +50 -45
- package/src/App.js +25 -25
- package/src/components.jsx +52 -52
- package/src/custom.d.ts +13 -13
- package/src/index.js +17 -17
- package/src/items.jsx +1 -1
- package/src/stories/Introduction.stories.mdx +179 -179
- package/src/stories/assets/css/typography.css +5 -26
- package/src/stories/assets/css/variables.css +15 -15
- package/src/stories/assets/icon-chat-blue.svg +10 -10
- package/src/stories/assets/icons/icon-add.svg +7 -7
- package/src/stories/assets/icons/icon-availability-maybe.svg +3 -3
- package/src/stories/assets/icons/icon-availability-no.svg +3 -3
- package/src/stories/assets/icons/icon-availability-not-set.svg +8 -8
- package/src/stories/assets/icons/icon-availability-yes.svg +3 -3
- package/src/stories/assets/icons/icon-calendar.svg +4 -4
- package/src/stories/assets/icons/icon-clock.svg +7 -7
- package/src/stories/assets/icons/icon-close.svg +3 -3
- package/src/stories/assets/icons/icon-delete.svg +9 -9
- package/src/stories/assets/icons/icon-edit.svg +3 -3
- package/src/stories/assets/icons/icon-location.svg +6 -6
- package/src/stories/assets/icons/icon-message.svg +3 -3
- package/src/stories/assets/icons/icon-session.svg +3 -3
- package/src/stories/assets/icons/icon-social-media-facebook.svg +10 -10
- package/src/stories/assets/icons/icon-social-media-instagram.svg +3 -3
- package/src/stories/assets/icons/icon-social-media-tiktok.svg +10 -10
- package/src/stories/assets/icons/icon-social-media-x.svg +10 -10
- package/src/stories/assets/icons/icon-social-media-youtube.svg +3 -3
- package/src/stories/assets/icons/icon-swap.svg +3 -3
- package/src/stories/assets/icons/icon-visibility-off.svg +7 -7
- package/src/stories/assets/icons/icon-visibility.svg +6 -6
- package/src/stories/assets/utr-sports-logo.svg +9 -9
- package/src/stories/atoms/Button/Button.stories.tsx +63 -63
- package/src/stories/atoms/Button/Button.tsx +145 -145
- package/src/stories/atoms/Icons/AddIcon.tsx +13 -13
- package/src/stories/atoms/Icons/AvailabilityMaybeIcon.tsx +11 -11
- package/src/stories/atoms/Icons/AvailabilityNoIcon.tsx +11 -11
- package/src/stories/atoms/Icons/AvailabilityNotSetIcon.tsx +12 -12
- package/src/stories/atoms/Icons/AvailabilityYesIcon.tsx +11 -11
- package/src/stories/atoms/Icons/BallInMotionIcon.tsx +15 -15
- package/src/stories/atoms/Icons/CalendarIcon.tsx +11 -11
- package/src/stories/atoms/Icons/ClockIcon.tsx +14 -14
- package/src/stories/atoms/Icons/CloseIcon.tsx +11 -11
- package/src/stories/atoms/Icons/DeleteIcon.tsx +15 -15
- package/src/stories/atoms/Icons/DoublePersonIcon.tsx +20 -20
- package/src/stories/atoms/Icons/EditIcon.tsx +11 -11
- package/src/stories/atoms/Icons/Icons.stories.tsx +372 -372
- package/src/stories/atoms/Icons/LeftChevronIcon.tsx +13 -13
- package/src/stories/atoms/Icons/LineIcon.tsx +12 -12
- package/src/stories/atoms/Icons/LocationIcon.tsx +12 -12
- package/src/stories/atoms/Icons/MessageIcon.tsx +12 -12
- package/src/stories/atoms/Icons/PickleballBallIcon.tsx +22 -22
- package/src/stories/atoms/Icons/RightChevronIcon.tsx +11 -11
- package/src/stories/atoms/Icons/SessionIcon.tsx +16 -16
- package/src/stories/atoms/Icons/SinglePersonIcon.tsx +16 -16
- package/src/stories/atoms/Icons/SinglePersonV2Icon.tsx +13 -13
- package/src/stories/atoms/Icons/SocialMediaFacebookIcon.tsx +19 -19
- package/src/stories/atoms/Icons/SocialMediaInstagramIcon.tsx +11 -11
- package/src/stories/atoms/Icons/SocialMediaTikTokIcon.tsx +18 -18
- package/src/stories/atoms/Icons/SocialMediaXIcon.tsx +18 -18
- package/src/stories/atoms/Icons/SocialMediaYoutubeIcon.tsx +11 -11
- package/src/stories/atoms/Icons/SwapIcon.tsx +11 -11
- package/src/stories/atoms/Icons/SwapNoBorderIcon.tsx +14 -14
- package/src/stories/atoms/Icons/TennisBallIcon.tsx +13 -13
- package/src/stories/atoms/Icons/VerifiedIcon.tsx +13 -13
- package/src/stories/atoms/Icons/VisibilityIcon.tsx +12 -12
- package/src/stories/atoms/Icons/VisibilityOffIcon.tsx +13 -13
- package/src/stories/atoms/Icons/WinnerIndicatorIcon.tsx +39 -39
- package/src/stories/atoms/Icons/sharedTypes.tsx +12 -12
- package/src/stories/atoms/Typography/Typography.tsx +185 -185
- package/src/stories/atoms/UTMap/UTMap.stories.tsx +43 -43
- package/src/stories/atoms/UTMap/UTMap.tsx +25 -25
- package/src/stories/molecules/AvatarWithName/AvatarWithName.stories.tsx +86 -86
- package/src/stories/molecules/AvatarWithName/AvatarWithName.tsx +68 -68
- package/src/stories/molecules/Cards/Cards.stories.tsx +76 -76
- package/src/stories/molecules/Cards/ContactCard.tsx +45 -45
- package/src/stories/molecules/Cards/DrawCard.tsx +211 -211
- package/src/stories/molecules/Cards/Modals.stories.tsx +137 -137
- package/src/stories/molecules/Cards/TeamCard.tsx +14 -14
- package/src/stories/molecules/Cards/TeamDrawCard.tsx +159 -159
- package/src/stories/molecules/Cards/sharedTypes.ts +69 -69
- package/src/stories/molecules/FooterSection/FooterSection.stories.tsx +25 -25
- package/src/stories/molecules/FooterSection/FooterSection.tsx +34 -34
- package/src/stories/molecules/FooterSection/sharedTypes.ts +6 -6
- package/src/stories/molecules/GlobalNavItem/GlobalNavItem.stories.tsx +22 -22
- package/src/stories/molecules/GlobalNavItem/GlobalNavItem.tsx +51 -51
- package/src/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.stories.tsx +96 -96
- package/src/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.tsx +112 -112
- package/src/stories/organisms/Footer/Footer.stories.tsx +63 -63
- package/src/stories/organisms/Footer/Footer.tsx +155 -165
- package/src/stories/organisms/Footer/sharedTypes.ts +17 -17
- package/src/stories/organisms/GlobalNavigation/GlobalNavigation.stories.tsx +210 -210
- package/src/stories/organisms/GlobalNavigation/GlobalNavigation.tsx +120 -120
- package/src/stories/organisms/Modals/FullPageModal.tsx +93 -93
- package/src/stories/organisms/Modals/Modals.stories.tsx +138 -138
- package/src/stories/organisms/Modals/sharedTypes.ts +15 -15
- package/src/stories/organisms/Tables/DrawCardTable.tsx +92 -92
- package/src/stories/organisms/Tables/SortableTable.tsx +119 -119
- package/src/stories/organisms/Tables/Tables.stories.tsx +104 -104
- package/src/stories/organisms/Tables/TeamDrawCardTable/DesktopTableRows.tsx +120 -120
- package/src/stories/organisms/Tables/TeamDrawCardTable/MobileTableRows.tsx +67 -67
- package/src/stories/organisms/Tables/TeamDrawCardTable/TeamDrawCardTable.tsx +24 -24
- package/src/stories/organisms/Tables/mockData.tsx +131 -131
- package/src/stories/organisms/Tables/sharedTypes.ts +17 -17
- package/src/stories/utils/constants.ts +31 -31
- package/src/stories/utils/getArrayWithIds.ts +1 -1
- package/src/stories/utils/useScreenSize.ts +28 -28
- package/src/types/tableDataTypes.ts +42 -42
- package/tsconfig.json +23 -23
- package/dist/stories/atoms/Map/Map.d.ts +0 -7
- package/dist/stories/atoms/Map/Map.js +0 -9
- package/dist/stories/atoms/Map/Map.js.map +0 -1
- package/dist/stories/atoms/Map/Map.stories.d.ts +0 -9
- package/dist/stories/atoms/Map/Map.stories.js +0 -36
- package/dist/stories/atoms/Map/Map.stories.js.map +0 -1
- package/dist/stories/organisms/Tables/TeamDrawCardTable.d.ts +0 -3
- package/dist/stories/organisms/Tables/TeamDrawCardTable.js +0 -126
- package/dist/stories/organisms/Tables/TeamDrawCardTable.js.map +0 -1
package/.storybook/variables.css
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--primary: #008ded;
|
|
3
|
-
--secondary: #e0004f;
|
|
4
|
-
--disabled: #bac6d6;
|
|
5
|
-
--black: #000;
|
|
6
|
-
--white: #fff;
|
|
7
|
-
--light-grey: #d7e0ea;
|
|
8
|
-
--grey: #828B96;
|
|
9
|
-
--darkest-grey: #3b4859;
|
|
10
|
-
--cool-grey-600: #A7B2C1;
|
|
11
|
-
--cool-grey-500: #C1CCDA;
|
|
12
|
-
--cool-grey-300: #DDE3EB;
|
|
13
|
-
--cool-grey-150: #F0F4F9;
|
|
14
|
-
--blue-grey-500: #778DA9;
|
|
15
|
-
--teal: #01DFCB;
|
|
16
|
-
}
|
|
1
|
+
:root {
|
|
2
|
+
--primary: #008ded;
|
|
3
|
+
--secondary: #e0004f;
|
|
4
|
+
--disabled: #bac6d6;
|
|
5
|
+
--black: #000;
|
|
6
|
+
--white: #fff;
|
|
7
|
+
--light-grey: #d7e0ea;
|
|
8
|
+
--grey: #828B96;
|
|
9
|
+
--darkest-grey: #3b4859;
|
|
10
|
+
--cool-grey-600: #A7B2C1;
|
|
11
|
+
--cool-grey-500: #C1CCDA;
|
|
12
|
+
--cool-grey-300: #DDE3EB;
|
|
13
|
+
--cool-grey-150: #F0F4F9;
|
|
14
|
+
--blue-grey-500: #778DA9;
|
|
15
|
+
--teal: #01DFCB;
|
|
16
|
+
}
|
|
17
17
|
|
package/README.md
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# UI-Shared
|
|
2
|
-
|
|
3
|
-
This repo was created to help organize components across the UT ecosystem; following specific design rules:
|
|
4
|
-
|
|
5
|
-
**Stack:**
|
|
6
|
-
<br />
|
|
7
|
-
- React (18.2.0)
|
|
8
|
-
<br />
|
|
9
|
-
- TypeScript
|
|
10
|
-
<br />
|
|
11
|
-
- [MUI](https://mui.com/)
|
|
12
|
-
<br />
|
|
13
|
-
- Styled-Components (as part of MUI)
|
|
14
|
-
|
|
15
|
-
## To install:
|
|
16
|
-
|
|
17
|
-
```npm install @universal-tennis/ui-shared```
|
|
18
|
-
or
|
|
19
|
-
``` yarn add @universal-tennis/ui-shared```
|
|
20
|
-
|
|
21
|
-
## Design rules
|
|
22
|
-
|
|
23
|
-
#### Components following material and atomic design rules;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
1. Standard naming components; with primary/secondary/etc variations. Keeping variations minimal and purposeful.
|
|
27
|
-
<br />
|
|
28
|
-
<br />
|
|
29
|
-
|
|
30
|
-
**Example:**
|
|
31
|
-
```
|
|
32
|
-
<Button type="primary" />
|
|
33
|
-
<Button type="secondary" />
|
|
34
|
-
```
|
|
35
|
-
<br />
|
|
36
|
-
**NOT**
|
|
37
|
-
```
|
|
38
|
-
<Button type="team-page-button" />
|
|
39
|
-
<Button type="home-page-button" />
|
|
40
|
-
```
|
|
41
|
-
<br />
|
|
42
|
-
<br />
|
|
43
|
-
|
|
44
|
-
Buttons should be uniform across the platforms with minimal variants, not multiple buttons created for each pages.
|
|
45
|
-
|
|
46
|
-
<br />
|
|
47
|
-
2. Components broken into their smallest parts, atoms, then built up from there.
|
|
48
|
-
<br />
|
|
49
|
-
<br />
|
|
50
|
-
**Example:**
|
|
51
|
-
```
|
|
52
|
-
<Card> // Molecule
|
|
53
|
-
<Typography> // Atom
|
|
54
|
-
Sample Header
|
|
55
|
-
</Typography>
|
|
56
|
-
<Button> // Atom
|
|
57
|
-
Sample Button
|
|
58
|
-
</Button>
|
|
59
|
-
</Card>
|
|
60
|
-
```
|
|
61
|
-
<br />
|
|
62
|
-
<br />
|
|
63
|
-
A component that uses these cards in combination with other components would be considered an organism.
|
|
64
|
-
|
|
65
|
-
<br />
|
|
66
|
-
3. Components should all be "dumb" components - keeping only local state or logic specific to the component, minimizing side effects.
|
|
67
|
-
<br />
|
|
68
|
-
[Functional Programming - Side Effects](https://www.yld.io/blog/the-not-so-scary-guide-to-functional-programming/#:~:text=A%20side%20effect%20is%20when,described%20as%20having%20side%20effects.)
|
|
69
|
-
|
|
70
|
-
<br />
|
|
71
|
-
4. Common colors, BBM sizing, common functionality are standardized in the same way we write components.
|
|
72
|
-
<br />
|
|
73
|
-
<br />
|
|
74
|
-
**Example:**
|
|
75
|
-
<br />
|
|
76
|
-
- "Primary"/ "secondary" vs "Team-card-header-blue-color" - minimzing number of color variations.
|
|
77
|
-
|
|
78
|
-
<br />
|
|
79
|
-
*To read more:*
|
|
80
|
-
<br />
|
|
81
|
-
[Material design rules](https://m2.material.io/design/color/the-color-system.html)
|
|
82
|
-
<br />
|
|
83
|
-
[Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
## Bitbucket CICD flow Publishing the Repo
|
|
87
|
-
|
|
88
|
-
1. Pull the latest from master -> make changes to a PR back into master.
|
|
89
|
-
First when creating a new component, make sure to add it to the `components.jsx` file.
|
|
90
|
-
2. In the `package.json` file, make sure to pump to the next minor version.
|
|
91
|
-
3. After merging back into master, tag the commit with the same `package.json` version number.
|
|
92
|
-
This will then trigger a NPM package build with the version listed in the `package.json`; make sure the release tags are the same for consistency.
|
|
93
|
-
|
|
94
|
-
It can now be accessed in another repo like this:
|
|
95
|
-
<br />
|
|
96
|
-
`import {Button} from "@universal-tennis/ui-shared";`
|
|
97
|
-
|
|
98
|
-
#### Manually Publishing the Repo (Should be done via CICD flow)
|
|
99
|
-
|
|
100
|
-
1. First when creating a new component, make sure to add it to the `components.jsx` file.
|
|
101
|
-
2. Then Run `yarn run publish:npm` to build a optimized build for all the components, this is configured for TS.
|
|
102
|
-
3. In the `package.json` file, make sure to pump to the next minor version.
|
|
103
|
-
4. Finally `yarn run publish-package` to deploy this version to NPM.
|
|
104
|
-
|
|
105
|
-
It can now be accessed in another repo like this:
|
|
106
|
-
<br />
|
|
107
|
-
`import {Button} from "@universal-tennis/ui-shared";`
|
|
108
|
-
|
|
109
|
-
### Development on Local
|
|
110
|
-
|
|
111
|
-
1. Create a new branch and make changes: (for this example "sample-link-branch")
|
|
112
|
-
2. Push changes to the branch / test before with storybook.
|
|
113
|
-
3. Run `npm install https://kyle-universaltennis@bitbucket.org/universaltennis/ui-shared.git#sample-linked-branch` from the other repo to view these updates.
|
|
114
|
-
In this url (https://<USER>@bitbucket.org/<ORG>/<REPO>#<BRANCH>)
|
|
115
|
-
4. You can now see the changes from your npm branch in a different repo.
|
|
116
|
-
you'll now see in your package.json:
|
|
117
|
-
```"@universal-tennis/ui-shared": "git+https://kyle-universaltennis@bitbucket.org/universaltennis/ui-shared.git#sample-linked-branch"```
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
## Available Scripts
|
|
121
|
-
|
|
122
|
-
### `npm start` using npm 16.14.0
|
|
123
|
-
|
|
124
|
-
Runs the storybook app in localhost.
|
|
125
|
-
<br />
|
|
126
|
-
Open [http://localhost:6006](http://localhost:6006) to view storybook in your browser.
|
|
127
|
-
<br />
|
|
128
|
-
The page will reload when you make changes.
|
|
129
|
-
<br />
|
|
1
|
+
# UI-Shared
|
|
2
|
+
|
|
3
|
+
This repo was created to help organize components across the UT ecosystem; following specific design rules:
|
|
4
|
+
|
|
5
|
+
**Stack:**
|
|
6
|
+
<br />
|
|
7
|
+
- React (18.2.0)
|
|
8
|
+
<br />
|
|
9
|
+
- TypeScript
|
|
10
|
+
<br />
|
|
11
|
+
- [MUI](https://mui.com/)
|
|
12
|
+
<br />
|
|
13
|
+
- Styled-Components (as part of MUI)
|
|
14
|
+
|
|
15
|
+
## To install:
|
|
16
|
+
|
|
17
|
+
```npm install @universal-tennis/ui-shared```
|
|
18
|
+
or
|
|
19
|
+
``` yarn add @universal-tennis/ui-shared```
|
|
20
|
+
|
|
21
|
+
## Design rules
|
|
22
|
+
|
|
23
|
+
#### Components following material and atomic design rules;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
1. Standard naming components; with primary/secondary/etc variations. Keeping variations minimal and purposeful.
|
|
27
|
+
<br />
|
|
28
|
+
<br />
|
|
29
|
+
|
|
30
|
+
**Example:**
|
|
31
|
+
```
|
|
32
|
+
<Button type="primary" />
|
|
33
|
+
<Button type="secondary" />
|
|
34
|
+
```
|
|
35
|
+
<br />
|
|
36
|
+
**NOT**
|
|
37
|
+
```
|
|
38
|
+
<Button type="team-page-button" />
|
|
39
|
+
<Button type="home-page-button" />
|
|
40
|
+
```
|
|
41
|
+
<br />
|
|
42
|
+
<br />
|
|
43
|
+
|
|
44
|
+
Buttons should be uniform across the platforms with minimal variants, not multiple buttons created for each pages.
|
|
45
|
+
|
|
46
|
+
<br />
|
|
47
|
+
2. Components broken into their smallest parts, atoms, then built up from there.
|
|
48
|
+
<br />
|
|
49
|
+
<br />
|
|
50
|
+
**Example:**
|
|
51
|
+
```
|
|
52
|
+
<Card> // Molecule
|
|
53
|
+
<Typography> // Atom
|
|
54
|
+
Sample Header
|
|
55
|
+
</Typography>
|
|
56
|
+
<Button> // Atom
|
|
57
|
+
Sample Button
|
|
58
|
+
</Button>
|
|
59
|
+
</Card>
|
|
60
|
+
```
|
|
61
|
+
<br />
|
|
62
|
+
<br />
|
|
63
|
+
A component that uses these cards in combination with other components would be considered an organism.
|
|
64
|
+
|
|
65
|
+
<br />
|
|
66
|
+
3. Components should all be "dumb" components - keeping only local state or logic specific to the component, minimizing side effects.
|
|
67
|
+
<br />
|
|
68
|
+
[Functional Programming - Side Effects](https://www.yld.io/blog/the-not-so-scary-guide-to-functional-programming/#:~:text=A%20side%20effect%20is%20when,described%20as%20having%20side%20effects.)
|
|
69
|
+
|
|
70
|
+
<br />
|
|
71
|
+
4. Common colors, BBM sizing, common functionality are standardized in the same way we write components.
|
|
72
|
+
<br />
|
|
73
|
+
<br />
|
|
74
|
+
**Example:**
|
|
75
|
+
<br />
|
|
76
|
+
- "Primary"/ "secondary" vs "Team-card-header-blue-color" - minimzing number of color variations.
|
|
77
|
+
|
|
78
|
+
<br />
|
|
79
|
+
*To read more:*
|
|
80
|
+
<br />
|
|
81
|
+
[Material design rules](https://m2.material.io/design/color/the-color-system.html)
|
|
82
|
+
<br />
|
|
83
|
+
[Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## Bitbucket CICD flow Publishing the Repo
|
|
87
|
+
|
|
88
|
+
1. Pull the latest from master -> make changes to a PR back into master.
|
|
89
|
+
First when creating a new component, make sure to add it to the `components.jsx` file.
|
|
90
|
+
2. In the `package.json` file, make sure to pump to the next minor version.
|
|
91
|
+
3. After merging back into master, tag the commit with the same `package.json` version number.
|
|
92
|
+
This will then trigger a NPM package build with the version listed in the `package.json`; make sure the release tags are the same for consistency.
|
|
93
|
+
|
|
94
|
+
It can now be accessed in another repo like this:
|
|
95
|
+
<br />
|
|
96
|
+
`import {Button} from "@universal-tennis/ui-shared";`
|
|
97
|
+
|
|
98
|
+
#### Manually Publishing the Repo (Should be done via CICD flow)
|
|
99
|
+
|
|
100
|
+
1. First when creating a new component, make sure to add it to the `components.jsx` file.
|
|
101
|
+
2. Then Run `yarn run publish:npm` to build a optimized build for all the components, this is configured for TS.
|
|
102
|
+
3. In the `package.json` file, make sure to pump to the next minor version.
|
|
103
|
+
4. Finally `yarn run publish-package` to deploy this version to NPM.
|
|
104
|
+
|
|
105
|
+
It can now be accessed in another repo like this:
|
|
106
|
+
<br />
|
|
107
|
+
`import {Button} from "@universal-tennis/ui-shared";`
|
|
108
|
+
|
|
109
|
+
### Development on Local
|
|
110
|
+
|
|
111
|
+
1. Create a new branch and make changes: (for this example "sample-link-branch")
|
|
112
|
+
2. Push changes to the branch / test before with storybook.
|
|
113
|
+
3. Run `npm install https://kyle-universaltennis@bitbucket.org/universaltennis/ui-shared.git#sample-linked-branch` from the other repo to view these updates.
|
|
114
|
+
In this url (https://<USER>@bitbucket.org/<ORG>/<REPO>#<BRANCH>)
|
|
115
|
+
4. You can now see the changes from your npm branch in a different repo.
|
|
116
|
+
you'll now see in your package.json:
|
|
117
|
+
```"@universal-tennis/ui-shared": "git+https://kyle-universaltennis@bitbucket.org/universaltennis/ui-shared.git#sample-linked-branch"```
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
## Available Scripts
|
|
121
|
+
|
|
122
|
+
### `npm start` using npm 16.14.0
|
|
123
|
+
|
|
124
|
+
Runs the storybook app in localhost.
|
|
125
|
+
<br />
|
|
126
|
+
Open [http://localhost:6006](http://localhost:6006) to view storybook in your browser.
|
|
127
|
+
<br />
|
|
128
|
+
The page will reload when you make changes.
|
|
129
|
+
<br />
|
|
130
130
|
You may also see any lint errors in the console.
|
package/dist/App.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export default App;
|
|
2
|
-
declare function App(): JSX.Element;
|
|
2
|
+
declare function App(): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function Button({ primary, backgroundColor, size, label, ...props }: {
|
|
2
|
+
[x: string]: any;
|
|
3
|
+
primary: any;
|
|
4
|
+
backgroundColor: any;
|
|
5
|
+
size: any;
|
|
6
|
+
label: any;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
export namespace Button {
|
|
9
|
+
namespace propTypes {
|
|
10
|
+
const primary: PropTypes.Requireable<boolean>;
|
|
11
|
+
const backgroundColor: PropTypes.Requireable<string>;
|
|
12
|
+
const size: PropTypes.Requireable<string>;
|
|
13
|
+
const label: PropTypes.Validator<string>;
|
|
14
|
+
const onClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
15
|
+
}
|
|
16
|
+
namespace defaultProps {
|
|
17
|
+
const backgroundColor_1: null;
|
|
18
|
+
export { backgroundColor_1 as backgroundColor };
|
|
19
|
+
const primary_1: boolean;
|
|
20
|
+
export { primary_1 as primary };
|
|
21
|
+
const size_1: string;
|
|
22
|
+
export { size_1 as size };
|
|
23
|
+
const onClick_1: undefined;
|
|
24
|
+
export { onClick_1 as onClick };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
import PropTypes from "prop-types";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
14
|
+
import './button.css';
|
|
15
|
+
/**
|
|
16
|
+
* Primary UI component for user interaction
|
|
17
|
+
*/
|
|
18
|
+
export const Button = (_a) => {
|
|
19
|
+
var { primary, backgroundColor, size, label } = _a, props = __rest(_a, ["primary", "backgroundColor", "size", "label"]);
|
|
20
|
+
const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
|
|
21
|
+
return (React.createElement("button", Object.assign({ type: "button", className: ['storybook-button', `storybook-button--${size}`, mode].join(' '), style: backgroundColor && { backgroundColor } }, props), label));
|
|
22
|
+
};
|
|
23
|
+
Button.propTypes = {
|
|
24
|
+
/**
|
|
25
|
+
* Is this the principal call to action on the page?
|
|
26
|
+
*/
|
|
27
|
+
primary: PropTypes.bool,
|
|
28
|
+
/**
|
|
29
|
+
* What background color to use
|
|
30
|
+
*/
|
|
31
|
+
backgroundColor: PropTypes.string,
|
|
32
|
+
/**
|
|
33
|
+
* How large should the button be?
|
|
34
|
+
*/
|
|
35
|
+
size: PropTypes.oneOf(['small', 'medium', 'large']),
|
|
36
|
+
/**
|
|
37
|
+
* Button contents
|
|
38
|
+
*/
|
|
39
|
+
label: PropTypes.string.isRequired,
|
|
40
|
+
/**
|
|
41
|
+
* Optional click handler
|
|
42
|
+
*/
|
|
43
|
+
onClick: PropTypes.func,
|
|
44
|
+
};
|
|
45
|
+
Button.defaultProps = {
|
|
46
|
+
backgroundColor: null,
|
|
47
|
+
primary: false,
|
|
48
|
+
size: 'medium',
|
|
49
|
+
onClick: undefined,
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/stories/Button.jsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAmD,EAAE,EAAE;QAAvD,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,OAAY,EAAP,KAAK,cAAjD,+CAAmD,CAAF;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,6BAA6B,CAAC;IACnF,OAAO,CACL,8CACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC5E,KAAK,EAAE,eAAe,IAAI,EAAE,eAAe,EAAE,IACzC,KAAK,GAER,KAAK,CACC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,GAAG;IACjB;;OAEG;IACH,OAAO,EAAE,SAAS,CAAC,IAAI;IACvB;;OAEG;IACH,eAAe,EAAE,SAAS,CAAC,MAAM;IACjC;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IAClC;;OAEG;IACH,OAAO,EAAE,SAAS,CAAC,IAAI;CACxB,CAAC;AAEF,MAAM,CAAC,YAAY,GAAG;IACpB,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;CACnB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export const title: string;
|
|
3
|
+
export { Button as component };
|
|
4
|
+
export namespace argTypes {
|
|
5
|
+
namespace backgroundColor {
|
|
6
|
+
const control: string;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export default _default;
|
|
11
|
+
export const Primary: any;
|
|
12
|
+
export const Secondary: any;
|
|
13
|
+
export const Large: any;
|
|
14
|
+
export const Small: any;
|
|
15
|
+
import { Button } from "./Button";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Button } from './Button';
|
|
3
|
+
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Example/Button',
|
|
6
|
+
component: Button,
|
|
7
|
+
// More on argTypes: https://storybook.js.org/docs/react/api/argtypes
|
|
8
|
+
argTypes: {
|
|
9
|
+
backgroundColor: { control: 'color' },
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
|
|
13
|
+
const Template = (args) => React.createElement(Button, Object.assign({}, args));
|
|
14
|
+
export const Primary = Template.bind({});
|
|
15
|
+
// More on args: https://storybook.js.org/docs/react/writing-stories/args
|
|
16
|
+
Primary.args = {
|
|
17
|
+
primary: true,
|
|
18
|
+
label: 'Button',
|
|
19
|
+
};
|
|
20
|
+
export const Secondary = Template.bind({});
|
|
21
|
+
Secondary.args = {
|
|
22
|
+
label: 'Button',
|
|
23
|
+
};
|
|
24
|
+
export const Large = Template.bind({});
|
|
25
|
+
Large.args = {
|
|
26
|
+
size: 'large',
|
|
27
|
+
label: 'Button',
|
|
28
|
+
};
|
|
29
|
+
export const Small = Template.bind({});
|
|
30
|
+
Small.args = {
|
|
31
|
+
size: 'small',
|
|
32
|
+
label: 'Button',
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=Button.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.stories.js","sourceRoot":"","sources":["../../src/stories/Button.stories.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,0GAA0G;AAC1G,eAAe;IACb,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,MAAM;IACjB,qEAAqE;IACrE,QAAQ,EAAE;QACR,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;KACtC;CACF,CAAC;AAEF,2GAA2G;AAC3G,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAC,MAAM,oBAAK,IAAI,EAAI,CAAC;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzC,yEAAyE;AACzE,OAAO,CAAC,IAAI,GAAG;IACb,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,SAAS,CAAC,IAAI,GAAG;IACf,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvC,KAAK,CAAC,IAAI,GAAG;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvC,KAAK,CAAC,IAAI,GAAG;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;CAChB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function Header({ user, onLogin, onLogout, onCreateAccount }: {
|
|
2
|
+
user: any;
|
|
3
|
+
onLogin: any;
|
|
4
|
+
onLogout: any;
|
|
5
|
+
onCreateAccount: any;
|
|
6
|
+
}): JSX.Element;
|
|
7
|
+
export namespace Header {
|
|
8
|
+
namespace propTypes {
|
|
9
|
+
const user: PropTypes.Requireable<PropTypes.InferProps<{}>>;
|
|
10
|
+
const onLogin: PropTypes.Validator<(...args: any[]) => any>;
|
|
11
|
+
const onLogout: PropTypes.Validator<(...args: any[]) => any>;
|
|
12
|
+
const onCreateAccount: PropTypes.Validator<(...args: any[]) => any>;
|
|
13
|
+
}
|
|
14
|
+
namespace defaultProps {
|
|
15
|
+
const user_1: null;
|
|
16
|
+
export { user_1 as user };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
import PropTypes from "prop-types";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Button } from './Button';
|
|
4
|
+
import './header.css';
|
|
5
|
+
export const Header = ({ user, onLogin, onLogout, onCreateAccount }) => (React.createElement("header", null,
|
|
6
|
+
React.createElement("div", { className: "wrapper" },
|
|
7
|
+
React.createElement("div", null,
|
|
8
|
+
React.createElement("svg", { width: "32", height: "32", viewBox: "0 0 32 32", xmlns: "http://www.w3.org/2000/svg" },
|
|
9
|
+
React.createElement("g", { fill: "none", fillRule: "evenodd" },
|
|
10
|
+
React.createElement("path", { d: "M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z", fill: "#FFF" }),
|
|
11
|
+
React.createElement("path", { d: "M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z", fill: "#555AB9" }),
|
|
12
|
+
React.createElement("path", { d: "M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z", fill: "#91BAF8" }))),
|
|
13
|
+
React.createElement("h1", null, "Acme")),
|
|
14
|
+
React.createElement("div", null, user ? (React.createElement(React.Fragment, null,
|
|
15
|
+
React.createElement("span", { className: "welcome" },
|
|
16
|
+
"Welcome, ",
|
|
17
|
+
React.createElement("b", null, user.name),
|
|
18
|
+
"!"),
|
|
19
|
+
React.createElement(Button, { size: "small", onClick: onLogout, label: "Log out" }))) : (React.createElement(React.Fragment, null,
|
|
20
|
+
React.createElement(Button, { size: "small", onClick: onLogin, label: "Log in" }),
|
|
21
|
+
React.createElement(Button, { primary: true, size: "small", onClick: onCreateAccount, label: "Sign up" })))))));
|
|
22
|
+
Header.propTypes = {
|
|
23
|
+
user: PropTypes.shape({}),
|
|
24
|
+
onLogin: PropTypes.func.isRequired,
|
|
25
|
+
onLogout: PropTypes.func.isRequired,
|
|
26
|
+
onCreateAccount: PropTypes.func.isRequired,
|
|
27
|
+
};
|
|
28
|
+
Header.defaultProps = {
|
|
29
|
+
user: null,
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/stories/Header.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CACtE;IACE,6BAAK,SAAS,EAAC,SAAS;QACtB;YACE,6BAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,4BAA4B;gBAChF,2BAAG,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAC,SAAS;oBAC/B,8BACE,CAAC,EAAC,mFAAmF,EACrF,IAAI,EAAC,MAAM,GACX;oBACF,8BACE,CAAC,EAAC,kEAAkE,EACpE,IAAI,EAAC,SAAS,GACd;oBACF,8BACE,CAAC,EAAC,gEAAgE,EAClE,IAAI,EAAC,SAAS,GACd,CACA,CACA;YACN,uCAAa,CACT;QACN,iCACG,IAAI,CAAC,CAAC,CAAC,CACN;YACE,8BAAM,SAAS,EAAC,SAAS;;gBACd,+BAAI,IAAI,CAAC,IAAI,CAAK;oBACtB;YACP,oBAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAC,SAAS,GAAG,CACzD,CACJ,CAAC,CAAC,CAAC,CACF;YACE,oBAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,QAAQ,GAAG;YACxD,oBAAC,MAAM,IAAC,OAAO,QAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAC,SAAS,GAAG,CACxE,CACJ,CACG,CACF,CACC,CACV,CAAC;AAEF,MAAM,CAAC,SAAS,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IAClC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACnC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CAC3C,CAAC;AAEF,MAAM,CAAC,YAAY,GAAG;IACpB,IAAI,EAAE,IAAI;CACX,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export const title: string;
|
|
3
|
+
export { Header as component };
|
|
4
|
+
export namespace parameters {
|
|
5
|
+
const layout: string;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default _default;
|
|
9
|
+
export const LoggedIn: any;
|
|
10
|
+
export const LoggedOut: any;
|
|
11
|
+
import { Header } from "./Header";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Header } from './Header';
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Example/Header',
|
|
5
|
+
component: Header,
|
|
6
|
+
parameters: {
|
|
7
|
+
// More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
|
|
8
|
+
layout: 'fullscreen',
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
const Template = (args) => React.createElement(Header, Object.assign({}, args));
|
|
12
|
+
export const LoggedIn = Template.bind({});
|
|
13
|
+
LoggedIn.args = {
|
|
14
|
+
user: {
|
|
15
|
+
name: 'Jane Doe',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
export const LoggedOut = Template.bind({});
|
|
19
|
+
LoggedOut.args = {};
|
|
20
|
+
//# sourceMappingURL=Header.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.stories.js","sourceRoot":"","sources":["../../src/stories/Header.stories.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAe;IACb,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE;QACV,mFAAmF;QACnF,MAAM,EAAE,YAAY;KACrB;CACF,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAC,MAAM,oBAAK,IAAI,EAAI,CAAC;AAEhD,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,CAAC,IAAI,GAAG;IACd,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;KACjB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function Page(): JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Header } from './Header';
|
|
3
|
+
import './page.css';
|
|
4
|
+
export const Page = () => {
|
|
5
|
+
const [user, setUser] = React.useState();
|
|
6
|
+
return (React.createElement("article", null,
|
|
7
|
+
React.createElement(Header, { user: user, onLogin: () => setUser({ name: 'Jane Doe' }), onLogout: () => setUser(undefined), onCreateAccount: () => setUser({ name: 'Jane Doe' }) }),
|
|
8
|
+
React.createElement("section", null,
|
|
9
|
+
React.createElement("h2", null, "Pages in Storybook"),
|
|
10
|
+
React.createElement("p", null,
|
|
11
|
+
"We recommend building UIs with a",
|
|
12
|
+
' ',
|
|
13
|
+
React.createElement("a", { href: "https://componentdriven.org", target: "_blank", rel: "noopener noreferrer" },
|
|
14
|
+
React.createElement("strong", null, "component-driven")),
|
|
15
|
+
' ',
|
|
16
|
+
"process starting with atomic components and ending with pages."),
|
|
17
|
+
React.createElement("p", null, "Render pages with mock data. This makes it easy to build and review page states without needing to navigate to them in your app. Here are some handy patterns for managing page data in Storybook:"),
|
|
18
|
+
React.createElement("ul", null,
|
|
19
|
+
React.createElement("li", null, "Use a higher-level connected component. Storybook helps you compose such data from the \"args\" of child component stories"),
|
|
20
|
+
React.createElement("li", null, "Assemble data in the page component from your services. You can mock these services out using Storybook.")),
|
|
21
|
+
React.createElement("p", null,
|
|
22
|
+
"Get a guided tutorial on component-driven development at",
|
|
23
|
+
' ',
|
|
24
|
+
React.createElement("a", { href: "https://storybook.js.org/tutorials/", target: "_blank", rel: "noopener noreferrer" }, "Storybook tutorials"),
|
|
25
|
+
". Read more in the",
|
|
26
|
+
' ',
|
|
27
|
+
React.createElement("a", { href: "https://storybook.js.org/docs", target: "_blank", rel: "noopener noreferrer" }, "docs"),
|
|
28
|
+
"."),
|
|
29
|
+
React.createElement("div", { className: "tip-wrapper" },
|
|
30
|
+
React.createElement("span", { className: "tip" }, "Tip"),
|
|
31
|
+
" Adjust the width of the canvas with the",
|
|
32
|
+
' ',
|
|
33
|
+
React.createElement("svg", { width: "10", height: "10", viewBox: "0 0 12 12", xmlns: "http://www.w3.org/2000/svg" },
|
|
34
|
+
React.createElement("g", { fill: "none", fillRule: "evenodd" },
|
|
35
|
+
React.createElement("path", { d: "M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z", id: "a", fill: "#999" }))),
|
|
36
|
+
"Viewports addon in the toolbar"))));
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=Page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Page.js","sourceRoot":"","sources":["../../src/stories/Page.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE;IACvB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEzC,OAAO,CACL;QACE,oBAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAClC,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GACpD;QAEF;YACE,qDAA2B;YAC3B;;gBACmC,GAAG;gBACpC,2BAAG,IAAI,EAAC,6BAA6B,EAAC,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB;oBAC7E,uDAAiC,CAC/B;gBAAC,GAAG;iFAEN;YACJ,oOAII;YACJ;gBACE,6JAGK;gBACL,2IAGK,CACF;YACL;;gBAC2D,GAAG;gBAC5D,2BAAG,IAAI,EAAC,qCAAqC,EAAC,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,0BAEnF;;gBACe,GAAG;gBACtB,2BAAG,IAAI,EAAC,+BAA+B,EAAC,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,WAE7E;oBAEF;YACJ,6BAAK,SAAS,EAAC,aAAa;gBAC1B,8BAAM,SAAS,EAAC,KAAK,UAAW;;gBAAyC,GAAG;gBAC5E,6BAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,4BAA4B;oBAChF,2BAAG,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAC,SAAS;wBAC/B,8BACE,CAAC,EAAC,sOAAsO,EACxO,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,MAAM,GACX,CACA,CACA;iDAEF,CACE,CACF,CACX,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export const title: string;
|
|
3
|
+
export { Page as component };
|
|
4
|
+
export namespace parameters {
|
|
5
|
+
const layout: string;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default _default;
|
|
9
|
+
export const LoggedOut: any;
|
|
10
|
+
export const LoggedIn: any;
|
|
11
|
+
import { Page } from "./Page";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { within, userEvent } from '@storybook/testing-library';
|
|
12
|
+
import { Page } from './Page';
|
|
13
|
+
export default {
|
|
14
|
+
title: 'Example/Page',
|
|
15
|
+
component: Page,
|
|
16
|
+
parameters: {
|
|
17
|
+
// More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
|
|
18
|
+
layout: 'fullscreen',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const Template = (args) => React.createElement(Page, Object.assign({}, args));
|
|
22
|
+
// More on interaction testing: https://storybook.js.org/docs/react/writing-tests/interaction-testing
|
|
23
|
+
export const LoggedOut = Template.bind({});
|
|
24
|
+
export const LoggedIn = Template.bind({});
|
|
25
|
+
LoggedIn.play = ({ canvasElement }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
const canvas = within(canvasElement);
|
|
27
|
+
const loginButton = yield canvas.getByRole('button', { name: /Log in/i });
|
|
28
|
+
yield userEvent.click(loginButton);
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=Page.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Page.stories.js","sourceRoot":"","sources":["../../src/stories/Page.stories.jsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,eAAe;IACb,KAAK,EAAE,cAAc;IACrB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV,mFAAmF;QACnF,MAAM,EAAE,YAAY;KACrB;CACF,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAC,IAAI,oBAAK,IAAI,EAAI,CAAC;AAE9C,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,CAAC,IAAI,GAAG,CAAO,EAAE,aAAa,EAAE,EAAE,EAAE;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC,CAAA,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/comments</title><g id="illustration/comments" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Path" fill="#96D07C" d="M2.52730803,17.9196415 C2.44329744,17.9745167 2.36370847,18.000488 2.29303375,18.000488 C2.1197031,18.000488 2,17.8443588 2,17.5752855 L2,4 C2,1.790861 3.790861,3.23296945e-13 6,3.23296945e-13 L33.9995117,3.23296945e-13 C36.2086507,3.23296945e-13 37.9995117,1.790861 37.9995117,4 L37.9995117,9.999512 C37.9995117,12.208651 36.2086507,13.999512 33.9995117,13.999512 L8,13.999512 C7.83499225,13.999512 7.6723181,13.9895206 7.51254954,13.9701099 L2.52730803,17.9196415 Z"/><path id="Path" fill="#73E1E0" d="M7.51066,44.9703679 L2.52730803,47.9186655 C2.44329744,47.9735407 2.36370847,47.999512 2.29303375,47.999512 C2.1197031,47.999512 2,47.8433828 2,47.5743095 L2,35 C2,32.790861 3.790861,31 6,31 L26,31 C28.209139,31 30,32.790861 30,35 L30,41 C30,43.209139 28.209139,45 26,45 L8,45 C7.8343417,45 7.67103544,44.9899297 7.51066,44.9703679 Z"/><path id="Path" fill="#FFD476" d="M46,19.5 L46,33.0747975 C46,33.3438708 45.8802969,33.5 45.7069663,33.5 C45.6362915,33.5 45.5567026,33.4740287 45.472692,33.4191535 L40.4887103,29.4704446 C40.3285371,29.489956 40.1654415,29.5 40,29.5 L18,29.5 C15.790861,29.5 14,27.709139 14,25.5 L14,19.5 C14,17.290861 15.790861,15.5 18,15.5 L42,15.5 C44.209139,15.5 46,17.290861 46,19.5 Z"/></g></svg>
|