@codeleap/mobile 5.1.4 → 5.2.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.
Files changed (30) hide show
  1. package/dist/components/Avatar/index.js +3 -3
  2. package/dist/components/Avatar/index.js.map +1 -1
  3. package/dist/components/Avatar/types.d.ts +3 -0
  4. package/dist/components/CalendarInput/index.js +4 -30
  5. package/dist/components/CalendarInput/index.js.map +1 -1
  6. package/dist/components/InputBase/useInputOverlay.d.ts +1 -0
  7. package/dist/components/InputBase/useInputOverlay.js +30 -0
  8. package/dist/components/InputBase/useInputOverlay.js.map +1 -0
  9. package/dist/components/TimeInput/index.d.ts +13 -0
  10. package/dist/components/TimeInput/index.js +64 -0
  11. package/dist/components/TimeInput/index.js.map +1 -0
  12. package/dist/components/TimeInput/styles.d.ts +2 -0
  13. package/dist/components/TimeInput/styles.js +2 -0
  14. package/dist/components/TimeInput/styles.js.map +1 -0
  15. package/dist/components/TimeInput/types.d.ts +23 -0
  16. package/dist/components/TimeInput/types.js +2 -0
  17. package/dist/components/TimeInput/types.js.map +1 -0
  18. package/dist/components/components.d.ts +1 -0
  19. package/dist/components/components.js +1 -0
  20. package/dist/components/components.js.map +1 -1
  21. package/package.json +20 -21
  22. package/package.json.bak +4 -5
  23. package/src/components/Avatar/index.tsx +6 -3
  24. package/src/components/Avatar/types.ts +3 -0
  25. package/src/components/CalendarInput/index.tsx +4 -38
  26. package/src/components/InputBase/useInputOverlay.ts +38 -0
  27. package/src/components/TimeInput/index.tsx +118 -0
  28. package/src/components/TimeInput/styles.ts +6 -0
  29. package/src/components/TimeInput/types.ts +28 -0
  30. package/src/components/components.ts +2 -1
@@ -14,7 +14,7 @@ import { useStylesFor } from '../../hooks';
14
14
  export * from './styles';
15
15
  export * from './types';
16
16
  export const Avatar = (props) => {
17
- const { debugName, name = '', firstNameOnly, image, icon, badgeIcon, text, description, onPress, noFeedback, badge, badgeProps = {}, style, ...viewProps } = {
17
+ const { debugName, name = '', firstNameOnly, image, icon, badgeIcon, text, description, onPress, noFeedback, badge, badgeProps = {}, imageProps, badgeIconTouchProps, style, ...viewProps } = {
18
18
  ...Avatar.defaultProps,
19
19
  ...props,
20
20
  };
@@ -32,7 +32,7 @@ export const Avatar = (props) => {
32
32
  }, [name, firstNameOnly]);
33
33
  const renderContent = () => {
34
34
  if (hasImage)
35
- return <Image source={image} style={styles.image}/>;
35
+ return <Image source={image} {...imageProps} style={styles.image}/>;
36
36
  if (icon)
37
37
  return <Icon name={icon} style={styles.icon}/>;
38
38
  return <Text text={text || initials} style={styles.initials}/>;
@@ -54,7 +54,7 @@ export const Avatar = (props) => {
54
54
  <Badge badge={badge} {...badgeProps} style={badgeStyles}/>
55
55
  </Touchable>
56
56
 
57
- {badgeIcon ? (<Touchable debugName={`AvatarBadge:${debugName}`} style={styles.badgeIconWrapper} onPress={() => onPress?.()} noFeedback>
57
+ {badgeIcon ? (<Touchable onPress={() => onPress?.()} noFeedback {...badgeIconTouchProps} debugName={`AvatarBadge:${debugName}`} style={styles.badgeIconWrapper}>
58
58
  <Icon name={badgeIcon} style={styles.badgeIcon}/>
59
59
  </Touchable>) : null}
60
60
  </View>);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Avatar/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Avatar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAa,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAa,oBAAoB,EAA8B,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AAEvB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAE,EAAE;IAC3C,MAAM,EACJ,SAAS,EACT,IAAI,GAAG,EAAE,EACT,aAAa,EACb,KAAK,EACL,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,EACL,UAAU,GAAG,EAAE,EACf,UAAU,EACV,mBAAmB,EACnB,KAAK,EACL,GAAG,SAAS,EACb,GAAG;QACF,GAAG,MAAM,CAAC,YAAY;QACtB,GAAG,KAAK;KACT,CAAA;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAA;IAExB,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7C,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAClF,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAE3B,IAAI,CAAC,aAAa;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1C,OAAO;YACL,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;YAC7B,WAAW,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3C,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;IAEzB,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAG,CAAA;QAClF,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAG,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAG,CAAA;IACjE,CAAC,CAAA;IAED,6BAA6B;IAC7B,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAA;IAE/D,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAEzD,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,SAAsB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACtD;MAAA,CAAC,SAAS,CACR,SAAS,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CACjC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAC3B,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,SAAS;YAChB,CAAC,kBAAkB,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE;SACxD,CAAC,CACF,UAAU,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,CAEnC;QAAA,CAAC,aAAa,EAAE,CAEhB;;QAAA,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CACf,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACrC;YAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EACrD;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CAER;;QAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAC1D;MAAA,EAAE,SAAS,CAEX;;MAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,SAAS,CACR,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAC3B,UAAU,CACV,IAAI,mBAAmB,CAAC,CACxB,SAAS,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CACtC,KAAK,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAE/B;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EACjD;QAAA,EAAE,SAAS,CAAC,CACb,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,iBAAiB,GAAG,QAAQ,CAAA;AACnC,MAAM,CAAC,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;AAC/F,MAAM,CAAC,WAAW,GAAG,SAAS,CAAA;AAE9B,MAAM,CAAC,gBAAgB,GAAG,CAAsB,MAAS,EAAE,EAAE;IAC3D,OAAO,MAA2E,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,CAAC,YAAY,GAAG;IACpB,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,IAAI;CACL,CAAA;AAEhB,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA"}
@@ -4,6 +4,7 @@ import { IconProps } from '../Icon';
4
4
  import { ImageProps } from '../Image';
5
5
  import { ViewProps } from '../View';
6
6
  import { AvatarComposition } from './styles';
7
+ import { TouchableProps } from '../Touchable';
7
8
  export type AvatarProps = Omit<ViewProps, 'style'> & BadgeComponentProps & {
8
9
  image?: ImageProps['source'];
9
10
  name?: string | string[];
@@ -13,7 +14,9 @@ export type AvatarProps = Omit<ViewProps, 'style'> & BadgeComponentProps & {
13
14
  description?: string;
14
15
  icon?: IconProps['name'];
15
16
  badgeIcon?: IconProps['name'];
17
+ badgeIconTouchProps?: Partial<TouchableProps>;
16
18
  style?: StyledProp<AvatarComposition>;
17
19
  onPress?: () => void;
18
20
  noFeedback?: boolean;
21
+ imageProps?: Partial<ImageProps>;
19
22
  };
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useState } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { useCompositionStyles } from '@codeleap/styles';
3
3
  import { MobileStyleRegistry } from '../../Registry';
4
4
  import { useStylesFor } from '../../hooks';
@@ -7,49 +7,23 @@ import { Calendar } from '../Calendar';
7
7
  import { TextInput } from '../TextInput';
8
8
  import dayjs from 'dayjs';
9
9
  import Animated, { FadeOut, FadeIn } from 'react-native-reanimated';
10
- import { globalState } from '@codeleap/store';
11
- import { useBooleanToggle, useId } from '@codeleap/hooks';
12
10
  import { useInputBase } from '../InputBase';
13
11
  import { fields } from '@codeleap/form';
12
+ import { useInputOverlay } from '../InputBase/useInputOverlay';
14
13
  export * from './styles';
15
14
  export * from './types';
16
- const calendarStore = globalState({});
17
- const useCalendar = (id, autoClosePeersCalendars) => {
18
- if (!autoClosePeersCalendars)
19
- return useBooleanToggle(false);
20
- const isOpen = calendarStore.use(state => state[id]);
21
- const toggle = useCallback(() => {
22
- const isCurrentlyOpen = calendarStore.value[id];
23
- const isAnyOtherOpen = Object.entries(calendarStore.value).some(([key, isOpen]) => key !== id && isOpen);
24
- const newValues = Object.keys(calendarStore.value).reduce((acc, key) => {
25
- acc[key] = false;
26
- return acc;
27
- }, {});
28
- if (isAnyOtherOpen && !isCurrentlyOpen) {
29
- calendarStore.set(newValues);
30
- setTimeout(() => {
31
- calendarStore.set({ [id]: true });
32
- }, 100);
33
- }
34
- else {
35
- calendarStore.set({ ...newValues, [id]: !isCurrentlyOpen });
36
- }
37
- }, []);
38
- return [isOpen, toggle];
39
- };
40
15
  export const CalendarInput = (props) => {
41
16
  const { style, value, onValueChange, disabled, gap, calendarPosition, rightIcon, leftIcon, autoClosePeersCalendars, field, format, overlay, ...textInputProps } = {
42
17
  ...CalendarInput.defaultProps,
43
18
  ...props
44
19
  };
45
- const id = useId();
46
20
  const styles = useStylesFor(CalendarInput.styleRegistryName, style);
47
21
  const compositionStyles = useCompositionStyles(['calendar', 'input'], styles);
48
22
  const { inputValue, onInputValueChange, } = useInputBase(field, fields.date, { value, onValueChange });
49
23
  const [inputHeight, setInputHeight] = useState(0);
50
- const [isOpen, toggle] = useCalendar(id, autoClosePeersCalendars);
24
+ const [isOpen, toggle] = useInputOverlay(autoClosePeersCalendars);
51
25
  return (<View style={[styles.wrapper, { position: 'relative' }]}>
52
- <TextInput placeholder='Select Date' disabled={disabled} {...textInputProps} leftIcon={!leftIcon ? null : {
26
+ <TextInput placeholder='Select Date' disabled={disabled} {...textInputProps} style={compositionStyles.input} leftIcon={!leftIcon ? null : {
53
27
  ...leftIcon,
54
28
  onPress: toggle,
55
29
  }} rightIcon={!rightIcon ? null : {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CalendarInput/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CalendarInput/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const useInputOverlay: (autoClosePeersOverlays: boolean, providedId?: string) => any[] | readonly [boolean, (value?: boolean) => void];
@@ -0,0 +1,30 @@
1
+ import { useBooleanToggle } from '@codeleap/hooks';
2
+ import { globalState } from '@codeleap/store';
3
+ import { useCallback } from 'react';
4
+ import { useId } from '@codeleap/hooks';
5
+ const inputOverlayStore = globalState({});
6
+ export const useInputOverlay = (autoClosePeersOverlays, providedId) => {
7
+ if (!autoClosePeersOverlays)
8
+ return useBooleanToggle(false);
9
+ const id = useId(providedId);
10
+ const isOpen = inputOverlayStore.use(state => state[id]);
11
+ const toggle = useCallback(() => {
12
+ const isCurrentlyOpen = inputOverlayStore.value[id];
13
+ const isAnyOtherOpen = Object.entries(inputOverlayStore.value).some(([key, isOpen]) => key !== id && isOpen);
14
+ const newValues = Object.keys(inputOverlayStore.value).reduce((acc, key) => {
15
+ acc[key] = false;
16
+ return acc;
17
+ }, {});
18
+ if (isAnyOtherOpen && !isCurrentlyOpen) {
19
+ inputOverlayStore.set(newValues);
20
+ setTimeout(() => {
21
+ inputOverlayStore.set({ [id]: true });
22
+ }, 100);
23
+ }
24
+ else {
25
+ inputOverlayStore.set({ ...newValues, [id]: !isCurrentlyOpen });
26
+ }
27
+ }, []);
28
+ return [isOpen, toggle];
29
+ };
30
+ //# sourceMappingURL=useInputOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputOverlay.js","sourceRoot":"","sources":["../../../src/components/InputBase/useInputOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,iBAAiB,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,sBAA+B,EAAE,UAAmB,EAAE,EAAE;IACtF,IAAI,CAAC,sBAAsB;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAE3D,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;IAE5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IAExD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CACjE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,MAAM,CACxC,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACzE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAChB,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAA6B,CAAC,CAAA;QAEjC,IAAI,cAAc,IAAI,CAAC,eAAe,EAAE;YACtC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAEhC,UAAU,CAAC,GAAG,EAAE;gBACd,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YACvC,CAAC,EAAE,GAAG,CAAC,CAAA;SACR;aAAM;YACL,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAA;SAChE;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { AnyRecord, IJSX, StyledComponentProps } from '@codeleap/styles';
3
+ import { TimeInputProps } from './types';
4
+ export * from './styles';
5
+ export * from './types';
6
+ export declare const TimeInput: {
7
+ (props: TimeInputProps): JSX.Element;
8
+ styleRegistryName: string;
9
+ elements: string[];
10
+ rootElement: string;
11
+ withVariantTypes<S extends AnyRecord>(styles: S): (props: StyledComponentProps<TimeInputProps, S>) => IJSX;
12
+ defaultProps: Partial<TimeInputProps>;
13
+ };
@@ -0,0 +1,64 @@
1
+ import React, { useState } from 'react';
2
+ import { useCompositionStyles } from '@codeleap/styles';
3
+ import dayjs from 'dayjs';
4
+ import Animated, { FadeOut, FadeIn } from 'react-native-reanimated';
5
+ import { fields } from '@codeleap/form';
6
+ import DatePicker from 'react-native-date-picker';
7
+ import { useStylesFor } from '../../hooks';
8
+ import { useInputBase } from '../InputBase';
9
+ import { View } from '../View';
10
+ import { TextInput } from '../TextInput';
11
+ import { MobileStyleRegistry } from '../../Registry';
12
+ import { useInputOverlay } from '../InputBase/useInputOverlay';
13
+ export * from './styles';
14
+ export * from './types';
15
+ export const TimeInput = (props) => {
16
+ const { style, value, onValueChange, disabled, gap, timePickerPosition, rightIcon, leftIcon, autoClosePeersOverlays, field, format, overlay, ...textInputProps } = {
17
+ ...TimeInput.defaultProps,
18
+ ...props
19
+ };
20
+ const styles = useStylesFor(TimeInput.styleRegistryName, style);
21
+ const compositionStyles = useCompositionStyles(['input'], styles);
22
+ const { inputValue, onInputValueChange, } = useInputBase(field, fields.date, { value, onValueChange });
23
+ const [inputHeight, setInputHeight] = useState(0);
24
+ const [isOpen, toggle] = useInputOverlay(autoClosePeersOverlays);
25
+ return (<View style={[styles.wrapper, { position: 'relative' }]}>
26
+ <TextInput placeholder='Select a time' disabled={disabled} {...textInputProps} style={compositionStyles.input} leftIcon={!leftIcon ? null : {
27
+ ...leftIcon,
28
+ onPress: toggle,
29
+ }} rightIcon={!rightIcon ? null : {
30
+ ...rightIcon,
31
+ onPress: toggle,
32
+ }} value={!inputValue ? '' : dayjs(inputValue).format(format)} onValueChange={() => inputValue} onPress={disabled ? null : toggle} innerWrapperProps={{
33
+ rippleDisabled: true,
34
+ }} focused={isOpen} onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)}/>
35
+
36
+ {!isOpen || disabled ? null : (<Animated.View exiting={FadeOut.duration(150)} entering={FadeIn.duration(150)} style={overlay ? {
37
+ position: 'absolute',
38
+ zIndex: 1,
39
+ [timePickerPosition]: 0,
40
+ top: inputHeight + gap,
41
+ } : {
42
+ marginTop: gap,
43
+ }}>
44
+ <View style={styles.timePicker}>
45
+ <DatePicker mode='time' onDateChange={onInputValueChange} date={inputValue ?? new Date()}/>
46
+ </View>
47
+ </Animated.View>)}
48
+ </View>);
49
+ };
50
+ TimeInput.styleRegistryName = 'TimeInput';
51
+ TimeInput.elements = ['wrapper', 'timePicker', 'input'];
52
+ TimeInput.rootElement = 'wrapper';
53
+ TimeInput.withVariantTypes = (styles) => {
54
+ return TimeInput;
55
+ };
56
+ TimeInput.defaultProps = {
57
+ gap: 8,
58
+ timerPickerPosition: 'left',
59
+ autoClosePeersCalendars: false,
60
+ format: 'hh:mm A',
61
+ overlay: true,
62
+ };
63
+ MobileStyleRegistry.registerComponent(TimeInput);
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/TimeInput/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { TextInputComposition } from '../TextInput';
2
+ export type TimeInputComposition = 'wrapper' | `input${Capitalize<TextInputComposition>}` | 'timePicker';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/TimeInput/styles.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { StyledProp } from '@codeleap/styles';
2
+ import { TimeInputComposition } from './styles';
3
+ import { DateField } from '@codeleap/form';
4
+ import { TextInputProps } from '../TextInput';
5
+ export type TimeInputProps = Omit<TextInputProps, 'value' | 'onValueChange' | 'field' | 'style'> & {
6
+ value?: Date;
7
+ onValueChange?: (value: Date) => void;
8
+ style?: StyledProp<TimeInputComposition>;
9
+ disabled?: boolean;
10
+ gap?: number;
11
+ field?: DateField<any>;
12
+ format?: string;
13
+ overlay?: boolean;
14
+ /**
15
+ * Defines the position where the calendar will be anchored relative to the input.
16
+ */
17
+ timePickerPosition?: 'left' | 'right';
18
+ /**
19
+ * If `true`, this calendar is part of a globally managed group.
20
+ * When one calendar in this group opens, all others with `autoClosePeersCalendars: true` will close.
21
+ */
22
+ autoClosePeersOverlays?: boolean;
23
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/TimeInput/types.ts"],"names":[],"mappings":""}
@@ -41,3 +41,4 @@ export * from './SortablePhotos';
41
41
  export * from './SectionFilters';
42
42
  export * from './Tabs';
43
43
  export * from './CalendarInput';
44
+ export * from './TimeInput';
@@ -41,4 +41,5 @@ export * from './SortablePhotos';
41
41
  export * from './SectionFilters';
42
42
  export * from './Tabs';
43
43
  export * from './CalendarInput';
44
+ export * from './TimeInput';
44
45
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,qBAAqB,CAAA;AACnC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,qBAAqB,CAAA;AACnC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/mobile",
3
- "version": "5.1.4",
3
+ "version": "5.2.1",
4
4
  "main": "src/index.ts",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -9,34 +9,33 @@
9
9
  "directory": "packages/mobile"
10
10
  },
11
11
  "devDependencies": {
12
- "@codeleap/types": "5.1.4",
13
- "@codeleap/utils": "5.1.4",
14
- "@codeleap/hooks": "5.1.4",
15
- "@codeleap/form": "5.1.4",
16
- "@codeleap/query": "5.1.4",
17
- "@codeleap/logger": "5.1.4",
18
- "@codeleap/config": "5.1.4",
19
- "@codeleap/modals": "5.1.4"
12
+ "@codeleap/types": "5.2.1",
13
+ "@codeleap/utils": "5.2.1",
14
+ "@codeleap/hooks": "5.2.1",
15
+ "@codeleap/form": "5.2.1",
16
+ "@codeleap/query": "5.2.1",
17
+ "@codeleap/logger": "5.2.1",
18
+ "@codeleap/config": "5.2.1",
19
+ "@codeleap/modals": "5.2.1"
20
20
  },
21
21
  "scripts": {
22
22
  "build": "tsc --build",
23
23
  "lint": "eslint -c .eslintrc.js --fix \"./src/**/*.{ts,tsx,js,jsx}\""
24
24
  },
25
25
  "peerDependencies": {
26
- "@codeleap/types": "5.1.4",
27
- "@codeleap/utils": "5.1.4",
28
- "@codeleap/hooks": "5.1.4",
29
- "@codeleap/form": "5.1.4",
30
- "@codeleap/query": "5.1.4",
31
- "@codeleap/logger": "5.1.4",
32
- "@codeleap/styles": "5.1.4",
33
- "@codeleap/modals": "5.1.4",
26
+ "@codeleap/types": "5.2.1",
27
+ "@codeleap/utils": "5.2.1",
28
+ "@codeleap/hooks": "5.2.1",
29
+ "@codeleap/form": "5.2.1",
30
+ "@codeleap/query": "5.2.1",
31
+ "@codeleap/logger": "5.2.1",
32
+ "@codeleap/styles": "5.2.1",
33
+ "@codeleap/modals": "5.2.1",
34
34
  "@d11/react-native-fast-image": "8.9.2",
35
35
  "@react-native-firebase/messaging": "21.12.0",
36
- "@react-navigation/bottom-tabs": "7.3.1",
37
- "@react-navigation/core": "7.7.0",
38
- "@react-navigation/native": "7.0.19",
39
- "@react-navigation/native-stack": "7.3.1",
36
+ "@react-navigation/bottom-tabs": "7.3.10",
37
+ "@react-navigation/native": "7.1.6",
38
+ "@react-navigation/native-stack": "7.3.10",
40
39
  "react": "18.2.0",
41
40
  "react-native": "0.77.1",
42
41
  "react-native-calendars": "1.1310.0",
package/package.json.bak CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/mobile",
3
- "version": "5.1.4",
3
+ "version": "5.2.1",
4
4
  "main": "src/index.ts",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -33,10 +33,9 @@
33
33
  "@codeleap/modals": "workspace:*",
34
34
  "@d11/react-native-fast-image": "8.9.2",
35
35
  "@react-native-firebase/messaging": "21.12.0",
36
- "@react-navigation/bottom-tabs": "7.3.1",
37
- "@react-navigation/core": "7.7.0",
38
- "@react-navigation/native": "7.0.19",
39
- "@react-navigation/native-stack": "7.3.1",
36
+ "@react-navigation/bottom-tabs": "7.3.10",
37
+ "@react-navigation/native": "7.1.6",
38
+ "@react-navigation/native-stack": "7.3.10",
40
39
  "react": "18.2.0",
41
40
  "react-native": "0.77.1",
42
41
  "react-native-calendars": "1.1310.0",
@@ -30,6 +30,8 @@ export const Avatar = (props: AvatarProps) => {
30
30
  noFeedback,
31
31
  badge,
32
32
  badgeProps = {},
33
+ imageProps,
34
+ badgeIconTouchProps,
33
35
  style,
34
36
  ...viewProps
35
37
  } = {
@@ -54,7 +56,7 @@ export const Avatar = (props: AvatarProps) => {
54
56
  }, [name, firstNameOnly])
55
57
 
56
58
  const renderContent = () => {
57
- if (hasImage) return <Image source={image} style={styles.image} />
59
+ if (hasImage) return <Image source={image} {...imageProps} style={styles.image} />
58
60
  if (icon) return <Icon name={icon} style={styles.icon} />
59
61
  return <Text text={text || initials} style={styles.initials} />
60
62
  }
@@ -88,10 +90,11 @@ export const Avatar = (props: AvatarProps) => {
88
90
 
89
91
  {badgeIcon ? (
90
92
  <Touchable
91
- debugName={`AvatarBadge:${debugName}`}
92
- style={styles.badgeIconWrapper}
93
93
  onPress={() => onPress?.()}
94
94
  noFeedback
95
+ {...badgeIconTouchProps}
96
+ debugName={`AvatarBadge:${debugName}`}
97
+ style={styles.badgeIconWrapper}
95
98
  >
96
99
  <Icon name={badgeIcon} style={styles.badgeIcon} />
97
100
  </Touchable>
@@ -4,6 +4,7 @@ import { IconProps } from '../Icon'
4
4
  import { ImageProps } from '../Image'
5
5
  import { ViewProps } from '../View'
6
6
  import { AvatarComposition } from './styles'
7
+ import { TouchableProps } from '../Touchable'
7
8
 
8
9
  export type AvatarProps =
9
10
  Omit<ViewProps, 'style'> &
@@ -17,7 +18,9 @@ export type AvatarProps =
17
18
  description?: string
18
19
  icon?: IconProps['name']
19
20
  badgeIcon?: IconProps['name']
21
+ badgeIconTouchProps?: Partial<TouchableProps>
20
22
  style?: StyledProp<AvatarComposition>
21
23
  onPress?: () => void
22
24
  noFeedback?: boolean
25
+ imageProps?: Partial<ImageProps>
23
26
  }
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useState } from 'react'
1
+ import React, { useState } from 'react'
2
2
  import { AnyRecord, IJSX, StyledComponentProps, useCompositionStyles } from '@codeleap/styles'
3
3
  import { MobileStyleRegistry } from '../../Registry'
4
4
  import { useStylesFor } from '../../hooks'
@@ -8,46 +8,13 @@ import { Calendar } from '../Calendar'
8
8
  import { TextInput } from '../TextInput'
9
9
  import dayjs from 'dayjs'
10
10
  import Animated, { FadeOut, FadeIn } from 'react-native-reanimated'
11
- import { globalState } from '@codeleap/store'
12
- import { useBooleanToggle, useId } from '@codeleap/hooks'
13
11
  import { useInputBase } from '../InputBase'
14
12
  import { fields } from '@codeleap/form'
13
+ import { useInputOverlay } from '../InputBase/useInputOverlay'
15
14
 
16
15
  export * from './styles'
17
16
  export * from './types'
18
17
 
19
- const calendarStore = globalState({})
20
-
21
- const useCalendar = (id: string, autoClosePeersCalendars: boolean) => {
22
- if (!autoClosePeersCalendars) return useBooleanToggle(false)
23
-
24
- const isOpen = calendarStore.use(state => state[id])
25
-
26
- const toggle = useCallback(() => {
27
- const isCurrentlyOpen = calendarStore.value[id]
28
- const isAnyOtherOpen = Object.entries(calendarStore.value).some(
29
- ([key, isOpen]) => key !== id && isOpen
30
- )
31
-
32
- const newValues = Object.keys(calendarStore.value).reduce((acc, key) => {
33
- acc[key] = false
34
- return acc
35
- }, {} as Record<string, boolean>)
36
-
37
- if (isAnyOtherOpen && !isCurrentlyOpen) {
38
- calendarStore.set(newValues)
39
-
40
- setTimeout(() => {
41
- calendarStore.set({ [id]: true })
42
- }, 100)
43
- } else {
44
- calendarStore.set({ ...newValues, [id]: !isCurrentlyOpen })
45
- }
46
- }, [])
47
-
48
- return [isOpen, toggle]
49
- }
50
-
51
18
  export const CalendarInput = (props: CalendarInputProps) => {
52
19
  const {
53
20
  style,
@@ -68,8 +35,6 @@ export const CalendarInput = (props: CalendarInputProps) => {
68
35
  ...props
69
36
  }
70
37
 
71
- const id = useId()
72
-
73
38
  const styles = useStylesFor(CalendarInput.styleRegistryName, style)
74
39
 
75
40
  const compositionStyles = useCompositionStyles(['calendar', 'input'], styles)
@@ -81,7 +46,7 @@ export const CalendarInput = (props: CalendarInputProps) => {
81
46
 
82
47
  const [inputHeight, setInputHeight] = useState(0)
83
48
 
84
- const [isOpen, toggle] = useCalendar(id, autoClosePeersCalendars)
49
+ const [isOpen, toggle] = useInputOverlay(autoClosePeersCalendars)
85
50
 
86
51
  return (
87
52
  <View style={[styles.wrapper, { position: 'relative' }]}>
@@ -89,6 +54,7 @@ export const CalendarInput = (props: CalendarInputProps) => {
89
54
  placeholder='Select Date'
90
55
  disabled={disabled}
91
56
  {...textInputProps}
57
+ style={compositionStyles.input}
92
58
  leftIcon={!leftIcon ? null : {
93
59
  ...leftIcon,
94
60
  onPress: toggle,
@@ -0,0 +1,38 @@
1
+ import { useBooleanToggle } from '@codeleap/hooks'
2
+ import { globalState } from '@codeleap/store'
3
+ import { useCallback } from 'react'
4
+ import { useId } from '@codeleap/hooks'
5
+
6
+ const inputOverlayStore = globalState({})
7
+
8
+ export const useInputOverlay = (autoClosePeersOverlays: boolean, providedId?: string) => {
9
+ if (!autoClosePeersOverlays) return useBooleanToggle(false)
10
+
11
+ const id = useId(providedId)
12
+
13
+ const isOpen = inputOverlayStore.use(state => state[id])
14
+
15
+ const toggle = useCallback(() => {
16
+ const isCurrentlyOpen = inputOverlayStore.value[id]
17
+ const isAnyOtherOpen = Object.entries(inputOverlayStore.value).some(
18
+ ([key, isOpen]) => key !== id && isOpen
19
+ )
20
+
21
+ const newValues = Object.keys(inputOverlayStore.value).reduce((acc, key) => {
22
+ acc[key] = false
23
+ return acc
24
+ }, {} as Record<string, boolean>)
25
+
26
+ if (isAnyOtherOpen && !isCurrentlyOpen) {
27
+ inputOverlayStore.set(newValues)
28
+
29
+ setTimeout(() => {
30
+ inputOverlayStore.set({ [id]: true })
31
+ }, 100)
32
+ } else {
33
+ inputOverlayStore.set({ ...newValues, [id]: !isCurrentlyOpen })
34
+ }
35
+ }, [])
36
+
37
+ return [isOpen, toggle]
38
+ }
@@ -0,0 +1,118 @@
1
+ import React, { useState } from 'react'
2
+ import { AnyRecord, IJSX, StyledComponentProps, useCompositionStyles } from '@codeleap/styles'
3
+ import { TimeInputProps } from './types'
4
+ import dayjs from 'dayjs'
5
+ import Animated, { FadeOut, FadeIn } from 'react-native-reanimated'
6
+ import { fields } from '@codeleap/form'
7
+ import DatePicker from 'react-native-date-picker'
8
+ import { useStylesFor } from '../../hooks'
9
+ import { useInputBase } from '../InputBase'
10
+ import { View } from '../View'
11
+ import { TextInput } from '../TextInput'
12
+ import { MobileStyleRegistry } from '../../Registry'
13
+ import { useInputOverlay } from '../InputBase/useInputOverlay'
14
+
15
+ export * from './styles'
16
+ export * from './types'
17
+
18
+ export const TimeInput = (props: TimeInputProps) => {
19
+ const {
20
+ style,
21
+ value,
22
+ onValueChange,
23
+ disabled,
24
+ gap,
25
+ timePickerPosition,
26
+ rightIcon,
27
+ leftIcon,
28
+ autoClosePeersOverlays,
29
+ field,
30
+ format,
31
+ overlay,
32
+ ...textInputProps
33
+ } = {
34
+ ...TimeInput.defaultProps,
35
+ ...props
36
+ }
37
+
38
+ const styles = useStylesFor(TimeInput.styleRegistryName, style)
39
+
40
+ const compositionStyles = useCompositionStyles(['input'], styles)
41
+
42
+ const {
43
+ inputValue,
44
+ onInputValueChange,
45
+ } = useInputBase<Date>(field, fields.date as any, { value, onValueChange })
46
+
47
+ const [inputHeight, setInputHeight] = useState(0)
48
+
49
+ const [isOpen, toggle] = useInputOverlay(autoClosePeersOverlays)
50
+
51
+ return (
52
+ <View style={[styles.wrapper, { position: 'relative' }]}>
53
+ <TextInput
54
+ placeholder='Select a time'
55
+ disabled={disabled}
56
+ {...textInputProps}
57
+ style={compositionStyles.input}
58
+ leftIcon={!leftIcon ? null : {
59
+ ...leftIcon,
60
+ onPress: toggle,
61
+ }}
62
+ rightIcon={!rightIcon ? null : {
63
+ ...rightIcon,
64
+ onPress: toggle,
65
+ }}
66
+ value={!inputValue ? '' : dayjs(inputValue).format(format)}
67
+ onValueChange={() => inputValue}
68
+ onPress={disabled ? null : toggle}
69
+ innerWrapperProps={{
70
+ rippleDisabled: true,
71
+ }}
72
+ focused={isOpen}
73
+ onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)}
74
+ />
75
+
76
+ {!isOpen || disabled ? null : (
77
+ <Animated.View
78
+ exiting={FadeOut.duration(150)}
79
+ entering={FadeIn.duration(150)}
80
+ style={overlay ? {
81
+ position: 'absolute',
82
+ zIndex: 1,
83
+ [timePickerPosition]: 0,
84
+ top: inputHeight + gap,
85
+ } : {
86
+ marginTop: gap,
87
+ }}
88
+ >
89
+ <View style={styles.timePicker}>
90
+ <DatePicker
91
+ mode='time'
92
+ onDateChange={onInputValueChange}
93
+ date={inputValue ?? new Date()}
94
+ />
95
+ </View>
96
+ </Animated.View>
97
+ )}
98
+ </View>
99
+ )
100
+ }
101
+
102
+ TimeInput.styleRegistryName = 'TimeInput'
103
+ TimeInput.elements = ['wrapper', 'timePicker', 'input']
104
+ TimeInput.rootElement = 'wrapper'
105
+
106
+ TimeInput.withVariantTypes = <S extends AnyRecord>(styles: S) => {
107
+ return TimeInput as (props: StyledComponentProps<TimeInputProps, typeof styles>) => IJSX
108
+ }
109
+
110
+ TimeInput.defaultProps = {
111
+ gap: 8,
112
+ timerPickerPosition: 'left',
113
+ autoClosePeersCalendars: false,
114
+ format: 'hh:mm A',
115
+ overlay: true,
116
+ } as Partial<TimeInputProps>
117
+
118
+ MobileStyleRegistry.registerComponent(TimeInput)
@@ -0,0 +1,6 @@
1
+ import { TextInputComposition } from '../TextInput'
2
+
3
+ export type TimeInputComposition =
4
+ 'wrapper' |
5
+ `input${Capitalize<TextInputComposition>}` |
6
+ 'timePicker'
@@ -0,0 +1,28 @@
1
+ import { StyledProp } from '@codeleap/styles'
2
+ import { TimeInputComposition } from './styles'
3
+ import { DateField } from '@codeleap/form'
4
+ import { TextInputProps } from '../TextInput'
5
+
6
+ export type TimeInputProps =
7
+ Omit<TextInputProps, 'value' | 'onValueChange' | 'field' | 'style'> &
8
+ {
9
+ value?: Date
10
+ onValueChange?: (value: Date) => void
11
+ style?: StyledProp<TimeInputComposition>
12
+ disabled?: boolean
13
+ gap?: number
14
+ field?: DateField<any>
15
+ format?: string
16
+ overlay?: boolean
17
+
18
+ /**
19
+ * Defines the position where the calendar will be anchored relative to the input.
20
+ */
21
+ timePickerPosition?: 'left' | 'right'
22
+
23
+ /**
24
+ * If `true`, this calendar is part of a globally managed group.
25
+ * When one calendar in this group opens, all others with `autoClosePeersCalendars: true` will close.
26
+ */
27
+ autoClosePeersOverlays?: boolean
28
+ }
@@ -40,4 +40,5 @@ export * from './PlacesAutocomplete'
40
40
  export * from './SortablePhotos'
41
41
  export * from './SectionFilters'
42
42
  export * from './Tabs'
43
- export * from './CalendarInput'
43
+ export * from './CalendarInput'
44
+ export * from './TimeInput'