@forgedevstack/bear 1.0.5 → 1.0.7

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 (183) hide show
  1. package/dist/components/BottomSheet/BottomSheet.cjs +1 -0
  2. package/dist/components/BottomSheet/BottomSheet.d.ts +3 -0
  3. package/dist/components/BottomSheet/BottomSheet.js +102 -0
  4. package/dist/components/BottomSheet/BottomSheet.types.d.ts +13 -0
  5. package/dist/components/BottomSheet/index.d.ts +2 -0
  6. package/dist/components/Button/Button.cjs +1 -1
  7. package/dist/components/Button/Button.js +40 -38
  8. package/dist/components/Button/Button.types.d.ts +4 -0
  9. package/dist/components/Calendar/Calendar.cjs +1 -1
  10. package/dist/components/Calendar/Calendar.const.cjs +1 -1
  11. package/dist/components/Calendar/Calendar.const.d.ts +1 -0
  12. package/dist/components/Calendar/Calendar.const.js +6 -5
  13. package/dist/components/Calendar/Calendar.helpers.cjs +1 -1
  14. package/dist/components/Calendar/Calendar.helpers.js +4 -4
  15. package/dist/components/Calendar/Calendar.js +128 -128
  16. package/dist/components/Cascader/Cascader.cjs +1 -0
  17. package/dist/components/Cascader/Cascader.const.cjs +1 -0
  18. package/dist/components/Cascader/Cascader.const.d.ts +33 -0
  19. package/dist/components/Cascader/Cascader.const.js +21 -0
  20. package/dist/components/Cascader/Cascader.d.ts +17 -0
  21. package/dist/components/Cascader/Cascader.js +227 -0
  22. package/dist/components/Cascader/Cascader.types.d.ts +94 -0
  23. package/dist/components/Cascader/index.d.ts +2 -0
  24. package/dist/components/CommandPalette/CommandPalette.cjs +1 -0
  25. package/dist/components/CommandPalette/CommandPalette.const.cjs +1 -0
  26. package/dist/components/CommandPalette/CommandPalette.const.d.ts +25 -0
  27. package/dist/components/CommandPalette/CommandPalette.const.js +13 -0
  28. package/dist/components/CommandPalette/CommandPalette.d.ts +18 -0
  29. package/dist/components/CommandPalette/CommandPalette.js +190 -0
  30. package/dist/components/CommandPalette/CommandPalette.types.d.ts +90 -0
  31. package/dist/components/CommandPalette/CommandPalette.utils.cjs +1 -0
  32. package/dist/components/CommandPalette/CommandPalette.utils.d.ts +17 -0
  33. package/dist/components/CommandPalette/CommandPalette.utils.js +63 -0
  34. package/dist/components/CommandPalette/index.d.ts +2 -0
  35. package/dist/components/CreditInput/CreditInput.cjs +1 -0
  36. package/dist/components/CreditInput/CreditInput.const.cjs +1 -0
  37. package/dist/components/CreditInput/CreditInput.const.d.ts +37 -0
  38. package/dist/components/CreditInput/CreditInput.const.js +66 -0
  39. package/dist/components/CreditInput/CreditInput.d.ts +15 -0
  40. package/dist/components/CreditInput/CreditInput.js +214 -0
  41. package/dist/components/CreditInput/CreditInput.types.d.ts +93 -0
  42. package/dist/components/CreditInput/CreditInput.utils.cjs +1 -0
  43. package/dist/components/CreditInput/CreditInput.utils.d.ts +48 -0
  44. package/dist/components/CreditInput/CreditInput.utils.js +79 -0
  45. package/dist/components/CreditInput/index.d.ts +2 -0
  46. package/dist/components/DatePicker/DatePicker.cjs +1 -1
  47. package/dist/components/DatePicker/DatePicker.js +108 -84
  48. package/dist/components/DatePicker/DatePicker.types.d.ts +2 -1
  49. package/dist/components/Drawer/Drawer.cjs +1 -1
  50. package/dist/components/Drawer/Drawer.js +75 -44
  51. package/dist/components/EmojiPicker/EmojiPicker.cjs +1 -0
  52. package/dist/components/EmojiPicker/EmojiPicker.const.cjs +1 -0
  53. package/dist/components/EmojiPicker/EmojiPicker.const.d.ts +5 -0
  54. package/dist/components/EmojiPicker/EmojiPicker.const.js +10 -0
  55. package/dist/components/EmojiPicker/EmojiPicker.d.ts +3 -0
  56. package/dist/components/EmojiPicker/EmojiPicker.js +63 -0
  57. package/dist/components/EmojiPicker/EmojiPicker.types.d.ts +6 -0
  58. package/dist/components/EmojiPicker/index.d.ts +3 -0
  59. package/dist/components/Form/Form.cjs +1 -0
  60. package/dist/components/Form/Form.const.cjs +1 -0
  61. package/dist/components/Form/Form.const.d.ts +33 -0
  62. package/dist/components/Form/Form.const.js +27 -0
  63. package/dist/components/Form/Form.context.cjs +1 -0
  64. package/dist/components/Form/Form.context.d.ts +13 -0
  65. package/dist/components/Form/Form.context.js +12 -0
  66. package/dist/components/Form/Form.d.ts +18 -0
  67. package/dist/components/Form/Form.js +230 -0
  68. package/dist/components/Form/Form.types.d.ts +166 -0
  69. package/dist/components/Form/Form.utils.cjs +1 -0
  70. package/dist/components/Form/Form.utils.d.ts +17 -0
  71. package/dist/components/Form/Form.utils.js +31 -0
  72. package/dist/components/Form/index.d.ts +3 -0
  73. package/dist/components/Kanban/Kanban.cjs +1 -0
  74. package/dist/components/Kanban/Kanban.d.ts +3 -0
  75. package/dist/components/Kanban/Kanban.js +90 -0
  76. package/dist/components/Kanban/Kanban.types.d.ts +21 -0
  77. package/dist/components/Kanban/index.d.ts +2 -0
  78. package/dist/components/MentionsInput/MentionsInput.cjs +1 -0
  79. package/dist/components/MentionsInput/MentionsInput.d.ts +3 -0
  80. package/dist/components/MentionsInput/MentionsInput.js +140 -0
  81. package/dist/components/MentionsInput/MentionsInput.types.d.ts +21 -0
  82. package/dist/components/MentionsInput/index.d.ts +2 -0
  83. package/dist/components/NotificationCenter/NotificationCenter.cjs +1 -0
  84. package/dist/components/NotificationCenter/NotificationCenter.const.cjs +1 -0
  85. package/dist/components/NotificationCenter/NotificationCenter.const.d.ts +25 -0
  86. package/dist/components/NotificationCenter/NotificationCenter.const.js +28 -0
  87. package/dist/components/NotificationCenter/NotificationCenter.d.ts +15 -0
  88. package/dist/components/NotificationCenter/NotificationCenter.js +223 -0
  89. package/dist/components/NotificationCenter/NotificationCenter.types.d.ts +117 -0
  90. package/dist/components/NotificationCenter/NotificationCenter.utils.cjs +1 -0
  91. package/dist/components/NotificationCenter/NotificationCenter.utils.d.ts +11 -0
  92. package/dist/components/NotificationCenter/NotificationCenter.utils.js +19 -0
  93. package/dist/components/NotificationCenter/index.d.ts +2 -0
  94. package/dist/components/PhoneInput/PhoneInput.cjs +1 -0
  95. package/dist/components/PhoneInput/PhoneInput.const.cjs +1 -0
  96. package/dist/components/PhoneInput/PhoneInput.const.d.ts +33 -0
  97. package/dist/components/PhoneInput/PhoneInput.const.js +82 -0
  98. package/dist/components/PhoneInput/PhoneInput.d.ts +16 -0
  99. package/dist/components/PhoneInput/PhoneInput.js +194 -0
  100. package/dist/components/PhoneInput/PhoneInput.types.d.ts +108 -0
  101. package/dist/components/PhoneInput/PhoneInput.utils.cjs +1 -0
  102. package/dist/components/PhoneInput/PhoneInput.utils.d.ts +25 -0
  103. package/dist/components/PhoneInput/PhoneInput.utils.js +39 -0
  104. package/dist/components/PhoneInput/index.d.ts +2 -0
  105. package/dist/components/RichEditor/RichEditor.cjs +1 -1
  106. package/dist/components/RichEditor/RichEditor.const.cjs +2 -2
  107. package/dist/components/RichEditor/RichEditor.const.d.ts +4 -1
  108. package/dist/components/RichEditor/RichEditor.const.js +51 -18
  109. package/dist/components/RichEditor/RichEditor.js +106 -105
  110. package/dist/components/RichEditor/components/ToolbarColorPicker/ToolbarColorPicker.cjs +1 -1
  111. package/dist/components/RichEditor/components/ToolbarColorPicker/ToolbarColorPicker.js +105 -95
  112. package/dist/components/RichEditor/components/ToolbarMore/ToolbarMore.cjs +1 -1
  113. package/dist/components/RichEditor/components/ToolbarMore/ToolbarMore.d.ts +2 -0
  114. package/dist/components/RichEditor/components/ToolbarMore/ToolbarMore.js +47 -29
  115. package/dist/components/SegmentedControl/SegmentedControl.cjs +1 -0
  116. package/dist/components/SegmentedControl/SegmentedControl.d.ts +3 -0
  117. package/dist/components/SegmentedControl/SegmentedControl.js +58 -0
  118. package/dist/components/SegmentedControl/SegmentedControl.types.d.ts +16 -0
  119. package/dist/components/SegmentedControl/index.d.ts +2 -0
  120. package/dist/components/SignPad/SignPad.cjs +1 -1
  121. package/dist/components/SignPad/SignPad.js +94 -86
  122. package/dist/components/SliderRange/SliderRange.cjs +1 -0
  123. package/dist/components/SliderRange/SliderRange.d.ts +3 -0
  124. package/dist/components/SliderRange/SliderRange.js +142 -0
  125. package/dist/components/SliderRange/SliderRange.types.d.ts +17 -0
  126. package/dist/components/SliderRange/index.d.ts +2 -0
  127. package/dist/components/TagsInput/TagsInput.cjs +1 -0
  128. package/dist/components/TagsInput/TagsInput.d.ts +3 -0
  129. package/dist/components/TagsInput/TagsInput.js +100 -0
  130. package/dist/components/TagsInput/TagsInput.types.d.ts +16 -0
  131. package/dist/components/TagsInput/index.d.ts +2 -0
  132. package/dist/components/TimePicker/TimePicker.cjs +1 -1
  133. package/dist/components/TimePicker/TimePicker.constants.cjs +1 -1
  134. package/dist/components/TimePicker/TimePicker.constants.d.ts +22 -1
  135. package/dist/components/TimePicker/TimePicker.constants.js +36 -19
  136. package/dist/components/TimePicker/TimePicker.js +97 -131
  137. package/dist/components/TimePicker/TimePicker.types.d.ts +47 -6
  138. package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.cjs +1 -0
  139. package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.d.ts +3 -0
  140. package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.js +81 -0
  141. package/dist/components/TimePicker/components/TimePickerColumnsDropdown/index.d.ts +1 -0
  142. package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.cjs +1 -0
  143. package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.d.ts +3 -0
  144. package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.js +84 -0
  145. package/dist/components/TimePicker/components/TimePickerDialDropdown/index.d.ts +1 -0
  146. package/dist/components/TimePicker/helpers/ClockFaceSvg.cjs +1 -0
  147. package/dist/components/TimePicker/helpers/ClockFaceSvg.d.ts +18 -0
  148. package/dist/components/TimePicker/helpers/ClockFaceSvg.js +67 -0
  149. package/dist/components/TimePicker/helpers/index.d.ts +2 -0
  150. package/dist/components/TimePicker/index.d.ts +1 -1
  151. package/dist/components/VirtualList/VirtualList.cjs +1 -0
  152. package/dist/components/VirtualList/VirtualList.d.ts +3 -0
  153. package/dist/components/VirtualList/VirtualList.js +68 -0
  154. package/dist/components/VirtualList/VirtualList.types.d.ts +10 -0
  155. package/dist/components/VirtualList/index.d.ts +2 -0
  156. package/dist/components/index.cjs +1 -1
  157. package/dist/components/index.d.ts +28 -2
  158. package/dist/components/index.js +177 -146
  159. package/dist/hooks/index.cjs +1 -1
  160. package/dist/hooks/index.d.ts +4 -0
  161. package/dist/hooks/index.js +36 -32
  162. package/dist/hooks/useDragDrop/index.d.ts +2 -0
  163. package/dist/hooks/useDragDrop/useDragDrop.cjs +1 -0
  164. package/dist/hooks/useDragDrop/useDragDrop.d.ts +22 -0
  165. package/dist/hooks/useDragDrop/useDragDrop.js +56 -0
  166. package/dist/hooks/useDragDrop/useDragDrop.types.d.ts +55 -0
  167. package/dist/hooks/useLazyLoad/index.d.ts +2 -0
  168. package/dist/hooks/useLazyLoad/useLazyLoad.cjs +1 -0
  169. package/dist/hooks/useLazyLoad/useLazyLoad.d.ts +26 -0
  170. package/dist/hooks/useLazyLoad/useLazyLoad.js +27 -0
  171. package/dist/hooks/useLazyLoad/useLazyLoad.types.d.ts +25 -0
  172. package/dist/index.cjs +1 -1
  173. package/dist/index.js +290 -255
  174. package/dist/styles.css +1 -1
  175. package/package.json +1 -1
  176. package/dist/components/DateTimePicker/DateTimePicker.cjs +0 -1
  177. package/dist/components/DateTimePicker/DateTimePicker.d.ts +0 -3
  178. package/dist/components/DateTimePicker/DateTimePicker.js +0 -178
  179. package/dist/components/DateTimePicker/DateTimePicker.types.d.ts +0 -26
  180. package/dist/components/DateTimePicker/DateTimePicker.utils.cjs +0 -1
  181. package/dist/components/DateTimePicker/DateTimePicker.utils.d.ts +0 -2
  182. package/dist/components/DateTimePicker/DateTimePicker.utils.js +0 -16
  183. package/dist/components/DateTimePicker/index.d.ts +0 -2
@@ -0,0 +1,117 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * Notification types
4
+ */
5
+ export type NotificationType = 'info' | 'success' | 'warning' | 'error';
6
+ /**
7
+ * Notification priority levels
8
+ */
9
+ export type NotificationPriority = 'low' | 'medium' | 'high' | 'urgent';
10
+ /**
11
+ * Single notification item
12
+ */
13
+ export interface NotificationItem {
14
+ /** Unique identifier */
15
+ id: string;
16
+ /** Notification type */
17
+ type: NotificationType;
18
+ /** Title text */
19
+ title: string;
20
+ /** Description/message */
21
+ description?: string;
22
+ /** Timestamp */
23
+ timestamp: Date;
24
+ /** Whether the notification has been read */
25
+ read: boolean;
26
+ /** Priority level */
27
+ priority?: NotificationPriority;
28
+ /** Custom icon */
29
+ icon?: ReactNode;
30
+ /** Link URL (if notification is clickable) */
31
+ href?: string;
32
+ /** Action buttons */
33
+ actions?: NotificationAction[];
34
+ /** Avatar/image URL */
35
+ avatar?: string;
36
+ /** Category/group */
37
+ category?: string;
38
+ /** Custom metadata */
39
+ metadata?: Record<string, unknown>;
40
+ }
41
+ /**
42
+ * Notification action button
43
+ */
44
+ export interface NotificationAction {
45
+ /** Action label */
46
+ label: string;
47
+ /** Action handler */
48
+ onClick: () => void;
49
+ /** Action variant */
50
+ variant?: 'primary' | 'secondary' | 'danger';
51
+ }
52
+ /**
53
+ * Notification center position
54
+ */
55
+ export type NotificationCenterPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
56
+ /**
57
+ * Notification center translations
58
+ */
59
+ export interface NotificationCenterTranslations {
60
+ title: string;
61
+ noNotifications: string;
62
+ markAllRead: string;
63
+ clearAll: string;
64
+ showMore: string;
65
+ justNow: string;
66
+ minutesAgo: string;
67
+ hoursAgo: string;
68
+ daysAgo: string;
69
+ new: string;
70
+ }
71
+ /**
72
+ * NotificationCenter component props
73
+ */
74
+ export interface NotificationCenterProps {
75
+ /** List of notifications */
76
+ notifications: NotificationItem[];
77
+ /** Callback when notification is clicked */
78
+ onNotificationClick?: (notification: NotificationItem) => void;
79
+ /** Callback when notification is marked as read */
80
+ onMarkAsRead?: (id: string) => void;
81
+ /** Callback when all notifications are marked as read */
82
+ onMarkAllAsRead?: () => void;
83
+ /** Callback when notification is dismissed */
84
+ onDismiss?: (id: string) => void;
85
+ /** Callback when all notifications are cleared */
86
+ onClearAll?: () => void;
87
+ /** Maximum notifications to show */
88
+ maxVisible?: number;
89
+ /** Whether to group notifications by category */
90
+ groupByCategory?: boolean;
91
+ /** Position of the notification panel */
92
+ position?: NotificationCenterPosition;
93
+ /** Custom trigger element */
94
+ trigger?: ReactNode;
95
+ /** Whether panel is open (controlled mode) */
96
+ open?: boolean;
97
+ /** Callback when open state changes */
98
+ onOpenChange?: (open: boolean) => void;
99
+ /** Custom class name */
100
+ className?: string;
101
+ /** Test ID */
102
+ testId?: string;
103
+ /** Translation strings */
104
+ translations?: Partial<NotificationCenterTranslations>;
105
+ /** Custom bell icon */
106
+ icon?: ReactNode;
107
+ }
108
+ /**
109
+ * NotificationItem component props
110
+ */
111
+ export interface NotificationItemProps {
112
+ notification: NotificationItem;
113
+ onRead?: (id: string) => void;
114
+ onDismiss?: (id: string) => void;
115
+ onClick?: (notification: NotificationItem) => void;
116
+ translations: NotificationCenterTranslations;
117
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./NotificationCenter.const.cjs"),T=(n,o)=>{const e=new Date().getTime()-n.getTime();if(e<t.TIME_THRESHOLDS.MINUTE)return o.justNow;if(e<t.TIME_THRESHOLDS.HOUR){const r=Math.floor(e/t.TIME_THRESHOLDS.MINUTE);return o.minutesAgo.replace("{count}",String(r))}if(e<t.TIME_THRESHOLDS.DAY){const r=Math.floor(e/t.TIME_THRESHOLDS.HOUR);return o.hoursAgo.replace("{count}",String(r))}const i=Math.floor(e/t.TIME_THRESHOLDS.DAY);return o.daysAgo.replace("{count}",String(i))};exports.formatRelativeTime=T;
@@ -0,0 +1,11 @@
1
+ import { NotificationCenterTranslations } from './NotificationCenter.types';
2
+ /**
3
+ * Format relative time
4
+ */
5
+ export declare const formatRelativeTime: (date: Date, translations: NotificationCenterTranslations) => string;
6
+ /**
7
+ * Group notifications by category
8
+ */
9
+ export declare const groupNotificationsByCategory: <T extends {
10
+ category?: string;
11
+ }>(notifications: T[]) => Record<string, T[]>;
@@ -0,0 +1,19 @@
1
+ import { TIME_THRESHOLDS as t } from "./NotificationCenter.const.js";
2
+ const f = (n, e) => {
3
+ const o = (/* @__PURE__ */ new Date()).getTime() - n.getTime();
4
+ if (o < t.MINUTE)
5
+ return e.justNow;
6
+ if (o < t.HOUR) {
7
+ const r = Math.floor(o / t.MINUTE);
8
+ return e.minutesAgo.replace("{count}", String(r));
9
+ }
10
+ if (o < t.DAY) {
11
+ const r = Math.floor(o / t.HOUR);
12
+ return e.hoursAgo.replace("{count}", String(r));
13
+ }
14
+ const c = Math.floor(o / t.DAY);
15
+ return e.daysAgo.replace("{count}", String(c));
16
+ };
17
+ export {
18
+ f as formatRelativeTime
19
+ };
@@ -0,0 +1,2 @@
1
+ export { NotificationCenter } from './NotificationCenter';
2
+ export type { NotificationCenterProps, NotificationItem, NotificationAction, NotificationType, NotificationPriority, NotificationCenterPosition, NotificationCenterTranslations, } from './NotificationCenter.types';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),o=require("react"),J=require("react-dom"),l=require("../../utils/cn.cjs"),i=require("./PhoneInput.const.cjs"),b=require("./PhoneInput.utils.cjs"),K=({value:t,onChange:c,defaultCountry:j=i.DEFAULT_COUNTRY_CODE,placeholder:q,label:E,helperText:y,error:m,disabled:h=!1,required:M=!1,size:z="md",variant:H="default",onlyCountries:p,excludeCountries:u,preferredCountries:B=[],searchable:_=!0,showFlags:R=!0,showDialCode:W=!0,className:Z,testId:Q,translations:O,icon:X})=>{const[d,P]=o.useState(!1),[N,g]=o.useState(""),[I,T]=o.useState(""),[L,Y]=o.useState({top:0,left:0}),D=o.useRef(null),k=o.useRef(null),U=o.useRef(null),w=o.useRef(null),S=o.useMemo(()=>({...i.PHONE_INPUT_DEFAULT_TRANSLATIONS,...O}),[O]),f=o.useMemo(()=>{let e=[...i.COUNTRIES];if(p!=null&&p.length){const s=new Set(p.map(n=>n.toUpperCase()));e=e.filter(n=>s.has(n.code))}if(u!=null&&u.length){const s=new Set(u.map(n=>n.toUpperCase()));e=e.filter(n=>!s.has(n.code))}return b.sortCountriesWithPreferred(e,B)},[p,u,B]),a=o.useMemo(()=>{const e=(t==null?void 0:t.countryCode)||j;return b.getCountryByCode(f,e)||f[0]},[t==null?void 0:t.countryCode,j,f]),A=o.useMemo(()=>b.filterCountries(f,N),[f,N]);o.useEffect(()=>{if((t==null?void 0:t.number)!==void 0){const e=b.formatPhoneNumber(t.number,a==null?void 0:a.format);T(e)}},[t==null?void 0:t.number,a==null?void 0:a.format]),o.useEffect(()=>{if(d&&k.current){const e=k.current.getBoundingClientRect(),s=window.scrollY||document.documentElement.scrollTop,n=window.scrollX||document.documentElement.scrollLeft;Y({top:e.bottom+s+4,left:e.left+n})}},[d]),o.useEffect(()=>{d&&_&&w.current&&w.current.focus()},[d,_]),o.useEffect(()=>{const e=s=>{var x,V;const n=s.target;(x=D.current)!=null&&x.contains(n)||(V=n.closest)!=null&&V.call(n,"[data-bear-phone-dropdown]")||(P(!1),g(""))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);const F=o.useCallback(e=>{var n;const s=b.createPhoneValue(e,(t==null?void 0:t.number)||I);c==null||c(s),P(!1),g(""),(n=U.current)==null||n.focus()},[t==null?void 0:t.number,I,c]),G=o.useCallback(e=>{const s=b.parsePhoneDigits(e.target.value),n=b.formatPhoneNumber(s,a==null?void 0:a.format);if(T(n),a){const x=b.createPhoneValue(a,s);c==null||c(x)}},[a,c]);return r.jsxs("div",{ref:D,className:l.cn("Bear-PhoneInput bear-relative",Z),"data-testid":Q,children:[E&&r.jsxs("label",{className:"Bear-PhoneInput__label bear-block bear-text-sm bear-font-medium bear-text-zinc-700 dark:bear-text-zinc-300 bear-mb-1.5",children:[E,M&&r.jsx("span",{className:"bear-text-red-500 bear-ml-0.5",children:"*"})]}),r.jsxs("div",{className:l.cn("Bear-PhoneInput__wrapper bear-flex bear-items-center bear-rounded-lg bear-border bear-transition-colors",i.PHONE_INPUT_VARIANT_CLASSES[H],m?"bear-border-red-500":"focus-within:bear-border-pink-500",h&&"bear-opacity-50 bear-cursor-not-allowed"),children:[r.jsxs("button",{ref:k,type:"button",onClick:()=>!h&&P(!d),disabled:h,className:l.cn("Bear-PhoneInput__country-trigger bear-flex bear-items-center bear-gap-1 bear-border-r bear-border-zinc-300 dark:bear-border-zinc-600 bear-shrink-0 bear-text-gray-900 dark:bear-text-white",i.PHONE_INPUT_SIZE_CLASSES[z]),children:[R&&a&&r.jsx("span",{className:"Bear-PhoneInput__flag bear-text-lg",children:a.flag}),W&&a&&r.jsx("span",{className:"Bear-PhoneInput__dial-code bear-text-gray-600 dark:bear-text-zinc-400",children:a.dialCode}),X??r.jsx("svg",{className:l.cn("Bear-PhoneInput__chevron bear-w-4 bear-h-4 bear-text-gray-500 dark:bear-text-zinc-400 bear-transition-transform",d&&"bear-rotate-180"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),r.jsx("input",{ref:U,type:"tel",value:I,onChange:G,placeholder:q||S.placeholder,disabled:h,className:l.cn("Bear-PhoneInput__input bear-flex-1 bear-bg-transparent bear-border-0 bear-outline-none bear-text-gray-900 dark:bear-text-white placeholder:bear-text-gray-400 dark:placeholder:bear-text-zinc-500",i.PHONE_INPUT_SIZE_CLASSES[z])})]}),m&&r.jsx("p",{className:"Bear-PhoneInput__error bear-mt-1 bear-text-xs bear-text-red-400",children:m}),y&&!m&&r.jsx("p",{className:"Bear-PhoneInput__helper bear-mt-1 bear-text-xs bear-text-zinc-500 dark:bear-text-zinc-400",children:y}),d&&typeof document<"u"&&J.createPortal(r.jsxs("div",{"data-bear-phone-dropdown":!0,className:"Bear-PhoneInput__dropdown bear-fixed bear-w-64 bear-bg-white dark:bear-bg-zinc-800 bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-rounded-lg bear-shadow-xl bear-overflow-hidden",style:{top:L.top,left:L.left,zIndex:i.PHONE_INPUT_DROPDOWN_Z_INDEX},children:[_&&r.jsx("div",{className:"Bear-PhoneInput__search bear-p-2 bear-border-b bear-border-zinc-200 dark:bear-border-zinc-700",children:r.jsx("input",{ref:w,type:"text",value:N,onChange:e=>g(e.target.value),placeholder:S.searchCountry,className:"bear-w-full bear-px-3 bear-py-2 bear-bg-gray-50 dark:bear-bg-zinc-700 bear-border bear-border-zinc-200 dark:bear-border-zinc-600 bear-rounded bear-text-sm bear-text-gray-900 dark:bear-text-white placeholder:bear-text-gray-400 dark:placeholder:bear-text-zinc-500 bear-outline-none focus:bear-border-pink-500"})}),r.jsx("div",{className:"Bear-PhoneInput__country-list bear-max-h-60 bear-overflow-y-auto",children:A.length===0?r.jsx("div",{className:"bear-px-3 bear-py-4 bear-text-center bear-text-sm bear-text-gray-500 dark:bear-text-zinc-500",children:S.noResults}):A.map(e=>r.jsxs("button",{type:"button",onClick:()=>F(e),className:l.cn("Bear-PhoneInput__country-option bear-w-full bear-flex bear-items-center bear-gap-3 bear-px-3 bear-py-2 bear-text-left bear-text-sm bear-transition-colors",(a==null?void 0:a.code)===e.code?"bear-bg-pink-500/20 bear-text-pink-600 dark:bear-text-pink-400":"bear-text-gray-700 dark:bear-text-zinc-300 hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700"),children:[R&&r.jsx("span",{className:"Bear-PhoneInput__country-flag bear-text-lg",children:e.flag}),r.jsx("span",{className:"Bear-PhoneInput__country-name bear-flex-1",children:e.name}),r.jsx("span",{className:"Bear-PhoneInput__country-dial bear-text-gray-500 dark:bear-text-zinc-500",children:e.dialCode})]},e.code))})]}),document.body)]})};exports.PhoneInput=K;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a={placeholder:"Phone number",searchCountry:"Search country...",noResults:"No countries found"},e={sm:"bear-py-1.5 bear-px-3 bear-text-sm",md:"bear-py-2 bear-px-4 bear-text-sm",lg:"bear-py-2.5 bear-px-5 bear-text-base"},o={default:"bear-bg-white dark:bear-bg-zinc-800 bear-border-zinc-300 dark:bear-border-zinc-600",filled:"bear-bg-zinc-100 dark:bear-bg-zinc-700 bear-border-transparent",outline:"bear-bg-transparent bear-border-zinc-300 dark:bear-border-zinc-500"},d=9999,l=[{code:"US",name:"United States",dialCode:"+1",flag:"🇺🇸",format:"(###) ###-####"},{code:"GB",name:"United Kingdom",dialCode:"+44",flag:"🇬🇧",format:"#### ### ####"},{code:"CA",name:"Canada",dialCode:"+1",flag:"🇨🇦",format:"(###) ###-####"},{code:"AU",name:"Australia",dialCode:"+61",flag:"🇦🇺",format:"#### ### ###"},{code:"DE",name:"Germany",dialCode:"+49",flag:"🇩🇪",format:"#### #######"},{code:"FR",name:"France",dialCode:"+33",flag:"🇫🇷",format:"## ## ## ## ##"},{code:"IT",name:"Italy",dialCode:"+39",flag:"🇮🇹",format:"### ### ####"},{code:"ES",name:"Spain",dialCode:"+34",flag:"🇪🇸",format:"### ## ## ##"},{code:"NL",name:"Netherlands",dialCode:"+31",flag:"🇳🇱",format:"## ### ####"},{code:"BE",name:"Belgium",dialCode:"+32",flag:"🇧🇪",format:"### ## ## ##"},{code:"CH",name:"Switzerland",dialCode:"+41",flag:"🇨🇭",format:"## ### ## ##"},{code:"AT",name:"Austria",dialCode:"+43",flag:"🇦🇹",format:"### #######"},{code:"SE",name:"Sweden",dialCode:"+46",flag:"🇸🇪",format:"##-### ## ##"},{code:"NO",name:"Norway",dialCode:"+47",flag:"🇳🇴",format:"### ## ###"},{code:"DK",name:"Denmark",dialCode:"+45",flag:"🇩🇰",format:"## ## ## ##"},{code:"FI",name:"Finland",dialCode:"+358",flag:"🇫🇮",format:"## ### ####"},{code:"PL",name:"Poland",dialCode:"+48",flag:"🇵🇱",format:"### ### ###"},{code:"PT",name:"Portugal",dialCode:"+351",flag:"🇵🇹",format:"### ### ###"},{code:"IE",name:"Ireland",dialCode:"+353",flag:"🇮🇪",format:"## ### ####"},{code:"GR",name:"Greece",dialCode:"+30",flag:"🇬🇷",format:"### ### ####"},{code:"CZ",name:"Czech Republic",dialCode:"+420",flag:"🇨🇿",format:"### ### ###"},{code:"HU",name:"Hungary",dialCode:"+36",flag:"🇭🇺",format:"## ### ####"},{code:"RO",name:"Romania",dialCode:"+40",flag:"🇷🇴",format:"### ### ###"},{code:"BG",name:"Bulgaria",dialCode:"+359",flag:"🇧🇬",format:"### ### ###"},{code:"HR",name:"Croatia",dialCode:"+385",flag:"🇭🇷",format:"## ### ####"},{code:"SK",name:"Slovakia",dialCode:"+421",flag:"🇸🇰",format:"### ### ###"},{code:"SI",name:"Slovenia",dialCode:"+386",flag:"🇸🇮",format:"## ### ###"},{code:"LT",name:"Lithuania",dialCode:"+370",flag:"🇱🇹",format:"### #####"},{code:"LV",name:"Latvia",dialCode:"+371",flag:"🇱🇻",format:"## ### ###"},{code:"EE",name:"Estonia",dialCode:"+372",flag:"🇪🇪",format:"### ####"},{code:"JP",name:"Japan",dialCode:"+81",flag:"🇯🇵",format:"##-####-####"},{code:"KR",name:"South Korea",dialCode:"+82",flag:"🇰🇷",format:"##-####-####"},{code:"CN",name:"China",dialCode:"+86",flag:"🇨🇳",format:"### #### ####"},{code:"IN",name:"India",dialCode:"+91",flag:"🇮🇳",format:"##### #####"},{code:"SG",name:"Singapore",dialCode:"+65",flag:"🇸🇬",format:"#### ####"},{code:"HK",name:"Hong Kong",dialCode:"+852",flag:"🇭🇰",format:"#### ####"},{code:"TW",name:"Taiwan",dialCode:"+886",flag:"🇹🇼",format:"### ### ###"},{code:"TH",name:"Thailand",dialCode:"+66",flag:"🇹🇭",format:"## ### ####"},{code:"MY",name:"Malaysia",dialCode:"+60",flag:"🇲🇾",format:"##-### ####"},{code:"ID",name:"Indonesia",dialCode:"+62",flag:"🇮🇩",format:"### ### ####"},{code:"PH",name:"Philippines",dialCode:"+63",flag:"🇵🇭",format:"### ### ####"},{code:"VN",name:"Vietnam",dialCode:"+84",flag:"🇻🇳",format:"### ### ####"},{code:"RU",name:"Russia",dialCode:"+7",flag:"🇷🇺",format:"### ###-##-##"},{code:"UA",name:"Ukraine",dialCode:"+380",flag:"🇺🇦",format:"## ### ## ##"},{code:"TR",name:"Turkey",dialCode:"+90",flag:"🇹🇷",format:"### ### ## ##"},{code:"IL",name:"Israel",dialCode:"+972",flag:"🇮🇱",format:"##-###-####"},{code:"AE",name:"United Arab Emirates",dialCode:"+971",flag:"🇦🇪",format:"## ### ####"},{code:"SA",name:"Saudi Arabia",dialCode:"+966",flag:"🇸🇦",format:"## ### ####"},{code:"EG",name:"Egypt",dialCode:"+20",flag:"🇪🇬",format:"### ### ####"},{code:"ZA",name:"South Africa",dialCode:"+27",flag:"🇿🇦",format:"## ### ####"},{code:"NG",name:"Nigeria",dialCode:"+234",flag:"🇳🇬",format:"### ### ####"},{code:"KE",name:"Kenya",dialCode:"+254",flag:"🇰🇪",format:"### ### ###"},{code:"BR",name:"Brazil",dialCode:"+55",flag:"🇧🇷",format:"(##) #####-####"},{code:"MX",name:"Mexico",dialCode:"+52",flag:"🇲🇽",format:"## #### ####"},{code:"AR",name:"Argentina",dialCode:"+54",flag:"🇦🇷",format:"## ####-####"},{code:"CO",name:"Colombia",dialCode:"+57",flag:"🇨🇴",format:"### ### ####"},{code:"CL",name:"Chile",dialCode:"+56",flag:"🇨🇱",format:"# #### ####"},{code:"PE",name:"Peru",dialCode:"+51",flag:"🇵🇪",format:"### ### ###"},{code:"VE",name:"Venezuela",dialCode:"+58",flag:"🇻🇪",format:"### ### ####"},{code:"NZ",name:"New Zealand",dialCode:"+64",flag:"🇳🇿",format:"## ### ####"}],r="US";exports.COUNTRIES=l;exports.DEFAULT_COUNTRY_CODE=r;exports.PHONE_INPUT_DEFAULT_TRANSLATIONS=a;exports.PHONE_INPUT_DROPDOWN_Z_INDEX=d;exports.PHONE_INPUT_SIZE_CLASSES=e;exports.PHONE_INPUT_VARIANT_CLASSES=o;
@@ -0,0 +1,33 @@
1
+ import { PhoneInputTranslations, CountryData } from './PhoneInput.types';
2
+ /**
3
+ * Default translations
4
+ */
5
+ export declare const PHONE_INPUT_DEFAULT_TRANSLATIONS: PhoneInputTranslations;
6
+ /**
7
+ * Size classes
8
+ */
9
+ export declare const PHONE_INPUT_SIZE_CLASSES: {
10
+ readonly sm: "bear-py-1.5 bear-px-3 bear-text-sm";
11
+ readonly md: "bear-py-2 bear-px-4 bear-text-sm";
12
+ readonly lg: "bear-py-2.5 bear-px-5 bear-text-base";
13
+ };
14
+ /**
15
+ * Variant classes (light/dark)
16
+ */
17
+ export declare const PHONE_INPUT_VARIANT_CLASSES: {
18
+ readonly default: "bear-bg-white dark:bear-bg-zinc-800 bear-border-zinc-300 dark:bear-border-zinc-600";
19
+ readonly filled: "bear-bg-zinc-100 dark:bear-bg-zinc-700 bear-border-transparent";
20
+ readonly outline: "bear-bg-transparent bear-border-zinc-300 dark:bear-border-zinc-500";
21
+ };
22
+ /**
23
+ * Dropdown z-index
24
+ */
25
+ export declare const PHONE_INPUT_DROPDOWN_Z_INDEX = 9999;
26
+ /**
27
+ * Common countries data
28
+ */
29
+ export declare const COUNTRIES: CountryData[];
30
+ /**
31
+ * Default country code
32
+ */
33
+ export declare const DEFAULT_COUNTRY_CODE = "US";
@@ -0,0 +1,82 @@
1
+ const a = {
2
+ placeholder: "Phone number",
3
+ searchCountry: "Search country...",
4
+ noResults: "No countries found"
5
+ }, e = {
6
+ sm: "bear-py-1.5 bear-px-3 bear-text-sm",
7
+ md: "bear-py-2 bear-px-4 bear-text-sm",
8
+ lg: "bear-py-2.5 bear-px-5 bear-text-base"
9
+ }, o = {
10
+ default: "bear-bg-white dark:bear-bg-zinc-800 bear-border-zinc-300 dark:bear-border-zinc-600",
11
+ filled: "bear-bg-zinc-100 dark:bear-bg-zinc-700 bear-border-transparent",
12
+ outline: "bear-bg-transparent bear-border-zinc-300 dark:bear-border-zinc-500"
13
+ }, d = 9999, l = [
14
+ { code: "US", name: "United States", dialCode: "+1", flag: "🇺🇸", format: "(###) ###-####" },
15
+ { code: "GB", name: "United Kingdom", dialCode: "+44", flag: "🇬🇧", format: "#### ### ####" },
16
+ { code: "CA", name: "Canada", dialCode: "+1", flag: "🇨🇦", format: "(###) ###-####" },
17
+ { code: "AU", name: "Australia", dialCode: "+61", flag: "🇦🇺", format: "#### ### ###" },
18
+ { code: "DE", name: "Germany", dialCode: "+49", flag: "🇩🇪", format: "#### #######" },
19
+ { code: "FR", name: "France", dialCode: "+33", flag: "🇫🇷", format: "## ## ## ## ##" },
20
+ { code: "IT", name: "Italy", dialCode: "+39", flag: "🇮🇹", format: "### ### ####" },
21
+ { code: "ES", name: "Spain", dialCode: "+34", flag: "🇪🇸", format: "### ## ## ##" },
22
+ { code: "NL", name: "Netherlands", dialCode: "+31", flag: "🇳🇱", format: "## ### ####" },
23
+ { code: "BE", name: "Belgium", dialCode: "+32", flag: "🇧🇪", format: "### ## ## ##" },
24
+ { code: "CH", name: "Switzerland", dialCode: "+41", flag: "🇨🇭", format: "## ### ## ##" },
25
+ { code: "AT", name: "Austria", dialCode: "+43", flag: "🇦🇹", format: "### #######" },
26
+ { code: "SE", name: "Sweden", dialCode: "+46", flag: "🇸🇪", format: "##-### ## ##" },
27
+ { code: "NO", name: "Norway", dialCode: "+47", flag: "🇳🇴", format: "### ## ###" },
28
+ { code: "DK", name: "Denmark", dialCode: "+45", flag: "🇩🇰", format: "## ## ## ##" },
29
+ { code: "FI", name: "Finland", dialCode: "+358", flag: "🇫🇮", format: "## ### ####" },
30
+ { code: "PL", name: "Poland", dialCode: "+48", flag: "🇵🇱", format: "### ### ###" },
31
+ { code: "PT", name: "Portugal", dialCode: "+351", flag: "🇵🇹", format: "### ### ###" },
32
+ { code: "IE", name: "Ireland", dialCode: "+353", flag: "🇮🇪", format: "## ### ####" },
33
+ { code: "GR", name: "Greece", dialCode: "+30", flag: "🇬🇷", format: "### ### ####" },
34
+ { code: "CZ", name: "Czech Republic", dialCode: "+420", flag: "🇨🇿", format: "### ### ###" },
35
+ { code: "HU", name: "Hungary", dialCode: "+36", flag: "🇭🇺", format: "## ### ####" },
36
+ { code: "RO", name: "Romania", dialCode: "+40", flag: "🇷🇴", format: "### ### ###" },
37
+ { code: "BG", name: "Bulgaria", dialCode: "+359", flag: "🇧🇬", format: "### ### ###" },
38
+ { code: "HR", name: "Croatia", dialCode: "+385", flag: "🇭🇷", format: "## ### ####" },
39
+ { code: "SK", name: "Slovakia", dialCode: "+421", flag: "🇸🇰", format: "### ### ###" },
40
+ { code: "SI", name: "Slovenia", dialCode: "+386", flag: "🇸🇮", format: "## ### ###" },
41
+ { code: "LT", name: "Lithuania", dialCode: "+370", flag: "🇱🇹", format: "### #####" },
42
+ { code: "LV", name: "Latvia", dialCode: "+371", flag: "🇱🇻", format: "## ### ###" },
43
+ { code: "EE", name: "Estonia", dialCode: "+372", flag: "🇪🇪", format: "### ####" },
44
+ { code: "JP", name: "Japan", dialCode: "+81", flag: "🇯🇵", format: "##-####-####" },
45
+ { code: "KR", name: "South Korea", dialCode: "+82", flag: "🇰🇷", format: "##-####-####" },
46
+ { code: "CN", name: "China", dialCode: "+86", flag: "🇨🇳", format: "### #### ####" },
47
+ { code: "IN", name: "India", dialCode: "+91", flag: "🇮🇳", format: "##### #####" },
48
+ { code: "SG", name: "Singapore", dialCode: "+65", flag: "🇸🇬", format: "#### ####" },
49
+ { code: "HK", name: "Hong Kong", dialCode: "+852", flag: "🇭🇰", format: "#### ####" },
50
+ { code: "TW", name: "Taiwan", dialCode: "+886", flag: "🇹🇼", format: "### ### ###" },
51
+ { code: "TH", name: "Thailand", dialCode: "+66", flag: "🇹🇭", format: "## ### ####" },
52
+ { code: "MY", name: "Malaysia", dialCode: "+60", flag: "🇲🇾", format: "##-### ####" },
53
+ { code: "ID", name: "Indonesia", dialCode: "+62", flag: "🇮🇩", format: "### ### ####" },
54
+ { code: "PH", name: "Philippines", dialCode: "+63", flag: "🇵🇭", format: "### ### ####" },
55
+ { code: "VN", name: "Vietnam", dialCode: "+84", flag: "🇻🇳", format: "### ### ####" },
56
+ { code: "RU", name: "Russia", dialCode: "+7", flag: "🇷🇺", format: "### ###-##-##" },
57
+ { code: "UA", name: "Ukraine", dialCode: "+380", flag: "🇺🇦", format: "## ### ## ##" },
58
+ { code: "TR", name: "Turkey", dialCode: "+90", flag: "🇹🇷", format: "### ### ## ##" },
59
+ { code: "IL", name: "Israel", dialCode: "+972", flag: "🇮🇱", format: "##-###-####" },
60
+ { code: "AE", name: "United Arab Emirates", dialCode: "+971", flag: "🇦🇪", format: "## ### ####" },
61
+ { code: "SA", name: "Saudi Arabia", dialCode: "+966", flag: "🇸🇦", format: "## ### ####" },
62
+ { code: "EG", name: "Egypt", dialCode: "+20", flag: "🇪🇬", format: "### ### ####" },
63
+ { code: "ZA", name: "South Africa", dialCode: "+27", flag: "🇿🇦", format: "## ### ####" },
64
+ { code: "NG", name: "Nigeria", dialCode: "+234", flag: "🇳🇬", format: "### ### ####" },
65
+ { code: "KE", name: "Kenya", dialCode: "+254", flag: "🇰🇪", format: "### ### ###" },
66
+ { code: "BR", name: "Brazil", dialCode: "+55", flag: "🇧🇷", format: "(##) #####-####" },
67
+ { code: "MX", name: "Mexico", dialCode: "+52", flag: "🇲🇽", format: "## #### ####" },
68
+ { code: "AR", name: "Argentina", dialCode: "+54", flag: "🇦🇷", format: "## ####-####" },
69
+ { code: "CO", name: "Colombia", dialCode: "+57", flag: "🇨🇴", format: "### ### ####" },
70
+ { code: "CL", name: "Chile", dialCode: "+56", flag: "🇨🇱", format: "# #### ####" },
71
+ { code: "PE", name: "Peru", dialCode: "+51", flag: "🇵🇪", format: "### ### ###" },
72
+ { code: "VE", name: "Venezuela", dialCode: "+58", flag: "🇻🇪", format: "### ### ####" },
73
+ { code: "NZ", name: "New Zealand", dialCode: "+64", flag: "🇳🇿", format: "## ### ####" }
74
+ ], m = "US";
75
+ export {
76
+ l as COUNTRIES,
77
+ m as DEFAULT_COUNTRY_CODE,
78
+ a as PHONE_INPUT_DEFAULT_TRANSLATIONS,
79
+ d as PHONE_INPUT_DROPDOWN_Z_INDEX,
80
+ e as PHONE_INPUT_SIZE_CLASSES,
81
+ o as PHONE_INPUT_VARIANT_CLASSES
82
+ };
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+ import { PhoneInputProps } from './PhoneInput.types';
3
+ /**
4
+ * PhoneInput - International phone number input
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * <PhoneInput
9
+ * value={phoneValue}
10
+ * onChange={setPhoneValue}
11
+ * defaultCountry="US"
12
+ * preferredCountries={['US', 'GB', 'CA']}
13
+ * />
14
+ * ```
15
+ */
16
+ export declare const PhoneInput: FC<PhoneInputProps>;
@@ -0,0 +1,194 @@
1
+ import { jsxs as d, jsx as n } from "react/jsx-runtime";
2
+ import { useState as u, useRef as x, useMemo as _, useEffect as N, useCallback as M } from "react";
3
+ import { createPortal as re } from "react-dom";
4
+ import { cn as s } from "../../utils/cn.js";
5
+ import { PHONE_INPUT_DEFAULT_TRANSLATIONS as te, COUNTRIES as ae, DEFAULT_COUNTRY_CODE as ne, PHONE_INPUT_SIZE_CLASSES as Q, PHONE_INPUT_VARIANT_CLASSES as oe, PHONE_INPUT_DROPDOWN_Z_INDEX as be } from "./PhoneInput.const.js";
6
+ import { sortCountriesWithPreferred as ce, getCountryByCode as de, filterCountries as se, formatPhoneNumber as X, createPhoneValue as Y, parsePhoneDigits as ie } from "./PhoneInput.utils.js";
7
+ const xe = ({
8
+ value: r,
9
+ onChange: b,
10
+ defaultCountry: E = ne,
11
+ placeholder: Z,
12
+ label: S,
13
+ helperText: O,
14
+ error: m,
15
+ disabled: f = !1,
16
+ required: F = !1,
17
+ size: R = "md",
18
+ variant: q = "default",
19
+ onlyCountries: i,
20
+ excludeCountries: l,
21
+ preferredCountries: T = [],
22
+ searchable: g = !0,
23
+ showFlags: L = !0,
24
+ showDialCode: G = !0,
25
+ className: J,
26
+ testId: K,
27
+ translations: D,
28
+ icon: $
29
+ }) => {
30
+ const [c, k] = u(!1), [P, w] = u(""), [I, U] = u(""), [A, C] = u({ top: 0, left: 0 }), V = x(null), z = x(null), H = x(null), y = x(null), B = _(() => ({
31
+ ...te,
32
+ ...D
33
+ }), [D]), p = _(() => {
34
+ let e = [...ae];
35
+ if (i != null && i.length) {
36
+ const o = new Set(i.map((a) => a.toUpperCase()));
37
+ e = e.filter((a) => o.has(a.code));
38
+ }
39
+ if (l != null && l.length) {
40
+ const o = new Set(l.map((a) => a.toUpperCase()));
41
+ e = e.filter((a) => !o.has(a.code));
42
+ }
43
+ return ce(e, T);
44
+ }, [i, l, T]), t = _(() => {
45
+ const e = (r == null ? void 0 : r.countryCode) || E;
46
+ return de(p, e) || p[0];
47
+ }, [r == null ? void 0 : r.countryCode, E, p]), j = _(() => se(p, P), [p, P]);
48
+ N(() => {
49
+ if ((r == null ? void 0 : r.number) !== void 0) {
50
+ const e = X(r.number, t == null ? void 0 : t.format);
51
+ U(e);
52
+ }
53
+ }, [r == null ? void 0 : r.number, t == null ? void 0 : t.format]), N(() => {
54
+ if (c && z.current) {
55
+ const e = z.current.getBoundingClientRect(), o = window.scrollY || document.documentElement.scrollTop, a = window.scrollX || document.documentElement.scrollLeft;
56
+ C({
57
+ top: e.bottom + o + 4,
58
+ left: e.left + a
59
+ });
60
+ }
61
+ }, [c]), N(() => {
62
+ c && g && y.current && y.current.focus();
63
+ }, [c, g]), N(() => {
64
+ const e = (o) => {
65
+ var h, W;
66
+ const a = o.target;
67
+ (h = V.current) != null && h.contains(a) || (W = a.closest) != null && W.call(a, "[data-bear-phone-dropdown]") || (k(!1), w(""));
68
+ };
69
+ return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
70
+ }, []);
71
+ const v = M((e) => {
72
+ var a;
73
+ const o = Y(e, (r == null ? void 0 : r.number) || I);
74
+ b == null || b(o), k(!1), w(""), (a = H.current) == null || a.focus();
75
+ }, [r == null ? void 0 : r.number, I, b]), ee = M((e) => {
76
+ const o = ie(e.target.value), a = X(o, t == null ? void 0 : t.format);
77
+ if (U(a), t) {
78
+ const h = Y(t, o);
79
+ b == null || b(h);
80
+ }
81
+ }, [t, b]);
82
+ return /* @__PURE__ */ d(
83
+ "div",
84
+ {
85
+ ref: V,
86
+ className: s("Bear-PhoneInput bear-relative", J),
87
+ "data-testid": K,
88
+ children: [
89
+ S && /* @__PURE__ */ d("label", { className: "Bear-PhoneInput__label bear-block bear-text-sm bear-font-medium bear-text-zinc-700 dark:bear-text-zinc-300 bear-mb-1.5", children: [
90
+ S,
91
+ F && /* @__PURE__ */ n("span", { className: "bear-text-red-500 bear-ml-0.5", children: "*" })
92
+ ] }),
93
+ /* @__PURE__ */ d("div", { className: s(
94
+ "Bear-PhoneInput__wrapper bear-flex bear-items-center bear-rounded-lg bear-border bear-transition-colors",
95
+ oe[q],
96
+ m ? "bear-border-red-500" : "focus-within:bear-border-pink-500",
97
+ f && "bear-opacity-50 bear-cursor-not-allowed"
98
+ ), children: [
99
+ /* @__PURE__ */ d(
100
+ "button",
101
+ {
102
+ ref: z,
103
+ type: "button",
104
+ onClick: () => !f && k(!c),
105
+ disabled: f,
106
+ className: s(
107
+ "Bear-PhoneInput__country-trigger bear-flex bear-items-center bear-gap-1 bear-border-r bear-border-zinc-300 dark:bear-border-zinc-600 bear-shrink-0 bear-text-gray-900 dark:bear-text-white",
108
+ Q[R]
109
+ ),
110
+ children: [
111
+ L && t && /* @__PURE__ */ n("span", { className: "Bear-PhoneInput__flag bear-text-lg", children: t.flag }),
112
+ G && t && /* @__PURE__ */ n("span", { className: "Bear-PhoneInput__dial-code bear-text-gray-600 dark:bear-text-zinc-400", children: t.dialCode }),
113
+ $ ?? /* @__PURE__ */ n(
114
+ "svg",
115
+ {
116
+ className: s(
117
+ "Bear-PhoneInput__chevron bear-w-4 bear-h-4 bear-text-gray-500 dark:bear-text-zinc-400 bear-transition-transform",
118
+ c && "bear-rotate-180"
119
+ ),
120
+ fill: "none",
121
+ viewBox: "0 0 24 24",
122
+ stroke: "currentColor",
123
+ children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
124
+ }
125
+ )
126
+ ]
127
+ }
128
+ ),
129
+ /* @__PURE__ */ n(
130
+ "input",
131
+ {
132
+ ref: H,
133
+ type: "tel",
134
+ value: I,
135
+ onChange: ee,
136
+ placeholder: Z || B.placeholder,
137
+ disabled: f,
138
+ className: s(
139
+ "Bear-PhoneInput__input bear-flex-1 bear-bg-transparent bear-border-0 bear-outline-none bear-text-gray-900 dark:bear-text-white placeholder:bear-text-gray-400 dark:placeholder:bear-text-zinc-500",
140
+ Q[R]
141
+ )
142
+ }
143
+ )
144
+ ] }),
145
+ m && /* @__PURE__ */ n("p", { className: "Bear-PhoneInput__error bear-mt-1 bear-text-xs bear-text-red-400", children: m }),
146
+ O && !m && /* @__PURE__ */ n("p", { className: "Bear-PhoneInput__helper bear-mt-1 bear-text-xs bear-text-zinc-500 dark:bear-text-zinc-400", children: O }),
147
+ c && typeof document < "u" && re(
148
+ /* @__PURE__ */ d(
149
+ "div",
150
+ {
151
+ "data-bear-phone-dropdown": !0,
152
+ className: "Bear-PhoneInput__dropdown bear-fixed bear-w-64 bear-bg-white dark:bear-bg-zinc-800 bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-rounded-lg bear-shadow-xl bear-overflow-hidden",
153
+ style: { top: A.top, left: A.left, zIndex: be },
154
+ children: [
155
+ g && /* @__PURE__ */ n("div", { className: "Bear-PhoneInput__search bear-p-2 bear-border-b bear-border-zinc-200 dark:bear-border-zinc-700", children: /* @__PURE__ */ n(
156
+ "input",
157
+ {
158
+ ref: y,
159
+ type: "text",
160
+ value: P,
161
+ onChange: (e) => w(e.target.value),
162
+ placeholder: B.searchCountry,
163
+ className: "bear-w-full bear-px-3 bear-py-2 bear-bg-gray-50 dark:bear-bg-zinc-700 bear-border bear-border-zinc-200 dark:bear-border-zinc-600 bear-rounded bear-text-sm bear-text-gray-900 dark:bear-text-white placeholder:bear-text-gray-400 dark:placeholder:bear-text-zinc-500 bear-outline-none focus:bear-border-pink-500"
164
+ }
165
+ ) }),
166
+ /* @__PURE__ */ n("div", { className: "Bear-PhoneInput__country-list bear-max-h-60 bear-overflow-y-auto", children: j.length === 0 ? /* @__PURE__ */ n("div", { className: "bear-px-3 bear-py-4 bear-text-center bear-text-sm bear-text-gray-500 dark:bear-text-zinc-500", children: B.noResults }) : j.map((e) => /* @__PURE__ */ d(
167
+ "button",
168
+ {
169
+ type: "button",
170
+ onClick: () => v(e),
171
+ className: s(
172
+ "Bear-PhoneInput__country-option bear-w-full bear-flex bear-items-center bear-gap-3 bear-px-3 bear-py-2 bear-text-left bear-text-sm bear-transition-colors",
173
+ (t == null ? void 0 : t.code) === e.code ? "bear-bg-pink-500/20 bear-text-pink-600 dark:bear-text-pink-400" : "bear-text-gray-700 dark:bear-text-zinc-300 hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700"
174
+ ),
175
+ children: [
176
+ L && /* @__PURE__ */ n("span", { className: "Bear-PhoneInput__country-flag bear-text-lg", children: e.flag }),
177
+ /* @__PURE__ */ n("span", { className: "Bear-PhoneInput__country-name bear-flex-1", children: e.name }),
178
+ /* @__PURE__ */ n("span", { className: "Bear-PhoneInput__country-dial bear-text-gray-500 dark:bear-text-zinc-500", children: e.dialCode })
179
+ ]
180
+ },
181
+ e.code
182
+ )) })
183
+ ]
184
+ }
185
+ ),
186
+ document.body
187
+ )
188
+ ]
189
+ }
190
+ );
191
+ };
192
+ export {
193
+ xe as PhoneInput
194
+ };
@@ -0,0 +1,108 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * Country data interface
4
+ */
5
+ export interface CountryData {
6
+ /** ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB') */
7
+ code: string;
8
+ /** Country name */
9
+ name: string;
10
+ /** Dial code (e.g., '+1', '+44') */
11
+ dialCode: string;
12
+ /** Flag emoji */
13
+ flag: string;
14
+ /** Phone number format mask (e.g., '(###) ###-####') */
15
+ format?: string;
16
+ }
17
+ /**
18
+ * Phone number value
19
+ */
20
+ export interface PhoneValue {
21
+ /** Country code */
22
+ countryCode: string;
23
+ /** Dial code */
24
+ dialCode: string;
25
+ /** Phone number (without dial code) */
26
+ number: string;
27
+ /** Full formatted phone number */
28
+ formattedNumber: string;
29
+ /** Raw phone number (digits only) */
30
+ rawNumber: string;
31
+ }
32
+ /**
33
+ * PhoneInput size variants
34
+ */
35
+ export type PhoneInputSize = 'sm' | 'md' | 'lg';
36
+ /**
37
+ * PhoneInput variant styles
38
+ */
39
+ export type PhoneInputVariant = 'default' | 'filled' | 'outline';
40
+ /**
41
+ * PhoneInput translations
42
+ */
43
+ export interface PhoneInputTranslations {
44
+ placeholder: string;
45
+ searchCountry: string;
46
+ noResults: string;
47
+ }
48
+ /**
49
+ * PhoneInput component props
50
+ */
51
+ export interface PhoneInputProps {
52
+ /** Current phone value */
53
+ value?: PhoneValue;
54
+ /** Callback when value changes */
55
+ onChange?: (value: PhoneValue) => void;
56
+ /** Default country code */
57
+ defaultCountry?: string;
58
+ /** Placeholder text */
59
+ placeholder?: string;
60
+ /** Input label */
61
+ label?: string;
62
+ /** Helper text */
63
+ helperText?: string;
64
+ /** Error message */
65
+ error?: string;
66
+ /** Whether input is disabled */
67
+ disabled?: boolean;
68
+ /** Whether input is required */
69
+ required?: boolean;
70
+ /** Size variant */
71
+ size?: PhoneInputSize;
72
+ /** Style variant */
73
+ variant?: PhoneInputVariant;
74
+ /** Only allow specific countries */
75
+ onlyCountries?: string[];
76
+ /** Exclude specific countries */
77
+ excludeCountries?: string[];
78
+ /** Preferred countries (shown at top) */
79
+ preferredCountries?: string[];
80
+ /** Whether to show country search */
81
+ searchable?: boolean;
82
+ /** Whether to show flags */
83
+ showFlags?: boolean;
84
+ /** Whether to show dial code in input */
85
+ showDialCode?: boolean;
86
+ /** Custom class name */
87
+ className?: string;
88
+ /** Test ID */
89
+ testId?: string;
90
+ /** Translation strings */
91
+ translations?: Partial<PhoneInputTranslations>;
92
+ /** Custom country selector icon */
93
+ icon?: ReactNode;
94
+ }
95
+ /**
96
+ * CountrySelector component props
97
+ */
98
+ export interface CountrySelectorProps {
99
+ countries: CountryData[];
100
+ selectedCountry: CountryData | null;
101
+ onSelect: (country: CountryData) => void;
102
+ isOpen: boolean;
103
+ onToggle: () => void;
104
+ searchable: boolean;
105
+ showFlags: boolean;
106
+ translations: PhoneInputTranslations;
107
+ disabled?: boolean;
108
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=(e,t)=>{if(!t)return e;const o=e.replace(/\D/g,"");let r="",s=0;for(const n of t){if(s>=o.length)break;n==="#"?(r+=o[s],s++):r+=n}return r},d=e=>e.replace(/\D/g,""),l=(e,t)=>{const o=i(t,e.format);return{countryCode:e.code,dialCode:e.dialCode,number:t,formattedNumber:`${e.dialCode} ${o}`,rawNumber:d(t)}},c=(e,t)=>{if(!t.trim())return e;const o=t.toLowerCase();return e.filter(r=>r.name.toLowerCase().includes(o)||r.code.toLowerCase().includes(o)||r.dialCode.includes(t))},f=(e,t)=>{if(t.length===0)return e;const o=new Set(t.map(n=>n.toUpperCase())),r=e.filter(n=>o.has(n.code)),s=e.filter(n=>!o.has(n.code));return r.sort((n,a)=>t.indexOf(n.code)-t.indexOf(a.code)),[...r,...s]},C=(e,t)=>e.find(o=>o.code.toUpperCase()===t.toUpperCase());exports.createPhoneValue=l;exports.filterCountries=c;exports.formatPhoneNumber=i;exports.getCountryByCode=C;exports.parsePhoneDigits=d;exports.sortCountriesWithPreferred=f;