@ornikar/kitt-universal 1.0.0-pre

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.
Files changed (146) hide show
  1. package/dist/index-browser-all-dev.es.js +1934 -0
  2. package/dist/index-browser-all-dev.es.js.map +1 -0
  3. package/dist/index-browser-all.es.js +1920 -0
  4. package/dist/index-browser-all.es.js.map +1 -0
  5. package/dist/index-node-12.13-dev.cjs.js +2059 -0
  6. package/dist/index-node-12.13-dev.cjs.js.map +1 -0
  7. package/dist/index-node-12.13.cjs.js +2048 -0
  8. package/dist/index-node-12.13.cjs.js.map +1 -0
  9. package/index.js +7 -0
  10. package/package.json +61 -0
  11. package/src/.eslintrc.json +42 -0
  12. package/src/Avatar/Avatar.stories.tsx +47 -0
  13. package/src/Avatar/Avatar.tsx +60 -0
  14. package/src/Avatar/__snapshots__/Avatar.stories.tsx.snap +1229 -0
  15. package/src/Button/Button.stories.tsx +303 -0
  16. package/src/Button/Button.tsx +60 -0
  17. package/src/Button/ButtonContainer.tsx +32 -0
  18. package/src/Button/ButtonContent.tsx +133 -0
  19. package/src/Button/__snapshots__/Button.stories.tsx.snap +7483 -0
  20. package/src/Button/useButton.ts +14 -0
  21. package/src/Card/Card.stories.tsx +33 -0
  22. package/src/Card/Card.tsx +25 -0
  23. package/src/Card/__snapshots__/Card.stories.tsx.snap +306 -0
  24. package/src/FullScreenModal/Body.tsx +25 -0
  25. package/src/FullScreenModal/FullScreenModal.stories.tsx +65 -0
  26. package/src/FullScreenModal/FullScreenModal.tsx +21 -0
  27. package/src/FullScreenModal/Header.tsx +129 -0
  28. package/src/FullScreenModal/__snapshots__/FullScreenModal.stories.tsx.snap +771 -0
  29. package/src/Icon/Icon.stories.tsx +61 -0
  30. package/src/Icon/Icon.tsx +37 -0
  31. package/src/Icon/SpinningIcon.tsx +38 -0
  32. package/src/Icon/SpinningIcon.web.css +13 -0
  33. package/src/Icon/SpinningIcon.web.tsx +11 -0
  34. package/src/Icon/__snapshots__/Icon.stories.tsx.snap +5648 -0
  35. package/src/KittBreakpoints.ts +44 -0
  36. package/src/KittThemeProvider.tsx +30 -0
  37. package/src/ListItem/ListItem.stories.tsx +124 -0
  38. package/src/ListItem/ListItem.tsx +61 -0
  39. package/src/ListItem/ListItemContent.tsx +17 -0
  40. package/src/ListItem/ListItemSideContent.tsx +41 -0
  41. package/src/ListItem/__snapshots__/ListItem.stories.tsx.snap +1514 -0
  42. package/src/Loader/LargeLoader.tsx +12 -0
  43. package/src/Loader/LargeLoader.web.css +103 -0
  44. package/src/Loader/LargeLoader.web.test.tsx +10 -0
  45. package/src/Loader/LargeLoader.web.tsx +18 -0
  46. package/src/Loader/Loader.stories.tsx +49 -0
  47. package/src/Loader/Loader.tsx +21 -0
  48. package/src/Loader/Loader.web.test.tsx +20 -0
  49. package/src/Loader/Loader.web.tsx +14 -0
  50. package/src/Loader/__snapshots__/LargeLoader.web.test.tsx.snap +33 -0
  51. package/src/Loader/__snapshots__/Loader.stories.tsx.snap +607 -0
  52. package/src/Loader/__snapshots__/Loader.web.test.tsx.snap +103 -0
  53. package/src/Message/Message.stories.tsx +104 -0
  54. package/src/Message/Message.tsx +114 -0
  55. package/src/Message/__snapshots__/Message.stories.tsx.snap +2776 -0
  56. package/src/Modal/Body.tsx +20 -0
  57. package/src/Modal/Footer.tsx +18 -0
  58. package/src/Modal/Header.tsx +66 -0
  59. package/src/Modal/Modal.stories.tsx +183 -0
  60. package/src/Modal/Modal.tsx +66 -0
  61. package/src/Modal/OnCloseContext.ts +3 -0
  62. package/src/Modal/__snapshots__/Modal.stories.tsx.snap +2960 -0
  63. package/src/Notification/Notification.stories.tsx +103 -0
  64. package/src/Notification/Notification.tsx +21 -0
  65. package/src/Notification/__snapshots__/Notification.stories.tsx.snap +2861 -0
  66. package/src/Overlay/Overlay.tsx +22 -0
  67. package/src/Tag/Tag.stories.tsx +19 -0
  68. package/src/Tag/Tag.tsx +31 -0
  69. package/src/Tag/__snapshots__/Tag.stories.tsx.snap +303 -0
  70. package/src/Tooltip/Tooltip.tsx +17 -0
  71. package/src/__mocks__/react-native-safe-area-context.tsx +26 -0
  72. package/src/forms/InputFeedback/InputFeedback.stories.tsx +20 -0
  73. package/src/forms/InputFeedback/InputFeedback.tsx +28 -0
  74. package/src/forms/InputFeedback/__snapshots__/InputFeedback.stories.tsx.snap +252 -0
  75. package/src/forms/InputField/InputField.stories.tsx +21 -0
  76. package/src/forms/InputField/InputField.tsx +45 -0
  77. package/src/forms/InputField/__snapshots__/InputField.stories.tsx.snap +240 -0
  78. package/src/forms/InputFormState.ts +1 -0
  79. package/src/forms/InputText/InputText.stories.tsx +87 -0
  80. package/src/forms/InputText/InputText.tsx +172 -0
  81. package/src/forms/InputText/__snapshots__/InputText.stories.tsx.snap +4274 -0
  82. package/src/forms/InputText/useInputText.ts +19 -0
  83. package/src/forms/Label/Label.stories.tsx +16 -0
  84. package/src/forms/Label/Label.tsx +17 -0
  85. package/src/forms/Label/__snapshots__/Label.stories.tsx.snap +174 -0
  86. package/src/forms/Radio/Radio.stories.tsx +50 -0
  87. package/src/forms/Radio/Radio.tsx +81 -0
  88. package/src/forms/Radio/__snapshots__/Radio.stories.tsx.snap +967 -0
  89. package/src/forms/TextArea/TextArea.stories.tsx +74 -0
  90. package/src/forms/TextArea/TextArea.tsx +12 -0
  91. package/src/forms/TextArea/__snapshots__/TextArea.stories.tsx.snap +2091 -0
  92. package/src/index.ts +43 -0
  93. package/src/stories/Block.tsx +24 -0
  94. package/src/stories/Flex.tsx +16 -0
  95. package/src/stories/color-tokens.stories.tsx +143 -0
  96. package/src/stories-list.tsx +22 -0
  97. package/src/story-components/Section.tsx +56 -0
  98. package/src/story-components/Story.tsx +24 -0
  99. package/src/story-components/StoryDecorator.tsx +8 -0
  100. package/src/story-components/StoryGrid.tsx +80 -0
  101. package/src/story-components/StoryTitle.stories.tsx +12 -0
  102. package/src/story-components/StoryTitle.tsx +69 -0
  103. package/src/story-components/__snapshots__/StoryTitle.stories.tsx.snap +155 -0
  104. package/src/story-components/index.ts +13 -0
  105. package/src/themes/default.ts +34 -0
  106. package/src/themes/late-ocean/avatarLateOceanTheme.ts +12 -0
  107. package/src/themes/late-ocean/buttonLateOceanTheme.ts +37 -0
  108. package/src/themes/late-ocean/cardLateOceanTheme.ts +19 -0
  109. package/src/themes/late-ocean/colorsLateOceanTheme.ts +19 -0
  110. package/src/themes/late-ocean/feedbackMessageLateOceanTheme.ts +10 -0
  111. package/src/themes/late-ocean/formLateOceanTheme.ts +9 -0
  112. package/src/themes/late-ocean/fullScreenModalLateOceanTheme.ts +8 -0
  113. package/src/themes/late-ocean/inputFieldLateOceanTheme.ts +4 -0
  114. package/src/themes/late-ocean/inputLateOceanTheme.ts +55 -0
  115. package/src/themes/late-ocean/listItemLateOceanTheme.ts +8 -0
  116. package/src/themes/late-ocean/radioLateOceanTheme.ts +19 -0
  117. package/src/themes/late-ocean/shadowsLateOceanTheme.ts +3 -0
  118. package/src/themes/late-ocean/tagLateOceanTheme.ts +17 -0
  119. package/src/themes/late-ocean/typographyLateOceanTheme.ts +94 -0
  120. package/src/themes/palettes/lateOceanColorPalette.ts +24 -0
  121. package/src/typings/babel-config.d.ts +6 -0
  122. package/src/typings/metro.d.ts +6 -0
  123. package/src/typography/Typography.stories.tsx +115 -0
  124. package/src/typography/Typography.tsx +165 -0
  125. package/src/typography/TypographyIcon.stories.tsx +32 -0
  126. package/src/typography/TypographyIcon.tsx +35 -0
  127. package/src/typography/TypographyLink.stories.tsx +89 -0
  128. package/src/typography/TypographyLink.tsx +48 -0
  129. package/src/typography/__snapshots__/Typography.stories.tsx.snap +6118 -0
  130. package/src/typography/__snapshots__/TypographyIcon.stories.tsx.snap +334 -0
  131. package/src/typography/__snapshots__/TypographyLink.stories.tsx.snap +10945 -0
  132. package/src/utils/storybook/decorators/KittThemeDecorator.tsx +11 -0
  133. package/src/utils/storybook/decorators/SafeAreaProviderDecorator.tsx +11 -0
  134. package/src/utils/storybook/setup-global-decorators.ts +6 -0
  135. package/src/utils/tests/renderWithProvidersUtils.tsx +17 -0
  136. package/src/utils/typeUtils.ts +6 -0
  137. package/src/utils/windowSize/MatchWindowSize.tsx +14 -0
  138. package/src/utils/windowSize/__snapshots__/windowSize.stories.tsx.snap +1485 -0
  139. package/src/utils/windowSize/createWindowSizeHelper.test.ts +11 -0
  140. package/src/utils/windowSize/createWindowSizeHelper.ts +65 -0
  141. package/src/utils/windowSize/useMatchWindowSize.ts +14 -0
  142. package/src/utils/windowSize/useWindowSize.ts +1 -0
  143. package/src/utils/windowSize/windowSize.stories.tsx +116 -0
  144. package/tsconfig.build.json +30 -0
  145. package/tsconfig.json +13 -0
  146. package/yarn-error.log +22274 -0
@@ -0,0 +1,172 @@
1
+ import { EyeIcon, EyeOffIcon } from '@ornikar/kitt-icons';
2
+ import type { ReactElement } from 'react';
3
+ import React, { forwardRef } from 'react';
4
+ import type { KeyboardTypeOptions, TextInput as RNTextInput, TextInputProps as RNTextInputProps } from 'react-native';
5
+ import { Platform } from 'react-native';
6
+ import styled, { css, useTheme } from 'styled-components/native';
7
+ import { TypographyIcon } from '../../typography/TypographyIcon';
8
+ import type { InputFormState } from '../InputFormState';
9
+ import { useInputText } from './useInputText';
10
+
11
+ type InputTextType = 'text' | 'email' | 'password' | 'username';
12
+ export type InputTextState = 'default' | 'invalid' | 'disabled' | 'hover' | 'focus';
13
+
14
+ export interface InputTextProps extends Exclude<RNTextInputProps, 'nativeID'> {
15
+ id?: string;
16
+ name?: string;
17
+ disabled?: boolean;
18
+ type: InputTextType;
19
+ minHeight?: number;
20
+ state?: InputFormState;
21
+ /** @internal */
22
+ internalForceState?: InputTextState;
23
+ }
24
+
25
+ export interface TextInputMixinProps {
26
+ state: InputTextState;
27
+ }
28
+ interface InputProps extends TextInputMixinProps {
29
+ minHeight: number;
30
+ }
31
+
32
+ export const styledTextInputMixin = css<TextInputMixinProps>`
33
+ /* stylelint-disable declaration-property-value-allowed-list */
34
+ background-color: ${({ theme, state }) =>
35
+ state === 'disabled'
36
+ ? theme.kitt.forms.input.states.disabled.backgroundColor
37
+ : theme.kitt.forms.input.states.default.backgroundColor};
38
+ border-width: ${({ theme }) => theme.kitt.forms.input.borderWidth};
39
+ border-radius: ${({ theme }) => theme.kitt.forms.input.borderRadius};
40
+ border-color: ${({ theme, state }) => theme.kitt.forms.input.states[state].borderColor};
41
+ font-size: ${({ theme }) => theme.kitt.typography.types.bodies.configs.body.baseAndSmall.fontSize};
42
+ color: ${({ theme, state }) => theme.kitt.typography.colors[theme.kitt.forms.input.states[state].color]};
43
+ font-family: ${({ theme }) => theme.kitt.typography.types.bodies.fontFamily.regular};
44
+ `;
45
+
46
+ const Input = styled.TextInput<InputProps>`
47
+ /* stylelint-disable declaration-bang-space-before */
48
+ /* stylelint-disable comment-word-disallowed-list */
49
+
50
+ /* FIXME: text input is not vertically centered on iOS because of bigger line-height */
51
+ ${styledTextInputMixin}
52
+ padding: ${({ theme, multiline }) =>
53
+ !multiline && Platform.OS === 'ios' ? theme.kitt.forms.input.paddingSingleLineIOS : theme.kitt.forms.input.padding};
54
+ line-height: ${({ theme, multiline }) =>
55
+ !multiline && Platform.OS === 'ios' ? 0 : theme.kitt.typography.types.bodies.configs.body.baseAndSmall.lineHeight};
56
+ min-height: ${({ minHeight }) => minHeight}px;
57
+ `;
58
+
59
+ const Container = styled.View`
60
+ margin-top: ${({ theme }) => theme.kitt.forms.input.marginTop};
61
+ margin-bottom: ${({ theme }) => theme.kitt.forms.input.marginBottom};
62
+ `;
63
+
64
+ const PasswordButtonContainer = styled.Pressable`
65
+ position: absolute;
66
+ right: 0;
67
+ top: 0;
68
+ bottom: 0;
69
+ justify-content: center;
70
+ padding: ${({ theme }) => theme.kitt.forms.input.passwordButtonIconSize / 2}px;
71
+ `;
72
+
73
+ const getInputState = ({
74
+ isDisabled,
75
+ isFocused,
76
+ formState,
77
+ }: {
78
+ isFocused: boolean;
79
+ formState: InputFormState;
80
+ isDisabled: boolean;
81
+ }): InputTextState => {
82
+ if (isDisabled) return 'disabled';
83
+ if (isFocused) return 'focus';
84
+ if (formState === 'invalid') return 'invalid';
85
+ return 'default';
86
+ };
87
+
88
+ const keyboardTypeByTextInputType: Record<InputTextType, KeyboardTypeOptions> = {
89
+ text: 'default',
90
+ email: 'email-address',
91
+ password: 'default',
92
+ username: 'default',
93
+ };
94
+
95
+ const autoCompleteTypeByType: Record<InputTextType, 'off' | 'email' | 'password' | 'name'> = {
96
+ text: 'off',
97
+ email: 'email',
98
+ password: 'password',
99
+ username: 'name',
100
+ };
101
+
102
+ const autoCorrectByType: Record<InputTextType, boolean> = {
103
+ text: true,
104
+ email: false,
105
+ password: false,
106
+ username: false,
107
+ };
108
+
109
+ const textContentTypeByType: Record<InputTextType, 'none' | 'emailAddress' | 'password' | 'username'> = {
110
+ text: 'none',
111
+ email: 'emailAddress',
112
+ password: 'password',
113
+ username: 'username',
114
+ };
115
+
116
+ export const InputText = forwardRef<RNTextInput, InputTextProps>(
117
+ (
118
+ {
119
+ id,
120
+ minHeight = 0,
121
+ type,
122
+ state: formState,
123
+ internalForceState,
124
+ disabled = false,
125
+ onFocus,
126
+ onBlur,
127
+ ...props
128
+ }: InputTextProps,
129
+ ref,
130
+ ): ReactElement => {
131
+ const { isFocused, handleInputBlur, handleInputFocus, isPasswordVisible, togglePasswordVisibility } =
132
+ useInputText();
133
+ const theme = useTheme();
134
+ const state = internalForceState || getInputState({ isFocused, isDisabled: disabled, formState });
135
+ return (
136
+ <Container>
137
+ <Input
138
+ ref={ref}
139
+ nativeID={id}
140
+ editable={!disabled}
141
+ keyboardType={keyboardTypeByTextInputType[type]}
142
+ autoCompleteType={autoCompleteTypeByType[type]}
143
+ autoCorrect={autoCorrectByType[type]}
144
+ minHeight={minHeight}
145
+ textContentType={textContentTypeByType[type]}
146
+ placeholderTextColor={theme.kitt.typography.colors[theme.kitt.forms.input.placeholderColor]}
147
+ selectionColor={theme.kitt.forms.input.selectionColor}
148
+ secureTextEntry={type === 'password' && !isPasswordVisible}
149
+ {...props}
150
+ state={state}
151
+ onFocus={(e) => {
152
+ handleInputFocus();
153
+ if (onFocus) onFocus(e);
154
+ }}
155
+ onBlur={(e) => {
156
+ handleInputBlur();
157
+ if (onBlur) onBlur(e);
158
+ }}
159
+ />
160
+ {type === 'password' && !disabled && (
161
+ <PasswordButtonContainer onPress={togglePasswordVisibility}>
162
+ <TypographyIcon
163
+ icon={isPasswordVisible ? <EyeIcon /> : <EyeOffIcon />}
164
+ size={theme.kitt.forms.input.passwordButtonIconSize}
165
+ color={theme.kitt.forms.input.states[state].passwordButtonIconColor}
166
+ />
167
+ </PasswordButtonContainer>
168
+ )}
169
+ </Container>
170
+ );
171
+ },
172
+ );