@rpcbase/ui 0.235.0 → 0.237.0

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 (85) hide show
  1. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  2. package/dist/components/Notifications/types.d.ts +11 -2
  3. package/dist/components/Notifications/types.d.ts.map +1 -1
  4. package/dist/index16.js +247 -175
  5. package/dist/index16.js.map +1 -1
  6. package/dist/index167.js +3 -3
  7. package/dist/index172.js +6 -6
  8. package/dist/index178.js +1 -1
  9. package/dist/index185.js +1 -1
  10. package/dist/index187.js +1 -1
  11. package/dist/index189.js +3 -3
  12. package/dist/index190.js +4 -4
  13. package/dist/index270.js +1 -1
  14. package/dist/index272.js +1 -1
  15. package/dist/index275.js +1 -1
  16. package/dist/index277.js +1 -1
  17. package/dist/index278.js +2 -2
  18. package/dist/index282.js +1 -1
  19. package/dist/index285.js +1 -1
  20. package/dist/index287.js +1 -1
  21. package/dist/index298.js +1 -1
  22. package/dist/index302.js +1 -1
  23. package/dist/index320.js +2 -2
  24. package/dist/index332.js +1 -1
  25. package/dist/index336.js +19 -8
  26. package/dist/index336.js.map +1 -1
  27. package/dist/index337.js +28 -11
  28. package/dist/index337.js.map +1 -1
  29. package/dist/index338.js +15 -7
  30. package/dist/index338.js.map +1 -1
  31. package/dist/index339.js +8 -13
  32. package/dist/index339.js.map +1 -1
  33. package/dist/index340.js +11 -3
  34. package/dist/index340.js.map +1 -1
  35. package/dist/index341.js +8 -3
  36. package/dist/index341.js.map +1 -1
  37. package/dist/index342.js +12 -16
  38. package/dist/index342.js.map +1 -1
  39. package/dist/index343.js +3 -19
  40. package/dist/index343.js.map +1 -1
  41. package/dist/index344.js +3 -28
  42. package/dist/index344.js.map +1 -1
  43. package/dist/index345.js +16 -15
  44. package/dist/index345.js.map +1 -1
  45. package/dist/index347.js +5 -122
  46. package/dist/index347.js.map +1 -1
  47. package/dist/index348.js +121 -31
  48. package/dist/index348.js.map +1 -1
  49. package/dist/index349.js +31 -72
  50. package/dist/index349.js.map +1 -1
  51. package/dist/index350.js +70 -139
  52. package/dist/index350.js.map +1 -1
  53. package/dist/index351.js +116 -35
  54. package/dist/index351.js.map +1 -1
  55. package/dist/index352.js +56 -44
  56. package/dist/index352.js.map +1 -1
  57. package/dist/index353.js +49 -14
  58. package/dist/index353.js.map +1 -1
  59. package/dist/index354.js +15 -6
  60. package/dist/index354.js.map +1 -1
  61. package/dist/index362.js +4 -12
  62. package/dist/index362.js.map +1 -1
  63. package/dist/index363.js +11 -16
  64. package/dist/index363.js.map +1 -1
  65. package/dist/index364.js +16 -5
  66. package/dist/index364.js.map +1 -1
  67. package/dist/index365.js +6 -4
  68. package/dist/index365.js.map +1 -1
  69. package/dist/index384.js +2 -2
  70. package/dist/index386.js +1 -1
  71. package/dist/index44.js +1 -1
  72. package/dist/index45.js +2 -2
  73. package/dist/index70.js +1 -1
  74. package/dist/index71.js +1 -1
  75. package/dist/index74.js +6 -2
  76. package/dist/index74.js.map +1 -1
  77. package/dist/index75.js +8 -2
  78. package/dist/index75.js.map +1 -1
  79. package/dist/index76.js +5 -5
  80. package/dist/index76.js.map +1 -1
  81. package/dist/index77.js +2 -8
  82. package/dist/index77.js.map +1 -1
  83. package/dist/index78.js +2 -6
  84. package/dist/index78.js.map +1 -1
  85. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Popup\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close\n render={<button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\" />}\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const isUnread = !notification.readAt\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n useEffect(() => {\n if (!menuOpen) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) return\n if (menuRef.current?.contains(target) || menuButtonRef.current?.contains(target)) return\n setMenuOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return\n setMenuOpen(false)\n menuButtonRef.current?.focus()\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [menuOpen])\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (notification.url) {\n window.location.href = notification.url\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {notification.url ? <div className=\"mt-2 truncate text-xs text-primary\">{notification.url}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"relative flex items-start\">\n <button\n ref={menuButtonRef}\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n onClick={() => {\n setMenuOpen((open) => !open)\n }}\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n {menuOpen ? (\n <div\n ref={menuRef}\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground\"\n onClick={() => {\n setMenuOpen(false)\n onArchive(notification.id)\n }}\n >\n Archive\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n disabled={!isUnread}\n onClick={() => {\n setMenuOpen(false)\n onMarkRead(notification.id)\n }}\n >\n Mark as read\n </button>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","groupByDay","items","groups","currentKey","item","createdAt","push","label","length","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Array","isArray","Math","max","floor","useEffect","keepalive","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","Loader2","group","NotificationRow","t0","$","_c","notification","onMarkRead","onArchive","menuOpen","setMenuOpen","menuRef","useRef","menuButtonRef","isUnread","t1","bb0","toLocaleString","createdAtLabel","t2","t3","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","addEventListener","removeEventListener","t4","t5","t6","url","window","location","href","t7","title","t8","t9","t10","t11","t12","t13","t14","Symbol","for","_temp","MoreVertical","t15","t16","t17","t18"],"mappings":"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"}
1
+ {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\ntype BrowserNotificationPermission = NotificationPermission | \"unsupported\"\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst getWebpushLink = (item: NotificationItem): string => {\n const platformWebpush = item.platform?.webpush\n if (!platformWebpush || typeof platformWebpush !== \"object\" || Array.isArray(platformWebpush)) return \"\"\n const fcmOptions = (platformWebpush as { fcmOptions?: unknown }).fcmOptions\n if (!fcmOptions || typeof fcmOptions !== \"object\" || Array.isArray(fcmOptions)) return \"\"\n return typeof (fcmOptions as { link?: unknown }).link === \"string\" ? (fcmOptions as { link: string }).link : \"\"\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst getBrowserNotificationPermission = (): BrowserNotificationPermission => {\n if (typeof window === \"undefined\") return \"unsupported\"\n if (!(\"Notification\" in window)) return \"unsupported\"\n return window.Notification.permission\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n const [browserNotificationPermission, setBrowserNotificationPermission] = useState<BrowserNotificationPermission>(() =>\n getBrowserNotificationPermission(),\n )\n const [browserNotificationPermissionRequesting, setBrowserNotificationPermissionRequesting] = useState(false)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) return\n\n let permissionStatus: PermissionStatus | null = null\n let disposed = false\n const syncPermission = () => {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n }\n\n try {\n void navigator.permissions.query({ name: \"notifications\" as PermissionName }).then((status) => {\n if (disposed) return\n permissionStatus = status\n syncPermission()\n status.addEventListener(\"change\", syncPermission)\n }).catch(() => {\n // Notifications are not exposed through the Permissions API in every browser.\n })\n } catch {\n return\n }\n\n return () => {\n disposed = true\n permissionStatus?.removeEventListener(\"change\", syncPermission)\n }\n }, [open])\n\n const requestBrowserNotificationPermission = async () => {\n if (typeof window === \"undefined\" || !(\"Notification\" in window)) {\n setBrowserNotificationPermission(\"unsupported\")\n return\n }\n\n setBrowserNotificationPermissionRequesting(true)\n try {\n const nextPermission = await window.Notification.requestPermission()\n setBrowserNotificationPermission(nextPermission)\n } catch {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n } finally {\n setBrowserNotificationPermissionRequesting(false)\n }\n }\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Popup\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close\n render={<button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\" />}\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n <BrowserNotificationPermissionNotice\n permission={browserNotificationPermission}\n requesting={browserNotificationPermissionRequesting}\n onEnable={requestBrowserNotificationPermission}\n />\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction BrowserNotificationPermissionNotice({\n permission,\n requesting,\n onEnable,\n}: {\n permission: BrowserNotificationPermission\n requesting: boolean\n onEnable: () => void\n}) {\n if (permission === \"granted\") return null\n\n if (permission === \"unsupported\") {\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n Browser notifications are not supported by this browser.\n </div>\n )\n }\n\n const isDenied = permission === \"denied\"\n\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3\">\n <div className=\"text-sm font-medium\">\n {isDenied ? \"Browser notifications are blocked.\" : \"Browser notifications are not enabled.\"}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {isDenied\n ? \"Enable notifications for this site in your browser settings, then click again.\"\n : \"Enable browser notifications to receive important alerts.\"}\n </div>\n <button\n type=\"button\"\n className=\"mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50\"\n disabled={requesting}\n onClick={onEnable}\n >\n {requesting ? \"Enabling...\" : \"Enable browser notifications\"}\n </button>\n </div>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const isUnread = !notification.readAt\n const link = getWebpushLink(notification)\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n useEffect(() => {\n if (!menuOpen) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) return\n if (menuRef.current?.contains(target) || menuButtonRef.current?.contains(target)) return\n setMenuOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return\n setMenuOpen(false)\n menuButtonRef.current?.focus()\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [menuOpen])\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (link) {\n window.location.href = link\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {link ? <div className=\"mt-2 truncate text-xs text-primary\">{link}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"relative flex items-start\">\n <button\n ref={menuButtonRef}\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n onClick={() => {\n setMenuOpen((open) => !open)\n }}\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n {menuOpen ? (\n <div\n ref={menuRef}\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground\"\n onClick={() => {\n setMenuOpen(false)\n onArchive(notification.id)\n }}\n >\n Archive\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n disabled={!isUnread}\n onClick={() => {\n setMenuOpen(false)\n onMarkRead(notification.id)\n }}\n >\n Mark as read\n </button>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","getWebpushLink","item","platformWebpush","platform","webpush","Array","isArray","fcmOptions","link","groupByDay","items","groups","currentKey","createdAt","push","label","length","getBrowserNotificationPermission","window","Notification","permission","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Math","max","floor","useEffect","keepalive","navigator","permissions","query","permissionStatus","disposed","syncPermission","name","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","BrowserNotificationPermissionNotice","Loader2","group","NotificationRow","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","notification","onMarkRead","onArchive","menuOpen","setMenuOpen","menuRef","useRef","menuButtonRef","isUnread","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","location","href","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","MoreVertical","t16","t17","t18","t19"],"mappings":"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"}
package/dist/index167.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import b from "./index320.js";
2
- import y from "./index343.js";
3
- import m from "./index344.js";
4
- import C from "./index345.js";
2
+ import y from "./index336.js";
3
+ import m from "./index337.js";
4
+ import C from "./index338.js";
5
5
  import v from "./index158.js";
6
6
  import { VALID_PUNCTUATION as s, VALID_DIGITS as g, PLUS_CHARS as p } from "./index160.js";
7
7
  function d(i) {
package/dist/index172.js CHANGED
@@ -2,13 +2,13 @@ import b from "./index191.js";
2
2
  import * as c from "react";
3
3
  import { createElement as p } from "react";
4
4
  import { useMergedRefs as E, useMergedRefsN as g } from "./index257.js";
5
- import { getReactElementRef as y } from "./index336.js";
6
- import { mergeObjects as R } from "./index337.js";
7
- import { warn as v } from "./index338.js";
5
+ import { getReactElementRef as y } from "./index339.js";
6
+ import { mergeObjects as R } from "./index340.js";
7
+ import { warn as v } from "./index341.js";
8
8
  import { EMPTY_OBJECT as f } from "./index264.js";
9
- import { getStateAttributesProps as w } from "./index339.js";
10
- import { resolveClassName as C } from "./index340.js";
11
- import { resolveStyle as T } from "./index341.js";
9
+ import { getStateAttributesProps as w } from "./index342.js";
10
+ import { resolveClassName as C } from "./index343.js";
11
+ import { resolveStyle as T } from "./index344.js";
12
12
  import { mergeClassNames as _, mergeProps as h, mergePropsN as k } from "./index282.js";
13
13
  function q(r, e, t = {}) {
14
14
  const a = e.render, s = I(e, t);
package/dist/index178.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useId as r } from "./index342.js";
1
+ import { useId as r } from "./index345.js";
2
2
  function i(e) {
3
3
  return r(e, "base-ui");
4
4
  }
package/dist/index185.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isReactVersionAtLeast as r } from "./index354.js";
1
+ import { isReactVersionAtLeast as r } from "./index347.js";
2
2
  function n(e) {
3
3
  return r(19) ? e : e ? "true" : void 0;
4
4
  }
package/dist/index187.js CHANGED
@@ -3,7 +3,7 @@ import * as I from "react-dom";
3
3
  import { isNode as V } from "./index309.js";
4
4
  import { addEventListener as O } from "./index300.js";
5
5
  import { mergeCleanups as w } from "./index373.js";
6
- import { useId as G } from "./index342.js";
6
+ import { useId as G } from "./index345.js";
7
7
  import { useIsoLayoutEffect as _ } from "./index261.js";
8
8
  import { useStableCallback as L } from "./index262.js";
9
9
  import { EMPTY_OBJECT as k } from "./index264.js";
package/dist/index189.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as t from "react";
2
- import { useScrollLock as v } from "./index347.js";
2
+ import { useScrollLock as v } from "./index348.js";
3
3
  import { useOpenInteractionType as I } from "./index275.js";
4
4
  import { createChangeEventDetails as A } from "./index175.js";
5
5
  import { useImplicitActiveTrigger as M, useOpenStateTransitions as B } from "./index193.js";
6
- import { useSyncedFloatingRootContext as F } from "./index348.js";
7
- import { useRole as H } from "./index349.js";
6
+ import { useSyncedFloatingRootContext as F } from "./index349.js";
7
+ import { useRole as H } from "./index350.js";
8
8
  import { useDismiss as K } from "./index279.js";
9
9
  import { useInteractions as L } from "./index195.js";
10
10
  import { getTarget as U, contains as V } from "./index291.js";
package/dist/index190.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as i from "react";
2
2
  import { useRefWithInit as d } from "./index258.js";
3
- import { ReactStore as a } from "./index350.js";
4
- import { PopupTriggerMap as p } from "./index351.js";
5
- import { popupStoreSelectors as u, createInitialPopupStoreState as c } from "./index352.js";
6
- import { createSelector as n } from "./index353.js";
3
+ import { ReactStore as a } from "./index351.js";
4
+ import { PopupTriggerMap as p } from "./index352.js";
5
+ import { popupStoreSelectors as u, createInitialPopupStoreState as c } from "./index353.js";
6
+ import { createSelector as n } from "./index354.js";
7
7
  const m = {
8
8
  ...u,
9
9
  modal: n((e) => e.modal),
package/dist/index270.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { compareItemEquality as s } from "./index273.js";
2
2
  import { hasNullItemLabel as u, stringifyAsValue as a } from "./index272.js";
3
- import { createSelector as r } from "./index353.js";
3
+ import { createSelector as r } from "./index354.js";
4
4
  const d = {
5
5
  id: r((e) => e.id),
6
6
  labelId: r((e) => e.labelId),
package/dist/index272.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as c from "react";
2
- import { serializeValue as a } from "./index362.js";
2
+ import { serializeValue as a } from "./index363.js";
3
3
  import { j as i } from "./index30.js";
4
4
  function s(r) {
5
5
  return r != null && r.length > 0 && typeof r[0] == "object" && r[0] != null && "items" in r[0];
package/dist/index275.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as l from "react";
2
2
  import { useStableCallback as c } from "./index262.js";
3
- import { useEnhancedClickHandler as u } from "./index363.js";
3
+ import { useEnhancedClickHandler as u } from "./index364.js";
4
4
  import { isIOS as m } from "./index301.js";
5
5
  import { useValueChanged as p } from "./index274.js";
6
6
  function C(e) {
package/dist/index277.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as c from "react";
2
2
  import { s as u } from "./index404.js";
3
3
  import { w as i } from "./index405.js";
4
- import { isReactVersionAtLeast as S } from "./index354.js";
4
+ import { isReactVersionAtLeast as S } from "./index347.js";
5
5
  const a = S(19), m = a ? f : l;
6
6
  function g(t, e, r, n, o) {
7
7
  return m(t, e, r, n, o);
package/dist/index278.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { isElement as l } from "./index309.js";
2
- import { useId as c } from "./index342.js";
2
+ import { useId as c } from "./index345.js";
3
3
  import { useRefWithInit as a } from "./index258.js";
4
4
  import { useIsoLayoutEffect as m } from "./index261.js";
5
5
  import { useFloatingParentNodeId as u } from "./index382.js";
6
6
  import { FloatingRootStore as p } from "./index384.js";
7
- import { PopupTriggerMap as d } from "./index351.js";
7
+ import { PopupTriggerMap as d } from "./index352.js";
8
8
  function y(s) {
9
9
  const {
10
10
  open: o = !1,
package/dist/index282.js CHANGED
@@ -1,4 +1,4 @@
1
- import { mergeObjects as y } from "./index337.js";
1
+ import { mergeObjects as y } from "./index340.js";
2
2
  const o = {};
3
3
  function j(t, n, e, r, c) {
4
4
  if (!e && !r && !c && !t)
package/dist/index285.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useRefWithInit as c } from "./index258.js";
2
- import { useOnMount as u } from "./index364.js";
2
+ import { useOnMount as u } from "./index365.js";
3
3
  const t = 0;
4
4
  class r {
5
5
  static create() {
package/dist/index287.js CHANGED
@@ -1,4 +1,4 @@
1
- import { FieldControlDataAttributes as e } from "./index365.js";
1
+ import { FieldControlDataAttributes as e } from "./index362.js";
2
2
  const t = {
3
3
  badInput: !1,
4
4
  customError: !1,
package/dist/index298.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as e from "react";
2
2
  import { ownerDocument as m } from "./index284.js";
3
- import { useScrollLock as p } from "./index347.js";
3
+ import { useScrollLock as p } from "./index348.js";
4
4
  import { useIsoLayoutEffect as h } from "./index261.js";
5
5
  const S = 20;
6
6
  function L(t, c, o, l) {
package/dist/index302.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useRefWithInit as u } from "./index258.js";
2
- import { useOnMount as h } from "./index364.js";
2
+ import { useOnMount as h } from "./index365.js";
3
3
  const s = null;
4
4
  let l = globalThis.requestAnimationFrame;
5
5
  class o {
package/dist/index320.js CHANGED
@@ -1,5 +1,5 @@
1
- import t from "./index345.js";
2
- import I from "./index343.js";
1
+ import t from "./index338.js";
2
+ import I from "./index336.js";
3
3
  import R from "./index164.js";
4
4
  import { MAX_LENGTH_COUNTRY_CODE as S } from "./index160.js";
5
5
  function O(r, e, f, _, i) {
package/dist/index332.js CHANGED
@@ -1,4 +1,4 @@
1
- import l from "./index344.js";
1
+ import l from "./index337.js";
2
2
  import o from "./index331.js";
3
3
  import u from "./index314.js";
4
4
  import N from "./index168.js";
package/dist/index336.js CHANGED
@@ -1,12 +1,23 @@
1
- import * as n from "react";
2
- import { isReactVersionAtLeast as o } from "./index354.js";
3
- function s(t) {
4
- if (!/* @__PURE__ */ n.isValidElement(t))
5
- return null;
6
- const e = t, r = e.props;
7
- return (o(19) ? r?.ref : e.ref) ?? null;
1
+ import c, { getCountryCallingCode as b } from "./index164.js";
2
+ import g from "./index331.js";
3
+ import C from "./index332.js";
4
+ import h from "./index314.js";
5
+ function P(i, r, l, N, n) {
6
+ var e = r || l ? b(r || l, n) : N;
7
+ if (i.indexOf(e) === 0) {
8
+ n = new c(n), n.selectNumberingPlan(r || l, e);
9
+ var o = i.slice(e.length), f = C(o, r, n), m = f.nationalNumber, u = C(i, r, n), t = u.nationalNumber;
10
+ if (!g(t, n.nationalNumberPattern()) && g(m, n.nationalNumberPattern()) || h(t, r, n) === "TOO_LONG")
11
+ return {
12
+ countryCallingCode: e,
13
+ number: o
14
+ };
15
+ }
16
+ return {
17
+ number: i
18
+ };
8
19
  }
9
20
  export {
10
- s as getReactElementRef
21
+ P as default
11
22
  };
12
23
  //# sourceMappingURL=index336.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index336.js","sources":["../../../node_modules/@base-ui/utils/esm/getReactElementRef.js"],"sourcesContent":["import * as React from 'react';\nimport { isReactVersionAtLeast } from \"./reactVersion.js\";\n\n/**\n * Extracts the `ref` from a React element, handling different React versions.\n */\nexport function getReactElementRef(element) {\n if (! /*#__PURE__*/React.isValidElement(element)) {\n return null;\n }\n const reactElement = element;\n const propsWithRef = reactElement.props;\n return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;\n}"],"names":["getReactElementRef","element","React","reactElement","propsWithRef","isReactVersionAtLeast"],"mappings":";;AAMO,SAASA,EAAmBC,GAAS;AAC1C,MAAI,CAAe,gBAAAC,EAAM,eAAeD,CAAO;AAC7C,WAAO;AAET,QAAME,IAAeF,GACfG,IAAeD,EAAa;AAClC,UAAQE,EAAsB,EAAE,IAAID,GAAc,MAAMD,EAAa,QAAQ;AAC/E;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index336.js","sources":["../../../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js"],"sourcesContent":["import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map"],"names":["extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","number","country","defaultCountry","defaultCallingCode","metadata","countryCallingCode","getCountryCallingCode","Metadata","possibleShorterNumber","_extractNationalNumbe","extractNationalNumber","possibleShorterNationalNumber","_extractNationalNumbe2","nationalNumber","matchesEntirely","checkNumberLength"],"mappings":";;;;AAgBe,SAASA,EAAgEC,GAAQC,GAASC,GAAgBC,GAAoBC,GAAU;AACrJ,MAAIC,IAAqBJ,KAAWC,IAAiBI,EAAsBL,KAAWC,GAAgBE,CAAQ,IAAID;AAClH,MAAIH,EAAO,QAAQK,CAAkB,MAAM,GAAG;AAC5C,IAAAD,IAAW,IAAIG,EAASH,CAAQ,GAChCA,EAAS,oBAAoBH,KAAWC,GAAgBG,CAAkB;AAC1E,QAAIG,IAAwBR,EAAO,MAAMK,EAAmB,MAAM,GAC9DI,IAAwBC,EAAsBF,GAAuBP,GAASG,CAAQ,GACxFO,IAAgCF,EAAsB,gBACpDG,IAAyBF,EAAsBV,GAAQC,GAASG,CAAQ,GAC1ES,IAAiBD,EAAuB;AAU1C,QAAI,CAACE,EAAgBD,GAAgBT,EAAS,sBAAqB,CAAE,KAAKU,EAAgBH,GAA+BP,EAAS,sBAAqB,CAAE,KAAKW,EAAkBF,GAAgBZ,GAASG,CAAQ,MAAM;AACrN,aAAO;AAAA,QACL,oBAAoBC;AAAA,QACpB,QAAQG;AAAA,MAChB;AAAA,EAEE;AACA,SAAO;AAAA,IACL,QAAQR;AAAA,EACZ;AACA;","x_google_ignoreList":[0]}
package/dist/index337.js CHANGED
@@ -1,15 +1,32 @@
1
- function n(e, r) {
2
- if (e && !r)
3
- return e;
4
- if (!e && r)
5
- return r;
6
- if (e || r)
7
- return {
8
- ...e,
9
- ...r
10
- };
1
+ function F(l, i) {
2
+ if (l && i.numberingPlan.nationalPrefixForParsing()) {
3
+ var g = new RegExp("^(?:" + i.numberingPlan.nationalPrefixForParsing() + ")"), n = g.exec(l);
4
+ if (n) {
5
+ var r, P, v = n.length - 1, e = v > 0 && n[v];
6
+ if (i.nationalPrefixTransformRule() && e)
7
+ r = l.replace(g, i.nationalPrefixTransformRule()), v > 1 && (P = n[1]);
8
+ else {
9
+ var o = n[0];
10
+ r = l.slice(o.length), e && (P = n[1]);
11
+ }
12
+ var f;
13
+ if (e) {
14
+ var s = l.indexOf(n[1]), a = l.slice(0, s);
15
+ a === i.numberingPlan.nationalPrefix() && (f = i.numberingPlan.nationalPrefix());
16
+ } else
17
+ f = n[0];
18
+ return {
19
+ nationalNumber: r,
20
+ nationalPrefix: f,
21
+ carrierCode: P
22
+ };
23
+ }
24
+ }
25
+ return {
26
+ nationalNumber: l
27
+ };
11
28
  }
12
29
  export {
13
- n as mergeObjects
30
+ F as default
14
31
  };
15
32
  //# sourceMappingURL=index337.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index337.js","sources":["../../../node_modules/@base-ui/utils/esm/mergeObjects.js"],"sourcesContent":["export function mergeObjects(a, b) {\n if (a && !b) {\n return a;\n }\n if (!a && b) {\n return b;\n }\n if (a || b) {\n return {\n ...a,\n ...b\n };\n }\n return undefined;\n}"],"names":["mergeObjects","a","b"],"mappings":"AAAO,SAASA,EAAaC,GAAGC,GAAG;AACjC,MAAID,KAAK,CAACC;AACR,WAAOD;AAET,MAAI,CAACA,KAAKC;AACR,WAAOA;AAET,MAAID,KAAKC;AACP,WAAO;AAAA,MACL,GAAGD;AAAA,MACH,GAAGC;AAAA,IACT;AAGA;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index337.js","sources":["../../../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js"],"sourcesContent":["/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map"],"names":["extractNationalNumberFromPossiblyIncompleteNumber","number","metadata","prefixPattern","prefixMatch","nationalNumber","carrierCode","capturedGroupsCount","hasCapturedGroups","prefixBeforeNationalNumber","nationalPrefix","possiblePositionOfTheFirstCapturedGroup","possibleNationalPrefix"],"mappings":"AAae,SAASA,EAAkDC,GAAQC,GAAU;AAC1F,MAAID,KAAUC,EAAS,cAAc,yBAAwB,GAAI;AAI/D,QAAIC,IAAgB,IAAI,OAAO,SAASD,EAAS,cAAc,yBAAwB,IAAK,GAAG,GAC3FE,IAAcD,EAAc,KAAKF,CAAM;AAC3C,QAAIG,GAAa;AACf,UAAIC,GACAC,GAiBAC,IAAsBH,EAAY,SAAS,GAC3CI,IAAoBD,IAAsB,KAAKH,EAAYG,CAAmB;AAClF,UAAIL,EAAS,4BAA2B,KAAMM;AAC5C,QAAAH,IAAiBJ,EAAO,QAAQE,GAAeD,EAAS,4BAA2B,CAAE,GAGjFK,IAAsB,MACxBD,IAAcF,EAAY,CAAC;AAAA,WAS1B;AAMH,YAAIK,IAA6BL,EAAY,CAAC;AAC9C,QAAAC,IAAiBJ,EAAO,MAAMQ,EAA2B,MAAM,GAG3DD,MACFF,IAAcF,EAAY,CAAC;AAAA,MAE/B;AAMA,UAAIM;AACJ,UAAIF,GAAmB;AACrB,YAAIG,IAA0CV,EAAO,QAAQG,EAAY,CAAC,CAAC,GACvEQ,IAAyBX,EAAO,MAAM,GAAGU,CAAuC;AAOpF,QAAIC,MAA2BV,EAAS,cAAc,eAAc,MAClEQ,IAAiBR,EAAS,cAAc,eAAc;AAAA,MAE1D;AACE,QAAAQ,IAAiBN,EAAY,CAAC;AAEhC,aAAO;AAAA,QACL,gBAAgBC;AAAA,QAChB,gBAAgBK;AAAA,QAChB,aAAaJ;AAAA,MACrB;AAAA,IACI;AAAA,EACF;AACA,SAAO;AAAA,IACL,gBAAgBL;AAAA,EACpB;AACA;","x_google_ignoreList":[0]}
package/dist/index338.js CHANGED
@@ -1,12 +1,20 @@
1
- let n;
2
- process.env.NODE_ENV !== "production" && (n = /* @__PURE__ */ new Set());
3
- function s(...o) {
4
- if (process.env.NODE_ENV !== "production") {
5
- const e = o.join(" ");
6
- n.has(e) || (n.add(e), console.warn(`Base UI: ${e}`));
1
+ import I from "./index164.js";
2
+ import { VALID_DIGITS as l } from "./index160.js";
3
+ var c = new RegExp("([" + l + "])");
4
+ function D(t, r, f, n) {
5
+ if (r) {
6
+ var a = new I(n);
7
+ a.selectNumberingPlan(r, f);
8
+ var i = new RegExp(a.IDDPrefix());
9
+ if (t.search(i) === 0) {
10
+ t = t.slice(t.match(i)[0].length);
11
+ var e = t.match(c);
12
+ if (!(e && e[1] != null && e[1].length > 0 && e[1] === "0"))
13
+ return t;
14
+ }
7
15
  }
8
16
  }
9
17
  export {
10
- s as warn
18
+ D as default
11
19
  };
12
20
  //# sourceMappingURL=index338.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index338.js","sources":["../../../node_modules/@base-ui/utils/esm/warn.js"],"sourcesContent":["let set;\nif (process.env.NODE_ENV !== 'production') {\n set = new Set();\n}\nexport function warn(...messages) {\n if (process.env.NODE_ENV !== 'production') {\n const messageKey = messages.join(' ');\n if (!set.has(messageKey)) {\n set.add(messageKey);\n console.warn(`Base UI: ${messageKey}`);\n }\n }\n}"],"names":["set","warn","messages","messageKey"],"mappings":"AAAA,IAAIA;AACA,QAAQ,IAAI,aAAa,iBAC3BA,IAAM,oBAAI,IAAG;AAER,SAASC,KAAQC,GAAU;AAChC,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,UAAMC,IAAaD,EAAS,KAAK,GAAG;AACpC,IAAKF,EAAI,IAAIG,CAAU,MACrBH,EAAI,IAAIG,CAAU,GAClB,QAAQ,KAAK,YAAYA,CAAU,EAAE;AAAA,EAEzC;AACF;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index338.js","sources":["../../../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js"],"sourcesContent":["import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map"],"names":["CAPTURING_DIGIT_PATTERN","VALID_DIGITS","stripIddPrefix","number","country","callingCode","metadata","countryMetadata","Metadata","IDDPrefixPattern","matchedGroups"],"mappings":";;AAEA,IAAIA,IAA0B,IAAI,OAAO,OAAOC,IAAe,IAAI;AACpD,SAASC,EAAeC,GAAQC,GAASC,GAAaC,GAAU;AAC7E,MAAKF,GAIL;AAAA,QAAIG,IAAkB,IAAIC,EAASF,CAAQ;AAC3C,IAAAC,EAAgB,oBAAoBH,GAASC,CAAW;AACxD,QAAII,IAAmB,IAAI,OAAOF,EAAgB,UAAS,CAAE;AAC7D,QAAIJ,EAAO,OAAOM,CAAgB,MAAM,GAIxC;AAAA,MAAAN,IAASA,EAAO,MAAMA,EAAO,MAAMM,CAAgB,EAAE,CAAC,EAAE,MAAM;AAK9D,UAAIC,IAAgBP,EAAO,MAAMH,CAAuB;AACxD,UAAI,EAAAU,KAAiBA,EAAc,CAAC,KAAK,QAAQA,EAAc,CAAC,EAAE,SAAS,KACrEA,EAAc,CAAC,MAAM;AAI3B,eAAOP;AAAA;AAAA;AACT;","x_google_ignoreList":[0]}
package/dist/index339.js CHANGED
@@ -1,17 +1,12 @@
1
- function i(r, n) {
2
- const o = {};
3
- for (const t in r) {
4
- const e = r[t];
5
- if (n?.hasOwnProperty(t)) {
6
- const s = n[t](e);
7
- s != null && Object.assign(o, s);
8
- continue;
9
- }
10
- e === !0 ? o[`data-${t.toLowerCase()}`] = "" : e && (o[`data-${t.toLowerCase()}`] = e.toString());
11
- }
12
- return o;
1
+ import * as n from "react";
2
+ import { isReactVersionAtLeast as o } from "./index347.js";
3
+ function s(t) {
4
+ if (!/* @__PURE__ */ n.isValidElement(t))
5
+ return null;
6
+ const e = t, r = e.props;
7
+ return (o(19) ? r?.ref : e.ref) ?? null;
13
8
  }
14
9
  export {
15
- i as getStateAttributesProps
10
+ s as getReactElementRef
16
11
  };
17
12
  //# sourceMappingURL=index339.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index339.js","sources":["../../../node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js"],"sourcesContent":["export function getStateAttributesProps(state, customMapping) {\n const props = {};\n\n /* eslint-disable-next-line guard-for-in */\n for (const key in state) {\n const value = state[key];\n if (customMapping?.hasOwnProperty(key)) {\n const customProps = customMapping[key](value);\n if (customProps != null) {\n Object.assign(props, customProps);\n }\n continue;\n }\n if (value === true) {\n props[`data-${key.toLowerCase()}`] = '';\n } else if (value) {\n props[`data-${key.toLowerCase()}`] = value.toString();\n }\n }\n return props;\n}"],"names":["getStateAttributesProps","state","customMapping","props","key","value","customProps"],"mappings":"AAAO,SAASA,EAAwBC,GAAOC,GAAe;AAC5D,QAAMC,IAAQ,CAAA;AAGd,aAAWC,KAAOH,GAAO;AACvB,UAAMI,IAAQJ,EAAMG,CAAG;AACvB,QAAIF,GAAe,eAAeE,CAAG,GAAG;AACtC,YAAME,IAAcJ,EAAcE,CAAG,EAAEC,CAAK;AAC5C,MAAIC,KAAe,QACjB,OAAO,OAAOH,GAAOG,CAAW;AAElC;AAAA,IACF;AACA,IAAID,MAAU,KACZF,EAAM,QAAQC,EAAI,YAAW,CAAE,EAAE,IAAI,KAC5BC,MACTF,EAAM,QAAQC,EAAI,YAAW,CAAE,EAAE,IAAIC,EAAM,SAAQ;AAAA,EAEvD;AACA,SAAOF;AACT;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index339.js","sources":["../../../node_modules/@base-ui/utils/esm/getReactElementRef.js"],"sourcesContent":["import * as React from 'react';\nimport { isReactVersionAtLeast } from \"./reactVersion.js\";\n\n/**\n * Extracts the `ref` from a React element, handling different React versions.\n */\nexport function getReactElementRef(element) {\n if (! /*#__PURE__*/React.isValidElement(element)) {\n return null;\n }\n const reactElement = element;\n const propsWithRef = reactElement.props;\n return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;\n}"],"names":["getReactElementRef","element","React","reactElement","propsWithRef","isReactVersionAtLeast"],"mappings":";;AAMO,SAASA,EAAmBC,GAAS;AAC1C,MAAI,CAAe,gBAAAC,EAAM,eAAeD,CAAO;AAC7C,WAAO;AAET,QAAME,IAAeF,GACfG,IAAeD,EAAa;AAClC,UAAQE,EAAsB,EAAE,IAAID,GAAc,MAAMD,EAAa,QAAQ;AAC/E;","x_google_ignoreList":[0]}