@clicktap/ui 0.14.19 → 0.14.26

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 (205) hide show
  1. package/components/Avatar/Avatar.d.ts +5 -1
  2. package/components/Avatar/Avatar.js +1 -1
  3. package/components/Avatar/Avatar.types.d.ts +28 -2
  4. package/components/Avatar/AvatarGroup/AvatarGroup.d.ts +5 -1
  5. package/components/Avatar/AvatarGroup/AvatarGroup.js +1 -1
  6. package/components/Avatar/AvatarGroup/AvatarGroup.types.d.ts +7 -2
  7. package/components/Avatar/index.js +1 -1
  8. package/components/ContextMenu/ContextMenu.js +1 -1
  9. package/components/Dialog/Dialog.js +1 -1
  10. package/components/DialogTrigger/DialogTrigger.js +1 -1
  11. package/components/Drawer/Drawer.js +1 -1
  12. package/components/ModalOverlay/ModalOverlay.js +1 -1
  13. package/components/PinInput/PinInput.js +1 -1
  14. package/components/Select/Select.js +1 -1
  15. package/components/Tabs/Tabs.context.d.ts +3 -0
  16. package/package.json +1 -2
  17. package/components/Accordion/Accordion.tsx +0 -82
  18. package/components/Accordion/index.ts +0 -3
  19. package/components/Avatar/Avatar.stories.tsx +0 -99
  20. package/components/Avatar/Avatar.tsx +0 -120
  21. package/components/Avatar/Avatar.types.ts +0 -3
  22. package/components/Avatar/AvatarGroup/AvatarGroup.tsx +0 -32
  23. package/components/Avatar/AvatarGroup/AvatarGroup.types.ts +0 -8
  24. package/components/Avatar/index.ts +0 -4
  25. package/components/Badge/Badge.stories.tsx +0 -72
  26. package/components/Badge/Badge.tsx +0 -169
  27. package/components/Badge/Badge.types.ts +0 -3
  28. package/components/Badge/index.ts +0 -2
  29. package/components/Breadcrumbs/BreadcrumbEllipsis.tsx +0 -47
  30. package/components/Breadcrumbs/BreadcrumbEllipsis.types.ts +0 -5
  31. package/components/Breadcrumbs/BreadcrumbItem.tsx +0 -23
  32. package/components/Breadcrumbs/BreadcrumbItem.types.ts +0 -3
  33. package/components/Breadcrumbs/BreadcrumbLink.tsx +0 -30
  34. package/components/Breadcrumbs/BreadcrumbLink.types.ts +0 -3
  35. package/components/Breadcrumbs/BreadcrumbSeparator.tsx +0 -41
  36. package/components/Breadcrumbs/BreadcrumbSeparator.types.ts +0 -9
  37. package/components/Breadcrumbs/Breadcrumbs.tsx +0 -28
  38. package/components/Breadcrumbs/Breadcrumbs.types.ts +0 -6
  39. package/components/Breadcrumbs/index.ts +0 -10
  40. package/components/Button/Button.tsx +0 -72
  41. package/components/Button/Button.types.ts +0 -7
  42. package/components/Button/index.ts +0 -2
  43. package/components/Card/Card.tsx +0 -15
  44. package/components/Card/Card.types.ts +0 -3
  45. package/components/Card/index.ts +0 -2
  46. package/components/Checkbox/Checkbox.tsx +0 -122
  47. package/components/Checkbox/Checkbox.types.ts +0 -15
  48. package/components/Checkbox/index.ts +0 -2
  49. package/components/Collapsible/Collapsible.tsx +0 -34
  50. package/components/Collapsible/Collapsible.types.ts +0 -5
  51. package/components/Collapsible/CollapsibleTrigger.tsx +0 -57
  52. package/components/Collapsible/CollapsibleTrigger.types.ts +0 -14
  53. package/components/Collapsible/index.ts +0 -10
  54. package/components/Container/Container.tsx +0 -26
  55. package/components/Container/Container.types.ts +0 -3
  56. package/components/Container/index.ts +0 -2
  57. package/components/ContextMenu/ContextMenu.tsx +0 -74
  58. package/components/ContextMenu/ContextMenu.types.ts +0 -17
  59. package/components/ContextMenu/index.ts +0 -2
  60. package/components/CreditCardExpirationInput/CreditCardExpirationInput.tsx +0 -115
  61. package/components/CreditCardExpirationInput/CreditCardExpirationInput.types.ts +0 -10
  62. package/components/CreditCardExpirationInput/index.ts +0 -2
  63. package/components/CreditCardInput/CreditCardInput.tsx +0 -147
  64. package/components/CreditCardInput/CreditCardInput.types.ts +0 -12
  65. package/components/CreditCardInput/index.ts +0 -2
  66. package/components/DateInput/DateInput.tsx +0 -81
  67. package/components/DateInput/DateInput.types.ts +0 -15
  68. package/components/DateInput/index.ts +0 -2
  69. package/components/DateTimeFormat/DateTimeFormat.tsx +0 -16
  70. package/components/DateTimeFormat/DateTimeFormat.types.ts +0 -7
  71. package/components/DateTimeFormat/index.ts +0 -2
  72. package/components/Dialog/Dialog.tsx +0 -65
  73. package/components/Dialog/Dialog.types.ts +0 -9
  74. package/components/Dialog/index.ts +0 -2
  75. package/components/DialogTrigger/DialogTrigger.tsx +0 -45
  76. package/components/DialogTrigger/DialogTrigger.types.ts +0 -6
  77. package/components/DialogTrigger/index.ts +0 -5
  78. package/components/Divider/Divider.stories.tsx +0 -37
  79. package/components/Divider/Divider.tsx +0 -34
  80. package/components/Divider/Divider.types.ts +0 -5
  81. package/components/Divider/index.ts +0 -2
  82. package/components/DobInput/DobInput.tsx +0 -120
  83. package/components/DobInput/index.ts +0 -2
  84. package/components/Drawer/Drawer.tsx +0 -126
  85. package/components/Drawer/Drawer.types.ts +0 -11
  86. package/components/Drawer/index.ts +0 -2
  87. package/components/Icon/Account.tsx +0 -50
  88. package/components/Icon/Cart.tsx +0 -43
  89. package/components/Icon/Checkmark.tsx +0 -34
  90. package/components/Icon/Cross.tsx +0 -36
  91. package/components/Icon/DownArrow.tsx +0 -23
  92. package/components/Icon/Hamburger.tsx +0 -23
  93. package/components/Icon/Icon.types.ts +0 -8
  94. package/components/Icon/LinkArrow.tsx +0 -32
  95. package/components/Icon/Minus.tsx +0 -20
  96. package/components/Icon/Plus.tsx +0 -20
  97. package/components/Icon/Search.tsx +0 -36
  98. package/components/Icon/Trash.tsx +0 -27
  99. package/components/Icon/Verified.tsx +0 -20
  100. package/components/Icon/index.ts +0 -14
  101. package/components/Image/Image.tsx +0 -32
  102. package/components/Image/index.ts +0 -2
  103. package/components/Input/Input.tsx +0 -109
  104. package/components/Input/Input.types.ts +0 -17
  105. package/components/Input/index.ts +0 -2
  106. package/components/Link/Link.stories.tsx +0 -96
  107. package/components/Link/Link.tsx +0 -39
  108. package/components/Link/Link.types.ts +0 -3
  109. package/components/Link/index.ts +0 -2
  110. package/components/Loader/CircularEasing.tsx +0 -66
  111. package/components/Loader/CircularEasing.types.ts +0 -8
  112. package/components/Loader/Pulse.tsx +0 -45
  113. package/components/Loader/Pulse.types.ts +0 -5
  114. package/components/Loader/index.ts +0 -4
  115. package/components/Menu/ContextMenu.tsx +0 -83
  116. package/components/Menu/Menu.tsx +0 -143
  117. package/components/Menu/Menu.types.ts +0 -44
  118. package/components/Menu/index.ts +0 -4
  119. package/components/Meter/Meter.stories.tsx +0 -111
  120. package/components/Meter/Meter.tsx +0 -68
  121. package/components/Meter/Meter.types.ts +0 -10
  122. package/components/Meter/index.ts +0 -2
  123. package/components/Modal/Modal.tsx +0 -16
  124. package/components/Modal/Modal.types.ts +0 -6
  125. package/components/Modal/index.ts +0 -2
  126. package/components/ModalOverlay/ModalOverlay.tsx +0 -121
  127. package/components/ModalOverlay/ModalOverlay.types.ts +0 -18
  128. package/components/ModalOverlay/index.ts +0 -2
  129. package/components/NumberFormat/NumberFormat.tsx +0 -19
  130. package/components/NumberFormat/NumberFormat.types.ts +0 -8
  131. package/components/NumberFormat/index.ts +0 -2
  132. package/components/NumberInput/NumberInput.tsx +0 -164
  133. package/components/NumberInput/NumberInput.types.ts +0 -22
  134. package/components/NumberInput/index.ts +0 -2
  135. package/components/NumberTicker/DigitResolver.tsx +0 -119
  136. package/components/NumberTicker/DigitResolver.types.ts +0 -18
  137. package/components/NumberTicker/NumberTicker.tsx +0 -56
  138. package/components/NumberTicker/NumberTicker.types.ts +0 -96
  139. package/components/NumberTicker/hooks/useColumnTransition.ts +0 -36
  140. package/components/NumberTicker/hooks/useNumberDelta.ts +0 -19
  141. package/components/NumberTicker/hooks/useNumberTicker.ts +0 -36
  142. package/components/NumberTicker/index.ts +0 -10
  143. package/components/Pagination/Pagination.tsx +0 -44
  144. package/components/Pagination/index.ts +0 -2
  145. package/components/PasswordCheck/PasswordCheck.tsx +0 -59
  146. package/components/PasswordCheck/PasswordCheck.types.ts +0 -4
  147. package/components/PasswordCheck/PasswordCheck.utils.ts +0 -47
  148. package/components/PasswordCheck/index.ts +0 -2
  149. package/components/PhoneInput/PhoneInput.tsx +0 -191
  150. package/components/PhoneInput/index.ts +0 -2
  151. package/components/PinInput/PinInput.tsx +0 -318
  152. package/components/PinInput/PinInput.types.ts +0 -21
  153. package/components/PinInput/index.ts +0 -2
  154. package/components/Progressbar/CircularProgressbar.tsx +0 -71
  155. package/components/Progressbar/CircularProgressbar.types.ts +0 -10
  156. package/components/Progressbar/LinearProgressbar.tsx +0 -75
  157. package/components/Progressbar/LinearProgressbar.types.ts +0 -11
  158. package/components/Progressbar/index.ts +0 -4
  159. package/components/Radio/Radio.tsx +0 -88
  160. package/components/Radio/Radio.types.ts +0 -16
  161. package/components/Radio/index.ts +0 -2
  162. package/components/RadioGroup/RadioGroup.tsx +0 -49
  163. package/components/RadioGroup/RadioGroup.types.ts +0 -7
  164. package/components/RadioGroup/index.ts +0 -2
  165. package/components/Select/Option.tsx +0 -32
  166. package/components/Select/Option.types.ts +0 -3
  167. package/components/Select/Select.tsx +0 -272
  168. package/components/Select/Select.types.ts +0 -48
  169. package/components/Select/index.ts +0 -8
  170. package/components/Skeleton/Skeleton.tsx +0 -15
  171. package/components/Skeleton/Skeleton.types.ts +0 -3
  172. package/components/Skeleton/index.ts +0 -2
  173. package/components/Slider/Slider.tsx +0 -110
  174. package/components/Slider/Slider.types.ts +0 -11
  175. package/components/Slider/index.ts +0 -2
  176. package/components/Switch/Switch.tsx +0 -63
  177. package/components/Switch/Switch.types.ts +0 -8
  178. package/components/Switch/index.ts +0 -2
  179. package/components/Table/Table.tsx +0 -52
  180. package/components/Table/Table.types.ts +0 -22
  181. package/components/Table/index.ts +0 -2
  182. package/components/Tabs/Tab.tsx +0 -118
  183. package/components/Tabs/Tab.types.ts +0 -10
  184. package/components/Tabs/TabList.tsx +0 -51
  185. package/components/Tabs/TabList.types.ts +0 -12
  186. package/components/Tabs/TabPanel.tsx +0 -19
  187. package/components/Tabs/TabPanel.types.ts +0 -3
  188. package/components/Tabs/Tabs.context.tsx +0 -9
  189. package/components/Tabs/Tabs.tsx +0 -39
  190. package/components/Tabs/Tabs.types.ts +0 -3
  191. package/components/Tabs/index.ts +0 -9
  192. package/components/TimeInput/TimeInput.stories.tsx +0 -125
  193. package/components/TimeInput/TimeInput.tsx +0 -81
  194. package/components/TimeInput/TimeInput.types.ts +0 -15
  195. package/components/TimeInput/index.ts +0 -2
  196. package/components/ToggleButton/ToggleButton.stories.tsx +0 -89
  197. package/components/ToggleButton/ToggleButton.tsx +0 -69
  198. package/components/ToggleButton/ToggleButton.types.ts +0 -6
  199. package/components/ToggleButton/index.ts +0 -2
  200. package/components/Tooltip/Tooltip.tsx +0 -59
  201. package/components/Tooltip/Tooltip.types.ts +0 -3
  202. package/components/Tooltip/index.ts +0 -2
  203. package/components/UploadImage/UploadImage.tsx +0 -206
  204. package/components/UploadImage/UploadImage.types.ts +0 -15
  205. package/components/UploadImage/index.ts +0 -2
@@ -1,19 +0,0 @@
1
- import { useRef, useEffect } from 'react';
2
-
3
- export const useNumberDelta = (value = 0) => {
4
- const ref = useRef(value);
5
- useEffect(() => {
6
- ref.current = value;
7
- }, [value]);
8
-
9
- switch (true) {
10
- case value > ref.current:
11
- return 'increase';
12
- case value < ref.current:
13
- return 'decrease';
14
- default:
15
- return 'same';
16
- }
17
- };
18
-
19
- export default useNumberDelta;
@@ -1,36 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { NumberTickerConfig } from '../NumberTicker.types';
3
-
4
- export const useNumberTicker = ({
5
- value = 0,
6
- asLocal = false,
7
- localeConfig = {
8
- locale: 'en-US',
9
- options: {
10
- style: 'currency',
11
- currency: 'USD',
12
- minimumFractionDigits: 2,
13
- },
14
- },
15
- precision = 2,
16
- }: NumberTickerConfig) => {
17
- const parsed = parseFloat(`${Math.max(Math.abs(value), 0)}`).toFixed(
18
- precision ?? 0
19
- );
20
-
21
- const number = asLocal
22
- ? new Intl.NumberFormat(localeConfig?.locale, {
23
- ...localeConfig?.options,
24
- }).format(parseFloat(parsed))
25
- : parsed;
26
-
27
- return useMemo(
28
- () => ({
29
- digits: number.split(''),
30
- isNegative: value < 0,
31
- }),
32
- [number, value]
33
- );
34
- };
35
-
36
- export default useNumberTicker;
@@ -1,10 +0,0 @@
1
- export { DigitResolver } from './DigitResolver';
2
- export { NumberTicker } from './NumberTicker';
3
-
4
- export type { DigitProps, DigitResolverProps } from './DigitResolver.types';
5
- export type {
6
- NumberTickerConfig,
7
- NumberTickerProps,
8
- TickerMotionProps,
9
- TransitionConfig,
10
- } from './NumberTicker.types';
@@ -1,44 +0,0 @@
1
- 'use client';
2
-
3
- import { Pagination as UiPagination } from '@nextui-org/pagination';
4
- import type { PaginationProps } from '@nextui-org/pagination';
5
- import { cn } from '../../utils/cn';
6
-
7
- const controlClassNames = cn(
8
- 'w-8 h-8 flex justify-center items-center cursor-pointer shadow-none',
9
- 'border border-slate-200 data-[disabled=true]:border-0',
10
- 'rounded transition-colors duration-300 data-[focus-visible="true"]:outline-white data-[focus-visible="true"]:outline-offset-4',
11
- 'hover:bg-slate-50 data-[disabled=true]:bg-slate-100 data-[disabled=true]:text-slate-400',
12
- '[&>svg]:w-4.5 [&>svg]:h-auto'
13
- );
14
-
15
- export function Pagination({
16
- showControls = true,
17
- className,
18
- classNames,
19
- ...rest
20
- }: PaginationProps) {
21
- return (
22
- <UiPagination
23
- showControls={showControls}
24
- className={cn('text-slate-600', className)}
25
- classNames={{
26
- wrapper: cn('flex flex-nowrap gap-2 lg:gap-3', classNames?.wrapper),
27
- item: cn(
28
- 'w-8 h-8 flex text-sm justify-center items-center cursor-pointer rounded shadow-none',
29
- 'border-solid border border-slate-100 bg-transparent transition-colors duration-300',
30
- 'data-[active=true]:bg-slate-500 data-[active=true]:text-white data-[focus-visible="true"]:outline-white data-[focus-visible="true"]:outline-offset-4',
31
- '[&[data-hover=true]:not([data-active=true])]:border-slate-200',
32
- classNames?.item
33
- ),
34
- prev: cn(controlClassNames, classNames?.prev),
35
- next: cn(controlClassNames, classNames?.next),
36
- ellipsis: cn('w-4 h-4.5 scale-110 translate-y-1', classNames?.ellipsis),
37
- }}
38
- // eslint-disable-next-line react/jsx-props-no-spreading
39
- {...rest}
40
- />
41
- );
42
- }
43
-
44
- export default Pagination;
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import/prefer-default-export
2
- export { Pagination } from './Pagination';
@@ -1,59 +0,0 @@
1
- 'use client';
2
-
3
- import { cn } from '../../utils/cn';
4
- import type { PasswordCheckProps } from './PasswordCheck.types';
5
- import { checkStrength, getProgressText } from './PasswordCheck.utils';
6
-
7
- export function PasswordCheck({
8
- value,
9
- variant = 'default',
10
- }: PasswordCheckProps) {
11
- const strength = checkStrength(value);
12
-
13
- return (
14
- <div>
15
- <div
16
- className={cn(
17
- 'relative w-full flex gap-x-2',
18
- variant === 'default' && 'mb-8 -mt-1'
19
- )}
20
- >
21
- {Array.from({ length: 5 }, (_, idx) => idx).map((v, idx) => (
22
- <div
23
- className={cn(
24
- 'grow shrink basis-1/5 h-1 rounded-full transition-colors duration-700 ease bg-slate-200',
25
- strength <= idx && 'bg-slate-600',
26
- (strength === 1 || strength === 2) && 'bg-red-600',
27
- strength === 3 && 'bg-yellow-600',
28
- strength === 4 && 'bg-green-600',
29
- strength === 5 && 'bg-blue-600'
30
- )}
31
- key={v}
32
- />
33
- ))}
34
- {variant === 'default' && (
35
- <div
36
- className={cn(
37
- 'inline-flex gap-x-1 absolute top-0 left-0 text-xs translate-y-2/4 text-slate-950',
38
- strength ? 'opacity-100' : 'opacity-0'
39
- )}
40
- >
41
- <span>Password Strength:</span>
42
- <span
43
- className={cn(
44
- (strength === 1 || strength === 2) && 'text-red-600',
45
- strength === 3 && 'text-yellow-600',
46
- strength === 4 && 'text-green-600',
47
- strength === 5 && 'text-blue-600'
48
- )}
49
- >
50
- {getProgressText(strength)}
51
- </span>
52
- </div>
53
- )}
54
- </div>
55
- </div>
56
- );
57
- }
58
-
59
- export default PasswordCheck;
@@ -1,4 +0,0 @@
1
- export type PasswordCheckProps = {
2
- value: string;
3
- variant?: 'default' | 'short';
4
- };
@@ -1,47 +0,0 @@
1
- /** @todo these functions should probably be passed as props to be able to extend */
2
- export const checkStrength = (value: string) => {
3
- const isMinLength = value.length >= 8;
4
- let strength = 0;
5
- if (/^(?=.*[a-z])(?=.*[A-Z])/.test(value) && isMinLength) {
6
- strength += 1;
7
- }
8
- if (/\d/.test(value) && isMinLength) {
9
- strength += 1;
10
- }
11
- if (value.length >= 8) {
12
- strength += 1;
13
- }
14
- if (value.length >= 11) {
15
- strength += 1;
16
- }
17
- if (/[ `!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?~]/.test(value) && isMinLength) {
18
- strength += 1;
19
- }
20
- return strength;
21
- };
22
-
23
- export const getProgressText = (strength: number) => {
24
- switch (strength) {
25
- case 5:
26
- return 'Very Strong';
27
- case 4:
28
- return 'Strong';
29
- case 3:
30
- return 'Good';
31
- case 2:
32
- return 'Weak';
33
- case 1:
34
- return 'Very Weak';
35
- default:
36
- return '';
37
- }
38
- };
39
-
40
- /** @todo this doesn't look like it is used...remove? */
41
- export const getPasswordRequirements = (value = '') => {
42
- return {
43
- eightСharacters: value.length >= 8,
44
- upLowCaseLetters: /^(?=.*[a-z])(?=.*[A-Z])/.test(value),
45
- oneNumber: /\d/.test(value),
46
- };
47
- };
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import/prefer-default-export
2
- export { PasswordCheck } from './PasswordCheck';
@@ -1,191 +0,0 @@
1
- 'use client';
2
-
3
- import { useFilter } from 'react-aria';
4
- import { useEffect, useMemo, useRef, useState } from 'react';
5
- import {
6
- CountryIso2,
7
- defaultCountries,
8
- parseCountry,
9
- usePhoneInput,
10
- } from 'react-international-phone';
11
- import {
12
- Button,
13
- ListBox,
14
- ListBoxItem,
15
- Input as AriaInput,
16
- DialogTrigger,
17
- } from 'react-aria-components';
18
- import type { TextFieldProps } from 'react-aria-components';
19
- import { cn } from '../../utils/cn';
20
- import { Input } from '../Input/Input';
21
- import type { SlotsToClasses } from '../../types/SlotsToClasses';
22
-
23
- interface PhoneInputProps extends Omit<TextFieldProps, 'type'> {
24
- label?: string;
25
- description?: string;
26
- errorMessage?: string;
27
- placeholder?: string;
28
- classNames?: SlotsToClasses<'label' | 'input' | 'description' | 'error'>;
29
- defaultCountry?: CountryIso2;
30
- }
31
-
32
- const options = defaultCountries.map(parseCountry);
33
-
34
- export function PhoneInput({
35
- value,
36
- onChange,
37
- defaultCountry = 'us',
38
- ...props
39
- }: PhoneInputProps) {
40
- const triggerRef = useRef<HTMLDivElement>(null);
41
- const searchRef = useRef<HTMLInputElement>(null);
42
- const { inputValue, handlePhoneValueChange, inputRef, country, setCountry } =
43
- usePhoneInput({
44
- defaultCountry,
45
- value,
46
- countries: defaultCountries,
47
- onChange: (data) => {
48
- onChange?.(data.phone);
49
- },
50
- forceDialCode: true,
51
- });
52
- const dialCodeWithPrefix = `+${country.dialCode}`;
53
-
54
- // eslint-disable-next-line @typescript-eslint/unbound-method
55
- const { startsWith } = useFilter({ sensitivity: 'base' });
56
- const [filterValue, setFilterValue] = useState('');
57
- const [isOpen, onOpenChange] = useState(false);
58
-
59
- const filteredItems = useMemo(
60
- () => options.filter((item) => startsWith(item.name, filterValue)),
61
- // eslint-disable-next-line react-hooks/exhaustive-deps
62
- [filterValue]
63
- );
64
-
65
- useEffect(() => {
66
- if (isOpen) {
67
- searchRef.current?.focus();
68
- }
69
- }, [isOpen]);
70
-
71
- return (
72
- <div
73
- className={cn('flex relative', props.label ? 'pt-4' : '')}
74
- aria-label={props['aria-label']}
75
- >
76
- <DialogTrigger isOpen={isOpen} onOpenChange={onOpenChange}>
77
- <Button
78
- aria-label="Select Country"
79
- className="flex px-4 h-10 text-sm items-center rounded-l-md bg-slate-100 gap-2 uppercase [&[aria-expanded=false]_svg]:rotate-180 border border-r-0 border-slate-300"
80
- excludeFromTabOrder
81
- >
82
- {country.iso2}
83
- <svg
84
- width="15"
85
- height="8"
86
- viewBox="0 0 15 8"
87
- fill="none"
88
- xmlns="http://www.w3.org/2000/svg"
89
- >
90
- <path d="M1 7L7.5 0.999999L14 7" stroke="currentColor" />
91
- </svg>
92
- </Button>
93
-
94
- <div
95
- className={cn(
96
- 'w-full grid absolute left-0 top-[calc(100%+.25rem)] bg-white z-50 rounded-md text-slate-600 border border-slate-300',
97
- 'shadow-inner',
98
- isOpen ? 'block' : 'hidden'
99
- )}
100
- ref={triggerRef}
101
- >
102
- <svg
103
- xmlns="http://www.w3.org/2000/svg"
104
- width="16"
105
- height="16"
106
- fill="none"
107
- viewBox="0 0 17 16"
108
- className="absolute top-4 left-[1.325rem]"
109
- >
110
- <path
111
- fill="currentColor"
112
- fillRule="evenodd"
113
- d="M12.3 6.9a4.9 4.9 0 1 1-9.8 0 4.9 4.9 0 0 1 9.8 0Zm-1.1 5.7c-1.1.7-2.4 1.2-3.8 1.2a6.9 6.9 0 1 1 5.3-2.5l3 3-1.4 1.4-3.1-3Z"
114
- clipRule="evenodd"
115
- />
116
- </svg>
117
-
118
- <AriaInput
119
- aria-label="Search for countries"
120
- placeholder="Search for countries"
121
- className={cn(
122
- 'pl-12 pr-5 py-4 w-full m-0 border-0 text-slate-950 transition-all duration-[0.25s] ease outline-0 bg-transparent',
123
- 'placeholder:text-slate-950 focus:outline-0',
124
- 'border-b border-slate-200'
125
- )}
126
- onChange={(event) => setFilterValue(event.target.value)}
127
- onBlur={() => {
128
- onOpenChange(false);
129
- inputRef.current?.focus();
130
- }}
131
- value={filterValue}
132
- ref={searchRef}
133
- />
134
-
135
- <div className="p-2.5">
136
- <ListBox
137
- className="text-slate-950 max-h-60 overflow-y-auto"
138
- selectionMode="single"
139
- aria-label="Countries List"
140
- onSelectionChange={(selection) => {
141
- setCountry(String([...selection][0]));
142
- setFilterValue('');
143
- onOpenChange(false);
144
- }}
145
- >
146
- {(isOpen ? filteredItems : []).map((parsedCountry) => (
147
- <ListBoxItem
148
- id={parsedCountry.iso2}
149
- key={parsedCountry.iso2}
150
- value={parsedCountry}
151
- textValue={parsedCountry.iso2}
152
- className="p-3 text-slate-900 data-[hovered]:bg-slate-100 rounded-md"
153
- >
154
- {parsedCountry.name} (+{parsedCountry.dialCode})
155
- </ListBoxItem>
156
- ))}
157
- </ListBox>
158
- </div>
159
- </div>
160
- </DialogTrigger>
161
-
162
- <Input
163
- // eslint-disable-next-line react/jsx-props-no-spreading
164
- {...props}
165
- value={inputValue}
166
- inputProps={{
167
- onChange: handlePhoneValueChange,
168
- }}
169
- ref={inputRef}
170
- classNames={{
171
- input: cn(
172
- 'rounded-l-none',
173
- inputValue.trim() === dialCodeWithPrefix ? 'text-slate-600' : ''
174
- ),
175
- label: 'absolute top-0 left-0',
176
- }}
177
- />
178
- </div>
179
- );
180
- }
181
-
182
- PhoneInput.defaultProps = {
183
- label: undefined,
184
- description: undefined,
185
- errorMessage: undefined,
186
- placeholder: undefined,
187
- classNames: undefined,
188
- defaultCountry: undefined,
189
- };
190
-
191
- export default PhoneInput;
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import/prefer-default-export
2
- export { PhoneInput } from './PhoneInput';