@forgedevstack/bear 1.0.7 → 1.0.8

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 (169) hide show
  1. package/dist/components/Alert/Alert.cjs +1 -1
  2. package/dist/components/Alert/Alert.const.cjs +1 -1
  3. package/dist/components/Alert/Alert.const.d.ts +4 -0
  4. package/dist/components/Alert/Alert.const.js +9 -15
  5. package/dist/components/Alert/Alert.js +43 -38
  6. package/dist/components/AppBar/AppBar.cjs +1 -1
  7. package/dist/components/AppBar/AppBar.js +20 -16
  8. package/dist/components/BackTop/BackTop.cjs +1 -0
  9. package/dist/components/BackTop/BackTop.const.cjs +1 -0
  10. package/dist/components/BackTop/BackTop.const.d.ts +34 -0
  11. package/dist/components/BackTop/BackTop.const.js +29 -0
  12. package/dist/components/BackTop/BackTop.d.ts +21 -0
  13. package/dist/components/BackTop/BackTop.js +87 -0
  14. package/dist/components/BackTop/BackTop.types.d.ts +28 -0
  15. package/dist/components/BackTop/index.d.ts +3 -0
  16. package/dist/components/Badge/Badge.constants.d.ts +4 -4
  17. package/dist/components/Badge/Badge.types.d.ts +3 -3
  18. package/dist/components/BottomSheet/BottomSheet.cjs +1 -1
  19. package/dist/components/BottomSheet/BottomSheet.js +39 -38
  20. package/dist/components/Button/Button.cjs +1 -1
  21. package/dist/components/Button/Button.constants.cjs +38 -48
  22. package/dist/components/Button/Button.constants.d.ts +22 -3
  23. package/dist/components/Button/Button.constants.js +51 -50
  24. package/dist/components/Button/Button.d.ts +14 -7
  25. package/dist/components/Button/Button.js +123 -45
  26. package/dist/components/Button/Button.types.d.ts +22 -4
  27. package/dist/components/Calendar/Calendar.cjs +1 -1
  28. package/dist/components/Calendar/Calendar.js +3 -2
  29. package/dist/components/Card/Card.const.d.ts +2 -2
  30. package/dist/components/Card/Card.types.d.ts +2 -2
  31. package/dist/components/Chat/Chat.cjs +1 -0
  32. package/dist/components/Chat/Chat.const.cjs +1 -0
  33. package/dist/components/Chat/Chat.const.d.ts +26 -0
  34. package/dist/components/Chat/Chat.const.js +29 -0
  35. package/dist/components/Chat/Chat.d.ts +21 -0
  36. package/dist/components/Chat/Chat.js +179 -0
  37. package/dist/components/Chat/Chat.types.d.ts +55 -0
  38. package/dist/components/Chat/index.d.ts +2 -0
  39. package/dist/components/Confetti/Confetti.cjs +1 -0
  40. package/dist/components/Confetti/Confetti.const.cjs +1 -0
  41. package/dist/components/Confetti/Confetti.const.d.ts +16 -0
  42. package/dist/components/Confetti/Confetti.const.js +36 -0
  43. package/dist/components/Confetti/Confetti.d.ts +23 -0
  44. package/dist/components/Confetti/Confetti.js +94 -0
  45. package/dist/components/Confetti/Confetti.types.d.ts +50 -0
  46. package/dist/components/Confetti/index.d.ts +4 -0
  47. package/dist/components/Confetti/useConfetti.cjs +1 -0
  48. package/dist/components/Confetti/useConfetti.d.ts +13 -0
  49. package/dist/components/Confetti/useConfetti.js +12 -0
  50. package/dist/components/DatePicker/DatePicker.cjs +1 -1
  51. package/dist/components/DatePicker/DatePicker.js +3 -2
  52. package/dist/components/DiffViewer/DiffViewer.cjs +1 -0
  53. package/dist/components/DiffViewer/DiffViewer.const.cjs +1 -0
  54. package/dist/components/DiffViewer/DiffViewer.const.d.ts +18 -0
  55. package/dist/components/DiffViewer/DiffViewer.const.js +21 -0
  56. package/dist/components/DiffViewer/DiffViewer.d.ts +18 -0
  57. package/dist/components/DiffViewer/DiffViewer.js +127 -0
  58. package/dist/components/DiffViewer/DiffViewer.types.d.ts +40 -0
  59. package/dist/components/DiffViewer/DiffViewer.utils.cjs +3 -0
  60. package/dist/components/DiffViewer/DiffViewer.utils.d.ts +9 -0
  61. package/dist/components/DiffViewer/DiffViewer.utils.js +39 -0
  62. package/dist/components/DiffViewer/index.d.ts +2 -0
  63. package/dist/components/Drawer/Drawer.cjs +1 -1
  64. package/dist/components/Drawer/Drawer.js +35 -35
  65. package/dist/components/FloatingChat/FloatingChat.cjs +1 -0
  66. package/dist/components/FloatingChat/FloatingChat.const.cjs +1 -0
  67. package/dist/components/FloatingChat/FloatingChat.const.d.ts +12 -0
  68. package/dist/components/FloatingChat/FloatingChat.const.js +15 -0
  69. package/dist/components/FloatingChat/FloatingChat.d.ts +19 -0
  70. package/dist/components/FloatingChat/FloatingChat.js +144 -0
  71. package/dist/components/FloatingChat/FloatingChat.types.d.ts +44 -0
  72. package/dist/components/FloatingChat/index.d.ts +2 -0
  73. package/dist/components/JsonViewer/JsonViewer.cjs +1 -0
  74. package/dist/components/JsonViewer/JsonViewer.const.cjs +1 -0
  75. package/dist/components/JsonViewer/JsonViewer.const.d.ts +4 -0
  76. package/dist/components/JsonViewer/JsonViewer.const.js +24 -0
  77. package/dist/components/JsonViewer/JsonViewer.d.ts +17 -0
  78. package/dist/components/JsonViewer/JsonViewer.js +195 -0
  79. package/dist/components/JsonViewer/JsonViewer.types.d.ts +54 -0
  80. package/dist/components/JsonViewer/index.d.ts +2 -0
  81. package/dist/components/Kanban/Kanban.cjs +1 -1
  82. package/dist/components/Kanban/Kanban.js +18 -17
  83. package/dist/components/QRCode/QRCode.cjs +1 -0
  84. package/dist/components/QRCode/QRCode.const.cjs +1 -0
  85. package/dist/components/QRCode/QRCode.const.d.ts +21 -0
  86. package/dist/components/QRCode/QRCode.const.js +11 -0
  87. package/dist/components/QRCode/QRCode.d.ts +29 -0
  88. package/dist/components/QRCode/QRCode.js +68 -0
  89. package/dist/components/QRCode/QRCode.types.d.ts +32 -0
  90. package/dist/components/QRCode/QRCode.utils.cjs +1 -0
  91. package/dist/components/QRCode/QRCode.utils.d.ts +12 -0
  92. package/dist/components/QRCode/QRCode.utils.js +74 -0
  93. package/dist/components/QRCode/index.d.ts +3 -0
  94. package/dist/components/Spinner/Spinner.types.d.ts +2 -2
  95. package/dist/components/Terminal/Terminal.cjs +1 -0
  96. package/dist/components/Terminal/Terminal.const.cjs +1 -0
  97. package/dist/components/Terminal/Terminal.const.d.ts +32 -0
  98. package/dist/components/Terminal/Terminal.const.js +42 -0
  99. package/dist/components/Terminal/Terminal.d.ts +27 -0
  100. package/dist/components/Terminal/Terminal.js +155 -0
  101. package/dist/components/Terminal/Terminal.types.d.ts +49 -0
  102. package/dist/components/Terminal/index.d.ts +2 -0
  103. package/dist/components/Tour/Tour.cjs +1 -0
  104. package/dist/components/Tour/Tour.const.cjs +1 -0
  105. package/dist/components/Tour/Tour.const.d.ts +25 -0
  106. package/dist/components/Tour/Tour.const.js +38 -0
  107. package/dist/components/Tour/Tour.d.ts +17 -0
  108. package/dist/components/Tour/Tour.js +179 -0
  109. package/dist/components/Tour/Tour.types.d.ts +80 -0
  110. package/dist/components/Tour/index.d.ts +4 -0
  111. package/dist/components/Tour/useTour.cjs +1 -0
  112. package/dist/components/Tour/useTour.d.ts +14 -0
  113. package/dist/components/Tour/useTour.js +27 -0
  114. package/dist/components/Typography/Typography.cjs +1 -1
  115. package/dist/components/Typography/Typography.d.ts +5 -1
  116. package/dist/components/Typography/Typography.js +93 -57
  117. package/dist/components/Typography/Typography.types.d.ts +29 -2
  118. package/dist/components/index.cjs +1 -1
  119. package/dist/components/index.d.ts +19 -1
  120. package/dist/components/index.js +242 -218
  121. package/dist/context/BearProvider.cjs +1 -1
  122. package/dist/context/BearProvider.d.ts +110 -5
  123. package/dist/context/BearProvider.js +198 -53
  124. package/dist/context/defaultTheme.cjs +1 -1
  125. package/dist/context/defaultTheme.js +11 -11
  126. package/dist/hooks/index.cjs +1 -1
  127. package/dist/hooks/index.d.ts +14 -0
  128. package/dist/hooks/index.js +56 -39
  129. package/dist/hooks/useBearComponent/index.d.ts +2 -0
  130. package/dist/hooks/useBearComponent/useBearComponent.cjs +1 -0
  131. package/dist/hooks/useBearComponent/useBearComponent.d.ts +71 -0
  132. package/dist/hooks/useBearComponent/useBearComponent.js +54 -0
  133. package/dist/hooks/useBearComponent/useBearComponent.types.d.ts +40 -0
  134. package/dist/hooks/useIdle/index.d.ts +2 -0
  135. package/dist/hooks/useIdle/useIdle.cjs +1 -0
  136. package/dist/hooks/useIdle/useIdle.d.ts +22 -0
  137. package/dist/hooks/useIdle/useIdle.js +66 -0
  138. package/dist/hooks/useIdle/useIdle.types.d.ts +29 -0
  139. package/dist/hooks/useLongPress/index.d.ts +2 -0
  140. package/dist/hooks/useLongPress/useLongPress.cjs +1 -0
  141. package/dist/hooks/useLongPress/useLongPress.d.ts +17 -0
  142. package/dist/hooks/useLongPress/useLongPress.js +44 -0
  143. package/dist/hooks/useLongPress/useLongPress.types.d.ts +26 -0
  144. package/dist/hooks/useOnline/index.d.ts +2 -0
  145. package/dist/hooks/useOnline/useOnline.cjs +1 -0
  146. package/dist/hooks/useOnline/useOnline.d.ts +16 -0
  147. package/dist/hooks/useOnline/useOnline.js +25 -0
  148. package/dist/hooks/useOnline/useOnline.types.d.ts +15 -0
  149. package/dist/hooks/usePageVisibility/index.d.ts +2 -0
  150. package/dist/hooks/usePageVisibility/usePageVisibility.cjs +1 -0
  151. package/dist/hooks/usePageVisibility/usePageVisibility.d.ts +19 -0
  152. package/dist/hooks/usePageVisibility/usePageVisibility.js +26 -0
  153. package/dist/hooks/usePageVisibility/usePageVisibility.types.d.ts +15 -0
  154. package/dist/hooks/useSpotlight/index.d.ts +2 -0
  155. package/dist/hooks/useSpotlight/useSpotlight.cjs +1 -0
  156. package/dist/hooks/useSpotlight/useSpotlight.d.ts +24 -0
  157. package/dist/hooks/useSpotlight/useSpotlight.js +49 -0
  158. package/dist/hooks/useSpotlight/useSpotlight.types.d.ts +23 -0
  159. package/dist/hooks/useWebSocket/index.d.ts +2 -0
  160. package/dist/hooks/useWebSocket/useWebSocket.cjs +1 -0
  161. package/dist/hooks/useWebSocket/useWebSocket.d.ts +22 -0
  162. package/dist/hooks/useWebSocket/useWebSocket.js +75 -0
  163. package/dist/hooks/useWebSocket/useWebSocket.types.d.ts +44 -0
  164. package/dist/index.cjs +1 -1
  165. package/dist/index.js +324 -283
  166. package/dist/styles.css +1 -1
  167. package/dist/types/component.types.d.ts +125 -42
  168. package/dist/types/theme.types.d.ts +82 -0
  169. package/package.json +1 -1
@@ -1,11 +1,23 @@
1
1
  import { ButtonHTMLAttributes, ReactNode } from 'react';
2
- import { EmberSize, EmberVariant } from '../../types';
2
+ import { BearSize, BearVariant } from '../../types';
3
3
  import { BisProp } from '../../types/bis.types';
4
4
  export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'style'> {
5
- /** Button variant style */
6
- variant?: EmberVariant;
5
+ /**
6
+ * Button variant style
7
+ * Can be a built-in variant or a custom variant defined in BearProvider
8
+ * @example
9
+ * ```tsx
10
+ * // Built-in variants
11
+ * <Button variant="primary">Primary</Button>
12
+ * <Button variant="success">Success</Button>
13
+ *
14
+ * // Custom variant (defined in BearProvider's customVariants)
15
+ * <Button variant="redBrand">Custom</Button>
16
+ * ```
17
+ */
18
+ variant?: BearVariant | (string & {});
7
19
  /** Button size */
8
- size?: EmberSize;
20
+ size?: BearSize;
9
21
  /** Whether button is in loading state */
10
22
  loading?: boolean;
11
23
  /** Whether button takes full width */
@@ -18,6 +30,12 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
18
30
  leftIcon?: ReactNode;
19
31
  /** Icon to show after text */
20
32
  rightIcon?: ReactNode;
33
+ /** Enable mouse-follow spotlight hover effect */
34
+ spotlight?: boolean;
35
+ /** Spotlight color (default: rgba(255, 255, 255, 0.15)) */
36
+ spotlightColor?: string;
37
+ /** Spotlight size in pixels (default: 120) */
38
+ spotlightSize?: number;
21
39
  /** Test ID for testing */
22
40
  testId?: string;
23
41
  /** Bear Inner Style - sx-like overrides */
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),D=require("../../utils/cn.cjs"),he=require("../../hooks/useBearStyles.cjs"),v=require("../Icon/index.cjs"),s=require("./Calendar.const.cjs"),l=require("./Calendar.utils.cjs"),xe=require("./Calendar.helpers.cjs"),ke=G=>{const{viewDate:w,value:E=null,onSelect:C,onViewChange:n,minDate:N,maxDate:_,disabledDates:M=[],highlightedDates:R=[],weekdayLabels:S=s.DEFAULT_WEEKDAYS,firstDayOfWeek:k=s.NUMBER.ZERO,showWeekNumbers:ye=!1,slots:r={},clearable:K=!0,onClear:u,showTodayButton:Z=!0,onToday:h,bis:X,style:J,inline:O=!1,className:Q}=G,b=w.getFullYear(),P=he.useBearStyles(X,J),d=w.getMonth(),$=i.useMemo(()=>new Date,[]),g=i.useCallback(()=>{n==null||n(new Date(b-s.NUMBER.ONE,d,s.NUMBER.ONE))},[b,d,n]),L=i.useCallback(()=>{n==null||n(new Date(b,d-s.NUMBER.ONE,s.NUMBER.ONE))},[b,d,n]),W=i.useCallback(()=>{n==null||n(new Date(b,d+s.NUMBER.ONE,s.NUMBER.ONE))},[b,d,n]),z=i.useCallback(()=>{n==null||n(new Date(b+s.NUMBER.ONE,d,s.NUMBER.ONE))},[b,d,n]),p=L,B=W,V={onPrevYear:g,onPrevMonth:L,onNextMonth:W,onNextYear:z},ee=i.useCallback(t=>N&&t<N||_&&t>_?!0:M.some(a=>l.isSameDay(a,t)),[N,_,M]),re=i.useCallback(t=>R.some(a=>l.isSameDay(a,t)),[R]),ae=i.useMemo(()=>l.buildCalendarGrid(b,d,k),[b,d,k]),T=i.useMemo(()=>l.reorderWeekdays(S,k),[S,k]),U=s.MONTHS[d],f=E!=null,te=O?"Bear-Calendar Bear-Calendar--inline bear-block bear-w-full bear-bg-white dark:bear-bg-zinc-900 bear-rounded-xl bear-shadow-none bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-p-4 bear-text-zinc-900 dark:bear-text-zinc-100":"Bear-Calendar Bear-Calendar--dropdown bear-mt-2 bear-bg-white dark:bear-bg-zinc-900 bear-rounded-xl bear-shadow-xl bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-p-4 bear-w-80 bear-text-zinc-900 dark:bear-text-zinc-100",Y=O?void 0:{zIndex:s.CALENDAR_DROPDOWN_Z_INDEX},ne=()=>{if(r.header)return r.header({month:U,year:b,onPrev:p,onNext:B,nav:V});const t=r.navPrevYear,a=r.navPrev,o=r.navNext,c=r.navNextYear,y=r.headerLabel||xe.DefaultHeaderLabel;return e.jsxs("div",{className:"Bear-Calendar__header bear-flex bear-items-center bear-justify-between bear-gap-1 bear-mb-4",children:[e.jsxs("div",{className:"Bear-Calendar__nav-left bear-flex bear-items-center bear-gap-0.5",children:[t?t({onClick:g}):e.jsx("button",{type:"button",onClick:g,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Previous year",children:e.jsx(v.ChevronsLeftIcon,{size:16})}),a?a({onClick:p}):e.jsx("button",{type:"button",onClick:p,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Previous month",children:e.jsx(v.ChevronLeftIcon,{size:16})})]}),y({month:U,year:b}),e.jsxs("div",{className:"Bear-Calendar__nav-right bear-flex bear-items-center bear-gap-0.5",children:[o?o({onClick:B}):e.jsx("button",{type:"button",onClick:B,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Next month",children:e.jsx(v.ChevronRightIcon,{size:16})}),c?c({onClick:z}):e.jsx("button",{type:"button",onClick:z,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Next year",children:e.jsx(v.ChevronsRightIcon,{size:16})})]})]})},oe=()=>{if(r.weekdays)return r.weekdays({days:T});const t=r.weekday;return e.jsx("div",{className:"Bear-Calendar__weekdays bear-grid bear-grid-cols-7 bear-gap-1 bear-mb-2",children:T.map(a=>t?e.jsx("div",{children:t({label:a})},a):e.jsx("div",{className:D.cn("Bear-Calendar__weekday bear-text-center bear-text-xs bear-font-medium bear-uppercase bear-text-zinc-500 dark:bear-text-zinc-400",s.WEEKEND_LABELS.includes(a)&&"bear-text-red-500"),children:a},a))})},se=(t,a)=>{const{date:o,isCurrentMonth:c}=t,y=o.getDate(),ce=o.getDay(),le=l.isWeekendDay(ce),x=l.isSameDay(E,o),j=l.isSameDay($,o),m=ee(o),H=re(o),F=()=>{m||C==null||C(o)},ue={date:o,day:y,isCurrentMonth:c,isSelected:x,isToday:j,isDisabled:m,isHighlighted:H,onClick:F};return r.day?e.jsx("span",{children:r.day(ue)},a):e.jsx("button",{type:"button",onClick:F,disabled:m,className:D.cn("Bear-Calendar__day bear-w-8 bear-h-8 bear-rounded-full bear-text-sm bear-font-medium bear-transition-colors bear-flex bear-items-center bear-justify-center",x&&"Bear-Calendar__day--selected bear-bg-pink-500 bear-text-white hover:bear-bg-pink-600",!x&&j&&"Bear-Calendar__day--today bear-ring-2 bear-ring-pink-500/50 bear-bg-transparent",!x&&!j&&(c?le?"Bear-Calendar__day--weekend bear-text-red-500 dark:bear-text-red-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800":"bear-text-zinc-700 dark:bear-text-zinc-300 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800":"Bear-Calendar__day--other bear-text-zinc-500 dark:bear-text-zinc-600 hover:bear-bg-zinc-50 dark:hover:bear-bg-zinc-800/50"),H&&!x&&"Bear-Calendar__day--highlighted bear-bg-pink-500/15",m&&"Bear-Calendar__day--disabled bear-opacity-40 bear-cursor-not-allowed"),children:y},a)},be=()=>{const t=ae.map((a,o)=>se(a,o));return r.daysGrid?r.daysGrid({children:t,className:"Bear-Calendar__grid bear-grid bear-grid-cols-7 bear-gap-1"}):e.jsx("div",{className:"Bear-Calendar__grid bear-grid bear-grid-cols-7 bear-gap-1",children:t})},de=()=>{const t=K&&f&&u,a=Z&&h;if(!t&&!a)return null;if(r.footer){const o=r.clearButton,c=r.todayButton;return r.footer({children:e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t&&o?o({onClick:u,hasSelection:f}):t?e.jsx("button",{type:"button",onClick:u,className:"Bear-Calendar__clear-btn bear-text-sm bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-text-zinc-700 dark:hover:bear-text-zinc-200 bear-transition-colors",children:"Clear"}):e.jsx("span",{}),a&&c?c({onClick:h}):a?e.jsx("button",{type:"button",onClick:h,className:"Bear-Calendar__today-btn bear-text-sm bear-text-pink-600 dark:bear-text-pink-400 hover:bear-text-pink-700 dark:hover:bear-text-pink-300 bear-font-medium",children:"Today"}):null]})})}return r.clearButton&&r.todayButton?e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t&&r.clearButton({onClick:u,hasSelection:f}),a&&r.todayButton({onClick:h})]}):e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t?e.jsx("button",{type:"button",onClick:u,className:"Bear-Calendar__clear-btn bear-text-sm bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-text-zinc-700 dark:hover:bear-text-zinc-200 bear-transition-colors",children:"Clear"}):e.jsx("span",{}),a?e.jsx("button",{type:"button",onClick:h,className:"Bear-Calendar__today-btn bear-text-sm bear-text-pink-400 hover:bear-text-pink-300 bear-font-medium bear-transition-colors",children:"Today"}):null]})},q=e.jsxs(e.Fragment,{children:[ne(),oe(),be(),de()]}),I=D.cn(te,Q),A=Object.keys(P).length?P:void 0,ie=Y?{...A,...Y}:A;return r.root?r.root({children:q,className:I}):e.jsx("div",{className:I,style:ie,children:q})};exports.Calendar=ke;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),D=require("../../utils/cn.cjs"),he=require("../../hooks/useBearStyles.cjs");require("../../hooks/useBearComponent/useBearComponent.cjs");const v=require("../Icon/index.cjs"),s=require("./Calendar.const.cjs"),l=require("./Calendar.utils.cjs"),xe=require("./Calendar.helpers.cjs"),ke=G=>{const{viewDate:w,value:E=null,onSelect:C,onViewChange:n,minDate:N,maxDate:_,disabledDates:M=[],highlightedDates:R=[],weekdayLabels:S=s.DEFAULT_WEEKDAYS,firstDayOfWeek:k=s.NUMBER.ZERO,showWeekNumbers:ye=!1,slots:r={},clearable:K=!0,onClear:u,showTodayButton:Z=!0,onToday:h,bis:X,style:J,inline:O=!1,className:Q}=G,b=w.getFullYear(),P=he.useBearStyles(X,J),d=w.getMonth(),$=i.useMemo(()=>new Date,[]),g=i.useCallback(()=>{n==null||n(new Date(b-s.NUMBER.ONE,d,s.NUMBER.ONE))},[b,d,n]),L=i.useCallback(()=>{n==null||n(new Date(b,d-s.NUMBER.ONE,s.NUMBER.ONE))},[b,d,n]),W=i.useCallback(()=>{n==null||n(new Date(b,d+s.NUMBER.ONE,s.NUMBER.ONE))},[b,d,n]),z=i.useCallback(()=>{n==null||n(new Date(b+s.NUMBER.ONE,d,s.NUMBER.ONE))},[b,d,n]),p=L,B=W,V={onPrevYear:g,onPrevMonth:L,onNextMonth:W,onNextYear:z},ee=i.useCallback(t=>N&&t<N||_&&t>_?!0:M.some(a=>l.isSameDay(a,t)),[N,_,M]),re=i.useCallback(t=>R.some(a=>l.isSameDay(a,t)),[R]),ae=i.useMemo(()=>l.buildCalendarGrid(b,d,k),[b,d,k]),T=i.useMemo(()=>l.reorderWeekdays(S,k),[S,k]),U=s.MONTHS[d],f=E!=null,te=O?"Bear-Calendar Bear-Calendar--inline bear-block bear-w-full bear-bg-white dark:bear-bg-zinc-900 bear-rounded-xl bear-shadow-none bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-p-4 bear-text-zinc-900 dark:bear-text-zinc-100":"Bear-Calendar Bear-Calendar--dropdown bear-mt-2 bear-bg-white dark:bear-bg-zinc-900 bear-rounded-xl bear-shadow-xl bear-border bear-border-zinc-200 dark:bear-border-zinc-700 bear-p-4 bear-w-80 bear-text-zinc-900 dark:bear-text-zinc-100",Y=O?void 0:{zIndex:s.CALENDAR_DROPDOWN_Z_INDEX},ne=()=>{if(r.header)return r.header({month:U,year:b,onPrev:p,onNext:B,nav:V});const t=r.navPrevYear,a=r.navPrev,o=r.navNext,c=r.navNextYear,y=r.headerLabel||xe.DefaultHeaderLabel;return e.jsxs("div",{className:"Bear-Calendar__header bear-flex bear-items-center bear-justify-between bear-gap-1 bear-mb-4",children:[e.jsxs("div",{className:"Bear-Calendar__nav-left bear-flex bear-items-center bear-gap-0.5",children:[t?t({onClick:g}):e.jsx("button",{type:"button",onClick:g,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Previous year",children:e.jsx(v.ChevronsLeftIcon,{size:16})}),a?a({onClick:p}):e.jsx("button",{type:"button",onClick:p,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Previous month",children:e.jsx(v.ChevronLeftIcon,{size:16})})]}),y({month:U,year:b}),e.jsxs("div",{className:"Bear-Calendar__nav-right bear-flex bear-items-center bear-gap-0.5",children:[o?o({onClick:B}):e.jsx("button",{type:"button",onClick:B,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Next month",children:e.jsx(v.ChevronRightIcon,{size:16})}),c?c({onClick:z}):e.jsx("button",{type:"button",onClick:z,className:"Bear-Calendar__nav-btn bear-p-1.5 bear-rounded bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800 bear-transition-colors","aria-label":"Next year",children:e.jsx(v.ChevronsRightIcon,{size:16})})]})]})},oe=()=>{if(r.weekdays)return r.weekdays({days:T});const t=r.weekday;return e.jsx("div",{className:"Bear-Calendar__weekdays bear-grid bear-grid-cols-7 bear-gap-1 bear-mb-2",children:T.map(a=>t?e.jsx("div",{children:t({label:a})},a):e.jsx("div",{className:D.cn("Bear-Calendar__weekday bear-text-center bear-text-xs bear-font-medium bear-uppercase bear-text-zinc-500 dark:bear-text-zinc-400",s.WEEKEND_LABELS.includes(a)&&"bear-text-red-500"),children:a},a))})},se=(t,a)=>{const{date:o,isCurrentMonth:c}=t,y=o.getDate(),ce=o.getDay(),le=l.isWeekendDay(ce),x=l.isSameDay(E,o),j=l.isSameDay($,o),m=ee(o),H=re(o),F=()=>{m||C==null||C(o)},ue={date:o,day:y,isCurrentMonth:c,isSelected:x,isToday:j,isDisabled:m,isHighlighted:H,onClick:F};return r.day?e.jsx("span",{children:r.day(ue)},a):e.jsx("button",{type:"button",onClick:F,disabled:m,className:D.cn("Bear-Calendar__day bear-w-8 bear-h-8 bear-rounded-full bear-text-sm bear-font-medium bear-transition-colors bear-flex bear-items-center bear-justify-center",x&&"Bear-Calendar__day--selected bear-bg-pink-500 bear-text-white hover:bear-bg-pink-600",!x&&j&&"Bear-Calendar__day--today bear-ring-2 bear-ring-pink-500/50 bear-bg-transparent",!x&&!j&&(c?le?"Bear-Calendar__day--weekend bear-text-red-500 dark:bear-text-red-400 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800":"bear-text-zinc-700 dark:bear-text-zinc-300 hover:bear-bg-zinc-100 dark:hover:bear-bg-zinc-800":"Bear-Calendar__day--other bear-text-zinc-500 dark:bear-text-zinc-600 hover:bear-bg-zinc-50 dark:hover:bear-bg-zinc-800/50"),H&&!x&&"Bear-Calendar__day--highlighted bear-bg-pink-500/15",m&&"Bear-Calendar__day--disabled bear-opacity-40 bear-cursor-not-allowed"),children:y},a)},be=()=>{const t=ae.map((a,o)=>se(a,o));return r.daysGrid?r.daysGrid({children:t,className:"Bear-Calendar__grid bear-grid bear-grid-cols-7 bear-gap-1"}):e.jsx("div",{className:"Bear-Calendar__grid bear-grid bear-grid-cols-7 bear-gap-1",children:t})},de=()=>{const t=K&&f&&u,a=Z&&h;if(!t&&!a)return null;if(r.footer){const o=r.clearButton,c=r.todayButton;return r.footer({children:e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t&&o?o({onClick:u,hasSelection:f}):t?e.jsx("button",{type:"button",onClick:u,className:"Bear-Calendar__clear-btn bear-text-sm bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-text-zinc-700 dark:hover:bear-text-zinc-200 bear-transition-colors",children:"Clear"}):e.jsx("span",{}),a&&c?c({onClick:h}):a?e.jsx("button",{type:"button",onClick:h,className:"Bear-Calendar__today-btn bear-text-sm bear-text-pink-600 dark:bear-text-pink-400 hover:bear-text-pink-700 dark:hover:bear-text-pink-300 bear-font-medium",children:"Today"}):null]})})}return r.clearButton&&r.todayButton?e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t&&r.clearButton({onClick:u,hasSelection:f}),a&&r.todayButton({onClick:h})]}):e.jsxs("div",{className:"Bear-Calendar__footer bear-flex bear-justify-between bear-gap-2 bear-mt-4 bear-pt-3 bear-border-t bear-border-zinc-200 dark:bear-border-zinc-700",children:[t?e.jsx("button",{type:"button",onClick:u,className:"Bear-Calendar__clear-btn bear-text-sm bear-text-zinc-500 dark:bear-text-zinc-400 hover:bear-text-zinc-700 dark:hover:bear-text-zinc-200 bear-transition-colors",children:"Clear"}):e.jsx("span",{}),a?e.jsx("button",{type:"button",onClick:h,className:"Bear-Calendar__today-btn bear-text-sm bear-text-pink-400 hover:bear-text-pink-300 bear-font-medium bear-transition-colors",children:"Today"}):null]})},q=e.jsxs(e.Fragment,{children:[ne(),oe(),be(),de()]}),I=D.cn(te,Q),A=Object.keys(P).length?P:void 0,ie=Y?{...A,...Y}:A;return r.root?r.root({children:q,className:I}):e.jsx("div",{className:I,style:ie,children:q})};exports.Calendar=ke;
@@ -2,11 +2,12 @@ import { jsxs as s, Fragment as me, jsx as t } from "react/jsx-runtime";
2
2
  import { useMemo as D, useCallback as l } from "react";
3
3
  import { cn as E } from "../../utils/cn.js";
4
4
  import { useBearStyles as ke } from "../../hooks/useBearStyles.js";
5
+ import "../../hooks/useBearComponent/useBearComponent.js";
5
6
  import { ChevronsLeftIcon as ye, ChevronLeftIcon as xe, ChevronRightIcon as ve, ChevronsRightIcon as pe } from "../Icon/index.js";
6
7
  import { DEFAULT_WEEKDAYS as ze, NUMBER as i, CALENDAR_DROPDOWN_Z_INDEX as Ce, MONTHS as _e, WEEKEND_LABELS as ge } from "./Calendar.const.js";
7
8
  import { isSameDay as v, buildCalendarGrid as Ne, reorderWeekdays as fe, isWeekendDay as Be } from "./Calendar.utils.js";
8
9
  import { DefaultHeaderLabel as we } from "./Calendar.helpers.js";
9
- const je = (Z) => {
10
+ const Ie = (Z) => {
10
11
  const {
11
12
  viewDate: O,
12
13
  value: P = null,
@@ -182,5 +183,5 @@ const je = (Z) => {
182
183
  return e.root ? e.root({ children: H, className: F }) : /* @__PURE__ */ t("div", { className: F, style: se, children: H });
183
184
  };
184
185
  export {
185
- je as Calendar
186
+ Ie as Calendar
186
187
  };
@@ -1,7 +1,7 @@
1
- import { EmberSize } from '../../types';
1
+ import { BearSize } from '../../types';
2
2
  export type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
3
3
  export type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';
4
- export declare const CARD_PADDING_CLASSES: Record<EmberSize | 'none', string>;
4
+ export declare const CARD_PADDING_CLASSES: Record<BearSize | 'none', string>;
5
5
  export declare const CARD_RADIUS_CLASSES: Record<CardRadius, string>;
6
6
  export declare const CARD_VARIANT_CLASSES: Record<CardVariant, string>;
7
7
  export declare const CARD_INTERACTIVE_CLASSES = "bear-transition-all bear-duration-200 bear-cursor-pointer hover:bear-shadow-lg hover:bear-scale-[1.02]";
@@ -1,10 +1,10 @@
1
1
  import { HTMLAttributes, ReactNode } from 'react';
2
- import { EmberSize } from '../../types';
2
+ import { BearSize } from '../../types';
3
3
  export interface CardProps extends HTMLAttributes<HTMLDivElement> {
4
4
  /** Card variant */
5
5
  variant?: 'elevated' | 'outlined' | 'filled' | 'ghost';
6
6
  /** Padding size */
7
- padding?: EmberSize | 'none';
7
+ padding?: BearSize | 'none';
8
8
  /** Whether card is interactive (adds hover effects) */
9
9
  interactive?: boolean;
10
10
  /** Border radius */
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),d=require("../../utils/cn.cjs"),D=require("../../context/BearProvider.cjs"),I=require("../Button/Button.cjs"),q=require("../Input/Input.cjs"),B=require("../Avatar/Avatar.cjs"),u=require("../Typography/Typography.cjs"),_=require("../Icon/index.cjs"),x=require("./Chat.const.cjs"),R=({message:r,showTimestamp:n=!0,showStatus:s=!0,showAvatar:b=!0,userAvatar:y,botAvatar:m})=>{var c;const a=r.sender==="user",f=r.sender==="system",l=x.SENDER_COLORS[r.sender];if(f)return e.jsx("div",{className:"flex justify-center my-2",children:e.jsx(u.Typography,{variant:"caption",className:"px-3 py-1 rounded-full bg-gray-100 dark:bg-gray-800",style:{color:l.text},children:r.content})});const v=a?y:m,p=r.status?x.MESSAGE_STATUS_ICONS[r.status]:null;return e.jsxs("div",{className:d.cn("flex gap-2 mb-3",a?"flex-row-reverse":"flex-row"),children:[b&&e.jsx(B.Avatar,{src:v,initials:((c=r.name)==null?void 0:c[0])||(a?"U":"B"),size:"sm",className:"flex-shrink-0"}),e.jsxs("div",{className:d.cn("flex flex-col max-w-[70%]",a?"items-end":"items-start"),children:[r.name&&e.jsx(u.Typography,{variant:"caption",className:"mb-1 opacity-60",children:r.name}),e.jsx("div",{className:d.cn("px-4 py-2 rounded-2xl",a?"rounded-br-sm":"rounded-bl-sm"),style:{backgroundColor:l.bg,color:l.text},children:typeof r.content=="string"?e.jsx(u.Typography,{variant:"body2",children:r.content}):r.content}),e.jsxs("div",{className:"flex items-center gap-1 mt-1",children:[n&&r.timestamp&&e.jsx(u.Typography,{variant:"caption",className:"opacity-50 text-xs",children:r.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}),s&&p&&a&&e.jsx("span",{className:d.cn("text-xs",r.status==="read"?"text-blue-500":"opacity-50",r.status==="error"&&"text-red-500"),children:p})]})]})]})},H=({text:r=x.CHAT_DEFAULTS.TYPING_TEXT})=>e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsxs("div",{className:"flex gap-1 px-4 py-3 bg-gray-100 dark:bg-gray-800 rounded-2xl rounded-bl-sm",children:[e.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"0ms"}}),e.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"150ms"}}),e.jsx("span",{className:"w-2 h-2 bg-gray-400 rounded-full animate-bounce",style:{animationDelay:"300ms"}})]}),e.jsx(u.Typography,{variant:"caption",className:"opacity-50",children:r})]}),U=({messages:r,onSend:n,isLoading:s=!1,placeholder:b=x.CHAT_DEFAULTS.PLACEHOLDER,header:y,footer:m,showTimestamps:a=!0,showStatus:f=!0,showAvatars:l=!0,userAvatar:v,botAvatar:p,isTyping:c=!1,typingText:C,className:S,height:j=x.CHAT_DEFAULTS.HEIGHT,testId:w,disabled:h=!1})=>{const{mode:E}=D.useBear(),k=E==="dark",[o,g]=i.useState(""),T=i.useRef(null);i.useEffect(()=>{var t;(t=T.current)==null||t.scrollIntoView({behavior:"smooth"})},[r,c]);const N=i.useCallback(()=>{o.trim()&&n&&!h&&!s&&(n(o.trim()),g(""))},[o,n,h,s]),A=i.useCallback(t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),N())},[N]);return e.jsxs("div",{className:d.cn("Bear-Chat","flex flex-col rounded-xl overflow-hidden border",k?"bg-gray-900 border-gray-700":"bg-white border-gray-200",S),style:{height:typeof j=="number"?`${j}px`:j},"data-testid":w,children:[y&&e.jsx("div",{className:"px-4 py-3 border-b border-gray-200 dark:border-gray-700",children:y}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-4",children:[r.map(t=>e.jsx(R,{message:t,showTimestamp:a,showStatus:f,showAvatar:l,userAvatar:v,botAvatar:p},t.id)),c&&e.jsx(H,{text:C}),e.jsx("div",{ref:T})]}),e.jsxs("div",{className:"p-3 border-t border-gray-200 dark:border-gray-700",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q.Input,{value:o,onChange:t=>g(t.target.value),onKeyDown:A,placeholder:b,disabled:h||s,className:"flex-1"}),e.jsx(I.Button,{variant:"primary",onClick:N,disabled:!o.trim()||h||s,children:e.jsx(_.BearIcons.SendIcon,{size:18})})]}),m&&e.jsx("div",{className:"mt-2",children:m})]})]})};exports.Chat=U;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={PLACEHOLDER:"Type a message...",HEIGHT:400,TYPING_TEXT:"is typing..."},t={sending:"○",sent:"✓",delivered:"✓✓",read:"✓✓",error:"!"},r={user:{bg:"var(--bear-primary-500)",text:"white"},bot:{bg:"var(--bear-bg-secondary)",text:"var(--bear-text-primary)"},system:{bg:"transparent",text:"var(--bear-text-tertiary)"}};exports.CHAT_DEFAULTS=e;exports.MESSAGE_STATUS_ICONS=t;exports.SENDER_COLORS=r;
@@ -0,0 +1,26 @@
1
+ export declare const CHAT_DEFAULTS: {
2
+ readonly PLACEHOLDER: "Type a message...";
3
+ readonly HEIGHT: 400;
4
+ readonly TYPING_TEXT: "is typing...";
5
+ };
6
+ export declare const MESSAGE_STATUS_ICONS: {
7
+ readonly sending: "○";
8
+ readonly sent: "✓";
9
+ readonly delivered: "✓✓";
10
+ readonly read: "✓✓";
11
+ readonly error: "!";
12
+ };
13
+ export declare const SENDER_COLORS: {
14
+ readonly user: {
15
+ readonly bg: "var(--bear-primary-500)";
16
+ readonly text: "white";
17
+ };
18
+ readonly bot: {
19
+ readonly bg: "var(--bear-bg-secondary)";
20
+ readonly text: "var(--bear-text-primary)";
21
+ };
22
+ readonly system: {
23
+ readonly bg: "transparent";
24
+ readonly text: "var(--bear-text-tertiary)";
25
+ };
26
+ };
@@ -0,0 +1,29 @@
1
+ const e = {
2
+ PLACEHOLDER: "Type a message...",
3
+ HEIGHT: 400,
4
+ TYPING_TEXT: "is typing..."
5
+ }, r = {
6
+ sending: "○",
7
+ sent: "✓",
8
+ delivered: "✓✓",
9
+ read: "✓✓",
10
+ error: "!"
11
+ }, t = {
12
+ user: {
13
+ bg: "var(--bear-primary-500)",
14
+ text: "white"
15
+ },
16
+ bot: {
17
+ bg: "var(--bear-bg-secondary)",
18
+ text: "var(--bear-text-primary)"
19
+ },
20
+ system: {
21
+ bg: "transparent",
22
+ text: "var(--bear-text-tertiary)"
23
+ }
24
+ };
25
+ export {
26
+ e as CHAT_DEFAULTS,
27
+ r as MESSAGE_STATUS_ICONS,
28
+ t as SENDER_COLORS
29
+ };
@@ -0,0 +1,21 @@
1
+ import { FC } from 'react';
2
+ import { ChatProps } from './Chat.types';
3
+ /**
4
+ * Chat - Chat interface component
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const [messages, setMessages] = useState<ChatMessage[]>([
9
+ * { id: '1', content: 'Hello!', sender: 'bot', timestamp: new Date() },
10
+ * ]);
11
+ *
12
+ * <Chat
13
+ * messages={messages}
14
+ * onSend={(msg) => setMessages([...messages, { id: Date.now().toString(), content: msg, sender: 'user' }])}
15
+ * isTyping={false}
16
+ * showAvatars
17
+ * />
18
+ * ```
19
+ */
20
+ export declare const Chat: FC<ChatProps>;
21
+ export default Chat;
@@ -0,0 +1,179 @@
1
+ import { jsxs as a, jsx as r } from "react/jsx-runtime";
2
+ import { useState as B, useRef as R, useEffect as _, useCallback as k } from "react";
3
+ import { cn as d } from "../../utils/cn.js";
4
+ import { useBear as H } from "../../context/BearProvider.js";
5
+ import { Button as O } from "../Button/Button.js";
6
+ import { Input as U } from "../Input/Input.js";
7
+ import { Avatar as j } from "../Avatar/Avatar.js";
8
+ import { Typography as m } from "../Typography/Typography.js";
9
+ import { BearIcons as G } from "../Icon/index.js";
10
+ import { CHAT_DEFAULTS as g, SENDER_COLORS as K, MESSAGE_STATUS_ICONS as V } from "./Chat.const.js";
11
+ const z = ({
12
+ message: e,
13
+ showTimestamp: o = !0,
14
+ showStatus: l = !0,
15
+ showAvatar: b = !0,
16
+ userAvatar: u,
17
+ botAvatar: p
18
+ }) => {
19
+ var s;
20
+ const n = e.sender === "user", h = e.sender === "system", i = K[e.sender];
21
+ if (h)
22
+ return /* @__PURE__ */ r("div", { className: "flex justify-center my-2", children: /* @__PURE__ */ r(
23
+ m,
24
+ {
25
+ variant: "caption",
26
+ className: "px-3 py-1 rounded-full bg-gray-100 dark:bg-gray-800",
27
+ style: { color: i.text },
28
+ children: e.content
29
+ }
30
+ ) });
31
+ const x = n ? u : p, f = e.status ? V[e.status] : null;
32
+ return /* @__PURE__ */ a(
33
+ "div",
34
+ {
35
+ className: d(
36
+ "flex gap-2 mb-3",
37
+ n ? "flex-row-reverse" : "flex-row"
38
+ ),
39
+ children: [
40
+ b && /* @__PURE__ */ r(
41
+ j,
42
+ {
43
+ src: x,
44
+ initials: ((s = e.name) == null ? void 0 : s[0]) || (n ? "U" : "B"),
45
+ size: "sm",
46
+ className: "flex-shrink-0"
47
+ }
48
+ ),
49
+ /* @__PURE__ */ a("div", { className: d("flex flex-col max-w-[70%]", n ? "items-end" : "items-start"), children: [
50
+ e.name && /* @__PURE__ */ r(m, { variant: "caption", className: "mb-1 opacity-60", children: e.name }),
51
+ /* @__PURE__ */ r(
52
+ "div",
53
+ {
54
+ className: d(
55
+ "px-4 py-2 rounded-2xl",
56
+ n ? "rounded-br-sm" : "rounded-bl-sm"
57
+ ),
58
+ style: {
59
+ backgroundColor: i.bg,
60
+ color: i.text
61
+ },
62
+ children: typeof e.content == "string" ? /* @__PURE__ */ r(m, { variant: "body2", children: e.content }) : e.content
63
+ }
64
+ ),
65
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-1 mt-1", children: [
66
+ o && e.timestamp && /* @__PURE__ */ r(m, { variant: "caption", className: "opacity-50 text-xs", children: e.timestamp.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) }),
67
+ l && f && n && /* @__PURE__ */ r(
68
+ "span",
69
+ {
70
+ className: d(
71
+ "text-xs",
72
+ e.status === "read" ? "text-blue-500" : "opacity-50",
73
+ e.status === "error" && "text-red-500"
74
+ ),
75
+ children: f
76
+ }
77
+ )
78
+ ] })
79
+ ] })
80
+ ]
81
+ }
82
+ );
83
+ }, L = ({ text: e = g.TYPING_TEXT }) => /* @__PURE__ */ a("div", { className: "flex items-center gap-2 mb-3", children: [
84
+ /* @__PURE__ */ a("div", { className: "flex gap-1 px-4 py-3 bg-gray-100 dark:bg-gray-800 rounded-2xl rounded-bl-sm", children: [
85
+ /* @__PURE__ */ r("span", { className: "w-2 h-2 bg-gray-400 rounded-full animate-bounce", style: { animationDelay: "0ms" } }),
86
+ /* @__PURE__ */ r("span", { className: "w-2 h-2 bg-gray-400 rounded-full animate-bounce", style: { animationDelay: "150ms" } }),
87
+ /* @__PURE__ */ r("span", { className: "w-2 h-2 bg-gray-400 rounded-full animate-bounce", style: { animationDelay: "300ms" } })
88
+ ] }),
89
+ /* @__PURE__ */ r(m, { variant: "caption", className: "opacity-50", children: e })
90
+ ] }), Z = ({
91
+ messages: e,
92
+ onSend: o,
93
+ isLoading: l = !1,
94
+ placeholder: b = g.PLACEHOLDER,
95
+ header: u,
96
+ footer: p,
97
+ showTimestamps: n = !0,
98
+ showStatus: h = !0,
99
+ showAvatars: i = !0,
100
+ userAvatar: x,
101
+ botAvatar: f,
102
+ isTyping: s = !1,
103
+ typingText: C,
104
+ className: S,
105
+ height: v = g.HEIGHT,
106
+ testId: T,
107
+ disabled: y = !1
108
+ }) => {
109
+ const { mode: D } = H(), I = D === "dark", [c, w] = B(""), E = R(null);
110
+ _(() => {
111
+ var t;
112
+ (t = E.current) == null || t.scrollIntoView({ behavior: "smooth" });
113
+ }, [e, s]);
114
+ const N = k(() => {
115
+ c.trim() && o && !y && !l && (o(c.trim()), w(""));
116
+ }, [c, o, y, l]), A = k((t) => {
117
+ t.key === "Enter" && !t.shiftKey && (t.preventDefault(), N());
118
+ }, [N]);
119
+ return /* @__PURE__ */ a(
120
+ "div",
121
+ {
122
+ className: d(
123
+ "Bear-Chat",
124
+ "flex flex-col rounded-xl overflow-hidden border",
125
+ I ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200",
126
+ S
127
+ ),
128
+ style: { height: typeof v == "number" ? `${v}px` : v },
129
+ "data-testid": T,
130
+ children: [
131
+ u && /* @__PURE__ */ r("div", { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: u }),
132
+ /* @__PURE__ */ a("div", { className: "flex-1 overflow-y-auto p-4", children: [
133
+ e.map((t) => /* @__PURE__ */ r(
134
+ z,
135
+ {
136
+ message: t,
137
+ showTimestamp: n,
138
+ showStatus: h,
139
+ showAvatar: i,
140
+ userAvatar: x,
141
+ botAvatar: f
142
+ },
143
+ t.id
144
+ )),
145
+ s && /* @__PURE__ */ r(L, { text: C }),
146
+ /* @__PURE__ */ r("div", { ref: E })
147
+ ] }),
148
+ /* @__PURE__ */ a("div", { className: "p-3 border-t border-gray-200 dark:border-gray-700", children: [
149
+ /* @__PURE__ */ a("div", { className: "flex gap-2", children: [
150
+ /* @__PURE__ */ r(
151
+ U,
152
+ {
153
+ value: c,
154
+ onChange: (t) => w(t.target.value),
155
+ onKeyDown: A,
156
+ placeholder: b,
157
+ disabled: y || l,
158
+ className: "flex-1"
159
+ }
160
+ ),
161
+ /* @__PURE__ */ r(
162
+ O,
163
+ {
164
+ variant: "primary",
165
+ onClick: N,
166
+ disabled: !c.trim() || y || l,
167
+ children: /* @__PURE__ */ r(G.SendIcon, { size: 18 })
168
+ }
169
+ )
170
+ ] }),
171
+ p && /* @__PURE__ */ r("div", { className: "mt-2", children: p })
172
+ ] })
173
+ ]
174
+ }
175
+ );
176
+ };
177
+ export {
178
+ Z as Chat
179
+ };
@@ -0,0 +1,55 @@
1
+ import { ReactNode } from 'react';
2
+ export interface ChatMessage {
3
+ id: string;
4
+ content: string | ReactNode;
5
+ sender: 'user' | 'bot' | 'system';
6
+ timestamp?: Date;
7
+ avatar?: string;
8
+ name?: string;
9
+ status?: 'sending' | 'sent' | 'delivered' | 'read' | 'error';
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ export interface ChatProps {
13
+ /** Array of messages */
14
+ messages: ChatMessage[];
15
+ /** Callback when user sends a message */
16
+ onSend?: (message: string) => void;
17
+ /** Loading state (e.g., waiting for bot response) */
18
+ isLoading?: boolean;
19
+ /** Placeholder text for input */
20
+ placeholder?: string;
21
+ /** Chat header content */
22
+ header?: ReactNode;
23
+ /** Chat footer content (below input) */
24
+ footer?: ReactNode;
25
+ /** Show timestamps */
26
+ showTimestamps?: boolean;
27
+ /** Show message status */
28
+ showStatus?: boolean;
29
+ /** Show avatars */
30
+ showAvatars?: boolean;
31
+ /** User avatar URL */
32
+ userAvatar?: string;
33
+ /** Bot avatar URL */
34
+ botAvatar?: string;
35
+ /** Typing indicator */
36
+ isTyping?: boolean;
37
+ /** Typing indicator text */
38
+ typingText?: string;
39
+ /** Custom class name */
40
+ className?: string;
41
+ /** Height of the chat container */
42
+ height?: number | string;
43
+ /** Test ID */
44
+ testId?: string;
45
+ /** Disable input */
46
+ disabled?: boolean;
47
+ }
48
+ export interface ChatBubbleProps {
49
+ message: ChatMessage;
50
+ showTimestamp?: boolean;
51
+ showStatus?: boolean;
52
+ showAvatar?: boolean;
53
+ userAvatar?: string;
54
+ botAvatar?: string;
55
+ }
@@ -0,0 +1,2 @@
1
+ export { Chat } from './Chat';
2
+ export type { ChatProps, ChatMessage, ChatBubbleProps } from './Chat.types';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("react/jsx-runtime"),n=require("react"),g=require("../../utils/cn.cjs"),r=require("./Confetti.const.cjs"),v=({active:E=!1,count:c=r.CONFETTI_DEFAULTS.COUNT,duration:h=r.CONFETTI_DEFAULTS.DURATION,colors:T=r.CONFETTI_COLORS,originX:I=r.CONFETTI_DEFAULTS.ORIGIN_X,originY:f=r.CONFETTI_DEFAULTS.ORIGIN_Y,spread:F=r.CONFETTI_DEFAULTS.SPREAD,velocity:S=r.CONFETTI_DEFAULTS.VELOCITY,gravity:O=r.CONFETTI_DEFAULTS.GRAVITY,autoHide:N=r.CONFETTI_DEFAULTS.AUTO_HIDE,onComplete:o,className:x,testId:y})=>{const[m,d]=n.useState([]),[b,A]=n.useState(!1),a=n.useRef(),i=n.useRef(0),_=n.useCallback(()=>{const t=[],l=F*Math.PI/180;for(let s=0;s<c;s++){const e=-Math.PI/2+(Math.random()-.5)*l,C=S*(.5+Math.random()*.5);t.push({id:s,x:I*100,y:f*100,rotation:Math.random()*360,color:T[Math.floor(Math.random()*T.length)],size:r.CONFETTI_SIZE_RANGE.min+Math.random()*(r.CONFETTI_SIZE_RANGE.max-r.CONFETTI_SIZE_RANGE.min),velocity:{x:Math.cos(e)*C,y:Math.sin(e)*C},rotationSpeed:(Math.random()-.5)*20,shape:r.CONFETTI_SHAPES[Math.floor(Math.random()*r.CONFETTI_SHAPES.length)]})}return t},[c,T,I,f,F,S]),u=n.useCallback(t=>{if(i.current||(i.current=t),t-i.current>=h&&N){A(!1),d([]),o==null||o();return}d(s=>s.map(e=>({...e,x:e.x+e.velocity.x*.1,y:e.y+e.velocity.y*.1,rotation:e.rotation+e.rotationSpeed,velocity:{x:e.velocity.x*.99,y:e.velocity.y+O}}))),a.current=requestAnimationFrame(u)},[h,O,N,o]);n.useEffect(()=>(E?(A(!0),d(_()),i.current=0,a.current=requestAnimationFrame(u)):a.current&&cancelAnimationFrame(a.current),()=>{a.current&&cancelAnimationFrame(a.current)}),[E,_,u]);const M=t=>{const l={position:"absolute",left:`${t.x}%`,top:`${t.y}%`,width:t.size,height:t.size,transform:`rotate(${t.rotation}deg)`,backgroundColor:t.shape!=="triangle"?t.color:"transparent",borderRadius:t.shape==="circle"?"50%":0,borderLeft:t.shape==="triangle"?`${t.size/2}px solid transparent`:void 0,borderRight:t.shape==="triangle"?`${t.size/2}px solid transparent`:void 0,borderBottom:t.shape==="triangle"?`${t.size}px solid ${t.color}`:void 0,opacity:.9};return R.jsx("div",{style:l},t.id)};return!b||m.length===0?null:R.jsx("div",{className:g.cn("Bear-Confetti","bear-fixed bear-inset-0 bear-pointer-events-none bear-overflow-hidden",x),style:{zIndex:99999},"data-testid":y,children:m.map(M)})};exports.Confetti=v;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T={COUNT:100,DURATION:3e3,ORIGIN_X:.5,ORIGIN_Y:.5,SPREAD:60,VELOCITY:30,GRAVITY:.5,AUTO_HIDE:!0},E=["#ec4899","#8b5cf6","#3b82f6","#10b981","#f59e0b","#ef4444","#06b6d4","#f97316"],O=["square","circle","triangle"],I={min:8,max:14};exports.CONFETTI_COLORS=E;exports.CONFETTI_DEFAULTS=T;exports.CONFETTI_SHAPES=O;exports.CONFETTI_SIZE_RANGE=I;
@@ -0,0 +1,16 @@
1
+ export declare const CONFETTI_DEFAULTS: {
2
+ readonly COUNT: 100;
3
+ readonly DURATION: 3000;
4
+ readonly ORIGIN_X: 0.5;
5
+ readonly ORIGIN_Y: 0.5;
6
+ readonly SPREAD: 60;
7
+ readonly VELOCITY: 30;
8
+ readonly GRAVITY: 0.5;
9
+ readonly AUTO_HIDE: true;
10
+ };
11
+ export declare const CONFETTI_COLORS: readonly ["#ec4899", "#8b5cf6", "#3b82f6", "#10b981", "#f59e0b", "#ef4444", "#06b6d4", "#f97316"];
12
+ export declare const CONFETTI_SHAPES: readonly ["square", "circle", "triangle"];
13
+ export declare const CONFETTI_SIZE_RANGE: {
14
+ readonly min: 8;
15
+ readonly max: 14;
16
+ };
@@ -0,0 +1,36 @@
1
+ const T = {
2
+ COUNT: 100,
3
+ DURATION: 3e3,
4
+ ORIGIN_X: 0.5,
5
+ ORIGIN_Y: 0.5,
6
+ SPREAD: 60,
7
+ VELOCITY: 30,
8
+ GRAVITY: 0.5,
9
+ AUTO_HIDE: !0
10
+ }, I = [
11
+ "#ec4899",
12
+ // Pink (Bear primary)
13
+ "#8b5cf6",
14
+ // Purple
15
+ "#3b82f6",
16
+ // Blue
17
+ "#10b981",
18
+ // Green
19
+ "#f59e0b",
20
+ // Amber
21
+ "#ef4444",
22
+ // Red
23
+ "#06b6d4",
24
+ // Cyan
25
+ "#f97316"
26
+ // Orange
27
+ ], O = ["square", "circle", "triangle"], E = {
28
+ min: 8,
29
+ max: 14
30
+ };
31
+ export {
32
+ I as CONFETTI_COLORS,
33
+ T as CONFETTI_DEFAULTS,
34
+ O as CONFETTI_SHAPES,
35
+ E as CONFETTI_SIZE_RANGE
36
+ };
@@ -0,0 +1,23 @@
1
+ import { FC } from 'react';
2
+ import { ConfettiProps } from './Confetti.types';
3
+ /**
4
+ * Confetti - Celebration confetti effect 🎉
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * // Basic usage
9
+ * const [showConfetti, setShowConfetti] = useState(false);
10
+ * <Confetti active={showConfetti} onComplete={() => setShowConfetti(false)} />
11
+ * <Button onClick={() => setShowConfetti(true)}>Celebrate!</Button>
12
+ *
13
+ * // Custom colors and position
14
+ * <Confetti
15
+ * active={true}
16
+ * colors={['#ff0000', '#00ff00', '#0000ff']}
17
+ * originX={0.5}
18
+ * originY={0.3}
19
+ * />
20
+ * ```
21
+ */
22
+ export declare const Confetti: FC<ConfettiProps>;
23
+ export default Confetti;
@@ -0,0 +1,94 @@
1
+ import { jsx as g } from "react/jsx-runtime";
2
+ import { useState as v, useRef as N, useCallback as S, useEffect as C } from "react";
3
+ import { cn as D } from "../../utils/cn.js";
4
+ import { CONFETTI_DEFAULTS as a, CONFETTI_SHAPES as F, CONFETTI_COLORS as G, CONFETTI_SIZE_RANGE as f } from "./Confetti.const.js";
5
+ const k = ({
6
+ active: m = !1,
7
+ count: u = a.COUNT,
8
+ duration: c = a.DURATION,
9
+ colors: l = G,
10
+ originX: I = a.ORIGIN_X,
11
+ originY: x = a.ORIGIN_Y,
12
+ spread: y = a.SPREAD,
13
+ velocity: T = a.VELOCITY,
14
+ gravity: b = a.GRAVITY,
15
+ autoHide: M = a.AUTO_HIDE,
16
+ onComplete: o,
17
+ className: _,
18
+ testId: z
19
+ }) => {
20
+ const [R, d] = v([]), [P, E] = v(!1), n = N(), s = N(0), O = S(() => {
21
+ const t = [], i = y * Math.PI / 180;
22
+ for (let e = 0; e < u; e++) {
23
+ const r = -Math.PI / 2 + (Math.random() - 0.5) * i, A = T * (0.5 + Math.random() * 0.5);
24
+ t.push({
25
+ id: e,
26
+ x: I * 100,
27
+ y: x * 100,
28
+ rotation: Math.random() * 360,
29
+ color: l[Math.floor(Math.random() * l.length)],
30
+ size: f.min + Math.random() * (f.max - f.min),
31
+ velocity: {
32
+ x: Math.cos(r) * A,
33
+ y: Math.sin(r) * A
34
+ },
35
+ rotationSpeed: (Math.random() - 0.5) * 20,
36
+ shape: F[Math.floor(Math.random() * F.length)]
37
+ });
38
+ }
39
+ return t;
40
+ }, [u, l, I, x, y, T]), h = S((t) => {
41
+ if (s.current || (s.current = t), t - s.current >= c && M) {
42
+ E(!1), d([]), o == null || o();
43
+ return;
44
+ }
45
+ d(
46
+ (e) => e.map((r) => ({
47
+ ...r,
48
+ x: r.x + r.velocity.x * 0.1,
49
+ y: r.y + r.velocity.y * 0.1,
50
+ rotation: r.rotation + r.rotationSpeed,
51
+ velocity: {
52
+ x: r.velocity.x * 0.99,
53
+ y: r.velocity.y + b
54
+ }
55
+ }))
56
+ ), n.current = requestAnimationFrame(h);
57
+ }, [c, b, M, o]);
58
+ C(() => (m ? (E(!0), d(O()), s.current = 0, n.current = requestAnimationFrame(h)) : n.current && cancelAnimationFrame(n.current), () => {
59
+ n.current && cancelAnimationFrame(n.current);
60
+ }), [m, O, h]);
61
+ const $ = (t) => {
62
+ const i = {
63
+ position: "absolute",
64
+ left: `${t.x}%`,
65
+ top: `${t.y}%`,
66
+ width: t.size,
67
+ height: t.size,
68
+ transform: `rotate(${t.rotation}deg)`,
69
+ backgroundColor: t.shape !== "triangle" ? t.color : "transparent",
70
+ borderRadius: t.shape === "circle" ? "50%" : 0,
71
+ borderLeft: t.shape === "triangle" ? `${t.size / 2}px solid transparent` : void 0,
72
+ borderRight: t.shape === "triangle" ? `${t.size / 2}px solid transparent` : void 0,
73
+ borderBottom: t.shape === "triangle" ? `${t.size}px solid ${t.color}` : void 0,
74
+ opacity: 0.9
75
+ };
76
+ return /* @__PURE__ */ g("div", { style: i }, t.id);
77
+ };
78
+ return !P || R.length === 0 ? null : /* @__PURE__ */ g(
79
+ "div",
80
+ {
81
+ className: D(
82
+ "Bear-Confetti",
83
+ "bear-fixed bear-inset-0 bear-pointer-events-none bear-overflow-hidden",
84
+ _
85
+ ),
86
+ style: { zIndex: 99999 },
87
+ "data-testid": z,
88
+ children: R.map($)
89
+ }
90
+ );
91
+ };
92
+ export {
93
+ k as Confetti
94
+ };