@forgedevstack/bear 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AppBar/AppBar.cjs +1 -1
- package/dist/components/AppBar/AppBar.js +8 -8
- package/dist/components/Button/Button.constants.cjs +1 -1
- package/dist/components/Button/Button.constants.js +1 -1
- package/dist/components/Button/Button.d.ts +5 -3
- package/dist/components/Calendar/Calendar.cjs +1 -1
- package/dist/components/Calendar/Calendar.const.cjs +1 -1
- package/dist/components/Calendar/Calendar.const.d.ts +1 -0
- package/dist/components/Calendar/Calendar.const.js +6 -5
- package/dist/components/Calendar/Calendar.helpers.cjs +1 -1
- package/dist/components/Calendar/Calendar.helpers.js +4 -4
- package/dist/components/Calendar/Calendar.js +128 -128
- package/dist/components/Cascader/Cascader.cjs +1 -0
- package/dist/components/Cascader/Cascader.const.cjs +1 -0
- package/dist/components/Cascader/Cascader.const.d.ts +33 -0
- package/dist/components/Cascader/Cascader.const.js +21 -0
- package/dist/components/Cascader/Cascader.d.ts +17 -0
- package/dist/components/Cascader/Cascader.js +227 -0
- package/dist/components/Cascader/Cascader.types.d.ts +94 -0
- package/dist/components/Cascader/index.d.ts +2 -0
- package/dist/components/CommandPalette/CommandPalette.cjs +1 -0
- package/dist/components/CommandPalette/CommandPalette.const.cjs +1 -0
- package/dist/components/CommandPalette/CommandPalette.const.d.ts +25 -0
- package/dist/components/CommandPalette/CommandPalette.const.js +13 -0
- package/dist/components/CommandPalette/CommandPalette.d.ts +18 -0
- package/dist/components/CommandPalette/CommandPalette.js +190 -0
- package/dist/components/CommandPalette/CommandPalette.types.d.ts +90 -0
- package/dist/components/CommandPalette/CommandPalette.utils.cjs +1 -0
- package/dist/components/CommandPalette/CommandPalette.utils.d.ts +17 -0
- package/dist/components/CommandPalette/CommandPalette.utils.js +63 -0
- package/dist/components/CommandPalette/index.d.ts +2 -0
- package/dist/components/CreditInput/CreditInput.cjs +1 -0
- package/dist/components/CreditInput/CreditInput.const.cjs +1 -0
- package/dist/components/CreditInput/CreditInput.const.d.ts +37 -0
- package/dist/components/CreditInput/CreditInput.const.js +66 -0
- package/dist/components/CreditInput/CreditInput.d.ts +15 -0
- package/dist/components/CreditInput/CreditInput.js +214 -0
- package/dist/components/CreditInput/CreditInput.types.d.ts +93 -0
- package/dist/components/CreditInput/CreditInput.utils.cjs +1 -0
- package/dist/components/CreditInput/CreditInput.utils.d.ts +48 -0
- package/dist/components/CreditInput/CreditInput.utils.js +79 -0
- package/dist/components/CreditInput/index.d.ts +2 -0
- package/dist/components/DatePicker/DatePicker.cjs +1 -1
- package/dist/components/DatePicker/DatePicker.js +108 -84
- package/dist/components/DatePicker/DatePicker.types.d.ts +2 -1
- package/dist/components/Drawer/Drawer.cjs +1 -1
- package/dist/components/Drawer/Drawer.js +75 -44
- package/dist/components/Form/Form.cjs +1 -0
- package/dist/components/Form/Form.const.cjs +1 -0
- package/dist/components/Form/Form.const.d.ts +33 -0
- package/dist/components/Form/Form.const.js +27 -0
- package/dist/components/Form/Form.context.cjs +1 -0
- package/dist/components/Form/Form.context.d.ts +13 -0
- package/dist/components/Form/Form.context.js +12 -0
- package/dist/components/Form/Form.d.ts +18 -0
- package/dist/components/Form/Form.js +230 -0
- package/dist/components/Form/Form.types.d.ts +166 -0
- package/dist/components/Form/Form.utils.cjs +1 -0
- package/dist/components/Form/Form.utils.d.ts +17 -0
- package/dist/components/Form/Form.utils.js +31 -0
- package/dist/components/Form/index.d.ts +3 -0
- package/dist/components/Input/Input.cjs +1 -1
- package/dist/components/Input/Input.js +36 -36
- package/dist/components/NotificationCenter/NotificationCenter.cjs +1 -0
- package/dist/components/NotificationCenter/NotificationCenter.const.cjs +1 -0
- package/dist/components/NotificationCenter/NotificationCenter.const.d.ts +25 -0
- package/dist/components/NotificationCenter/NotificationCenter.const.js +28 -0
- package/dist/components/NotificationCenter/NotificationCenter.d.ts +15 -0
- package/dist/components/NotificationCenter/NotificationCenter.js +223 -0
- package/dist/components/NotificationCenter/NotificationCenter.types.d.ts +117 -0
- package/dist/components/NotificationCenter/NotificationCenter.utils.cjs +1 -0
- package/dist/components/NotificationCenter/NotificationCenter.utils.d.ts +11 -0
- package/dist/components/NotificationCenter/NotificationCenter.utils.js +19 -0
- package/dist/components/NotificationCenter/index.d.ts +2 -0
- package/dist/components/PhoneInput/PhoneInput.cjs +1 -0
- package/dist/components/PhoneInput/PhoneInput.const.cjs +1 -0
- package/dist/components/PhoneInput/PhoneInput.const.d.ts +33 -0
- package/dist/components/PhoneInput/PhoneInput.const.js +82 -0
- package/dist/components/PhoneInput/PhoneInput.d.ts +16 -0
- package/dist/components/PhoneInput/PhoneInput.js +194 -0
- package/dist/components/PhoneInput/PhoneInput.types.d.ts +108 -0
- package/dist/components/PhoneInput/PhoneInput.utils.cjs +1 -0
- package/dist/components/PhoneInput/PhoneInput.utils.d.ts +25 -0
- package/dist/components/PhoneInput/PhoneInput.utils.js +39 -0
- package/dist/components/PhoneInput/index.d.ts +2 -0
- package/dist/components/Select/Select.cjs +1 -1
- package/dist/components/Select/Select.js +37 -37
- package/dist/components/Sidebar/Sidebar.cjs +1 -1
- package/dist/components/Sidebar/Sidebar.const.cjs +1 -1
- package/dist/components/Sidebar/Sidebar.const.d.ts +6 -2
- package/dist/components/Sidebar/Sidebar.const.js +24 -17
- package/dist/components/Sidebar/Sidebar.js +36 -31
- package/dist/components/Sidebar/Sidebar.types.d.ts +9 -0
- package/dist/components/Sidebar/components/SidebarItem/SidebarItem.cjs +1 -1
- package/dist/components/Sidebar/components/SidebarItem/SidebarItem.js +30 -29
- package/dist/components/SignPad/SignPad.cjs +1 -1
- package/dist/components/SignPad/SignPad.js +56 -56
- package/dist/components/TimePicker/TimePicker.cjs +1 -1
- package/dist/components/TimePicker/TimePicker.constants.cjs +1 -1
- package/dist/components/TimePicker/TimePicker.constants.d.ts +22 -1
- package/dist/components/TimePicker/TimePicker.constants.js +36 -19
- package/dist/components/TimePicker/TimePicker.js +97 -131
- package/dist/components/TimePicker/TimePicker.types.d.ts +47 -6
- package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.cjs +1 -0
- package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.d.ts +3 -0
- package/dist/components/TimePicker/components/TimePickerColumnsDropdown/TimePickerColumnsDropdown.js +81 -0
- package/dist/components/TimePicker/components/TimePickerColumnsDropdown/index.d.ts +1 -0
- package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.cjs +1 -0
- package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.d.ts +3 -0
- package/dist/components/TimePicker/components/TimePickerDialDropdown/TimePickerDialDropdown.js +84 -0
- package/dist/components/TimePicker/components/TimePickerDialDropdown/index.d.ts +1 -0
- package/dist/components/TimePicker/helpers/ClockFaceSvg.cjs +1 -0
- package/dist/components/TimePicker/helpers/ClockFaceSvg.d.ts +18 -0
- package/dist/components/TimePicker/helpers/ClockFaceSvg.js +67 -0
- package/dist/components/TimePicker/helpers/index.d.ts +2 -0
- package/dist/components/TimePicker/index.d.ts +1 -1
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +13 -3
- package/dist/components/index.js +139 -126
- package/dist/context/BearProvider.cjs +1 -1
- package/dist/context/BearProvider.js +25 -25
- package/dist/index.cjs +1 -1
- package/dist/index.js +247 -234
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.cjs +0 -1
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +0 -3
- package/dist/components/DateTimePicker/DateTimePicker.js +0 -178
- package/dist/components/DateTimePicker/DateTimePicker.types.d.ts +0 -26
- package/dist/components/DateTimePicker/DateTimePicker.utils.cjs +0 -1
- package/dist/components/DateTimePicker/DateTimePicker.utils.d.ts +0 -2
- package/dist/components/DateTimePicker/DateTimePicker.utils.js +0 -16
- package/dist/components/DateTimePicker/index.d.ts +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),q=require("react-dom"),c=require("../../utils/cn.cjs"),m=require("./NotificationCenter.const.cjs"),F=require("./NotificationCenter.utils.cjs"),W=({notification:r,onRead:d,onDismiss:g,onClick:b,translations:v})=>{const p=()=>{r.read||d==null||d(r.id),b==null||b(r)};return e.jsxs("div",{onClick:p,className:c.cn("Bear-NotificationCenter__item bear-flex bear-gap-3 bear-p-3 bear-border-b bear-border-gray-200 dark:bear-border-zinc-700 last:bear-border-b-0 bear-cursor-pointer bear-transition-colors hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700/50",!r.read&&"bear-bg-gray-50 dark:bear-bg-zinc-800/50"),children:[e.jsx("div",{className:"Bear-NotificationCenter__item-icon bear-shrink-0",children:r.avatar?e.jsx("img",{src:r.avatar,alt:"",className:"bear-w-10 bear-h-10 bear-rounded-full bear-object-cover"}):r.icon?e.jsx("div",{className:c.cn("bear-w-10 bear-h-10 bear-rounded-full bear-flex bear-items-center bear-justify-center",m.NOTIFICATION_TYPE_COLORS[r.type]),children:r.icon}):e.jsxs("div",{className:c.cn("bear-w-10 bear-h-10 bear-rounded-full bear-flex bear-items-center bear-justify-center",m.NOTIFICATION_TYPE_COLORS[r.type]),children:[r.type==="success"&&e.jsx("svg",{className:"bear-w-5 bear-h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),r.type==="error"&&e.jsx("svg",{className:"bear-w-5 bear-h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),r.type==="warning"&&e.jsx("svg",{className:"bear-w-5 bear-h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})}),r.type==="info"&&e.jsx("svg",{className:"bear-w-5 bear-h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})})]})}),e.jsxs("div",{className:"Bear-NotificationCenter__item-content bear-flex-1 bear-min-w-0",children:[e.jsxs("div",{className:"bear-flex bear-items-start bear-justify-between bear-gap-2",children:[e.jsx("p",{className:c.cn("Bear-NotificationCenter__item-title bear-text-sm bear-font-medium bear-truncate",r.read?"bear-text-gray-600 dark:bear-text-zinc-300":"bear-text-gray-900 dark:bear-text-white"),children:r.title}),!r.read&&e.jsx("span",{className:"Bear-NotificationCenter__item-badge bear-w-2 bear-h-2 bear-rounded-full bear-bg-pink-500 bear-shrink-0 bear-mt-1.5"})]}),r.description&&e.jsx("p",{className:"Bear-NotificationCenter__item-description bear-text-xs bear-text-gray-500 dark:bear-text-zinc-400 bear-mt-0.5 bear-line-clamp-2",children:r.description}),e.jsx("p",{className:"Bear-NotificationCenter__item-time bear-text-xs bear-text-gray-400 dark:bear-text-zinc-500 bear-mt-1",children:F.formatRelativeTime(r.timestamp,v)}),r.actions&&r.actions.length>0&&e.jsx("div",{className:"Bear-NotificationCenter__item-actions bear-flex bear-gap-2 bear-mt-2",children:r.actions.map((a,j)=>e.jsx("button",{type:"button",onClick:x=>{x.stopPropagation(),a.onClick()},className:c.cn("bear-px-2 bear-py-1 bear-text-xs bear-rounded bear-transition-colors",a.variant==="primary"&&"bear-bg-pink-500 bear-text-white hover:bear-bg-pink-600",a.variant==="secondary"&&"bear-bg-gray-200 dark:bear-bg-zinc-600 bear-text-gray-900 dark:bear-text-white hover:bear-bg-gray-300 dark:hover:bear-bg-zinc-500",a.variant==="danger"&&"bear-bg-red-500 bear-text-white hover:bear-bg-red-600",!a.variant&&"bear-bg-gray-100 dark:bear-bg-zinc-700 bear-text-gray-700 dark:bear-text-zinc-300 hover:bear-bg-gray-200 dark:hover:bear-bg-zinc-600"),children:a.label},j))})]}),g&&e.jsx("button",{type:"button",onClick:a=>{a.stopPropagation(),g(r.id)},className:"Bear-NotificationCenter__item-dismiss bear-p-1 bear-rounded bear-text-gray-500 dark:bear-text-zinc-500 hover:bear-text-gray-700 dark:hover:bear-text-zinc-300 hover:bear-bg-gray-200 dark:hover:bear-bg-zinc-700 bear-transition-colors bear-shrink-0",children:e.jsx("svg",{className:"bear-w-4 bear-h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})},D=({notifications:r,onNotificationClick:d,onMarkAsRead:g,onMarkAllAsRead:b,onDismiss:v,onClearAll:p,maxVisible:a=m.NOTIFICATION_CENTER_MAX_VISIBLE,groupByCategory:j=!1,position:x="top-right",trigger:C,open:I,onOpenChange:T,className:O,testId:E,translations:_,icon:M})=>{const[A,R]=n.useState(!1),[w,S]=n.useState({top:0,left:0}),[f,P]=n.useState(!1),B=n.useRef(null),y=n.useRef(null),h=I??A,N=T??R,o=n.useMemo(()=>({...m.NOTIFICATION_CENTER_DEFAULT_TRANSLATIONS,..._}),[_]),i=n.useMemo(()=>r.filter(t=>!t.read).length,[r]),z=n.useMemo(()=>f?r:r.slice(0,a),[r,a,f]);n.useEffect(()=>{if(h&&y.current){const t=y.current.getBoundingClientRect(),k=window.scrollY||document.documentElement.scrollTop,s=window.scrollX||document.documentElement.scrollLeft;let u=t.bottom+k+8,l=t.left+s;x.includes("left")?l=t.left+s:l=t.right+s-360,x.includes("bottom")&&(u=t.top+k-8),S({top:u,left:Math.max(8,l)})}},[h,x]),n.useEffect(()=>{const t=k=>{var u,l;const s=k.target;(u=B.current)!=null&&u.contains(s)||(l=s.closest)!=null&&l.call(s,"[data-bear-notification-center]")||N(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[N]);const L=n.useCallback(()=>{N(!h)},[h,N]);return e.jsxs("div",{ref:B,className:c.cn("Bear-NotificationCenter bear-relative bear-inline-block",O),"data-testid":E,children:[C?e.jsx("div",{onClick:L,children:C}):e.jsxs("button",{ref:y,type:"button",onClick:L,className:"Bear-NotificationCenter__trigger bear-relative bear-p-2 bear-rounded-lg bear-text-gray-500 dark:bear-text-zinc-400 hover:bear-text-gray-900 dark:hover:bear-text-white hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-800 bear-transition-colors",children:[M??e.jsx("svg",{className:"bear-w-6 bear-h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9"})}),i>0&&e.jsx("span",{className:"Bear-NotificationCenter__badge bear-absolute bear-top-0 bear-right-0 bear-w-5 bear-h-5 bear-flex bear-items-center bear-justify-center bear-text-xs bear-font-medium bear-text-white bear-bg-pink-500 bear-rounded-full",children:i>99?"99+":i})]}),h&&typeof document<"u"&&q.createPortal(e.jsxs("div",{"data-bear-notification-center":!0,className:"Bear-NotificationCenter__dropdown bear-fixed bear-w-[360px] bear-bg-white dark:bear-bg-zinc-800 bear-border bear-border-gray-200 dark:bear-border-zinc-700 bear-rounded-lg bear-shadow-xl bear-overflow-hidden",style:{top:w.top,left:w.left,zIndex:m.NOTIFICATION_CENTER_Z_INDEX},children:[e.jsxs("div",{className:"Bear-NotificationCenter__header bear-flex bear-items-center bear-justify-between bear-px-4 bear-py-3 bear-border-b bear-border-gray-200 dark:bear-border-zinc-700",children:[e.jsxs("h3",{className:"Bear-NotificationCenter__title bear-text-sm bear-font-semibold bear-text-gray-900 dark:bear-text-white",children:[o.title,i>0&&e.jsxs("span",{className:"bear-ml-2 bear-text-xs bear-font-normal bear-text-gray-500 dark:bear-text-zinc-400",children:["(",i," ",o.new.toLowerCase(),")"]})]}),e.jsxs("div",{className:"bear-flex bear-gap-2",children:[b&&i>0&&e.jsx("button",{type:"button",onClick:b,className:"Bear-NotificationCenter__mark-all bear-text-xs bear-text-pink-400 hover:bear-text-pink-300 bear-transition-colors",children:o.markAllRead}),p&&r.length>0&&e.jsx("button",{type:"button",onClick:p,className:"Bear-NotificationCenter__clear-all bear-text-xs bear-text-gray-500 dark:bear-text-zinc-400 hover:bear-text-gray-700 dark:hover:bear-text-zinc-300 bear-transition-colors",children:o.clearAll})]})]}),e.jsx("div",{className:"Bear-NotificationCenter__list bear-max-h-[400px] bear-overflow-y-auto",children:z.length===0?e.jsx("div",{className:"Bear-NotificationCenter__empty bear-py-8 bear-text-center bear-text-sm bear-text-gray-500 dark:bear-text-zinc-500",children:o.noNotifications}):z.map(t=>e.jsx(W,{notification:t,onRead:g,onDismiss:v,onClick:d,translations:o},t.id))}),!f&&r.length>a&&e.jsx("div",{className:"Bear-NotificationCenter__footer bear-border-t bear-border-gray-200 dark:bear-border-zinc-700",children:e.jsxs("button",{type:"button",onClick:()=>P(!0),className:"bear-w-full bear-py-2 bear-text-sm bear-text-pink-500 dark:bear-text-pink-400 hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700/50 bear-transition-colors",children:[o.showMore," (",r.length-a," more)"]})})]}),document.body)]})};exports.NotificationCenter=D;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={title:"Notifications",noNotifications:"No notifications",markAllRead:"Mark all as read",clearAll:"Clear all",showMore:"Show more",justNow:"Just now",minutesAgo:"{count}m ago",hoursAgo:"{count}h ago",daysAgo:"{count}d ago",new:"New"},T=5,o=9999,I={info:"bear-text-blue-400 bear-bg-blue-500/20",success:"bear-text-green-400 bear-bg-green-500/20",warning:"bear-text-amber-400 bear-bg-amber-500/20",error:"bear-text-red-400 bear-bg-red-500/20"},N={MINUTE:60*1e3,HOUR:3600*1e3,DAY:1440*60*1e3};exports.NOTIFICATION_CENTER_DEFAULT_TRANSLATIONS=e;exports.NOTIFICATION_CENTER_MAX_VISIBLE=T;exports.NOTIFICATION_CENTER_Z_INDEX=o;exports.NOTIFICATION_TYPE_COLORS=I;exports.TIME_THRESHOLDS=N;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NotificationCenterTranslations, NotificationType } from './NotificationCenter.types';
|
|
2
|
+
/**
|
|
3
|
+
* Default translations
|
|
4
|
+
*/
|
|
5
|
+
export declare const NOTIFICATION_CENTER_DEFAULT_TRANSLATIONS: NotificationCenterTranslations;
|
|
6
|
+
/**
|
|
7
|
+
* Maximum visible notifications default
|
|
8
|
+
*/
|
|
9
|
+
export declare const NOTIFICATION_CENTER_MAX_VISIBLE = 5;
|
|
10
|
+
/**
|
|
11
|
+
* Dropdown z-index
|
|
12
|
+
*/
|
|
13
|
+
export declare const NOTIFICATION_CENTER_Z_INDEX = 9999;
|
|
14
|
+
/**
|
|
15
|
+
* Type icon colors
|
|
16
|
+
*/
|
|
17
|
+
export declare const NOTIFICATION_TYPE_COLORS: Record<NotificationType, string>;
|
|
18
|
+
/**
|
|
19
|
+
* Time thresholds for relative time formatting (in ms)
|
|
20
|
+
*/
|
|
21
|
+
export declare const TIME_THRESHOLDS: {
|
|
22
|
+
readonly MINUTE: number;
|
|
23
|
+
readonly HOUR: number;
|
|
24
|
+
readonly DAY: number;
|
|
25
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
title: "Notifications",
|
|
3
|
+
noNotifications: "No notifications",
|
|
4
|
+
markAllRead: "Mark all as read",
|
|
5
|
+
clearAll: "Clear all",
|
|
6
|
+
showMore: "Show more",
|
|
7
|
+
justNow: "Just now",
|
|
8
|
+
minutesAgo: "{count}m ago",
|
|
9
|
+
hoursAgo: "{count}h ago",
|
|
10
|
+
daysAgo: "{count}d ago",
|
|
11
|
+
new: "New"
|
|
12
|
+
}, o = 5, t = 9999, a = {
|
|
13
|
+
info: "bear-text-blue-400 bear-bg-blue-500/20",
|
|
14
|
+
success: "bear-text-green-400 bear-bg-green-500/20",
|
|
15
|
+
warning: "bear-text-amber-400 bear-bg-amber-500/20",
|
|
16
|
+
error: "bear-text-red-400 bear-bg-red-500/20"
|
|
17
|
+
}, r = {
|
|
18
|
+
MINUTE: 60 * 1e3,
|
|
19
|
+
HOUR: 3600 * 1e3,
|
|
20
|
+
DAY: 1440 * 60 * 1e3
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
e as NOTIFICATION_CENTER_DEFAULT_TRANSLATIONS,
|
|
24
|
+
o as NOTIFICATION_CENTER_MAX_VISIBLE,
|
|
25
|
+
t as NOTIFICATION_CENTER_Z_INDEX,
|
|
26
|
+
a as NOTIFICATION_TYPE_COLORS,
|
|
27
|
+
r as TIME_THRESHOLDS
|
|
28
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { NotificationCenterProps } from './NotificationCenter.types';
|
|
3
|
+
/**
|
|
4
|
+
* NotificationCenter - Notification management component
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <NotificationCenter
|
|
9
|
+
* notifications={notifications}
|
|
10
|
+
* onMarkAsRead={handleMarkAsRead}
|
|
11
|
+
* onDismiss={handleDismiss}
|
|
12
|
+
* />
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const NotificationCenter: FC<NotificationCenterProps>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { jsxs as n, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as y, useRef as O, useMemo as C, useEffect as E, useCallback as Y } from "react";
|
|
3
|
+
import { createPortal as H } from "react-dom";
|
|
4
|
+
import { cn as c } from "../../utils/cn.js";
|
|
5
|
+
import { NOTIFICATION_CENTER_DEFAULT_TRANSLATIONS as U, NOTIFICATION_CENTER_MAX_VISIBLE as Z, NOTIFICATION_CENTER_Z_INDEX as q, NOTIFICATION_TYPE_COLORS as j } from "./NotificationCenter.const.js";
|
|
6
|
+
import { formatRelativeTime as G } from "./NotificationCenter.utils.js";
|
|
7
|
+
const J = ({
|
|
8
|
+
notification: e,
|
|
9
|
+
onRead: d,
|
|
10
|
+
onDismiss: p,
|
|
11
|
+
onClick: i,
|
|
12
|
+
translations: k
|
|
13
|
+
}) => /* @__PURE__ */ n(
|
|
14
|
+
"div",
|
|
15
|
+
{
|
|
16
|
+
onClick: () => {
|
|
17
|
+
e.read || d == null || d(e.id), i == null || i(e);
|
|
18
|
+
},
|
|
19
|
+
className: c(
|
|
20
|
+
"Bear-NotificationCenter__item bear-flex bear-gap-3 bear-p-3 bear-border-b bear-border-gray-200 dark:bear-border-zinc-700 last:bear-border-b-0 bear-cursor-pointer bear-transition-colors hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700/50",
|
|
21
|
+
!e.read && "bear-bg-gray-50 dark:bear-bg-zinc-800/50"
|
|
22
|
+
),
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ r("div", { className: "Bear-NotificationCenter__item-icon bear-shrink-0", children: e.avatar ? /* @__PURE__ */ r(
|
|
25
|
+
"img",
|
|
26
|
+
{
|
|
27
|
+
src: e.avatar,
|
|
28
|
+
alt: "",
|
|
29
|
+
className: "bear-w-10 bear-h-10 bear-rounded-full bear-object-cover"
|
|
30
|
+
}
|
|
31
|
+
) : e.icon ? /* @__PURE__ */ r("div", { className: c(
|
|
32
|
+
"bear-w-10 bear-h-10 bear-rounded-full bear-flex bear-items-center bear-justify-center",
|
|
33
|
+
j[e.type]
|
|
34
|
+
), children: e.icon }) : /* @__PURE__ */ n("div", { className: c(
|
|
35
|
+
"bear-w-10 bear-h-10 bear-rounded-full bear-flex bear-items-center bear-justify-center",
|
|
36
|
+
j[e.type]
|
|
37
|
+
), children: [
|
|
38
|
+
e.type === "success" && /* @__PURE__ */ r("svg", { className: "bear-w-5 bear-h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
|
|
39
|
+
e.type === "error" && /* @__PURE__ */ r("svg", { className: "bear-w-5 bear-h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }),
|
|
40
|
+
e.type === "warning" && /* @__PURE__ */ r("svg", { className: "bear-w-5 bear-h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }),
|
|
41
|
+
e.type === "info" && /* @__PURE__ */ r("svg", { className: "bear-w-5 bear-h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) })
|
|
42
|
+
] }) }),
|
|
43
|
+
/* @__PURE__ */ n("div", { className: "Bear-NotificationCenter__item-content bear-flex-1 bear-min-w-0", children: [
|
|
44
|
+
/* @__PURE__ */ n("div", { className: "bear-flex bear-items-start bear-justify-between bear-gap-2", children: [
|
|
45
|
+
/* @__PURE__ */ r("p", { className: c(
|
|
46
|
+
"Bear-NotificationCenter__item-title bear-text-sm bear-font-medium bear-truncate",
|
|
47
|
+
e.read ? "bear-text-gray-600 dark:bear-text-zinc-300" : "bear-text-gray-900 dark:bear-text-white"
|
|
48
|
+
), children: e.title }),
|
|
49
|
+
!e.read && /* @__PURE__ */ r("span", { className: "Bear-NotificationCenter__item-badge bear-w-2 bear-h-2 bear-rounded-full bear-bg-pink-500 bear-shrink-0 bear-mt-1.5" })
|
|
50
|
+
] }),
|
|
51
|
+
e.description && /* @__PURE__ */ r("p", { className: "Bear-NotificationCenter__item-description bear-text-xs bear-text-gray-500 dark:bear-text-zinc-400 bear-mt-0.5 bear-line-clamp-2", children: e.description }),
|
|
52
|
+
/* @__PURE__ */ r("p", { className: "Bear-NotificationCenter__item-time bear-text-xs bear-text-gray-400 dark:bear-text-zinc-500 bear-mt-1", children: G(e.timestamp, k) }),
|
|
53
|
+
e.actions && e.actions.length > 0 && /* @__PURE__ */ r("div", { className: "Bear-NotificationCenter__item-actions bear-flex bear-gap-2 bear-mt-2", children: e.actions.map((a, _) => /* @__PURE__ */ r(
|
|
54
|
+
"button",
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
onClick: (h) => {
|
|
58
|
+
h.stopPropagation(), a.onClick();
|
|
59
|
+
},
|
|
60
|
+
className: c(
|
|
61
|
+
"bear-px-2 bear-py-1 bear-text-xs bear-rounded bear-transition-colors",
|
|
62
|
+
a.variant === "primary" && "bear-bg-pink-500 bear-text-white hover:bear-bg-pink-600",
|
|
63
|
+
a.variant === "secondary" && "bear-bg-gray-200 dark:bear-bg-zinc-600 bear-text-gray-900 dark:bear-text-white hover:bear-bg-gray-300 dark:hover:bear-bg-zinc-500",
|
|
64
|
+
a.variant === "danger" && "bear-bg-red-500 bear-text-white hover:bear-bg-red-600",
|
|
65
|
+
!a.variant && "bear-bg-gray-100 dark:bear-bg-zinc-700 bear-text-gray-700 dark:bear-text-zinc-300 hover:bear-bg-gray-200 dark:hover:bear-bg-zinc-600"
|
|
66
|
+
),
|
|
67
|
+
children: a.label
|
|
68
|
+
},
|
|
69
|
+
_
|
|
70
|
+
)) })
|
|
71
|
+
] }),
|
|
72
|
+
p && /* @__PURE__ */ r(
|
|
73
|
+
"button",
|
|
74
|
+
{
|
|
75
|
+
type: "button",
|
|
76
|
+
onClick: (a) => {
|
|
77
|
+
a.stopPropagation(), p(e.id);
|
|
78
|
+
},
|
|
79
|
+
className: "Bear-NotificationCenter__item-dismiss bear-p-1 bear-rounded bear-text-gray-500 dark:bear-text-zinc-500 hover:bear-text-gray-700 dark:hover:bear-text-zinc-300 hover:bear-bg-gray-200 dark:hover:bear-bg-zinc-700 bear-transition-colors bear-shrink-0",
|
|
80
|
+
children: /* @__PURE__ */ r("svg", { className: "bear-w-4 bear-h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
), ae = ({
|
|
86
|
+
notifications: e,
|
|
87
|
+
onNotificationClick: d,
|
|
88
|
+
onMarkAsRead: p,
|
|
89
|
+
onMarkAllAsRead: i,
|
|
90
|
+
onDismiss: k,
|
|
91
|
+
onClearAll: N,
|
|
92
|
+
maxVisible: a = Z,
|
|
93
|
+
groupByCategory: _ = !1,
|
|
94
|
+
position: h = "top-right",
|
|
95
|
+
trigger: w,
|
|
96
|
+
open: M,
|
|
97
|
+
onOpenChange: A,
|
|
98
|
+
className: R,
|
|
99
|
+
testId: P,
|
|
100
|
+
translations: B,
|
|
101
|
+
icon: S
|
|
102
|
+
}) => {
|
|
103
|
+
const [W, F] = y(!1), [z, X] = y({ top: 0, left: 0 }), [v, D] = y(!1), L = O(null), f = O(null), m = M ?? W, g = A ?? F, b = C(() => ({
|
|
104
|
+
...U,
|
|
105
|
+
...B
|
|
106
|
+
}), [B]), l = C(
|
|
107
|
+
() => e.filter((t) => !t.read).length,
|
|
108
|
+
[e]
|
|
109
|
+
), I = C(() => v ? e : e.slice(0, a), [e, a, v]);
|
|
110
|
+
E(() => {
|
|
111
|
+
if (m && f.current) {
|
|
112
|
+
const t = f.current.getBoundingClientRect(), x = window.scrollY || document.documentElement.scrollTop, o = window.scrollX || document.documentElement.scrollLeft;
|
|
113
|
+
let u = t.bottom + x + 8, s = t.left + o;
|
|
114
|
+
h.includes("left") ? s = t.left + o : s = t.right + o - 360, h.includes("bottom") && (u = t.top + x - 8), X({ top: u, left: Math.max(8, s) });
|
|
115
|
+
}
|
|
116
|
+
}, [m, h]), E(() => {
|
|
117
|
+
const t = (x) => {
|
|
118
|
+
var u, s;
|
|
119
|
+
const o = x.target;
|
|
120
|
+
(u = L.current) != null && u.contains(o) || (s = o.closest) != null && s.call(o, "[data-bear-notification-center]") || g(!1);
|
|
121
|
+
};
|
|
122
|
+
return document.addEventListener("mousedown", t), () => document.removeEventListener("mousedown", t);
|
|
123
|
+
}, [g]);
|
|
124
|
+
const T = Y(() => {
|
|
125
|
+
g(!m);
|
|
126
|
+
}, [m, g]);
|
|
127
|
+
return /* @__PURE__ */ n(
|
|
128
|
+
"div",
|
|
129
|
+
{
|
|
130
|
+
ref: L,
|
|
131
|
+
className: c("Bear-NotificationCenter bear-relative bear-inline-block", R),
|
|
132
|
+
"data-testid": P,
|
|
133
|
+
children: [
|
|
134
|
+
w ? /* @__PURE__ */ r("div", { onClick: T, children: w }) : /* @__PURE__ */ n(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
ref: f,
|
|
138
|
+
type: "button",
|
|
139
|
+
onClick: T,
|
|
140
|
+
className: "Bear-NotificationCenter__trigger bear-relative bear-p-2 bear-rounded-lg bear-text-gray-500 dark:bear-text-zinc-400 hover:bear-text-gray-900 dark:hover:bear-text-white hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-800 bear-transition-colors",
|
|
141
|
+
children: [
|
|
142
|
+
S ?? /* @__PURE__ */ r("svg", { className: "bear-w-6 bear-h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" }) }),
|
|
143
|
+
l > 0 && /* @__PURE__ */ r("span", { className: "Bear-NotificationCenter__badge bear-absolute bear-top-0 bear-right-0 bear-w-5 bear-h-5 bear-flex bear-items-center bear-justify-center bear-text-xs bear-font-medium bear-text-white bear-bg-pink-500 bear-rounded-full", children: l > 99 ? "99+" : l })
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
),
|
|
147
|
+
m && typeof document < "u" && H(
|
|
148
|
+
/* @__PURE__ */ n(
|
|
149
|
+
"div",
|
|
150
|
+
{
|
|
151
|
+
"data-bear-notification-center": !0,
|
|
152
|
+
className: "Bear-NotificationCenter__dropdown bear-fixed bear-w-[360px] bear-bg-white dark:bear-bg-zinc-800 bear-border bear-border-gray-200 dark:bear-border-zinc-700 bear-rounded-lg bear-shadow-xl bear-overflow-hidden",
|
|
153
|
+
style: { top: z.top, left: z.left, zIndex: q },
|
|
154
|
+
children: [
|
|
155
|
+
/* @__PURE__ */ n("div", { className: "Bear-NotificationCenter__header bear-flex bear-items-center bear-justify-between bear-px-4 bear-py-3 bear-border-b bear-border-gray-200 dark:bear-border-zinc-700", children: [
|
|
156
|
+
/* @__PURE__ */ n("h3", { className: "Bear-NotificationCenter__title bear-text-sm bear-font-semibold bear-text-gray-900 dark:bear-text-white", children: [
|
|
157
|
+
b.title,
|
|
158
|
+
l > 0 && /* @__PURE__ */ n("span", { className: "bear-ml-2 bear-text-xs bear-font-normal bear-text-gray-500 dark:bear-text-zinc-400", children: [
|
|
159
|
+
"(",
|
|
160
|
+
l,
|
|
161
|
+
" ",
|
|
162
|
+
b.new.toLowerCase(),
|
|
163
|
+
")"
|
|
164
|
+
] })
|
|
165
|
+
] }),
|
|
166
|
+
/* @__PURE__ */ n("div", { className: "bear-flex bear-gap-2", children: [
|
|
167
|
+
i && l > 0 && /* @__PURE__ */ r(
|
|
168
|
+
"button",
|
|
169
|
+
{
|
|
170
|
+
type: "button",
|
|
171
|
+
onClick: i,
|
|
172
|
+
className: "Bear-NotificationCenter__mark-all bear-text-xs bear-text-pink-400 hover:bear-text-pink-300 bear-transition-colors",
|
|
173
|
+
children: b.markAllRead
|
|
174
|
+
}
|
|
175
|
+
),
|
|
176
|
+
N && e.length > 0 && /* @__PURE__ */ r(
|
|
177
|
+
"button",
|
|
178
|
+
{
|
|
179
|
+
type: "button",
|
|
180
|
+
onClick: N,
|
|
181
|
+
className: "Bear-NotificationCenter__clear-all bear-text-xs bear-text-gray-500 dark:bear-text-zinc-400 hover:bear-text-gray-700 dark:hover:bear-text-zinc-300 bear-transition-colors",
|
|
182
|
+
children: b.clearAll
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
] })
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ r("div", { className: "Bear-NotificationCenter__list bear-max-h-[400px] bear-overflow-y-auto", children: I.length === 0 ? /* @__PURE__ */ r("div", { className: "Bear-NotificationCenter__empty bear-py-8 bear-text-center bear-text-sm bear-text-gray-500 dark:bear-text-zinc-500", children: b.noNotifications }) : I.map((t) => /* @__PURE__ */ r(
|
|
188
|
+
J,
|
|
189
|
+
{
|
|
190
|
+
notification: t,
|
|
191
|
+
onRead: p,
|
|
192
|
+
onDismiss: k,
|
|
193
|
+
onClick: d,
|
|
194
|
+
translations: b
|
|
195
|
+
},
|
|
196
|
+
t.id
|
|
197
|
+
)) }),
|
|
198
|
+
!v && e.length > a && /* @__PURE__ */ r("div", { className: "Bear-NotificationCenter__footer bear-border-t bear-border-gray-200 dark:bear-border-zinc-700", children: /* @__PURE__ */ n(
|
|
199
|
+
"button",
|
|
200
|
+
{
|
|
201
|
+
type: "button",
|
|
202
|
+
onClick: () => D(!0),
|
|
203
|
+
className: "bear-w-full bear-py-2 bear-text-sm bear-text-pink-500 dark:bear-text-pink-400 hover:bear-bg-gray-100 dark:hover:bear-bg-zinc-700/50 bear-transition-colors",
|
|
204
|
+
children: [
|
|
205
|
+
b.showMore,
|
|
206
|
+
" (",
|
|
207
|
+
e.length - a,
|
|
208
|
+
" more)"
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
) })
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
),
|
|
215
|
+
document.body
|
|
216
|
+
)
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
};
|
|
221
|
+
export {
|
|
222
|
+
ae as NotificationCenter
|
|
223
|
+
};
|
|
@@ -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 @@
|
|
|
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";
|