@helpwave/hightide-native 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/LICENSE +208 -0
- package/package.json +93 -0
- package/src/components/Button/Button.tsx +101 -0
- package/src/components/Button/index.ts +1 -0
- package/src/components/Checkbox/Checkbox.tsx +103 -0
- package/src/components/Checkbox/index.ts +1 -0
- package/src/components/Chip/Chip.tsx +93 -0
- package/src/components/Chip/index.ts +1 -0
- package/src/components/IconButton/IconButton.tsx +89 -0
- package/src/components/IconButton/index.ts +1 -0
- package/src/components/Input/Input.tsx +114 -0
- package/src/components/Input/index.ts +1 -0
- package/src/components/MultiSelect/MultiSelect.tsx +153 -0
- package/src/components/MultiSelect/index.ts +1 -0
- package/src/components/Select/Select.tsx +136 -0
- package/src/components/Select/index.ts +1 -0
- package/src/components/index.ts +7 -0
- package/src/global-contexts/HightideContext.ts +18 -0
- package/src/global-contexts/HightideProvider.tsx +57 -0
- package/src/global-contexts/hightide-config/HightideConfigUtils.ts +25 -0
- package/src/global-contexts/hightide-config/forward-exports.ts +1 -0
- package/src/global-contexts/hightide-config/index.ts +2 -0
- package/src/global-contexts/index.ts +6 -0
- package/src/global-contexts/localization/LocalizationProvider.tsx +31 -0
- package/src/global-contexts/localization/forward-exports.ts +8 -0
- package/src/global-contexts/localization/index.ts +2 -0
- package/src/global-contexts/theme/ThemeContext.ts +23 -0
- package/src/global-contexts/theme/ThemeProvider.tsx +101 -0
- package/src/global-contexts/theme/forward-exports.ts +7 -0
- package/src/global-contexts/theme/index.ts +3 -0
- package/src/global-contexts/translation/forward-exports.ts +11 -0
- package/src/global-contexts/translation/index.ts +1 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useMultiSelect.ts +232 -0
- package/src/hooks/useNativeKeyValueStore.ts +59 -0
- package/src/hooks/useSelect.ts +198 -0
- package/src/icons/Icon.tsx +35 -0
- package/src/icons/index.ts +1 -0
- package/src/storybook/helper.tsx +36 -0
- package/src/theme/index.ts +3 -0
- package/src/theme/resolvers/button.ts +74 -0
- package/src/theme/resolvers/checkbox.ts +86 -0
- package/src/theme/resolvers/chip.ts +64 -0
- package/src/theme/resolvers/coloring.ts +90 -0
- package/src/theme/resolvers/iconButton.ts +62 -0
- package/src/theme/resolvers/index.ts +8 -0
- package/src/theme/resolvers/input.ts +48 -0
- package/src/theme/resolvers/multiSelect.ts +95 -0
- package/src/theme/resolvers/select.ts +77 -0
- package/src/theme/themes/createTheme.ts +26 -0
- package/src/theme/themes/index.ts +2 -0
- package/src/theme/themes/nativeThemes.ts +15 -0
- package/src/theme/types/button.ts +41 -0
- package/src/theme/types/checkbox.ts +36 -0
- package/src/theme/types/chip.ts +41 -0
- package/src/theme/types/components.ts +17 -0
- package/src/theme/types/iconButton.ts +34 -0
- package/src/theme/types/index.ts +10 -0
- package/src/theme/types/input.ts +25 -0
- package/src/theme/types/multiSelect.ts +65 -0
- package/src/theme/types/resolver.ts +10 -0
- package/src/theme/types/select.ts +77 -0
- package/src/theme/types/theme.ts +13 -0
- package/src/types/formField.ts +12 -0
- package/src/types/index.ts +1 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ButtonColoringStyle,
|
|
3
|
+
ColorValue,
|
|
4
|
+
ColoringType,
|
|
5
|
+
ElementSize,
|
|
6
|
+
FontWeight
|
|
7
|
+
} from '@helpwave/hightide-design'
|
|
8
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
9
|
+
|
|
10
|
+
export type ButtonState = InteractionState & {
|
|
11
|
+
size?: ElementSize,
|
|
12
|
+
color?: ColoringType,
|
|
13
|
+
coloringStyle?: ButtonColoringStyle,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type ButtonStyle = {
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
justifyContent: 'center',
|
|
20
|
+
backgroundColor: ColorValue | 'transparent',
|
|
21
|
+
borderColor?: ColorValue,
|
|
22
|
+
borderWidth: number,
|
|
23
|
+
paddingVertical: number,
|
|
24
|
+
paddingHorizontal: number,
|
|
25
|
+
gap: number,
|
|
26
|
+
minWidth: number,
|
|
27
|
+
minHeight: number,
|
|
28
|
+
borderRadius: number,
|
|
29
|
+
opacity: number,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type ButtonTextStyle = {
|
|
33
|
+
color: ColorValue,
|
|
34
|
+
fontSize: number,
|
|
35
|
+
fontWeight: FontWeight,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type ButtonTheme = {
|
|
39
|
+
button: ResolverFunction<ButtonState, ButtonStyle>,
|
|
40
|
+
text: ResolverFunction<ButtonState, ButtonTextStyle>,
|
|
41
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ColorValue, ElementSize } from '@helpwave/hightide-design'
|
|
2
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
3
|
+
|
|
4
|
+
export type CheckboxSize = 'sm' | 'md' | 'lg'
|
|
5
|
+
|
|
6
|
+
export type CheckboxState = InteractionState & {
|
|
7
|
+
size?: CheckboxSize,
|
|
8
|
+
isChecked?: boolean,
|
|
9
|
+
isIndeterminate?: boolean,
|
|
10
|
+
isInvalid?: boolean,
|
|
11
|
+
isRounded?: boolean,
|
|
12
|
+
alwaysShowCheckIcon?: boolean,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type CheckboxStyle = {
|
|
16
|
+
width: number,
|
|
17
|
+
height: number,
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
justifyContent: 'center',
|
|
20
|
+
borderWidth: number,
|
|
21
|
+
borderColor: ColorValue,
|
|
22
|
+
borderRadius: number,
|
|
23
|
+
backgroundColor: ColorValue,
|
|
24
|
+
opacity: number,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type CheckboxIconStyle = {
|
|
28
|
+
color: ColorValue,
|
|
29
|
+
size: Exclude<ElementSize, 'xs'>,
|
|
30
|
+
visible: boolean,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type CheckboxTheme = {
|
|
34
|
+
checkbox: ResolverFunction<CheckboxState, CheckboxStyle>,
|
|
35
|
+
icon: ResolverFunction<CheckboxState, CheckboxIconStyle>,
|
|
36
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ChipColoringStyle,
|
|
3
|
+
ColorValue,
|
|
4
|
+
ColoringType,
|
|
5
|
+
ElementSize,
|
|
6
|
+
FontWeight
|
|
7
|
+
} from '@helpwave/hightide-design'
|
|
8
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
9
|
+
|
|
10
|
+
export type ChipState = InteractionState & {
|
|
11
|
+
size?: ElementSize,
|
|
12
|
+
color?: ColoringType,
|
|
13
|
+
coloringStyle?: ChipColoringStyle,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type ChipStyle = {
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
justifyContent: 'center',
|
|
20
|
+
alignSelf: 'flex-start',
|
|
21
|
+
backgroundColor: ColorValue | 'transparent',
|
|
22
|
+
borderColor?: ColorValue,
|
|
23
|
+
borderWidth: number,
|
|
24
|
+
paddingVertical: number,
|
|
25
|
+
paddingHorizontal: number,
|
|
26
|
+
gap: number,
|
|
27
|
+
minHeight: number,
|
|
28
|
+
borderRadius: number,
|
|
29
|
+
opacity: number,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type ChipTextStyle = {
|
|
33
|
+
color: ColorValue,
|
|
34
|
+
fontSize: number,
|
|
35
|
+
fontWeight: FontWeight,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type ChipTheme = {
|
|
39
|
+
chip: ResolverFunction<ChipState, ChipStyle>,
|
|
40
|
+
text: ResolverFunction<ChipState, ChipTextStyle>,
|
|
41
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ButtonTheme } from './button'
|
|
2
|
+
import type { CheckboxTheme } from './checkbox'
|
|
3
|
+
import type { ChipTheme } from './chip'
|
|
4
|
+
import type { IconButtonTheme } from './iconButton'
|
|
5
|
+
import type { InputTheme } from './input'
|
|
6
|
+
import type { MultiSelectTheme } from './multiSelect'
|
|
7
|
+
import type { SelectTheme } from './select'
|
|
8
|
+
|
|
9
|
+
export type ComponentThemes = {
|
|
10
|
+
button: ButtonTheme,
|
|
11
|
+
iconButton: IconButtonTheme,
|
|
12
|
+
chip: ChipTheme,
|
|
13
|
+
checkbox: CheckboxTheme,
|
|
14
|
+
input: InputTheme,
|
|
15
|
+
select: SelectTheme,
|
|
16
|
+
multiSelect: MultiSelectTheme,
|
|
17
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ButtonColoringStyle,
|
|
3
|
+
ColorValue,
|
|
4
|
+
ColoringType,
|
|
5
|
+
ElementSize
|
|
6
|
+
} from '@helpwave/hightide-design'
|
|
7
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
8
|
+
|
|
9
|
+
export type IconButtonState = InteractionState & {
|
|
10
|
+
size?: ElementSize,
|
|
11
|
+
color?: ColoringType,
|
|
12
|
+
coloringStyle?: ButtonColoringStyle,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type IconButtonStyle = {
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
justifyContent: 'center',
|
|
18
|
+
backgroundColor: ColorValue | 'transparent',
|
|
19
|
+
borderColor?: ColorValue,
|
|
20
|
+
borderWidth: number,
|
|
21
|
+
width: number,
|
|
22
|
+
height: number,
|
|
23
|
+
borderRadius: number,
|
|
24
|
+
opacity: number,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type IconButtonIconStyle = {
|
|
28
|
+
color: ColorValue,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type IconButtonTheme = {
|
|
32
|
+
button: ResolverFunction<IconButtonState, IconButtonStyle>,
|
|
33
|
+
icon: ResolverFunction<IconButtonState, IconButtonIconStyle>,
|
|
34
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './button'
|
|
2
|
+
export * from './checkbox'
|
|
3
|
+
export * from './chip'
|
|
4
|
+
export * from './components'
|
|
5
|
+
export * from './iconButton'
|
|
6
|
+
export * from './input'
|
|
7
|
+
export * from './multiSelect'
|
|
8
|
+
export * from './resolver'
|
|
9
|
+
export * from './select'
|
|
10
|
+
export * from './theme'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ColorValue } from '@helpwave/hightide-design'
|
|
2
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
3
|
+
|
|
4
|
+
export type InputState = InteractionState & {
|
|
5
|
+
isInvalid?: boolean,
|
|
6
|
+
isReadOnly?: boolean,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type InputStyle = {
|
|
10
|
+
minHeight: number,
|
|
11
|
+
paddingHorizontal: number,
|
|
12
|
+
paddingVertical: number,
|
|
13
|
+
borderRadius: number,
|
|
14
|
+
borderWidth: number,
|
|
15
|
+
borderColor: ColorValue,
|
|
16
|
+
backgroundColor: ColorValue,
|
|
17
|
+
color: ColorValue,
|
|
18
|
+
fontSize: number,
|
|
19
|
+
opacity: number,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type InputTheme = {
|
|
23
|
+
input: ResolverFunction<InputState, InputStyle>,
|
|
24
|
+
placeholderColor: ResolverFunction<InputState, ColorValue>,
|
|
25
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ColorValue, FontWeight } from '@helpwave/hightide-design'
|
|
2
|
+
import type { ResolverFunction } from './resolver'
|
|
3
|
+
import type {
|
|
4
|
+
SelectMenuStyle,
|
|
5
|
+
SelectOptionState,
|
|
6
|
+
SelectOverlayStyle,
|
|
7
|
+
SelectSearchStyle,
|
|
8
|
+
SelectState,
|
|
9
|
+
SelectTriggerStyle,
|
|
10
|
+
SelectTriggerTextStyle
|
|
11
|
+
} from './select'
|
|
12
|
+
|
|
13
|
+
export type MultiSelectState = SelectState & {
|
|
14
|
+
hasSelections?: boolean,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type MultiSelectOptionState = SelectOptionState
|
|
18
|
+
|
|
19
|
+
export type MultiSelectTriggerStyle = SelectTriggerStyle & {
|
|
20
|
+
gap: number,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type MultiSelectOptionStyle = {
|
|
24
|
+
paddingHorizontal: number,
|
|
25
|
+
paddingVertical: number,
|
|
26
|
+
backgroundColor: ColorValue | 'transparent',
|
|
27
|
+
opacity: number,
|
|
28
|
+
flexDirection: 'row',
|
|
29
|
+
alignItems: 'center',
|
|
30
|
+
gap: number,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type MultiSelectOptionTextStyle = {
|
|
34
|
+
color: ColorValue,
|
|
35
|
+
fontWeight: FontWeight,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type MultiSelectCheckboxStyle = {
|
|
39
|
+
width: number,
|
|
40
|
+
height: number,
|
|
41
|
+
borderRadius: number,
|
|
42
|
+
borderWidth: number,
|
|
43
|
+
borderColor: ColorValue,
|
|
44
|
+
backgroundColor: ColorValue | 'transparent',
|
|
45
|
+
alignItems: 'center',
|
|
46
|
+
justifyContent: 'center',
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type MultiSelectCheckboxIconStyle = {
|
|
50
|
+
color: ColorValue,
|
|
51
|
+
visible: boolean,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type MultiSelectTheme = {
|
|
55
|
+
trigger: ResolverFunction<MultiSelectState, MultiSelectTriggerStyle>,
|
|
56
|
+
triggerText: ResolverFunction<MultiSelectState, SelectTriggerTextStyle>,
|
|
57
|
+
overlay: ResolverFunction<MultiSelectState, SelectOverlayStyle>,
|
|
58
|
+
menu: ResolverFunction<MultiSelectState, SelectMenuStyle>,
|
|
59
|
+
search: ResolverFunction<MultiSelectState, SelectSearchStyle>,
|
|
60
|
+
searchPlaceholderColor: ResolverFunction<MultiSelectState, ColorValue>,
|
|
61
|
+
option: ResolverFunction<MultiSelectOptionState, MultiSelectOptionStyle>,
|
|
62
|
+
optionText: ResolverFunction<MultiSelectOptionState, MultiSelectOptionTextStyle>,
|
|
63
|
+
checkbox: ResolverFunction<MultiSelectOptionState, MultiSelectCheckboxStyle>,
|
|
64
|
+
checkboxIcon: ResolverFunction<MultiSelectOptionState, MultiSelectCheckboxIconStyle>,
|
|
65
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ColorValue, FontWeight } from '@helpwave/hightide-design'
|
|
2
|
+
import type { InteractionState, ResolverFunction } from './resolver'
|
|
3
|
+
|
|
4
|
+
export type SelectState = InteractionState & {
|
|
5
|
+
isInvalid?: boolean,
|
|
6
|
+
isReadOnly?: boolean,
|
|
7
|
+
isOpen?: boolean,
|
|
8
|
+
hasValue?: boolean,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type SelectOptionState = InteractionState & {
|
|
12
|
+
isSelected?: boolean,
|
|
13
|
+
isHighlighted?: boolean,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type SelectTriggerStyle = {
|
|
17
|
+
minHeight: number,
|
|
18
|
+
paddingHorizontal: number,
|
|
19
|
+
paddingVertical: number,
|
|
20
|
+
borderRadius: number,
|
|
21
|
+
borderWidth: number,
|
|
22
|
+
borderColor: ColorValue,
|
|
23
|
+
backgroundColor: ColorValue,
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
opacity: number,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type SelectTriggerTextStyle = {
|
|
29
|
+
color: ColorValue,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type SelectOverlayStyle = {
|
|
33
|
+
flex: 1,
|
|
34
|
+
backgroundColor: ColorValue,
|
|
35
|
+
justifyContent: 'center',
|
|
36
|
+
padding: number,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type SelectMenuStyle = {
|
|
40
|
+
maxHeight: number,
|
|
41
|
+
borderRadius: number,
|
|
42
|
+
backgroundColor: ColorValue,
|
|
43
|
+
borderWidth: number,
|
|
44
|
+
borderColor: ColorValue,
|
|
45
|
+
overflow: 'hidden',
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type SelectSearchStyle = {
|
|
49
|
+
paddingHorizontal: number,
|
|
50
|
+
paddingVertical: number,
|
|
51
|
+
borderBottomWidth: number,
|
|
52
|
+
borderBottomColor: ColorValue,
|
|
53
|
+
color: ColorValue,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type SelectOptionStyle = {
|
|
57
|
+
paddingHorizontal: number,
|
|
58
|
+
paddingVertical: number,
|
|
59
|
+
backgroundColor: ColorValue | 'transparent',
|
|
60
|
+
opacity: number,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type SelectOptionTextStyle = {
|
|
64
|
+
color: ColorValue,
|
|
65
|
+
fontWeight: FontWeight,
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type SelectTheme = {
|
|
69
|
+
trigger: ResolverFunction<SelectState, SelectTriggerStyle>,
|
|
70
|
+
triggerText: ResolverFunction<SelectState, SelectTriggerTextStyle>,
|
|
71
|
+
overlay: ResolverFunction<SelectState, SelectOverlayStyle>,
|
|
72
|
+
menu: ResolverFunction<SelectState, SelectMenuStyle>,
|
|
73
|
+
search: ResolverFunction<SelectState, SelectSearchStyle>,
|
|
74
|
+
searchPlaceholderColor: ResolverFunction<SelectState, ColorValue>,
|
|
75
|
+
option: ResolverFunction<SelectOptionState, SelectOptionStyle>,
|
|
76
|
+
optionText: ResolverFunction<SelectOptionState, SelectOptionTextStyle>,
|
|
77
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ColoringTokensDefinitions,
|
|
3
|
+
DesignColorPalettes,
|
|
4
|
+
SemanticColors
|
|
5
|
+
} from '@helpwave/hightide-design'
|
|
6
|
+
import type { ComponentThemes } from './components'
|
|
7
|
+
|
|
8
|
+
export type DesignTheme = {
|
|
9
|
+
palettes: DesignColorPalettes,
|
|
10
|
+
semantic: SemanticColors,
|
|
11
|
+
coloring: ColoringTokensDefinitions,
|
|
12
|
+
components: ComponentThemes,
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type FormFieldInteractionStates = {
|
|
2
|
+
invalid: boolean,
|
|
3
|
+
disabled: boolean,
|
|
4
|
+
readOnly: boolean,
|
|
5
|
+
required: boolean,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type FormFieldDataHandling<T> = {
|
|
9
|
+
value: T,
|
|
10
|
+
onValueChange: (value: T) => void,
|
|
11
|
+
onEditComplete: (value: T) => void,
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './formField'
|